From c4b62e478ac9ab8f66c3ca4289619b0f9c8ee958 Mon Sep 17 00:00:00 2001
From: Jonatan Kronqvist <jonatan.kronqvist@itmill.com>
Date: Thu, 29 Sep 2011 12:44:21 +0000
Subject: Restructure test source directories and packages #7385

svn changeset:21440/svn branch:6.7
---
 .../ApplicationConnectionTestURLGeneration.java    |   77 +
 .../client/TestVBrowserDetailsUserAgentParser.java |  369 +++
 .../data/util/AbstractBeanContainerTest.java       |   81 +
 .../vaadin/data/util/AbstractContainerTest.java    |  670 ++++++
 .../util/AbstractHierarchicalContainerTest.java    |  256 +++
 .../data/util/AbstractInMemoryContainerTest.java   |    6 +
 .../com/vaadin/data/util/BeanContainerTest.java    |  425 ++++
 .../data/util/BeanItemContainerSortTest.java       |  170 ++
 .../vaadin/data/util/BeanItemContainerTest.java    |  718 ++++++
 .../com/vaadin/data/util/BeanItemTest.java         |  337 +++
 .../vaadin/data/util/NestedMethodPropertyTest.java |  326 +++
 .../com/vaadin/data/util/ObjectPropertyTest.java   |   99 +
 .../data/util/PerformanceTestIndexedContainer.java |  117 +
 .../vaadin/data/util/PropertyDescriptorTest.java   |   56 +
 .../com/vaadin/data/util/PropertySetItemTest.java  |  407 ++++
 .../util/TestContainerHierarchicalWrapper.java     |   45 +
 .../com/vaadin/data/util/TestContainerSorting.java |  238 ++
 .../data/util/TestHierarchicalContainer.java       |  269 +++
 .../com/vaadin/data/util/TestIndexedContainer.java |  271 +++
 .../data/util/filter/AbstractFilterTest.java       |   91 +
 .../vaadin/data/util/filter/AndOrFilterTest.java   |  234 ++
 .../vaadin/data/util/filter/CompareFilterTest.java |  260 +++
 .../vaadin/data/util/filter/IsNullFilterTest.java  |   59 +
 .../com/vaadin/data/util/filter/NotFilterTest.java |   52 +
 .../data/util/filter/SimpleStringFilterTest.java   |  131 ++
 .../vaadin/data/util/sqlcontainer/AllTests.java    |  145 ++
 .../data/util/sqlcontainer/ColumnPropertyTest.java |  178 ++
 .../data/util/sqlcontainer/DataGenerator.java      |  138 ++
 .../data/util/sqlcontainer/FreeformQueryUtil.java  |   73 +
 .../data/util/sqlcontainer/ReadOnlyRowIdTest.java  |   50 +
 .../vaadin/data/util/sqlcontainer/RowIdTest.java   |   55 +
 .../sqlcontainer/SQLContainerTableQueryTest.java   | 1519 +++++++++++++
 .../data/util/sqlcontainer/SQLContainerTest.java   | 2390 +++++++++++++++++++
 .../vaadin/data/util/sqlcontainer/TicketTests.java |  183 ++
 .../vaadin/data/util/sqlcontainer/UtilTest.java    |   52 +
 .../connection/J2EEConnectionPoolTest.java         |  111 +
 .../connection/MockInitialContextFactory.java      |   31 +
 .../connection/SimpleJDBCConnectionPoolTest.java   |  172 ++
 .../util/sqlcontainer/filters/BetweenTest.java     |  122 +
 .../data/util/sqlcontainer/filters/LikeTest.java   |  229 ++
 .../sqlcontainer/generator/SQLGeneratorsTest.java  |  241 ++
 .../util/sqlcontainer/query/FreeformQueryTest.java |  897 ++++++++
 .../util/sqlcontainer/query/QueryBuilderTest.java  |  311 +++
 .../util/sqlcontainer/query/TableQueryTest.java    |  663 ++++++
 ...tractApplicationServletStaticFilesLocation.java |  205 ++
 .../tests/server/IndexedContainerListeners.java    |   20 +
 .../vaadin/tests/server/LicenseInJavaFiles.java    |   54 +
 .../tests/server/PropertysetItemListeners.java     |   13 +
 .../server/TestAbstractBeanContainerListeners.java |   15 +
 .../server/TestAbstractContainerListeners.java     |   21 +
 .../TestAbstractInMemoryContainerListeners.java    |   13 +
 .../server/TestAbstractPropertyListeners.java      |   24 +
 .../tests/server/TestClassesSerializable.java      |  241 ++
 .../com/vaadin/tests/server/TestEventRouter.java   |   37 +
 .../vaadin/tests/server/TestFileTypeResolver.java  |   79 +
 .../com/vaadin/tests/server/TestKeyMapper.java     |  102 +
 .../com/vaadin/tests/server/TestMimeTypes.java     |   26 +
 .../com/vaadin/tests/server/TestSerialization.java |  115 +
 .../server/TestSimpleMultiPartInputStream.java     |  138 ++
 .../server/TransactionListenersConcurrency.java    |  185 ++
 .../component/AbstractListenerMethodsTest.java     |  170 ++
 .../tests/server/component/FinalMethodTest.java    |   68 +
 .../absolutelayout/AbsoluteLayoutListeners.java    |   13 +
 .../absolutelayout/ComponentPosition.java          |  205 ++
 .../TestAbstractComponentStyleNames.java           |   62 +
 .../TestAbstractComponentContainerListeners.java   |   21 +
 .../abstractfield/TestAbstractFieldListeners.java  |   20 +
 .../TestAbstractOrderedLayoutListeners.java        |   13 +
 .../TestAbstractSelectListeners.java               |   20 +
 .../TestAbstractSplitPanelListeners.java           |   13 +
 .../TestAbstractTextFieldListeners.java            |   27 +
 .../server/component/button/ButtonListeners.java   |   27 +
 .../component/csslayout/CssLayoutListeners.java    |   13 +
 .../component/datefield/DateFieldListeners.java    |   20 +
 .../component/datefield/WeekNumberCalculation.java |  111 +
 .../component/embedded/EmbeddedListeners.java      |   13 +
 .../component/gridlayout/GridLayoutListeners.java  |   13 +
 .../server/component/label/LabelListeners.java     |   13 +
 .../component/loginform/LoginFormListeners.java    |   13 +
 .../tests/server/component/menubar/MenuBarIds.java |   97 +
 .../optiongroup/OptionGroupListeners.java          |   20 +
 .../component/orderedlayout/TestOrderedLayout.java |   49 +
 .../server/component/panel/PanelListeners.java     |   13 +
 .../component/popupview/PopupViewListeners.java    |   14 +
 .../server/component/select/SelectListeners.java   |   20 +
 .../component/table/TableColumnAlignments.java     |  165 ++
 .../server/component/table/TableGenerator.java     |   42 +
 .../server/component/table/TableListeners.java     |   40 +
 .../component/table/TableVisibleColumns.java       |   75 +
 .../tests/server/component/table/TestFooter.java   |   94 +
 .../component/table/TestMultipleSelection.java     |   57 +
 .../component/tabsheet/TabSheetListeners.java      |   13 +
 .../server/component/tabsheet/TestTabSheet.java    |  124 +
 .../tests/server/component/tree/TestListeners.java |  135 ++
 .../tests/server/component/tree/TreeListeners.java |   27 +
 .../server/component/treetable/EmptyTreeTable.java |   13 +
 .../server/component/upload/UploadListeners.java   |   41 +
 .../UriFragmentUtilityListeners.java               |   13 +
 .../component/window/AddRemoveSubWindow.java       |   83 +
 .../server/component/window/WindowListeners.java   |   34 +
 .../componentcontainer/AddRemoveComponentTest.java |   40 +
 .../components/AbstractTestFieldValueChange.java   |  169 ++
 .../ComponentAttachDetachListenerTest.java         |  343 +++
 .../server/components/TestComboBoxValueChange.java |   30 +
 .../components/TestGridLayoutLastRowRemoval.java   |   40 +
 .../components/TestTextFieldValueChange.java       |  180 ++
 .../vaadin/tests/server/components/TestWindow.java |   90 +
 .../server/validation/TestReadOnlyValidation.java  |   17 +
 tests/src/com/vaadin/tests/Components.java         |  269 ---
 tests/src/com/vaadin/tests/CustomLayoutDemo.java   |  140 --
 tests/src/com/vaadin/tests/FocusingComponents.java |   65 -
 tests/src/com/vaadin/tests/LayoutDemo.java         |  146 --
 tests/src/com/vaadin/tests/ListenerOrder.java      |  163 --
 tests/src/com/vaadin/tests/ModalWindow.java        |   84 -
 tests/src/com/vaadin/tests/NativeWindowing.java    |  127 --
 .../vaadin/tests/OrderedLayoutSwapComponents.java  |  110 -
 tests/src/com/vaadin/tests/Parameters.java         |  127 --
 .../PerformanceTestBasicComponentRendering.java    |  108 -
 .../PerformanceTestLabelsAndOrderedLayouts.java    |   79 -
 .../tests/PerformanceTestSubTreeCaching.java       |   83 -
 tests/src/com/vaadin/tests/RandomLayoutStress.java |  187 --
 .../src/com/vaadin/tests/ScrollbarStressTest.java  |  237 --
 .../com/vaadin/tests/StressComponentsInTable.java  |   75 -
 .../com/vaadin/tests/TableChangingDatasource.java  |   53 -
 tests/src/com/vaadin/tests/TableSelectTest.java    |  123 -
 tests/src/com/vaadin/tests/TestBench.java          |  330 ---
 tests/src/com/vaadin/tests/TestCaptionWrapper.java |  204 --
 .../vaadin/tests/TestComponentAddAndRecursion.java |  128 --
 .../src/com/vaadin/tests/TestContainerChanges.java |  212 --
 tests/src/com/vaadin/tests/TestDateField.java      |   74 -
 tests/src/com/vaadin/tests/TestForAlignments.java  |   58 -
 ...ApplicationLayoutThatUsesWholeBrosersSpace.java |   64 -
 .../tests/TestForBasicApplicationLayout.java       |  101 -
 .../tests/TestForChildComponentRendering.java      |   95 -
 .../vaadin/tests/TestForContainerFilterable.java   |   94 -
 .../TestForGridLayoutChildComponentRendering.java  |  103 -
 .../vaadin/tests/TestForMultipleStyleNames.java    |   97 -
 .../com/vaadin/tests/TestForNativeWindowing.java   |  127 --
 .../tests/TestForPreconfiguredComponents.java      |  184 --
 .../com/vaadin/tests/TestForRichTextEditor.java    |   66 -
 .../src/com/vaadin/tests/TestForStyledUpload.java  |  286 ---
 tests/src/com/vaadin/tests/TestForTabSheet.java    |   58 -
 ...tForTablesInitialColumnWidthLogicRendering.java |  158 --
 tests/src/com/vaadin/tests/TestForTrees.java       |  166 --
 tests/src/com/vaadin/tests/TestForUpload.java      |  433 ----
 tests/src/com/vaadin/tests/TestForWindowOpen.java  |   59 -
 tests/src/com/vaadin/tests/TestForWindowing.java   |   99 -
 tests/src/com/vaadin/tests/TestIFrames.java        |   37 -
 tests/src/com/vaadin/tests/TestMethodProperty.java |   48 -
 .../tests/TestSelectAndDatefieldInDeepLayouts.java |   98 -
 .../com/vaadin/tests/TestSetVisibleAndCaching.java |   82 -
 .../com/vaadin/tests/TestSizeableIncomponents.java |  318 ---
 tests/src/com/vaadin/tests/TestSplitPanel.java     |   27 -
 tests/src/com/vaadin/tests/TreeFilesystem.java     |  106 -
 .../com/vaadin/tests/TreeFilesystemContainer.java  |  102 -
 tests/src/com/vaadin/tests/UpgradingSample.java    |  171 --
 .../tests/UsingCustomNewItemHandlerInSelect.java   |   65 -
 .../src/com/vaadin/tests/UsingObjectsInSelect.java |  115 -
 tests/src/com/vaadin/tests/VaadinClasses.java      |  210 --
 .../com/vaadin/tests/appengine/GAESyncTest.java    |  152 --
 tests/src/com/vaadin/tests/appengine/img1.png      |  Bin 7433 -> 0 bytes
 .../tests/application/ApplicationCloseTest.java    |   70 -
 .../tests/application/ErrorInUnloadEvent.html      |   57 -
 .../tests/application/ErrorInUnloadEvent.java      |  103 -
 .../vaadin/tests/application/WebBrowserTest.html   |   50 -
 .../vaadin/tests/application/WebBrowserTest.java   |   98 -
 .../tests/applicationcontext/ChangeSessionId.html  |   37 -
 .../tests/applicationcontext/ChangeSessionId.java  |   69 -
 .../RemoveTransactionListener.java                 |   78 -
 .../tests/applicationservlet/NoMainWindow.java     |   22 -
 .../components/AbstractComponentContainerTest.java |  356 ---
 .../tests/components/AbstractComponentTest.java    |  671 ------
 .../components/AbstractComponentTestCase.java      |  219 --
 .../tests/components/AbstractLayoutTest.java       |  100 -
 .../components/AbstractOrderedLayoutTest.java      |   85 -
 .../vaadin/tests/components/AbstractTestCase.java  |   24 -
 .../vaadin/tests/components/ComponentTestCase.java |  189 --
 .../CustomComponentwithUndefinedSize.java          |   83 -
 .../com/vaadin/tests/components/ErrorMessages.html |   72 -
 .../com/vaadin/tests/components/ErrorMessages.java |   44 -
 .../tests/components/FocusAndBlurListeners.java    |  122 -
 .../tests/components/FocusFromShortcutAction.java  |   50 -
 .../components/HierarchicalContainerSorting.java   |  109 -
 .../tests/components/LayoutAttachListenerInfo.html |   86 -
 .../tests/components/LayoutAttachListenerInfo.java |  142 --
 .../com/vaadin/tests/components/LongTooltip.html   |  325 ---
 .../com/vaadin/tests/components/LongTooltip.java   |   49 -
 .../vaadin/tests/components/MultipleDebugIds.java  |   35 -
 .../src/com/vaadin/tests/components/TestBase.java  |   53 -
 .../absolutelayout/AbsoluteLayoutClipping.html     |   27 -
 .../absolutelayout/AbsoluteLayoutClipping.java     |   42 -
 ...veComponentFromAbsoluteLayoutToInnerLayout.html |   37 -
 ...eComponentsFromAbsoluteLayoutToInnerLayout.java |   58 -
 .../components/abstractcomponent/EnableState.html  |   87 -
 .../components/abstractcomponent/EnableState.java  |   77 -
 .../AbstractFieldCommitWithInvalidValues.html      |   62 -
 .../AbstractFieldCommitWithInvalidValues.java      |   67 -
 .../AbstractFieldDataSourceReadOnly.html           |   42 -
 .../AbstractFieldDataSourceReadOnly.java           |   60 -
 .../abstractfield/AbstractFieldTest.java           |  234 --
 .../abstractfield/AbstractTextFieldTest.java       |  241 --
 .../abstractfield/ShortcutAddAndRemove.html        |  209 --
 .../abstractfield/ShortcutAddAndRemove.java        |   64 -
 .../accordion/AccordionInactiveTabSize.html        |   48 -
 .../accordion/AccordionInactiveTabSize.java        |   41 -
 .../tests/components/accordion/AccordionTest.java  |   12 -
 .../tests/components/accordion/RemoveTabs.html     |  122 -
 .../tests/components/accordion/RemoveTabs.java     |  127 --
 .../BeanItemContainerGenerator.java                |  103 -
 .../BeanItemContainerNullValues.html               |   64 -
 .../BeanItemContainerNullValues.java               |   47 -
 .../TestBeanItemContainerUsage.html                |   32 -
 .../TestBeanItemContainerUsage.java                |   75 -
 .../components/button/ButtonDisableOnClick.html    |  157 --
 .../components/button/ButtonErrorMessage.java      |   31 -
 .../components/button/ButtonMouseDetails.java      |   66 -
 .../components/button/ButtonUndefinedWidth.html    |   82 -
 .../components/button/ButtonUndefinedWidth.java    |   40 -
 .../vaadin/tests/components/button/Buttons.html    |   32 -
 .../vaadin/tests/components/button/Buttons.java    |   76 -
 .../vaadin/tests/components/button/Buttons2.java   |   74 -
 .../tests/components/button/DisabledButtons.html   |   32 -
 .../tests/components/button/DisabledButtons.java   |   60 -
 .../tests/components/button/IE7ButtonWithIcon.html |   32 -
 .../tests/components/button/IE7ButtonWithIcon.java |   27 -
 .../button/ShortCutListenerModification.java       |   71 -
 .../button/TooltipForDisabledButton.java           |   48 -
 .../tests/components/caption/EmptyCaptions.html    |   32 -
 .../tests/components/caption/EmptyCaptions.java    |   56 -
 .../tests/components/caption/IconsInCaption.java   |  136 --
 .../tests/components/caption/LargeCaptionIcon.html |   47 -
 .../tests/components/caption/LargeCaptionIcon.java |   31 -
 .../components/checkbox/CheckBoxNullValue.html     |   77 -
 .../components/checkbox/CheckBoxNullValue.java     |   61 -
 .../tests/components/checkbox/CheckBoxes.html      |  156 --
 .../tests/components/checkbox/CheckBoxes.java      |   76 -
 .../tests/components/checkbox/CheckBoxes2.java     |   56 -
 .../checkbox/CheckboxCaptionWrapping.html          |   32 -
 .../checkbox/CheckboxCaptionWrapping.java          |   39 -
 .../tests/components/checkbox/CheckboxIcon.java    |   29 -
 .../combobox/ComboBoxClosePopupRetainText.html     |   80 -
 .../ComboBoxCombinedWithEnterShortcut.html         |   64 -
 .../ComboBoxCombinedWithEnterShortcut.java         |   54 -
 .../combobox/ComboBoxDataSourceChange.html         |   97 -
 .../combobox/ComboBoxDataSourceChange.java         |  102 -
 .../combobox/ComboBoxEnablesComboBox.java          |   49 -
 .../components/combobox/ComboBoxInPopupView.java   |   44 -
 .../combobox/ComboBoxInvalidNullSelection.html     |   62 -
 .../combobox/ComboBoxInvalidNullSelection.java     |   76 -
 .../components/combobox/ComboBoxItemIcon.html      |   76 -
 .../components/combobox/ComboBoxItemIcon.java      |   57 -
 .../components/combobox/ComboBoxLargeIcons.html    |  162 --
 .../components/combobox/ComboBoxLargeIcons.java    |   43 -
 .../components/combobox/ComboBoxNavigation.html    |  397 ----
 .../components/combobox/ComboBoxNavigation.java    |   30 -
 .../components/combobox/ComboBoxNoTextInput.html   |   75 -
 .../combobox/ComboBoxReapperingOldValue.html       |  116 -
 .../combobox/ComboBoxReapperingOldValue.java       |   69 -
 .../combobox/ComboBoxRemoveAllItems.html           |   91 -
 .../components/combobox/ComboBoxSlowInFF.java      |   67 -
 .../combobox/ComboBoxSuggestionOnDetach.html       |   31 -
 .../combobox/ComboBoxSuggestionOnDetach.java       |   42 -
 .../combobox/ComboBoxTextFieldEventOrder.java      |   38 -
 .../combobox/ComboBoxUndefinedWidthAndIcon.html    |   85 -
 .../combobox/ComboBoxUndefinedWidthAndIcon.java    |   36 -
 .../components/combobox/ComboBoxValueInput.html    |  292 ---
 .../components/combobox/ComboBoxValueInput.java    |   63 -
 .../components/combobox/ComboBoxValueUpdate.java   |   45 -
 .../tests/components/combobox/ComboBoxes2.java     |   95 -
 .../components/combobox/ComboFocusBlurEvents.html  |  133 --
 .../components/combobox/ComboFocusBlurEvents.java  |   74 -
 .../tests/components/combobox/Comboboxes.html      |  279 ---
 .../tests/components/combobox/Comboboxes.java      |  151 --
 .../components/combobox/ComboxBoxErrorMessage.java |   26 -
 .../components/combobox/NewItemsESCPress.java      |   40 -
 .../com/vaadin/tests/components/combobox/fi.gif    |  Bin 371 -> 0 bytes
 .../com/vaadin/tests/components/combobox/se.gif    |  Bin 367 -> 0 bytes
 .../components/customcomponent/ClipContent.java    |   56 -
 .../CustomComponentGrowingContent.html             |   32 -
 .../CustomComponentGrowingContent.java             |   42 -
 .../customcomponent/CustomComponentSizeUpdate.java |   44 -
 .../customcomponent/EmbeddedInCustomComponent.html |   37 -
 .../customcomponent/EmbeddedInCustomComponent.java |   40 -
 .../tests/components/datefield/CommitInvalid.html  |  251 --
 .../tests/components/datefield/CommitInvalid.java  |  139 --
 .../components/datefield/CustomDateFormat.html     |   27 -
 .../components/datefield/CustomDateFormat.java     |   49 -
 .../components/datefield/CustomDateFormats.html    |  524 -----
 .../components/datefield/CustomDateFormats.java    |  207 --
 .../components/datefield/DateFieldEmptyValid.html  |  252 --
 .../components/datefield/DateFieldEmptyValid.java  |  144 --
 .../components/datefield/DateFieldInSubWindow.html |   41 -
 .../components/datefield/DateFieldInSubWindow.java |  143 --
 .../components/datefield/DateFieldLocale.java      |   47 -
 .../datefield/DateFieldMinResolution.java          |   61 -
 .../datefield/DateFieldPopupOffScreen.html         |  157 --
 .../datefield/DateFieldPopupOffScreen.java         |   62 -
 .../components/datefield/DateFieldReadOnly.html    |   66 -
 .../components/datefield/DateFieldReadOnly.java    |   53 -
 .../tests/components/datefield/DateFieldTest.java  |  137 --
 .../components/datefield/DateFieldTimezone.html    |   57 -
 .../components/datefield/DateFieldTimezone.java    |   99 -
 .../datefield/DateFieldUnparsableDate.java         |  101 -
 .../DefaultHandleUnparsableDateField.java          |   43 -
 .../components/datefield/DisabledDateFieldWidth    |   52 -
 .../datefield/DisabledDateFieldWidth.java          |   42 -
 .../datefield/InlineDateFieldResolutionMsec.html   |  191 --
 .../components/datefield/InlineDateFieldTest.java  |   12 -
 .../datefield/InlineDateFieldValueChange.html      |  231 --
 .../components/datefield/InlineDateFields.java     |  106 -
 .../tests/components/datefield/LenientMode.java    |   81 -
 .../tests/components/datefield/LowResolution.java  |   78 -
 .../datefield/NarrowPopupDateFieldInTable.html     |   27 -
 .../datefield/NarrowPopupDateFieldInTable.java     |   34 -
 .../datefield/PopupDateFieldDisabledReadonly.html  |  158 --
 .../components/datefield/PopupDateFieldMonth.html  |   51 -
 .../datefield/PopupDateFieldResolutions.html       | 1093 ---------
 .../components/datefield/PopupDateFieldTest.java   |   38 -
 .../components/datefield/PopupDateFields.java      |  105 -
 .../datefield/RequiredInvalidDateField.html        |   72 -
 .../datefield/RequiredInvalidDateField.java        |   82 -
 .../datefield/ShowSelectedDateAfterInvalid.html    |   66 -
 .../datefield/ShowSelectedDateAfterInvalid.java    |   57 -
 .../components/datefield/TestDatefieldYear.html    |  146 --
 .../components/datefield/TestDatefieldYear.java    |   31 -
 ...tSettingTimeOnInitiallyNullInlineDateField.html |  157 --
 ...stSettingTimeOnInitiallyNullPopupDateField.html |  122 -
 .../components/datefield/ValueThroughProperty.html |   47 -
 .../components/datefield/ValueThroughProperty.java |   74 -
 .../EmbeddedClickListenerRelativeCoordinates.html  |   76 -
 .../EmbeddedClickListenerRelativeCoordinates.java  |   37 -
 .../tests/components/embedded/EmbeddedFlash.java   |   34 -
 .../components/embedded/EmbeddedImageRefresh.java  |  148 --
 .../tests/components/embedded/EmbeddedPdf.java     |   32 -
 .../tests/components/embedded/EmbeddedTooltip.java |   27 -
 .../tests/components/embedded/FlashIsVisible.html  |   33 -
 .../tests/components/embedded/FlashIsVisible.java  |   31 -
 .../com/vaadin/tests/components/embedded/test.pdf  |  Bin 22522 -> 0 bytes
 .../components/form/FormCaptionClickFocusing.html  |   42 -
 .../components/form/FormCaptionClickFocusing.java  |   29 -
 .../form/FormClearDatasourceRepaint.html           |   62 -
 .../form/FormClearDatasourceRepaint.java           |   71 -
 .../form/FormCommitWithInvalidValues.html          |  117 -
 .../form/FormCommitWithInvalidValues.java          |   69 -
 .../tests/components/form/FormDescription.html     |   47 -
 .../tests/components/form/FormDescription.java     |   42 -
 .../tests/components/form/FormFieldCaptions.java   |   86 -
 .../components/form/FormFieldCaptionsStyles.html   |   27 -
 .../components/form/FormFieldCaptionsStyles.java   |   48 -
 .../components/form/FormNotGettingSmaller.java     |   52 -
 .../components/form/FormRenderingFlicker.java      |   65 -
 .../components/form/FormWithEnterShortCut.java     |   47 -
 .../components/form/FormWithEnterShortcut.html     |   47 -
 .../form/FormWithRelativelySizedLayout.java        |   52 -
 .../UndefinedWideFormWithRelativeWideFooter.html   |   32 -
 .../UndefinedWideFormWithRelativeWideFooter.java   |   36 -
 .../formlayout/FormLayoutReplaceComponent.html     |   42 -
 .../formlayout/FormLayoutReplaceComponent.java     |   57 -
 .../TableInFormLayoutCausesScrolling.html          |   32 -
 .../TableInFormLayoutCausesScrolling.java          |   45 -
 .../MoveComponentFromGridLayoutToInnerLayout.html  |   37 -
 .../MoveComponentsFromGridLayoutToInnerLayout.java |   58 -
 .../label/HundredPercentWideLabelResize.html       |   62 -
 .../label/HundredPercentWideLabelResize.java       |   42 -
 .../vaadin/tests/components/label/LabelModes.html  |   27 -
 .../vaadin/tests/components/label/LabelModes.java  |   58 -
 .../vaadin/tests/components/label/LabelTest.java   |  100 -
 .../tests/components/label/LabelTooltip.html       |   47 -
 .../tests/components/label/LabelTooltip.java       |   53 -
 .../tests/components/label/LabelWrapping.html      |   62 -
 .../tests/components/label/LabelWrapping.java      |   46 -
 .../com/vaadin/tests/components/label/Labels.html  |   66 -
 .../com/vaadin/tests/components/label/Labels.java  |   71 -
 .../com/vaadin/tests/components/link/LinkIcon.java |   30 -
 .../tests/components/link/LinkTargetSize.java      |   30 -
 .../tests/components/link/LinkToPercentage.html    |   27 -
 .../tests/components/link/LinkToPercentage.java    |   51 -
 .../components/listselect/ListSelectSelection.html |  165 --
 .../tests/components/listselect/ListSelects.java   |   44 -
 .../loginform/CustomizedLoginFormTest.html         |   32 -
 .../loginform/CustomizedLoginFormTest.java         |   24 -
 .../tests/components/loginform/LoginFormTest.html  |  142 --
 .../tests/components/loginform/LoginFormTest.java  |  117 -
 .../loginform/LoginFormWithMultipleWindows.java    |   56 -
 .../com/vaadin/tests/components/media/Media.java   |   78 -
 .../components/menubar/HiddenAndDisabledMenus.java |   34 -
 .../components/menubar/IconsInRootMenuBar.html     |  148 --
 .../tests/components/menubar/IconsInSubMenus.html  |  101 -
 .../tests/components/menubar/MenuBarHtmlItems.html |   72 -
 .../tests/components/menubar/MenuBarHtmlItems.java |   63 -
 .../components/menubar/MenuBarInSplitPanel.java    |   47 -
 .../components/menubar/MenuBarItemsCheckable.html  |  141 --
 .../tests/components/menubar/MenuBarLongMenus.html |  121 -
 .../components/menubar/MenuBarNavigation.java      |   62 -
 .../menubar/MenuBarNavigationKeyboard.html         |  212 --
 .../components/menubar/MenuBarNavigationMouse.html |  137 --
 .../tests/components/menubar/MenuBarResize.html    |  127 --
 .../menubar/MenuBarRootItemSelectWithKeyboard.html |   52 -
 .../menubar/MenuBarRootItemSelectWithKeyboard.java |   38 -
 .../menubar/MenuBarRunsOutOfBrowser.html           |   27 -
 .../menubar/MenuBarRunsOutOfBrowser.java           |   42 -
 .../tests/components/menubar/MenuBarTest.java      |  338 ---
 .../tests/components/menubar/MenuBarToolTips.html  |  122 -
 .../tests/components/menubar/MenuBarToolTips.java  |   50 -
 .../vaadin/tests/components/menubar/Menubars.html  |  102 -
 .../vaadin/tests/components/menubar/Menubars.java  |   88 -
 .../nativebutton/NativeButtonDisableOnClick.html   |  156 --
 .../components/nativebutton/NativeButtonTest.java  |   12 -
 .../components/nativeselect/NativeSelects.java     |   42 -
 .../CloseErrorNotificationWithEscape.html          |   47 -
 .../components/notification/Notifications.html     |  296 ---
 .../components/notification/Notifications.java     |   58 -
 .../notification/NotificationsHtmlAllowed.html     |   96 -
 .../notification/NotificationsHtmlAllowed.java     |   76 -
 .../optiongroup/DisabledOptionGroupItems.html      |   53 -
 .../optiongroup/DisabledOptionGroupItems.java      |   91 -
 .../optiongroup/HtmlOptionGroupItems.html          |   42 -
 .../optiongroup/HtmlOptionGroupItems.java          |  104 -
 .../optiongroup/OptionGroupItemIcons.html          |   67 -
 .../OptionGroupMultipleValueChange.java            |   41 -
 .../tests/components/optiongroup/OptionGroups.java |   67 -
 .../orderedlayout/HorizontalLayoutTest.java        |   14 -
 .../orderedlayout/LayoutClickListenerTest.html     |   92 -
 .../orderedlayout/LayoutClickListenerTest.java     |   97 -
 .../orderedlayout/ReplaceComponentNPE.html         |   47 -
 .../orderedlayout/ReplaceComponentNPE.java         |   40 -
 .../orderedlayout/VerticalLayoutTest.java          |   14 -
 .../VerticalLayoutWidthCalculation.html            |   36 -
 .../VerticalLayoutWidthCalculation.java            |   63 -
 .../PanelClickListenerRelativeCoordinates.html     |   77 -
 .../PanelClickListenerRelativeCoordinates.java     |   36 -
 .../components/panel/PanelShouldNotScroll.html     |   46 -
 .../components/panel/PanelShouldNotScroll.java     |   56 -
 .../panel/PanelShouldRemoveActionHandler.java      |  118 -
 .../vaadin/tests/components/panel/PanelTest.java   |   15 -
 .../passwordfield/PasswordFieldBasicStates.html    |  128 --
 .../passwordfield/PasswordFieldTest.java           |   20 -
 .../popupview/PopupViewLabelResized.java           |   37 -
 .../components/popupview/PopupViewNullValues.java  |  103 -
 .../components/popupview/PopupViewOffScreen.html   |   47 -
 .../components/popupview/PopupViewOffScreen.java   |   80 -
 .../popupview/PopupViewShouldCloseOnTabOut.html    |   66 -
 .../popupview/PopupViewShouldCloseOnTabOut.java    |   53 -
 .../components/popupview/PopupViewWithRTE.java     |   50 -
 .../ProgressIndicatorInvisible.java                |   52 -
 .../components/richtextarea/RichTextAreaSize.html  |   32 -
 .../components/richtextarea/RichTextAreaSize.java  |   44 -
 .../components/richtextarea/RichTextAreaTest.java  |   54 -
 .../RichTextAreaWithKeyboardShortcuts.java         |   77 -
 .../components/richtextarea/RichTextAreas.html     |   51 -
 .../components/richtextarea/RichTextAreas.java     |   40 -
 .../components/select/AbstractSelectTestCase.java  |  240 --
 .../select/ComboBoxAddWhileFiltering.java          |   56 -
 .../tests/components/select/MultiSelect.java       |   32 -
 .../tests/components/select/NativeSelects.html     |  116 -
 .../tests/components/select/NativeSelects.java     |  118 -
 .../components/select/NullSelectionItemId.java     |   77 -
 .../components/select/SelectDisplaysOldValue.html  |  144 --
 .../components/select/SelectDisplaysOldValue.java  |  163 --
 .../components/select/SelectIconPlacement.html     |  107 -
 .../components/select/SelectIconPlacement.java     |   42 -
 .../vaadin/tests/components/select/SelectTest.java |   13 -
 .../select/TwinColSelectCaptionStyles.html         |   37 -
 .../select/TwinColSelectCaptionStyles.java         |   42 -
 .../select/TwinColSelectDualCaptions.html          |  430 ----
 .../tests/components/select/TwinColSelectTest.java |   65 -
 .../tests/components/select/TwinColSelects.java    |   48 -
 .../select/TwinColSelectsDisabledReadonly.html     |   77 -
 .../components/slider/SliderKeyboardFocus.html     |   57 -
 .../components/slider/SliderKeyboardFocus.java     |   26 -
 .../vaadin/tests/components/slider/SliderTest.java |   74 -
 .../splitpanel/AbstractSplitPanelTest.java         |  127 --
 .../HorizontalSplitPanelBasicStates.html           |  213 --
 .../HorizontalSplitPanelMoveSplitter.html          |  134 --
 .../HorizontalSplitPanelSplitterClick.html         |   96 -
 .../splitpanel/HorizontalSplitPanels.java          |   13 -
 .../splitpanel/SplitPanelExtraScrollbars.html      |   42 -
 .../splitpanel/SplitPanelExtraScrollbars.java      |   68 -
 .../splitpanel/SplitPanelInModalWindow.java        |   36 -
 .../splitpanel/SplitPanelReversePosition.html      |   57 -
 .../splitpanel/SplitPanelReversePosition.java      |   98 -
 .../splitpanel/SplitPanelSplitterWidth.java        |   64 -
 .../splitpanel/SplitPanelSwapComponents.html       |   32 -
 .../splitpanel/SplitPanelSwapComponents.java       |   48 -
 .../splitpanel/SplitPanelWidthOnResize.java        |   43 -
 .../splitpanel/SplitPanelWithRichTextArea.java     |   37 -
 .../tests/components/splitpanel/SplitPanels.java   |   37 -
 .../splitpanel/VerticalSplitPanelBasicStates.html  |  214 --
 .../splitpanel/VerticalSplitPanelMoveSplitter.html |  134 --
 .../VerticalSplitPanelSplitterClick.html           |   96 -
 .../components/splitpanel/VerticalSplitPanels.java |   13 -
 .../components/table/ActionsOnTableBackground.html |  125 -
 .../components/table/CellStyleGeneratorTest.java   |   62 -
 .../components/table/ClippedComponentsInTable.html |   32 -
 .../components/table/ClippedComponentsInTable.java |   40 -
 .../table/CollapseIndicatorOverlapsColumn.html     |   62 -
 .../table/CollapseIndicatorOverlapsColumn.java     |   47 -
 .../table/ColumnCollapsingAndColumnExpansion.html  |  158 --
 .../table/ColumnCollapsingAndColumnExpansion.java  |   91 -
 .../tests/components/table/ColumnExpandRatio.html  |   32 -
 .../tests/components/table/ColumnExpandRatio.java  |   70 -
 .../table/ColumnExpandWithFixedColumns.html        |   32 -
 .../table/ColumnExpandWithFixedColumns.java        |   45 -
 .../table/ColumnGeneratorAddingOrder.java          |   52 -
 .../components/table/ColumnHeaderAlignments.java   |   95 -
 .../tests/components/table/ColumnReorderEvent.java |   97 -
 .../tests/components/table/ColumnResizeEvent.java  |  108 -
 .../tests/components/table/ColumnWidths.java       |   69 -
 .../ContainerChangeWithPartlySamePropertyIds.html  |   57 -
 .../ContainerChangeWithPartlySamePropertyIds.java  |  107 -
 .../components/table/ContainerSizeChange.html      |   82 -
 .../components/table/ContainerSizeChange.java      |   91 -
 .../components/table/CtrlShiftMultiselect.java     |   53 -
 .../table/DisabledTableKeyboardNavigation.html     |   67 -
 .../table/DisabledTableKeyboardNavigation.java     |   54 -
 ...isabledTableShouldNotSendPageLengthUpdates.java |   45 -
 .../tests/components/table/EditableModeChange.html |   56 -
 .../tests/components/table/EditableModeChange.java |   99 -
 .../tests/components/table/EditableTableLeak.java  |  144 --
 .../vaadin/tests/components/table/EmptyTable.html  |   72 -
 .../tests/components/table/FixedHeightTable.html   |   32 -
 .../tests/components/table/FixedHeightTable.java   |   39 -
 .../com/vaadin/tests/components/table/Footer.html  |  226 --
 .../com/vaadin/tests/components/table/Footer.java  |  134 --
 .../vaadin/tests/components/table/FooterClick.html |  123 -
 .../vaadin/tests/components/table/FooterClick.java |  108 -
 .../vaadin/tests/components/table/HeaderClick.html |  168 --
 .../vaadin/tests/components/table/HeaderClick.java |  102 -
 .../table/HeaderPositionWhenSorting.html           |   62 -
 .../tests/components/table/HeaderSyncOnScroll.html |  127 --
 .../components/table/HeaderUpdateWhenNoRows.html   |   47 -
 .../components/table/HeaderUpdateWhenNoRows.java   |   47 -
 .../table/HiddenColumnsExpandRatios.java           |   75 -
 .../tests/components/table/HugeRowCount.java       |   86 -
 .../tests/components/table/ItemClickEvents.html    |  479 ----
 .../tests/components/table/ItemClickEvents.java    |  153 --
 .../vaadin/tests/components/table/KeyControl.java  |  135 --
 .../table/KeyboardNavigationDatasourceChange.java  |  137 --
 .../KeyboardNavigationWithChangingContent.java     |   84 -
 .../table/LabelEmbeddedClickThroughForTable.html   |  129 --
 .../table/LabelEmbeddedClickThroughForTable.java   |   68 -
 .../tests/components/table/MissingScrollbar.html   |   42 -
 .../tests/components/table/MissingScrollbar.java   |   89 -
 .../components/table/ModifyContainerProperty.html  |   42 -
 .../components/table/ModifyContainerProperty.java  |   60 -
 .../table/MultiSelectWithNotIdentityEqualIds.java  |   61 -
 .../table/NotselectablePaintSelections.java        |   55 -
 .../tests/components/table/OddEvenRowStyling.html  |   52 -
 .../tests/components/table/OddEvenRowStyling.java  |   36 -
 .../components/table/PropertyValueChange.html      |   87 -
 .../components/table/PropertyValueChange.java      |  156 --
 .../table/ResizeColumnAfterScrolling.html          |   57 -
 .../tests/components/table/RowAdditionTest.java    |   59 -
 .../tests/components/table/RowGenerators.java      |   59 -
 .../table/SafariRenderingBugWhiteSpace.java        |   64 -
 .../table/SelectingItemScrollsRight.java           |   41 -
 .../tests/components/table/SortLongTable.html      |   42 -
 .../tests/components/table/SortLongTable.java      |   43 -
 .../table/TableAndBrowserContextMenu.java          |  150 --
 .../table/TableCacheBuildEfficiency.java           |   59 -
 .../TableClickAndDragOnIconAndComponents.html      |  132 --
 .../TableClickAndDragOnIconAndComponents.java      |  142 --
 .../components/table/TableColumnAlignment.html     |  305 ---
 .../tests/components/table/TableColumnHeaders.html |  244 --
 .../tests/components/table/TableColumnIcons.html   |  185 --
 .../table/TableColumnResizeContentsWidth.html      |   61 -
 .../table/TableColumnResizeContentsWidth.java      |   56 -
 .../tests/components/table/TableColumnSorting.html |  208 --
 .../components/table/TableContextMenuAndIcons.html |  187 --
 .../components/table/TableContextMenuOnField.java  |   93 -
 .../tests/components/table/TableDragColumn.html    |   80 -
 .../components/table/TableExtraScrollbars.java     |   61 -
 .../components/table/TableGeneratedColumns.html    |  223 --
 .../tests/components/table/TableGeneratedRows.html |  107 -
 .../table/TableGeneratedStringColumns.html         |  152 --
 .../components/table/TableHeaderShifting.java      |   40 -
 .../table/TableHeightWhenHidingHeaders.html        |   57 -
 .../table/TableHeightWhenHidingHeaders.java        |   68 -
 .../table/TableItemDescriptionGeneratorTest.java   |   75 -
 .../tests/components/table/TableItemIcon.java      |   38 -
 .../components/table/TableLastRowMissing.html      |   32 -
 .../components/table/TableLastRowMissing.java      |   35 -
 .../table/TableModifcationsWhenScrolledRight.java  |   51 -
 .../table/TableModificationsWhenScrolledRight.html |   52 -
 .../components/table/TableMultiSelectMouse.html    |  361 ---
 .../components/table/TableMultiSelectSimple.html   |   62 -
 .../components/table/TableMultiSelectSimple.java   |   62 -
 .../table/TablePageLengthCalculation.java          |   50 -
 .../components/table/TablePageLengthUpdate.html    |  127 --
 .../components/table/TablePageLengthUpdate.java    |   76 -
 .../table/TableRemoveActionHandlers.html           |  161 --
 .../tests/components/table/TableRowHeight.html     |   32 -
 .../tests/components/table/TableRowHeight.java     |  122 -
 .../tests/components/table/TableRowHeight2.html    |   57 -
 .../tests/components/table/TableRowHeight2.java    |   58 -
 .../tests/components/table/TableRowHeight3.html    |   27 -
 .../tests/components/table/TableRowHeight3.java    |   61 -
 .../tests/components/table/TableScrollOnFocus.html |   47 -
 .../tests/components/table/TableScrollOnFocus.java |   49 -
 .../tests/components/table/TableScrolling.html     |  121 -
 .../components/table/TableScrollsOnSelection.html  |   45 -
 .../components/table/TableScrollsOnSelection.java  |   36 -
 .../components/table/TableSelectPagingOff.java     |   69 -
 .../table/TableShouldNotEatValueChanges.html       |   77 -
 .../table/TableShouldNotEatValueChanges.java       |   62 -
 .../tests/components/table/TableSingleSelect.html  |   67 -
 .../tests/components/table/TableSingleSelect.java  |   54 -
 .../tests/components/table/TableSorting.java       |   67 -
 .../components/table/TableToggleVisibility.html    |  116 -
 .../components/table/TableToggleVisibility.java    |  169 --
 .../tests/components/table/TableTooltips.html      |   77 -
 .../tests/components/table/TableUndefinedSize.html |  127 --
 .../tests/components/table/TableUndefinedSize.java |  165 --
 .../components/table/TableUnregisterComponent.html |   52 -
 .../components/table/TableUnregisterComponent.java |  102 -
 .../table/TableVisibleColumnsUpdate.html           |   77 -
 .../table/TableVisibleColumnsUpdate.java           |   57 -
 .../components/table/TableWithManyColumns.html     |   56 -
 .../components/table/TableWithManyColumns.java     |   42 -
 .../com/vaadin/tests/components/table/Tables.java  |  838 -------
 .../components/table/TestCurrentPageFirstItem.java |   60 -
 .../components/table/TextFieldRelativeWidth.html   |   63 -
 .../components/table/TextFieldRelativeWidth.java   |  129 --
 .../components/table/UncollapsedCollumnWidth.html  |   37 -
 .../components/table/UncollapsedCollumnWidth.java  |   42 -
 .../components/table/WideSelectableTable.java      |   45 -
 tests/src/com/vaadin/tests/components/table/fi.gif |  Bin 371 -> 0 bytes
 tests/src/com/vaadin/tests/components/table/se.gif |  Bin 367 -> 0 bytes
 .../components/tabsheet/AddAndRemoveTabs.html      |  126 -
 .../components/tabsheet/AddAndRemoveTabs.java      |   60 -
 .../components/tabsheet/PreventTabChange.html      |   77 -
 .../components/tabsheet/PreventTabChange.java      |   67 -
 .../tests/components/tabsheet/RemoveTabs.java      |  145 --
 .../components/tabsheet/RemoveTabsTabsheet.html    |  138 --
 .../tabsheet/TabGetAndReplaceComponent.html        |   72 -
 .../tabsheet/TabGetAndReplaceComponent.java        |   54 -
 .../tabsheet/TabSheetBasicOperations.html          |  330 ---
 .../components/tabsheet/TabSheetCaptions.html      |   77 -
 .../components/tabsheet/TabSheetCaptions.java      |   64 -
 .../components/tabsheet/TabSheetDisabling.html     |  162 --
 .../components/tabsheet/TabSheetDisabling.java     |   62 -
 .../tabsheet/TabSheetDiscardsMovedComponents.html  |   51 -
 .../tabsheet/TabSheetDiscardsMovedComponents.java  |   52 -
 .../tests/components/tabsheet/TabSheetIcons.html   |   27 -
 .../tests/components/tabsheet/TabSheetIcons.java   |   54 -
 .../tabsheet/TabSheetIndexOperations.html          |   52 -
 .../tabsheet/TabSheetIndexOperations.java          |   75 -
 .../tests/components/tabsheet/TabSheetMinimal.java |   39 -
 .../components/tabsheet/TabSheetTabStyleNames.html |   42 -
 .../components/tabsheet/TabSheetTabStyleNames.java |   51 -
 .../components/tabsheet/TabSheetTabTheming.java    |   27 -
 .../tests/components/tabsheet/TabSheetTest.java    |  202 --
 .../tabsheet/TabSheetWithoutTabCaption.html        |   32 -
 .../tabsheet/TabSheetWithoutTabCaption.java        |   28 -
 .../tests/components/tabsheet/TabsheetNPE.java     |   59 -
 .../components/tabsheet/TabsheetScrolling.html     |  106 -
 .../components/tabsheet/TabsheetScrolling.java     |   74 -
 .../tests/components/tabsheet/TabsheetTooltip.html |   82 -
 .../tests/components/tabsheet/TabsheetTooltip.java |   37 -
 .../tabsheet/VerticalScrollbarPosition.html        |   77 -
 .../tabsheet/VerticalScrollbarPosition.java        |   40 -
 .../components/textarea/TextAreaBasicStates.html   |  128 --
 .../textarea/TextAreaNullRepresentation.html       |  111 -
 .../tests/components/textarea/TextAreaTest.java    |   43 -
 .../components/textarea/TextAreaWordwrap.html      |   56 -
 .../vaadin/tests/components/textarea/Wordwrap.java |   59 -
 .../EnterShortcutMaySendInputPromptAsValue.java    |   57 -
 .../tests/components/textfield/IE6Cursor.java      |   28 -
 .../OutOfSyncIssueWithKeyboardShortcut.java        |  192 --
 .../textfield/SelectionAndCursorPosition.html      |  222 --
 .../textfield/SelectionAndCursorPosition.java      |  105 -
 .../tests/components/textfield/SetTabIndex.html    |  132 --
 .../tests/components/textfield/SetTabIndex.java    |   54 -
 .../components/textfield/SizedTextFields.java      |   72 -
 .../components/textfield/TextChangeEvents.java     |  137 --
 .../components/textfield/TextChangeEvents2.java    |  175 --
 .../textfield/TextChangeEventsEternalLoop.html     |   37 -
 .../textfield/TextChangeEventsEternalLoop.java     |   32 -
 ...extChangeEventsWithNonImmediateValueChange.java |   55 -
 .../textfield/TextChangeTimeoutAfterDetach.html    |   48 -
 .../textfield/TextChangeTimeoutAfterDetach.java    |   48 -
 .../components/textfield/TextFieldBasicStates.html |  128 --
 .../textfield/TextFieldEagerRepaint.html           |   81 -
 .../textfield/TextFieldEagerRepaint.java           |   53 -
 .../textfield/TextFieldFocusAndBlurListeners.java  |   95 -
 .../textfield/TextFieldInLayoutInTable.html        |   32 -
 .../textfield/TextFieldInLayoutInTable.java        |   34 -
 .../components/textfield/TextFieldMaxLength.html   |  196 --
 .../textfield/TextFieldNullRepresentation.html     |  111 -
 .../TextFieldNullRepresentationAndSelection.html   |  172 --
 .../components/textfield/TextFieldSecret.html      |  196 --
 .../tests/components/textfield/TextFieldTest.java  |   59 -
 .../textfield/TextFieldTextChangeEvent.htm         |  359 ---
 .../tests/components/textfield/TextFields.html     |   81 -
 .../tests/components/textfield/TextFields.java     |   65 -
 .../components/tree/ActionsOnTreeBackground.html   |  105 -
 .../components/tree/CtrlShiftMultiselect.java      |  119 -
 .../tests/components/tree/ExpandCollapseTree.html  |   66 -
 .../tests/components/tree/ExpandCollapseTree.java  |  119 -
 .../tests/components/tree/ItemStyleGenerator.java  |   52 -
 .../components/tree/PreselectedTreeVisible.html    |   27 -
 .../components/tree/PreselectedTreeVisible.java    |   36 -
 .../tests/components/tree/TreeConnectors.html      |   67 -
 .../tests/components/tree/TreeConnectors.java      |  131 --
 .../tests/components/tree/TreeContainerChange      |   47 -
 .../tests/components/tree/TreeContainerChange.java |  101 -
 .../components/tree/TreeContextMenuAndIcons.html   |  156 --
 .../tests/components/tree/TreeFiltering.html       |   81 -
 .../tests/components/tree/TreeFiltering.java       |  126 -
 .../tests/components/tree/TreeFocusGaining.html    |   77 -
 .../tests/components/tree/TreeFocusGaining.java    |   62 -
 .../components/tree/TreeHorizontalResize.html      |  103 -
 .../components/tree/TreeHorizontalResize.java      |   87 -
 .../components/tree/TreeItemClickListening.html    |   81 -
 .../components/tree/TreeItemClickListening.java    |   61 -
 .../components/tree/TreeKeyboardNavigationScroll   |   87 -
 .../tree/TreeKeyboardNavigationScrolls.java        |   54 -
 .../tree/TreeKeyboardNavigationValidators          |   97 -
 .../tree/TreeKeyboardNavigationValidators.java     |   54 -
 .../components/tree/TreeNodeCaptionWrapping.html   |   42 -
 .../components/tree/TreeNodeCaptionWrapping.java   |   44 -
 .../tests/components/tree/TreePerformanceTest.java |   75 -
 .../tests/components/tree/TreeScrolling.html       |   36 -
 .../tests/components/tree/TreeScrolling.java       |   54 -
 .../components/tree/TreeScrollingOnSelection.html  |   76 -
 .../components/tree/TreeScrollingOnSelection.java  |   72 -
 .../vaadin/tests/components/tree/TreeToolTips.java |   89 -
 .../vaadin/tests/components/tree/TreeTooltip.html  |   52 -
 .../tests/components/tree/TreeWithIcons.html       |   62 -
 .../tests/components/tree/TreeWithIcons.java       |   69 -
 .../tree/TreeWithPreselectedItemNotShown.java      |   52 -
 .../com/vaadin/tests/components/tree/Trees.java    |  391 ----
 .../treetable/ExpandAndCollapseListeners.html      |  181 --
 .../treetable/ExpandAnimationsInChameleon.java     |  126 -
 .../components/treetable/KeepAllItemsVisible.html  |   52 -
 .../components/treetable/KeepAllItemsVisible.java  |  133 --
 .../components/treetable/ProgrammaticSelect.java   |  128 --
 .../treetable/TreeTableExpandWithRowStyle.html     |   72 -
 .../treetable/TreeTableGeneratedColumns.html       |  152 --
 .../treetable/TreeTableGeneratedRows.html          |  182 --
 .../components/treetable/TreeTableOutOfSync.html   |   37 -
 .../components/treetable/TreeTableOutOfSync.java   |   53 -
 .../TreeTablePartialUpdates-LongScroll.html        |   52 -
 .../treetable/TreeTablePartialUpdates.java         |   63 -
 .../treetable/TreeTableSetCollapsed.html           |   36 -
 .../treetable/TreeTableSetCollapsed.java           |   46 -
 .../tests/components/treetable/TreeTableTest.java  |  300 ---
 .../twincolselect/TwinColSelectSelection.html      |  132 --
 .../components/twincolselect/TwinColSelects.java   |   64 -
 .../tests/components/upload/ForceSubmit.java       |   85 -
 .../upload/TestImmediateUploadInFormLayout.java    |   53 -
 .../vaadin/tests/components/upload/TestUpload.java |   59 -
 .../upload/TestUploadAndDisableOnSuccess.java      |  102 -
 .../components/upload/TestUploadFilename.java      |   61 -
 .../window/CenteredWindowWithUndefinedSize.html    |   32 -
 .../window/CenteredWindowWithUndefinedSize.java    |   33 -
 .../tests/components/window/CloseSubWindow.html    |   91 -
 .../tests/components/window/CloseSubWindow.java    |  129 --
 .../components/window/EmbeddedInSubWindow.html     |   32 -
 .../components/window/EmbeddedInSubWindow.java     |   39 -
 .../tests/components/window/ExecuteJavaScript.java |   46 -
 .../components/window/ExtraLargeSubWindow.html     |   27 -
 .../components/window/ExtraLargeSubWindow.java     |   32 -
 .../tests/components/window/ExtraWindowShown.html  |   61 -
 .../tests/components/window/ExtraWindowShown.java  |   53 -
 .../tests/components/window/FullSizedWindow.java   |   31 -
 .../window/HugeWindowShouldBeClosable.java         |   27 -
 .../tests/components/window/LazyWindowResize.java  |  108 -
 .../tests/components/window/LongNotifications.java |   79 -
 .../components/window/ModalWindowNativeSelect.java |   32 -
 .../components/window/PositionedSubWindows.java    |   41 -
 .../tests/components/window/SubWindowFocus.java    |   83 -
 .../window/SubWindowFocusAndBlurListeners.java     |   82 -
 .../tests/components/window/SubWindowOrder.html    |  137 --
 .../tests/components/window/SubWindowOrder.java    |   80 -
 .../components/window/SubWindowPositionUpdate.java |   44 -
 .../tests/components/window/SubWindows-runo.html   |   87 -
 .../vaadin/tests/components/window/SubWindows.html |   87 -
 .../vaadin/tests/components/window/SubWindows.java |  111 -
 .../components/window/SubwindowDraggability.java   |   46 -
 .../components/window/SubwindowInvalidLayout.java  |   35 -
 .../window/TestTooSmallSubwindowSize.html          |   32 -
 .../window/TestTooSmallSubwindowSize.java          |   44 -
 .../tests/components/window/WindowCaptionTest.html |   77 -
 .../tests/components/window/WindowClickEvents.html |   77 -
 .../tests/components/window/WindowClickEvents.java |   88 -
 .../components/window/WindowResizeListener.java    |  102 -
 .../window/WindowScrollingComponentIntoView.java   |  137 --
 .../tests/components/window/WindowScrollingUp.java |   39 -
 .../window/WindowShouldRemoveActionHandler.html    |  107 -
 .../window/WindowShouldRemoveActionHandler.java    |  116 -
 .../tests/components/window/WindowStyleNames.java  |   54 -
 .../vaadin/tests/components/window/WindowTest.java |   19 -
 .../containers/BeanItemContainerFilteringTest.java |  172 --
 .../tests/containers/BeanItemContainerTest.java    |   75 -
 .../containers/HierarchicalWrapperOrdering.java    |  127 --
 .../containers/IndexedContainerFilteringTest.java  |  139 --
 .../containers/TableWithFileSystemContainer.java   |   33 -
 .../vaadin/tests/containers/TestItemSorter.java    |   94 -
 .../sqlcontainer/CheckboxUpdateProblem.java        |  190 --
 .../sqlcontainer/MassInsertMemoryLeakTestApp.java  |  134 --
 .../com/vaadin/tests/dd/AcceptAnythingWindow.java  |  136 --
 .../com/vaadin/tests/dd/AcceptFromComponent.java   |  153 --
 .../vaadin/tests/dd/ActiveDragSourceClassName.java |  117 -
 .../vaadin/tests/dd/CustomDDImplementation.java    |   84 -
 tests/src/com/vaadin/tests/dd/DDTest1.java         |  267 ---
 tests/src/com/vaadin/tests/dd/DDTest2.java         |  312 ---
 tests/src/com/vaadin/tests/dd/DDTest4.java         |  161 --
 tests/src/com/vaadin/tests/dd/DDTest5.java         |  177 --
 tests/src/com/vaadin/tests/dd/DDTest6.java         |  548 -----
 tests/src/com/vaadin/tests/dd/DDTest7.java         |  189 --
 tests/src/com/vaadin/tests/dd/DDTest8.java         |  178 --
 .../src/com/vaadin/tests/dd/DragAndDropFiles.java  |  124 -
 tests/src/com/vaadin/tests/dd/DragDropPane.java    |  179 --
 .../dd/HorizontalLayoutSortableWithWrappers.java   |  109 -
 .../HorizontalSortableCssLayoutWithWrappers.java   |  103 -
 tests/src/com/vaadin/tests/dd/TreeDragStart.java   |  324 ---
 tests/src/com/vaadin/tests/dd/VMyDragSource.java   |   92 -
 tests/src/com/vaadin/tests/dd/VMyDropTarget.java   |   52 -
 .../com/vaadin/tests/debug/DebugWindowPresent.html |   36 -
 .../com/vaadin/tests/debug/DebugWindowPresent.java |   22 -
 .../applicationconnection/URLGeneration.java       |   77 -
 .../componentlocator/TestDetachedNotPresent.html   |   62 -
 .../integration/IntegrationTestApplication.java    |   47 -
 .../integration/JSR286PortletApplication.java      |  160 --
 .../vaadin/tests/integration/LiferayThemeDemo.java |  721 ------
 tests/src/com/vaadin/tests/integration/fi.gif      |  Bin 371 -> 0 bytes
 tests/src/com/vaadin/tests/integration/se.gif      |  Bin 367 -> 0 bytes
 .../tests/layouts/AbsoluteLayoutAddRemove.java     |   50 -
 .../vaadin/tests/layouts/CaptionsInLayouts.java    |  277 ---
 .../ComplexGLColumnExpansionWithColSpan.html       |   32 -
 .../ComplexGLColumnExpansionWithColSpan.java       |   80 -
 .../tests/layouts/CssLayoutRemoveComponent.html    |   37 -
 .../tests/layouts/CssLayoutRemoveComponent.java    |   42 -
 .../CssLayoutRemoveComponentWithCaption.java       |   41 -
 .../layouts/CssLayoutSizeChangePropagation.java    |   61 -
 .../vaadin/tests/layouts/DeepComponentTrees.java   |  114 -
 .../layouts/FormLayoutWithInvisibleComponent.java  |   49 -
 .../vaadin/tests/layouts/GridLayoutCaptions.java   |  221 --
 .../layouts/GridLayoutExpandRatioModification.java |   83 -
 .../tests/layouts/GridLayoutInsidePanel.java       |   52 -
 .../tests/layouts/GridLayoutInsidePanel2.java      |   28 -
 .../tests/layouts/GridLayoutMoveComponent.html     |   57 -
 .../tests/layouts/GridLayoutMoveComponent.java     |   66 -
 .../com/vaadin/tests/layouts/GridLayoutNPE.java    |   72 -
 .../tests/layouts/GridLayoutRemoveFinalRow.java    |   46 -
 .../tests/layouts/GridLayoutSpanExpansion.html     |   26 -
 .../tests/layouts/GridLayoutSpanExpansion.java     |   67 -
 .../tests/layouts/GridLayoutWidthChange.html       |   47 -
 .../tests/layouts/GridLayoutWidthChange.java       |   64 -
 .../tests/layouts/HiddenHorizontalLayout.java      |   57 -
 .../MovingComponentsWhileOldParentInvisible.html   |  514 -----
 .../MovingComponentsWhileOldParentInvisible.java   |  116 -
 .../vaadin/tests/layouts/MovingInvisibleField.html |   47 -
 .../vaadin/tests/layouts/MovingInvisibleField.java |   56 -
 .../vaadin/tests/layouts/OrderedLayoutBasics.java  | 1202 ----------
 .../layouts/OrderedLayoutCSSCompatibility.java     |   31 -
 .../vaadin/tests/layouts/TestAbsoluteLayout.java   |  314 ---
 .../tests/layouts/TestLayoutClickListeners.html    |  190 --
 .../tests/layouts/TestLayoutClickListeners.java    |  208 --
 .../tests/layouts/TestLayoutPerformance.java       |  133 --
 .../tests/layouts/TreeWithBordersInLayout.html     |   27 -
 .../tests/layouts/TreeWithBordersInLayout.java     |   42 -
 .../VerticalLayoutExpandRatioModification.java     |   77 -
 .../VerticalLayoutWithRelativeSizeComponents.java  |   38 -
 ...tWithRelativeSizeComponentsInitiallyHidden.java |   58 -
 .../tests/layouts/WidgetImplementationSwap.html    |  182 --
 .../tests/layouts/WidgetImplementationSwap.java    |  157 --
 .../layouts/layouttester/AbstractLayoutTests.java  |   30 -
 .../layouts/layouttester/GridLayoutTests.java      |  593 -----
 .../layouttester/HorizontalLayoutTests.java        |  559 -----
 .../layouttester/LayoutTesterApplication.html      |  902 --------
 .../layouttester/LayoutTesterApplication.java      |  128 --
 .../tests/layouts/layouttester/UndefWideLabel.java |   12 -
 .../layouts/layouttester/VerticalLayoutTests.java  |  589 -----
 tests/src/com/vaadin/tests/m.gif                   |  Bin 1036 -> 0 bytes
 .../tests/resources/DownloadLargeFileResource.java |   71 -
 .../tests/resources/NonExistingFileResource.java   |   48 -
 .../vaadin/tests/resources/ResourceDownload.java   |   89 -
 .../tests/server/BrowserUserAgentParser.java       |  369 ---
 .../tests/server/IndexedContainerListeners.java    |   20 -
 .../vaadin/tests/server/LicenseInJavaFiles.java    |   54 -
 .../tests/server/PropertysetItemListeners.java     |   13 -
 .../server/TestAbstractBeanContainerListeners.java |   15 -
 .../server/TestAbstractContainerListeners.java     |   21 -
 .../TestAbstractInMemoryContainerListeners.java    |   13 -
 .../server/TestAbstractPropertyListeners.java      |   24 -
 .../tests/server/TestClassesSerializable.java      |  241 --
 .../com/vaadin/tests/server/TestEventRouter.java   |   37 -
 .../vaadin/tests/server/TestFileTypeResolver.java  |   79 -
 .../src/com/vaadin/tests/server/TestKeyMapper.java |  102 -
 .../src/com/vaadin/tests/server/TestMimeTypes.java |   26 -
 .../com/vaadin/tests/server/TestSerialization.java |  115 -
 .../server/TestSimpleMultiPartInputStream.java     |  138 --
 .../server/TransactionListenersConcurrency.java    |  185 --
 .../TestStaticFilesLocation.java                   |  205 --
 .../component/AbstractListenerMethodsTest.java     |  170 --
 .../tests/server/component/FinalMethodTest.java    |   68 -
 .../absolutelayout/AbsoluteLayoutListeners.java    |   13 -
 .../absolutelayout/ComponentPosition.java          |  205 --
 .../TestAbstractComponentStyleNames.java           |   62 -
 .../TestAbstractComponentContainerListeners.java   |   21 -
 .../abstractfield/TestAbstractFieldListeners.java  |   20 -
 .../TestAbstractOrderedLayoutListeners.java        |   13 -
 .../TestAbstractSelectListeners.java               |   20 -
 .../TestAbstractSplitPanelListeners.java           |   13 -
 .../TestAbstractTextFieldListeners.java            |   27 -
 .../server/component/button/ButtonListeners.java   |   27 -
 .../component/csslayout/CssLayoutListeners.java    |   13 -
 .../component/datefield/DateFieldListeners.java    |   20 -
 .../component/datefield/WeekNumberCalculation.java |  111 -
 .../component/embedded/EmbeddedListeners.java      |   13 -
 .../component/gridlayout/GridLayoutListeners.java  |   13 -
 .../server/component/label/LabelListeners.java     |   13 -
 .../component/loginform/LoginFormListeners.java    |   13 -
 .../tests/server/component/menubar/MenuBarIds.java |   97 -
 .../optiongroup/OptionGroupListeners.java          |   20 -
 .../component/orderedlayout/TestOrderedLayout.java |   49 -
 .../server/component/panel/PanelListeners.java     |   13 -
 .../component/popupview/PopupViewListeners.java    |   14 -
 .../server/component/select/SelectListeners.java   |   20 -
 .../component/table/TableColumnAlignments.java     |  165 --
 .../server/component/table/TableGenerator.java     |   42 -
 .../server/component/table/TableListeners.java     |   40 -
 .../component/table/TableVisibleColumns.java       |   75 -
 .../tests/server/component/table/TestFooter.java   |   94 -
 .../component/table/TestMultipleSelection.java     |   57 -
 .../component/tabsheet/TabSheetListeners.java      |   13 -
 .../server/component/tabsheet/TestTabSheet.java    |  124 -
 .../tests/server/component/tree/TestListeners.java |  135 --
 .../tests/server/component/tree/TreeListeners.java |   27 -
 .../server/component/treetable/EmptyTreeTable.java |   13 -
 .../server/component/upload/UploadListeners.java   |   41 -
 .../UriFragmentUtilityListeners.java               |   13 -
 .../component/window/AddRemoveSubWindow.java       |   83 -
 .../server/component/window/WindowListeners.java   |   34 -
 .../componentcontainer/AddRemoveComponentTest.java |   40 -
 .../components/AbstractTestFieldValueChange.java   |  169 --
 .../ComponentAttachDetachListenerTest.java         |  343 ---
 .../server/components/TestComboBoxValueChange.java |   30 -
 .../components/TestGridLayoutLastRowRemoval.java   |   40 -
 .../components/TestTextFieldValueChange.java       |  180 --
 .../vaadin/tests/server/components/TestWindow.java |   90 -
 .../container/AbstractBeanContainerTest.java       |   81 -
 .../server/container/AbstractContainerTest.java    |  670 ------
 .../AbstractHierarchicalContainerTest.java         |  256 ---
 .../container/AbstractInMemoryContainerTest.java   |    6 -
 .../tests/server/container/BeanContainerTest.java  |  425 ----
 .../container/BeanItemContainerSortTest.java       |  170 --
 .../server/container/BeanItemContainerTest.java    |  718 ------
 .../tests/server/container/BeanItemTest.java       |  337 ---
 .../server/container/NestedMethodPropertyTest.java |  326 ---
 .../tests/server/container/ObjectPropertyTest.java |   99 -
 .../container/PerformanceTestIndexedContainer.java |  117 -
 .../server/container/PropertyDescriptorTest.java   |   56 -
 .../server/container/PropertySetItemTest.java      |  407 ----
 .../TestContainerHierarchicalWrapper.java          |   45 -
 .../server/container/TestContainerSorting.java     |  238 --
 .../container/TestHierarchicalContainer.java       |  269 ---
 .../server/container/TestIndexedContainer.java     |  271 ---
 .../container/filter/AbstractFilterTest.java       |   91 -
 .../server/container/filter/AndOrFilterTest.java   |  234 --
 .../server/container/filter/CompareFilterTest.java |  260 ---
 .../server/container/filter/IsNullFilterTest.java  |   59 -
 .../server/container/filter/NotFilterTest.java     |   52 -
 .../container/filter/SimpleStringFilterTest.java   |  131 --
 .../server/container/sqlcontainer/AllTests.java    |  145 --
 .../container/sqlcontainer/ColumnPropertyTest.java |  197 --
 .../container/sqlcontainer/DataGenerator.java      |  138 --
 .../container/sqlcontainer/FreeformQueryUtil.java  |   73 -
 .../container/sqlcontainer/ReadOnlyRowIdTest.java  |   50 -
 .../server/container/sqlcontainer/RowIdTest.java   |   55 -
 .../sqlcontainer/SQLContainerTableQueryTest.java   | 1528 -------------
 .../container/sqlcontainer/SQLContainerTest.java   | 2400 --------------------
 .../server/container/sqlcontainer/TicketTests.java |  183 --
 .../server/container/sqlcontainer/UtilTest.java    |   52 -
 .../connection/J2EEConnectionPoolTest.java         |  111 -
 .../connection/MockInitialContextFactory.java      |   31 -
 .../connection/SimpleJDBCConnectionPoolTest.java   |  172 --
 .../sqlcontainer/filters/BetweenTest.java          |  122 -
 .../container/sqlcontainer/filters/LikeTest.java   |  229 --
 .../sqlcontainer/generator/SQLGeneratorsTest.java  |  241 --
 .../sqlcontainer/query/FreeformQueryTest.java      |  897 --------
 .../sqlcontainer/query/QueryBuilderTest.java       |  311 ---
 .../sqlcontainer/query/TableQueryTest.java         |  663 ------
 tests/src/com/vaadin/tests/themes/ButtonsTest.java |  158 --
 tests/src/com/vaadin/tests/tickets/Ticket1225.java |   68 -
 tests/src/com/vaadin/tests/tickets/Ticket1230.java |  152 --
 tests/src/com/vaadin/tests/tickets/Ticket124.java  |   90 -
 tests/src/com/vaadin/tests/tickets/Ticket1245.java |   93 -
 .../com/vaadin/tests/tickets/Ticket1362Login.java  |  275 ---
 tests/src/com/vaadin/tests/tickets/Ticket1365.java |   45 -
 tests/src/com/vaadin/tests/tickets/Ticket1368.java |   36 -
 tests/src/com/vaadin/tests/tickets/Ticket1397.java |  149 --
 tests/src/com/vaadin/tests/tickets/Ticket1435.java |  230 --
 tests/src/com/vaadin/tests/tickets/Ticket1444.java |   30 -
 .../tests/tickets/Ticket1465ModalNotification.java |   77 -
 tests/src/com/vaadin/tests/tickets/Ticket1506.java |   15 -
 .../com/vaadin/tests/tickets/Ticket1506_Panel.java |   48 -
 .../tests/tickets/Ticket1506_TestContainer.java    |  126 -
 .../tests/tickets/Ticket1506_TestContainer2.java   |  118 -
 tests/src/com/vaadin/tests/tickets/Ticket1519.java |   25 -
 tests/src/com/vaadin/tests/tickets/Ticket1572.java |  118 -
 tests/src/com/vaadin/tests/tickets/Ticket1581.java |   71 -
 tests/src/com/vaadin/tests/tickets/Ticket1589.java |   94 -
 tests/src/com/vaadin/tests/tickets/Ticket1598.java |  126 -
 tests/src/com/vaadin/tests/tickets/Ticket161.java  |   47 -
 tests/src/com/vaadin/tests/tickets/Ticket1632.java |   64 -
 tests/src/com/vaadin/tests/tickets/Ticket1659.java |   34 -
 tests/src/com/vaadin/tests/tickets/Ticket1663.java |   22 -
 tests/src/com/vaadin/tests/tickets/Ticket1673.java |   28 -
 tests/src/com/vaadin/tests/tickets/Ticket1710.java |  411 ----
 tests/src/com/vaadin/tests/tickets/Ticket1737.java |   52 -
 tests/src/com/vaadin/tests/tickets/Ticket1767.java |   30 -
 tests/src/com/vaadin/tests/tickets/Ticket1772.java |   37 -
 tests/src/com/vaadin/tests/tickets/Ticket1775.java |   48 -
 tests/src/com/vaadin/tests/tickets/Ticket1804.java |  150 --
 tests/src/com/vaadin/tests/tickets/Ticket1805.java |   57 -
 tests/src/com/vaadin/tests/tickets/Ticket1806.java |   45 -
 tests/src/com/vaadin/tests/tickets/Ticket1811.java |   78 -
 tests/src/com/vaadin/tests/tickets/Ticket1819.java |   64 -
 .../tests/tickets/Ticket1834PanelScrolling.java    |   89 -
 tests/src/com/vaadin/tests/tickets/Ticket1857.java |  109 -
 tests/src/com/vaadin/tests/tickets/Ticket1868.java |   20 -
 tests/src/com/vaadin/tests/tickets/Ticket1869.java |   55 -
 tests/src/com/vaadin/tests/tickets/Ticket1878.java |  384 ----
 tests/src/com/vaadin/tests/tickets/Ticket1900.java |   76 -
 tests/src/com/vaadin/tests/tickets/Ticket1904.java |   46 -
 tests/src/com/vaadin/tests/tickets/Ticket1916.java |   28 -
 tests/src/com/vaadin/tests/tickets/Ticket1919.java |   53 -
 tests/src/com/vaadin/tests/tickets/Ticket1921.java |  109 -
 tests/src/com/vaadin/tests/tickets/Ticket1923.java |   80 -
 .../tests/tickets/Ticket1924ThemeChanging.java     |   51 -
 tests/src/com/vaadin/tests/tickets/Ticket1925.java |   15 -
 tests/src/com/vaadin/tests/tickets/Ticket1939.java |   36 -
 tests/src/com/vaadin/tests/tickets/Ticket1940.java |   25 -
 tests/src/com/vaadin/tests/tickets/Ticket1953.java |  114 -
 tests/src/com/vaadin/tests/tickets/Ticket1966.java |  111 -
 .../src/com/vaadin/tests/tickets/Ticket1966_2.java |  168 --
 .../src/com/vaadin/tests/tickets/Ticket1966_3.java |   63 -
 tests/src/com/vaadin/tests/tickets/Ticket1969.java |  105 -
 tests/src/com/vaadin/tests/tickets/Ticket1970.java |   79 -
 tests/src/com/vaadin/tests/tickets/Ticket1972.java |   30 -
 tests/src/com/vaadin/tests/tickets/Ticket1973.java |   51 -
 .../src/com/vaadin/tests/tickets/Ticket1973_2.java |   54 -
 tests/src/com/vaadin/tests/tickets/Ticket1975.java |   62 -
 tests/src/com/vaadin/tests/tickets/Ticket1982.java |   84 -
 tests/src/com/vaadin/tests/tickets/Ticket1983.java |  141 --
 tests/src/com/vaadin/tests/tickets/Ticket1986.java |   79 -
 tests/src/com/vaadin/tests/tickets/Ticket1991.java |   28 -
 tests/src/com/vaadin/tests/tickets/Ticket1995.java |   67 -
 tests/src/com/vaadin/tests/tickets/Ticket20.java   |   99 -
 tests/src/com/vaadin/tests/tickets/Ticket2001.java |   37 -
 tests/src/com/vaadin/tests/tickets/Ticket2002.java |   51 -
 tests/src/com/vaadin/tests/tickets/Ticket2007.java |   28 -
 tests/src/com/vaadin/tests/tickets/Ticket2009.java |  126 -
 tests/src/com/vaadin/tests/tickets/Ticket2011.java |   26 -
 tests/src/com/vaadin/tests/tickets/Ticket2014.java |   63 -
 tests/src/com/vaadin/tests/tickets/Ticket2021.java |  141 --
 tests/src/com/vaadin/tests/tickets/Ticket2022.java |   32 -
 tests/src/com/vaadin/tests/tickets/Ticket2023.java |   51 -
 tests/src/com/vaadin/tests/tickets/Ticket2024.java |   35 -
 tests/src/com/vaadin/tests/tickets/Ticket2026.java |   35 -
 tests/src/com/vaadin/tests/tickets/Ticket2029.java |  139 --
 tests/src/com/vaadin/tests/tickets/Ticket2037.java |   48 -
 tests/src/com/vaadin/tests/tickets/Ticket2038.java |   45 -
 tests/src/com/vaadin/tests/tickets/Ticket2040.java |   87 -
 tests/src/com/vaadin/tests/tickets/Ticket2042.java |   38 -
 tests/src/com/vaadin/tests/tickets/Ticket2043.java |   28 -
 tests/src/com/vaadin/tests/tickets/Ticket2048.java |  103 -
 tests/src/com/vaadin/tests/tickets/Ticket2051.java |   44 -
 tests/src/com/vaadin/tests/tickets/Ticket2053.java |   73 -
 tests/src/com/vaadin/tests/tickets/Ticket2060.java |   50 -
 tests/src/com/vaadin/tests/tickets/Ticket2061.java |  128 --
 .../src/com/vaadin/tests/tickets/Ticket2061b.java  |  200 --
 .../src/com/vaadin/tests/tickets/Ticket2061c.java  |  148 --
 tests/src/com/vaadin/tests/tickets/Ticket2062.java |   41 -
 tests/src/com/vaadin/tests/tickets/Ticket2083.java |   28 -
 tests/src/com/vaadin/tests/tickets/Ticket2090.java |   62 -
 tests/src/com/vaadin/tests/tickets/Ticket2095.java |   29 -
 tests/src/com/vaadin/tests/tickets/Ticket2098.java |   37 -
 tests/src/com/vaadin/tests/tickets/Ticket2099.java |   77 -
 tests/src/com/vaadin/tests/tickets/Ticket2101.java |   21 -
 tests/src/com/vaadin/tests/tickets/Ticket2103.java |  100 -
 tests/src/com/vaadin/tests/tickets/Ticket2104.java |  127 --
 tests/src/com/vaadin/tests/tickets/Ticket2106.java |   38 -
 tests/src/com/vaadin/tests/tickets/Ticket2107.java |   60 -
 tests/src/com/vaadin/tests/tickets/Ticket2117.java |   60 -
 tests/src/com/vaadin/tests/tickets/Ticket2119.java |   92 -
 tests/src/com/vaadin/tests/tickets/Ticket2125.java |   62 -
 tests/src/com/vaadin/tests/tickets/Ticket2126.java |   62 -
 tests/src/com/vaadin/tests/tickets/Ticket2151.java |  110 -
 tests/src/com/vaadin/tests/tickets/Ticket2157.java |  109 -
 tests/src/com/vaadin/tests/tickets/Ticket2178.java |  109 -
 tests/src/com/vaadin/tests/tickets/Ticket2179.java |   56 -
 tests/src/com/vaadin/tests/tickets/Ticket2180.java |   41 -
 tests/src/com/vaadin/tests/tickets/Ticket2181.java |  104 -
 tests/src/com/vaadin/tests/tickets/Ticket2186.java |   54 -
 tests/src/com/vaadin/tests/tickets/Ticket2204.java |  177 --
 tests/src/com/vaadin/tests/tickets/Ticket2208.java |   68 -
 tests/src/com/vaadin/tests/tickets/Ticket2209.java |   42 -
 .../src/com/vaadin/tests/tickets/Ticket2209OL.java |   49 -
 .../com/vaadin/tests/tickets/Ticket2209OL2.java    |   55 -
 tests/src/com/vaadin/tests/tickets/Ticket2215.java |   29 -
 tests/src/com/vaadin/tests/tickets/Ticket2221.java |   91 -
 tests/src/com/vaadin/tests/tickets/Ticket2222.java |   64 -
 .../tickets/Ticket2227OrderedlayoutInTable.java    |   45 -
 tests/src/com/vaadin/tests/tickets/Ticket2231.java |   42 -
 tests/src/com/vaadin/tests/tickets/Ticket2232.java |   74 -
 tests/src/com/vaadin/tests/tickets/Ticket2234.java |   43 -
 tests/src/com/vaadin/tests/tickets/Ticket2235.java |   28 -
 tests/src/com/vaadin/tests/tickets/Ticket2240.java |   48 -
 tests/src/com/vaadin/tests/tickets/Ticket2242.java |   79 -
 tests/src/com/vaadin/tests/tickets/Ticket2244.java |  126 -
 tests/src/com/vaadin/tests/tickets/Ticket2245.java |   17 -
 tests/src/com/vaadin/tests/tickets/Ticket2267.java |   41 -
 tests/src/com/vaadin/tests/tickets/Ticket2271.java |   35 -
 tests/src/com/vaadin/tests/tickets/Ticket2279.java |  209 --
 tests/src/com/vaadin/tests/tickets/Ticket2282.java |   55 -
 tests/src/com/vaadin/tests/tickets/Ticket2283.java |   29 -
 tests/src/com/vaadin/tests/tickets/Ticket2287.java |   32 -
 tests/src/com/vaadin/tests/tickets/Ticket2289.java |   99 -
 tests/src/com/vaadin/tests/tickets/Ticket2292.java |   87 -
 tests/src/com/vaadin/tests/tickets/Ticket2294.java |   56 -
 tests/src/com/vaadin/tests/tickets/Ticket2296.java |   33 -
 tests/src/com/vaadin/tests/tickets/Ticket2297.java |   41 -
 tests/src/com/vaadin/tests/tickets/Ticket2303.java |   43 -
 tests/src/com/vaadin/tests/tickets/Ticket2304.java |   30 -
 tests/src/com/vaadin/tests/tickets/Ticket2310.java |   56 -
 tests/src/com/vaadin/tests/tickets/Ticket2319.java |   66 -
 tests/src/com/vaadin/tests/tickets/Ticket2323.java |   22 -
 tests/src/com/vaadin/tests/tickets/Ticket2325.java |   29 -
 tests/src/com/vaadin/tests/tickets/Ticket2329.java |   42 -
 tests/src/com/vaadin/tests/tickets/Ticket2337.java |   44 -
 tests/src/com/vaadin/tests/tickets/Ticket2339.java |   38 -
 tests/src/com/vaadin/tests/tickets/Ticket2341.java |   47 -
 tests/src/com/vaadin/tests/tickets/Ticket2344.java |   54 -
 tests/src/com/vaadin/tests/tickets/Ticket2347.java |   49 -
 tests/src/com/vaadin/tests/tickets/Ticket2364.java |   37 -
 tests/src/com/vaadin/tests/tickets/Ticket2365.java |   58 -
 tests/src/com/vaadin/tests/tickets/Ticket2398.java |   40 -
 tests/src/com/vaadin/tests/tickets/Ticket2404.java |   28 -
 tests/src/com/vaadin/tests/tickets/Ticket2405.java |   80 -
 tests/src/com/vaadin/tests/tickets/Ticket2406.java |   48 -
 tests/src/com/vaadin/tests/tickets/Ticket2407.java |   21 -
 tests/src/com/vaadin/tests/tickets/Ticket2411.java |   29 -
 tests/src/com/vaadin/tests/tickets/Ticket2415.java |   40 -
 tests/src/com/vaadin/tests/tickets/Ticket2420.java |   54 -
 tests/src/com/vaadin/tests/tickets/Ticket2425.java |   24 -
 tests/src/com/vaadin/tests/tickets/Ticket2426.java |   28 -
 tests/src/com/vaadin/tests/tickets/Ticket2431.java |   52 -
 tests/src/com/vaadin/tests/tickets/Ticket2432.java |   51 -
 tests/src/com/vaadin/tests/tickets/Ticket2434.java |   30 -
 tests/src/com/vaadin/tests/tickets/Ticket2436.java |   36 -
 tests/src/com/vaadin/tests/tickets/Ticket2440.java |   77 -
 tests/src/com/vaadin/tests/tickets/Ticket2526.java |   22 -
 tests/src/com/vaadin/tests/tickets/Ticket2742.java |   42 -
 tests/src/com/vaadin/tests/tickets/Ticket2901.java |   33 -
 tests/src/com/vaadin/tests/tickets/Ticket2998.java |  332 ---
 tests/src/com/vaadin/tests/tickets/Ticket3146.java |   96 -
 tests/src/com/vaadin/tests/tickets/Ticket34.java   |  111 -
 tests/src/com/vaadin/tests/tickets/Ticket5053.java |   35 -
 tests/src/com/vaadin/tests/tickets/Ticket5157.java |   52 -
 tests/src/com/vaadin/tests/tickets/Ticket5952.java |   30 -
 tests/src/com/vaadin/tests/tickets/Ticket6002.java |   88 -
 tests/src/com/vaadin/tests/tickets/Ticket677.java  |  210 --
 tests/src/com/vaadin/tests/tickets/Ticket695.java  |   41 -
 tests/src/com/vaadin/tests/tickets/Ticket736.java  |  194 --
 tests/src/com/vaadin/tests/tickets/Ticket846.java  |   66 -
 tests/src/com/vaadin/tests/tickets/Ticket932.java  |   61 -
 tests/src/com/vaadin/tests/util/Log.java           |   62 -
 .../src/com/vaadin/tests/util/LogPrintWriter.java  |   34 -
 tests/src/com/vaadin/tests/util/LoremIpsum.java    |   13 -
 tests/src/com/vaadin/tests/util/Person.java        |  120 -
 .../src/com/vaadin/tests/util/PersonContainer.java |   94 -
 .../src/com/vaadin/tests/util/PortableRandom.java  |   52 -
 .../src/com/vaadin/tests/util/SampleDirectory.java |   73 -
 .../com/vaadin/tests/util/TestClickListener.java   |   37 -
 tests/src/com/vaadin/tests/util/TestUtils.java     |  140 --
 tests/src/com/vaadin/tests/vaadin_spin.swf         |  Bin 2991 -> 0 bytes
 .../validation/EmptyFieldErrorIndicators.html      |  247 --
 .../validation/EmptyFieldErrorIndicators.java      |  146 --
 .../tests/validation/RequiredErrorMessage.java     |   52 -
 .../validation/RequiredIndicatorForReadOnly.java   |   33 -
 .../tests/validation/TestReadOnlyValidation.java   |   17 -
 .../vaadin/tests/validation/TestValidators.java    |  171 --
 tests/test.xml                                     |   10 +-
 tests/testbench/com/vaadin/tests/Components.java   |  269 +++
 .../com/vaadin/tests/CustomLayoutDemo.java         |  140 ++
 .../com/vaadin/tests/FocusingComponents.java       |   65 +
 tests/testbench/com/vaadin/tests/LayoutDemo.java   |  146 ++
 .../testbench/com/vaadin/tests/ListenerOrder.java  |  163 ++
 tests/testbench/com/vaadin/tests/ModalWindow.java  |   84 +
 .../com/vaadin/tests/NativeWindowing.java          |  127 ++
 .../vaadin/tests/OrderedLayoutSwapComponents.java  |  110 +
 tests/testbench/com/vaadin/tests/Parameters.java   |  127 ++
 .../PerformanceTestBasicComponentRendering.java    |  108 +
 .../PerformanceTestLabelsAndOrderedLayouts.java    |   79 +
 .../tests/PerformanceTestSubTreeCaching.java       |   83 +
 .../com/vaadin/tests/RandomLayoutStress.java       |  187 ++
 .../com/vaadin/tests/ScrollbarStressTest.java      |  237 ++
 .../com/vaadin/tests/StressComponentsInTable.java  |   75 +
 .../com/vaadin/tests/TableChangingDatasource.java  |   53 +
 .../com/vaadin/tests/TableSelectTest.java          |  123 +
 tests/testbench/com/vaadin/tests/TestBench.java    |  330 +++
 .../com/vaadin/tests/TestCaptionWrapper.java       |  204 ++
 .../vaadin/tests/TestComponentAddAndRecursion.java |  128 ++
 .../com/vaadin/tests/TestContainerChanges.java     |  212 ++
 .../testbench/com/vaadin/tests/TestDateField.java  |   74 +
 .../com/vaadin/tests/TestForAlignments.java        |   58 +
 ...ApplicationLayoutThatUsesWholeBrosersSpace.java |   64 +
 .../tests/TestForBasicApplicationLayout.java       |  101 +
 .../tests/TestForChildComponentRendering.java      |   95 +
 .../vaadin/tests/TestForContainerFilterable.java   |   94 +
 .../TestForGridLayoutChildComponentRendering.java  |  103 +
 .../vaadin/tests/TestForMultipleStyleNames.java    |   97 +
 .../com/vaadin/tests/TestForNativeWindowing.java   |  127 ++
 .../tests/TestForPreconfiguredComponents.java      |  184 ++
 .../com/vaadin/tests/TestForRichTextEditor.java    |   66 +
 .../com/vaadin/tests/TestForStyledUpload.java      |  286 +++
 .../com/vaadin/tests/TestForTabSheet.java          |   58 +
 ...tForTablesInitialColumnWidthLogicRendering.java |  158 ++
 tests/testbench/com/vaadin/tests/TestForTrees.java |  166 ++
 .../testbench/com/vaadin/tests/TestForUpload.java  |  433 ++++
 .../com/vaadin/tests/TestForWindowOpen.java        |   59 +
 .../com/vaadin/tests/TestForWindowing.java         |   99 +
 tests/testbench/com/vaadin/tests/TestIFrames.java  |   37 +
 .../com/vaadin/tests/TestMethodProperty.java       |   48 +
 .../tests/TestSelectAndDatefieldInDeepLayouts.java |   98 +
 .../com/vaadin/tests/TestSetVisibleAndCaching.java |   82 +
 .../com/vaadin/tests/TestSizeableIncomponents.java |  318 +++
 .../testbench/com/vaadin/tests/TestSplitPanel.java |   27 +
 .../testbench/com/vaadin/tests/TreeFilesystem.java |  106 +
 .../com/vaadin/tests/TreeFilesystemContainer.java  |  102 +
 .../com/vaadin/tests/UpgradingSample.java          |  171 ++
 .../tests/UsingCustomNewItemHandlerInSelect.java   |   65 +
 .../com/vaadin/tests/UsingObjectsInSelect.java     |  115 +
 .../testbench/com/vaadin/tests/VaadinClasses.java  |  210 ++
 .../com/vaadin/tests/appengine/GAESyncTest.java    |  152 ++
 .../testbench/com/vaadin/tests/appengine/img1.png  |  Bin 0 -> 7433 bytes
 .../tests/application/ApplicationCloseTest.java    |   70 +
 .../tests/application/ErrorInUnloadEvent.html      |   57 +
 .../tests/application/ErrorInUnloadEvent.java      |  103 +
 .../vaadin/tests/application/WebBrowserTest.html   |   50 +
 .../vaadin/tests/application/WebBrowserTest.java   |   98 +
 .../tests/applicationcontext/ChangeSessionId.html  |   37 +
 .../tests/applicationcontext/ChangeSessionId.java  |   69 +
 .../RemoveTransactionListener.java                 |   78 +
 .../tests/applicationservlet/NoMainWindow.java     |   22 +
 .../components/AbstractComponentContainerTest.java |  356 +++
 .../tests/components/AbstractComponentTest.java    |  671 ++++++
 .../components/AbstractComponentTestCase.java      |  219 ++
 .../tests/components/AbstractLayoutTest.java       |  100 +
 .../components/AbstractOrderedLayoutTest.java      |   85 +
 .../vaadin/tests/components/AbstractTestCase.java  |   24 +
 .../vaadin/tests/components/ComponentTestCase.java |  189 ++
 .../CustomComponentwithUndefinedSize.java          |   83 +
 .../com/vaadin/tests/components/ErrorMessages.html |   72 +
 .../com/vaadin/tests/components/ErrorMessages.java |   44 +
 .../tests/components/FocusAndBlurListeners.java    |  122 +
 .../tests/components/FocusFromShortcutAction.java  |   50 +
 .../components/HierarchicalContainerSorting.java   |  109 +
 .../tests/components/LayoutAttachListenerInfo.html |   86 +
 .../tests/components/LayoutAttachListenerInfo.java |  142 ++
 .../com/vaadin/tests/components/LongTooltip.html   |  325 +++
 .../com/vaadin/tests/components/LongTooltip.java   |   49 +
 .../vaadin/tests/components/MultipleDebugIds.java  |   35 +
 .../com/vaadin/tests/components/TestBase.java      |   53 +
 .../absolutelayout/AbsoluteLayoutClipping.html     |   27 +
 .../absolutelayout/AbsoluteLayoutClipping.java     |   42 +
 ...veComponentFromAbsoluteLayoutToInnerLayout.html |   37 +
 ...eComponentsFromAbsoluteLayoutToInnerLayout.java |   58 +
 .../components/abstractcomponent/EnableState.html  |   87 +
 .../components/abstractcomponent/EnableState.java  |   77 +
 .../AbstractFieldCommitWithInvalidValues.html      |   62 +
 .../AbstractFieldCommitWithInvalidValues.java      |   67 +
 .../AbstractFieldDataSourceReadOnly.html           |   42 +
 .../AbstractFieldDataSourceReadOnly.java           |   60 +
 .../abstractfield/AbstractFieldTest.java           |  234 ++
 .../abstractfield/AbstractTextFieldTest.java       |  241 ++
 .../abstractfield/ShortcutAddAndRemove.html        |  209 ++
 .../abstractfield/ShortcutAddAndRemove.java        |   64 +
 .../accordion/AccordionInactiveTabSize.html        |   48 +
 .../accordion/AccordionInactiveTabSize.java        |   41 +
 .../tests/components/accordion/AccordionTest.java  |   12 +
 .../tests/components/accordion/RemoveTabs.html     |  122 +
 .../tests/components/accordion/RemoveTabs.java     |  127 ++
 .../BeanItemContainerGenerator.java                |  103 +
 .../BeanItemContainerNullValues.html               |   64 +
 .../BeanItemContainerNullValues.java               |   47 +
 .../TestBeanItemContainerUsage.html                |   32 +
 .../TestBeanItemContainerUsage.java                |   75 +
 .../components/button/ButtonDisableOnClick.html    |  157 ++
 .../components/button/ButtonErrorMessage.java      |   31 +
 .../components/button/ButtonMouseDetails.java      |   66 +
 .../components/button/ButtonUndefinedWidth.html    |   82 +
 .../components/button/ButtonUndefinedWidth.java    |   40 +
 .../vaadin/tests/components/button/Buttons.html    |   32 +
 .../vaadin/tests/components/button/Buttons.java    |   76 +
 .../vaadin/tests/components/button/Buttons2.java   |   74 +
 .../tests/components/button/DisabledButtons.html   |   32 +
 .../tests/components/button/DisabledButtons.java   |   60 +
 .../tests/components/button/IE7ButtonWithIcon.html |   32 +
 .../tests/components/button/IE7ButtonWithIcon.java |   27 +
 .../button/ShortCutListenerModification.java       |   71 +
 .../button/TooltipForDisabledButton.java           |   48 +
 .../tests/components/caption/EmptyCaptions.html    |   32 +
 .../tests/components/caption/EmptyCaptions.java    |   56 +
 .../tests/components/caption/IconsInCaption.java   |  136 ++
 .../tests/components/caption/LargeCaptionIcon.html |   47 +
 .../tests/components/caption/LargeCaptionIcon.java |   31 +
 .../components/checkbox/CheckBoxNullValue.html     |   77 +
 .../components/checkbox/CheckBoxNullValue.java     |   61 +
 .../tests/components/checkbox/CheckBoxes.html      |  156 ++
 .../tests/components/checkbox/CheckBoxes.java      |   76 +
 .../tests/components/checkbox/CheckBoxes2.java     |   56 +
 .../checkbox/CheckboxCaptionWrapping.html          |   32 +
 .../checkbox/CheckboxCaptionWrapping.java          |   39 +
 .../tests/components/checkbox/CheckboxIcon.java    |   29 +
 .../combobox/ComboBoxClosePopupRetainText.html     |   80 +
 .../ComboBoxCombinedWithEnterShortcut.html         |   64 +
 .../ComboBoxCombinedWithEnterShortcut.java         |   54 +
 .../combobox/ComboBoxDataSourceChange.html         |   97 +
 .../combobox/ComboBoxDataSourceChange.java         |  102 +
 .../combobox/ComboBoxEnablesComboBox.java          |   49 +
 .../components/combobox/ComboBoxInPopupView.java   |   44 +
 .../combobox/ComboBoxInvalidNullSelection.html     |   62 +
 .../combobox/ComboBoxInvalidNullSelection.java     |   76 +
 .../components/combobox/ComboBoxItemIcon.html      |   76 +
 .../components/combobox/ComboBoxItemIcon.java      |   57 +
 .../components/combobox/ComboBoxLargeIcons.html    |  162 ++
 .../components/combobox/ComboBoxLargeIcons.java    |   43 +
 .../components/combobox/ComboBoxNavigation.html    |  397 ++++
 .../components/combobox/ComboBoxNavigation.java    |   30 +
 .../components/combobox/ComboBoxNoTextInput.html   |   75 +
 .../combobox/ComboBoxReapperingOldValue.html       |  116 +
 .../combobox/ComboBoxReapperingOldValue.java       |   69 +
 .../combobox/ComboBoxRemoveAllItems.html           |   91 +
 .../components/combobox/ComboBoxSlowInFF.java      |   67 +
 .../combobox/ComboBoxSuggestionOnDetach.html       |   31 +
 .../combobox/ComboBoxSuggestionOnDetach.java       |   42 +
 .../combobox/ComboBoxTextFieldEventOrder.java      |   38 +
 .../combobox/ComboBoxUndefinedWidthAndIcon.html    |   85 +
 .../combobox/ComboBoxUndefinedWidthAndIcon.java    |   36 +
 .../components/combobox/ComboBoxValueInput.html    |  292 +++
 .../components/combobox/ComboBoxValueInput.java    |   63 +
 .../components/combobox/ComboBoxValueUpdate.java   |   45 +
 .../tests/components/combobox/ComboBoxes2.java     |   95 +
 .../components/combobox/ComboFocusBlurEvents.html  |  133 ++
 .../components/combobox/ComboFocusBlurEvents.java  |   74 +
 .../tests/components/combobox/Comboboxes.html      |  279 +++
 .../tests/components/combobox/Comboboxes.java      |  151 ++
 .../components/combobox/ComboxBoxErrorMessage.java |   26 +
 .../components/combobox/NewItemsESCPress.java      |   40 +
 .../com/vaadin/tests/components/combobox/fi.gif    |  Bin 0 -> 371 bytes
 .../com/vaadin/tests/components/combobox/se.gif    |  Bin 0 -> 367 bytes
 .../components/customcomponent/ClipContent.java    |   56 +
 .../CustomComponentGrowingContent.html             |   32 +
 .../CustomComponentGrowingContent.java             |   42 +
 .../customcomponent/CustomComponentSizeUpdate.java |   44 +
 .../customcomponent/EmbeddedInCustomComponent.html |   37 +
 .../customcomponent/EmbeddedInCustomComponent.java |   40 +
 .../tests/components/datefield/CommitInvalid.html  |  251 ++
 .../tests/components/datefield/CommitInvalid.java  |  139 ++
 .../components/datefield/CustomDateFormat.html     |   27 +
 .../components/datefield/CustomDateFormat.java     |   49 +
 .../components/datefield/CustomDateFormats.html    |  524 +++++
 .../components/datefield/CustomDateFormats.java    |  207 ++
 .../components/datefield/DateFieldEmptyValid.html  |  252 ++
 .../components/datefield/DateFieldEmptyValid.java  |  144 ++
 .../components/datefield/DateFieldInSubWindow.html |   41 +
 .../components/datefield/DateFieldInSubWindow.java |  143 ++
 .../components/datefield/DateFieldLocale.java      |   47 +
 .../datefield/DateFieldMinResolution.java          |   61 +
 .../datefield/DateFieldPopupOffScreen.html         |  157 ++
 .../datefield/DateFieldPopupOffScreen.java         |   62 +
 .../components/datefield/DateFieldReadOnly.html    |   66 +
 .../components/datefield/DateFieldReadOnly.java    |   53 +
 .../tests/components/datefield/DateFieldTest.java  |  137 ++
 .../components/datefield/DateFieldTimezone.html    |   57 +
 .../components/datefield/DateFieldTimezone.java    |   99 +
 .../datefield/DateFieldUnparsableDate.java         |  101 +
 .../DefaultHandleUnparsableDateField.java          |   43 +
 .../components/datefield/DisabledDateFieldWidth    |   52 +
 .../datefield/DisabledDateFieldWidth.java          |   42 +
 .../datefield/InlineDateFieldResolutionMsec.html   |  191 ++
 .../components/datefield/InlineDateFieldTest.java  |   12 +
 .../datefield/InlineDateFieldValueChange.html      |  231 ++
 .../components/datefield/InlineDateFields.java     |  106 +
 .../tests/components/datefield/LenientMode.java    |   81 +
 .../tests/components/datefield/LowResolution.java  |   78 +
 .../datefield/NarrowPopupDateFieldInTable.html     |   27 +
 .../datefield/NarrowPopupDateFieldInTable.java     |   34 +
 .../datefield/PopupDateFieldDisabledReadonly.html  |  158 ++
 .../components/datefield/PopupDateFieldMonth.html  |   51 +
 .../datefield/PopupDateFieldResolutions.html       | 1093 +++++++++
 .../components/datefield/PopupDateFieldTest.java   |   38 +
 .../components/datefield/PopupDateFields.java      |  105 +
 .../datefield/RequiredInvalidDateField.html        |   72 +
 .../datefield/RequiredInvalidDateField.java        |   82 +
 .../datefield/ShowSelectedDateAfterInvalid.html    |   66 +
 .../datefield/ShowSelectedDateAfterInvalid.java    |   57 +
 .../components/datefield/TestDatefieldYear.html    |  146 ++
 .../components/datefield/TestDatefieldYear.java    |   31 +
 ...tSettingTimeOnInitiallyNullInlineDateField.html |  157 ++
 ...stSettingTimeOnInitiallyNullPopupDateField.html |  122 +
 .../components/datefield/ValueThroughProperty.html |   47 +
 .../components/datefield/ValueThroughProperty.java |   74 +
 .../EmbeddedClickListenerRelativeCoordinates.html  |   76 +
 .../EmbeddedClickListenerRelativeCoordinates.java  |   37 +
 .../tests/components/embedded/EmbeddedFlash.java   |   34 +
 .../components/embedded/EmbeddedImageRefresh.java  |  148 ++
 .../tests/components/embedded/EmbeddedPdf.java     |   32 +
 .../tests/components/embedded/EmbeddedTooltip.java |   27 +
 .../tests/components/embedded/FlashIsVisible.html  |   33 +
 .../tests/components/embedded/FlashIsVisible.java  |   31 +
 .../com/vaadin/tests/components/embedded/test.pdf  |  Bin 0 -> 22522 bytes
 .../components/form/FormCaptionClickFocusing.html  |   42 +
 .../components/form/FormCaptionClickFocusing.java  |   29 +
 .../form/FormClearDatasourceRepaint.html           |   62 +
 .../form/FormClearDatasourceRepaint.java           |   71 +
 .../form/FormCommitWithInvalidValues.html          |  117 +
 .../form/FormCommitWithInvalidValues.java          |   69 +
 .../tests/components/form/FormDescription.html     |   47 +
 .../tests/components/form/FormDescription.java     |   42 +
 .../tests/components/form/FormFieldCaptions.java   |   86 +
 .../components/form/FormFieldCaptionsStyles.html   |   27 +
 .../components/form/FormFieldCaptionsStyles.java   |   48 +
 .../components/form/FormNotGettingSmaller.java     |   52 +
 .../components/form/FormRenderingFlicker.java      |   65 +
 .../components/form/FormWithEnterShortCut.java     |   47 +
 .../components/form/FormWithEnterShortcut.html     |   47 +
 .../form/FormWithRelativelySizedLayout.java        |   52 +
 .../UndefinedWideFormWithRelativeWideFooter.html   |   32 +
 .../UndefinedWideFormWithRelativeWideFooter.java   |   36 +
 .../formlayout/FormLayoutReplaceComponent.html     |   42 +
 .../formlayout/FormLayoutReplaceComponent.java     |   57 +
 .../TableInFormLayoutCausesScrolling.html          |   32 +
 .../TableInFormLayoutCausesScrolling.java          |   45 +
 .../MoveComponentFromGridLayoutToInnerLayout.html  |   37 +
 .../MoveComponentsFromGridLayoutToInnerLayout.java |   58 +
 .../label/HundredPercentWideLabelResize.html       |   62 +
 .../label/HundredPercentWideLabelResize.java       |   42 +
 .../vaadin/tests/components/label/LabelModes.html  |   27 +
 .../vaadin/tests/components/label/LabelModes.java  |   58 +
 .../vaadin/tests/components/label/LabelTest.java   |  100 +
 .../tests/components/label/LabelTooltip.html       |   47 +
 .../tests/components/label/LabelTooltip.java       |   53 +
 .../tests/components/label/LabelWrapping.html      |   62 +
 .../tests/components/label/LabelWrapping.java      |   46 +
 .../com/vaadin/tests/components/label/Labels.html  |   66 +
 .../com/vaadin/tests/components/label/Labels.java  |   71 +
 .../com/vaadin/tests/components/link/LinkIcon.java |   30 +
 .../tests/components/link/LinkTargetSize.java      |   30 +
 .../tests/components/link/LinkToPercentage.html    |   27 +
 .../tests/components/link/LinkToPercentage.java    |   51 +
 .../components/listselect/ListSelectSelection.html |  165 ++
 .../tests/components/listselect/ListSelects.java   |   44 +
 .../loginform/CustomizedLoginFormTest.html         |   32 +
 .../loginform/CustomizedLoginFormTest.java         |   24 +
 .../tests/components/loginform/LoginFormTest.html  |  142 ++
 .../tests/components/loginform/LoginFormTest.java  |  117 +
 .../loginform/LoginFormWithMultipleWindows.java    |   56 +
 .../com/vaadin/tests/components/media/Media.java   |   78 +
 .../components/menubar/HiddenAndDisabledMenus.java |   34 +
 .../components/menubar/IconsInRootMenuBar.html     |  148 ++
 .../tests/components/menubar/IconsInSubMenus.html  |  101 +
 .../tests/components/menubar/MenuBarHtmlItems.html |   72 +
 .../tests/components/menubar/MenuBarHtmlItems.java |   63 +
 .../components/menubar/MenuBarInSplitPanel.java    |   47 +
 .../components/menubar/MenuBarItemsCheckable.html  |  141 ++
 .../tests/components/menubar/MenuBarLongMenus.html |  121 +
 .../components/menubar/MenuBarNavigation.java      |   62 +
 .../menubar/MenuBarNavigationKeyboard.html         |  212 ++
 .../components/menubar/MenuBarNavigationMouse.html |  137 ++
 .../tests/components/menubar/MenuBarResize.html    |  127 ++
 .../menubar/MenuBarRootItemSelectWithKeyboard.html |   52 +
 .../menubar/MenuBarRootItemSelectWithKeyboard.java |   38 +
 .../menubar/MenuBarRunsOutOfBrowser.html           |   27 +
 .../menubar/MenuBarRunsOutOfBrowser.java           |   42 +
 .../tests/components/menubar/MenuBarTest.java      |  338 +++
 .../tests/components/menubar/MenuBarToolTips.html  |  122 +
 .../tests/components/menubar/MenuBarToolTips.java  |   50 +
 .../vaadin/tests/components/menubar/Menubars.html  |  102 +
 .../vaadin/tests/components/menubar/Menubars.java  |   88 +
 .../nativebutton/NativeButtonDisableOnClick.html   |  156 ++
 .../components/nativebutton/NativeButtonTest.java  |   12 +
 .../components/nativeselect/NativeSelects.java     |   42 +
 .../CloseErrorNotificationWithEscape.html          |   47 +
 .../components/notification/Notifications.html     |  296 +++
 .../components/notification/Notifications.java     |   58 +
 .../notification/NotificationsHtmlAllowed.html     |   96 +
 .../notification/NotificationsHtmlAllowed.java     |   76 +
 .../optiongroup/DisabledOptionGroupItems.html      |   53 +
 .../optiongroup/DisabledOptionGroupItems.java      |   91 +
 .../optiongroup/HtmlOptionGroupItems.html          |   42 +
 .../optiongroup/HtmlOptionGroupItems.java          |  104 +
 .../optiongroup/OptionGroupItemIcons.html          |   67 +
 .../OptionGroupMultipleValueChange.java            |   41 +
 .../tests/components/optiongroup/OptionGroups.java |   67 +
 .../orderedlayout/HorizontalLayoutTest.java        |   14 +
 .../orderedlayout/LayoutClickListenerTest.html     |   92 +
 .../orderedlayout/LayoutClickListenerTest.java     |   97 +
 .../orderedlayout/ReplaceComponentNPE.html         |   47 +
 .../orderedlayout/ReplaceComponentNPE.java         |   40 +
 .../orderedlayout/VerticalLayoutTest.java          |   14 +
 .../VerticalLayoutWidthCalculation.html            |   36 +
 .../VerticalLayoutWidthCalculation.java            |   63 +
 .../PanelClickListenerRelativeCoordinates.html     |   77 +
 .../PanelClickListenerRelativeCoordinates.java     |   36 +
 .../components/panel/PanelShouldNotScroll.html     |   46 +
 .../components/panel/PanelShouldNotScroll.java     |   56 +
 .../panel/PanelShouldRemoveActionHandler.java      |  118 +
 .../vaadin/tests/components/panel/PanelTest.java   |   15 +
 .../passwordfield/PasswordFieldBasicStates.html    |  128 ++
 .../passwordfield/PasswordFieldTest.java           |   20 +
 .../popupview/PopupViewLabelResized.java           |   37 +
 .../components/popupview/PopupViewNullValues.java  |  103 +
 .../components/popupview/PopupViewOffScreen.html   |   47 +
 .../components/popupview/PopupViewOffScreen.java   |   80 +
 .../popupview/PopupViewShouldCloseOnTabOut.html    |   66 +
 .../popupview/PopupViewShouldCloseOnTabOut.java    |   53 +
 .../components/popupview/PopupViewWithRTE.java     |   50 +
 .../ProgressIndicatorInvisible.java                |   52 +
 .../components/richtextarea/RichTextAreaSize.html  |   32 +
 .../components/richtextarea/RichTextAreaSize.java  |   44 +
 .../components/richtextarea/RichTextAreaTest.java  |   54 +
 .../RichTextAreaWithKeyboardShortcuts.java         |   77 +
 .../components/richtextarea/RichTextAreas.html     |   51 +
 .../components/richtextarea/RichTextAreas.java     |   40 +
 .../components/select/AbstractSelectTestCase.java  |  240 ++
 .../select/ComboBoxAddWhileFiltering.java          |   56 +
 .../tests/components/select/MultiSelect.java       |   32 +
 .../tests/components/select/NativeSelects.html     |  116 +
 .../tests/components/select/NativeSelects.java     |  118 +
 .../components/select/NullSelectionItemId.java     |   77 +
 .../components/select/SelectDisplaysOldValue.html  |  144 ++
 .../components/select/SelectDisplaysOldValue.java  |  163 ++
 .../components/select/SelectIconPlacement.html     |  107 +
 .../components/select/SelectIconPlacement.java     |   42 +
 .../vaadin/tests/components/select/SelectTest.java |   13 +
 .../select/TwinColSelectCaptionStyles.html         |   37 +
 .../select/TwinColSelectCaptionStyles.java         |   42 +
 .../select/TwinColSelectDualCaptions.html          |  430 ++++
 .../tests/components/select/TwinColSelectTest.java |   65 +
 .../tests/components/select/TwinColSelects.java    |   48 +
 .../select/TwinColSelectsDisabledReadonly.html     |   77 +
 .../components/slider/SliderKeyboardFocus.html     |   57 +
 .../components/slider/SliderKeyboardFocus.java     |   26 +
 .../vaadin/tests/components/slider/SliderTest.java |   74 +
 .../splitpanel/AbstractSplitPanelTest.java         |  127 ++
 .../HorizontalSplitPanelBasicStates.html           |  213 ++
 .../HorizontalSplitPanelMoveSplitter.html          |  134 ++
 .../HorizontalSplitPanelSplitterClick.html         |   96 +
 .../splitpanel/HorizontalSplitPanels.java          |   13 +
 .../splitpanel/SplitPanelExtraScrollbars.html      |   42 +
 .../splitpanel/SplitPanelExtraScrollbars.java      |   68 +
 .../splitpanel/SplitPanelInModalWindow.java        |   36 +
 .../splitpanel/SplitPanelReversePosition.html      |   57 +
 .../splitpanel/SplitPanelReversePosition.java      |   98 +
 .../splitpanel/SplitPanelSplitterWidth.java        |   64 +
 .../splitpanel/SplitPanelSwapComponents.html       |   32 +
 .../splitpanel/SplitPanelSwapComponents.java       |   48 +
 .../splitpanel/SplitPanelWidthOnResize.java        |   43 +
 .../splitpanel/SplitPanelWithRichTextArea.java     |   37 +
 .../tests/components/splitpanel/SplitPanels.java   |   37 +
 .../splitpanel/VerticalSplitPanelBasicStates.html  |  214 ++
 .../splitpanel/VerticalSplitPanelMoveSplitter.html |  134 ++
 .../VerticalSplitPanelSplitterClick.html           |   96 +
 .../components/splitpanel/VerticalSplitPanels.java |   13 +
 .../components/table/ActionsOnTableBackground.html |  125 +
 .../components/table/CellStyleGeneratorTest.java   |   62 +
 .../components/table/ClippedComponentsInTable.html |   32 +
 .../components/table/ClippedComponentsInTable.java |   40 +
 .../table/CollapseIndicatorOverlapsColumn.html     |   62 +
 .../table/CollapseIndicatorOverlapsColumn.java     |   47 +
 .../table/ColumnCollapsingAndColumnExpansion.html  |  158 ++
 .../table/ColumnCollapsingAndColumnExpansion.java  |   91 +
 .../tests/components/table/ColumnExpandRatio.html  |   32 +
 .../tests/components/table/ColumnExpandRatio.java  |   70 +
 .../table/ColumnExpandWithFixedColumns.html        |   32 +
 .../table/ColumnExpandWithFixedColumns.java        |   45 +
 .../table/ColumnGeneratorAddingOrder.java          |   52 +
 .../components/table/ColumnHeaderAlignments.java   |   95 +
 .../tests/components/table/ColumnReorderEvent.java |   97 +
 .../tests/components/table/ColumnResizeEvent.java  |  108 +
 .../tests/components/table/ColumnWidths.java       |   69 +
 .../ContainerChangeWithPartlySamePropertyIds.html  |   57 +
 .../ContainerChangeWithPartlySamePropertyIds.java  |  107 +
 .../components/table/ContainerSizeChange.html      |   82 +
 .../components/table/ContainerSizeChange.java      |   91 +
 .../components/table/CtrlShiftMultiselect.java     |   53 +
 .../table/DisabledTableKeyboardNavigation.html     |   67 +
 .../table/DisabledTableKeyboardNavigation.java     |   54 +
 ...isabledTableShouldNotSendPageLengthUpdates.java |   45 +
 .../tests/components/table/EditableModeChange.html |   56 +
 .../tests/components/table/EditableModeChange.java |   99 +
 .../tests/components/table/EditableTableLeak.java  |  144 ++
 .../vaadin/tests/components/table/EmptyTable.html  |   72 +
 .../tests/components/table/FixedHeightTable.html   |   32 +
 .../tests/components/table/FixedHeightTable.java   |   39 +
 .../com/vaadin/tests/components/table/Footer.html  |  226 ++
 .../com/vaadin/tests/components/table/Footer.java  |  134 ++
 .../vaadin/tests/components/table/FooterClick.html |  123 +
 .../vaadin/tests/components/table/FooterClick.java |  108 +
 .../vaadin/tests/components/table/HeaderClick.html |  168 ++
 .../vaadin/tests/components/table/HeaderClick.java |  102 +
 .../table/HeaderPositionWhenSorting.html           |   62 +
 .../tests/components/table/HeaderSyncOnScroll.html |  127 ++
 .../components/table/HeaderUpdateWhenNoRows.html   |   47 +
 .../components/table/HeaderUpdateWhenNoRows.java   |   47 +
 .../table/HiddenColumnsExpandRatios.java           |   75 +
 .../tests/components/table/HugeRowCount.java       |   86 +
 .../tests/components/table/ItemClickEvents.html    |  479 ++++
 .../tests/components/table/ItemClickEvents.java    |  153 ++
 .../vaadin/tests/components/table/KeyControl.java  |  135 ++
 .../table/KeyboardNavigationDatasourceChange.java  |  137 ++
 .../KeyboardNavigationWithChangingContent.java     |   84 +
 .../table/LabelEmbeddedClickThroughForTable.html   |  129 ++
 .../table/LabelEmbeddedClickThroughForTable.java   |   68 +
 .../tests/components/table/MissingScrollbar.html   |   42 +
 .../tests/components/table/MissingScrollbar.java   |   89 +
 .../components/table/ModifyContainerProperty.html  |   42 +
 .../components/table/ModifyContainerProperty.java  |   60 +
 .../table/MultiSelectWithNotIdentityEqualIds.java  |   61 +
 .../table/NotselectablePaintSelections.java        |   55 +
 .../tests/components/table/OddEvenRowStyling.html  |   52 +
 .../tests/components/table/OddEvenRowStyling.java  |   36 +
 .../components/table/PropertyValueChange.html      |   87 +
 .../components/table/PropertyValueChange.java      |  156 ++
 .../table/ResizeColumnAfterScrolling.html          |   57 +
 .../tests/components/table/RowAdditionTest.java    |   59 +
 .../tests/components/table/RowGenerators.java      |   59 +
 .../table/SafariRenderingBugWhiteSpace.java        |   64 +
 .../table/SelectingItemScrollsRight.java           |   41 +
 .../tests/components/table/SortLongTable.html      |   42 +
 .../tests/components/table/SortLongTable.java      |   43 +
 .../table/TableAndBrowserContextMenu.java          |  150 ++
 .../table/TableCacheBuildEfficiency.java           |   59 +
 .../TableClickAndDragOnIconAndComponents.html      |  132 ++
 .../TableClickAndDragOnIconAndComponents.java      |  142 ++
 .../components/table/TableColumnAlignment.html     |  305 +++
 .../tests/components/table/TableColumnHeaders.html |  244 ++
 .../tests/components/table/TableColumnIcons.html   |  185 ++
 .../table/TableColumnResizeContentsWidth.html      |   61 +
 .../table/TableColumnResizeContentsWidth.java      |   56 +
 .../tests/components/table/TableColumnSorting.html |  208 ++
 .../components/table/TableContextMenuAndIcons.html |  187 ++
 .../components/table/TableContextMenuOnField.java  |   93 +
 .../tests/components/table/TableDragColumn.html    |   80 +
 .../components/table/TableExtraScrollbars.java     |   61 +
 .../components/table/TableGeneratedColumns.html    |  223 ++
 .../tests/components/table/TableGeneratedRows.html |  107 +
 .../table/TableGeneratedStringColumns.html         |  152 ++
 .../components/table/TableHeaderShifting.java      |   40 +
 .../table/TableHeightWhenHidingHeaders.html        |   57 +
 .../table/TableHeightWhenHidingHeaders.java        |   68 +
 .../table/TableItemDescriptionGeneratorTest.java   |   75 +
 .../tests/components/table/TableItemIcon.java      |   38 +
 .../components/table/TableLastRowMissing.html      |   32 +
 .../components/table/TableLastRowMissing.java      |   35 +
 .../table/TableModifcationsWhenScrolledRight.java  |   51 +
 .../table/TableModificationsWhenScrolledRight.html |   52 +
 .../components/table/TableMultiSelectMouse.html    |  361 +++
 .../components/table/TableMultiSelectSimple.html   |   62 +
 .../components/table/TableMultiSelectSimple.java   |   62 +
 .../table/TablePageLengthCalculation.java          |   50 +
 .../components/table/TablePageLengthUpdate.html    |  127 ++
 .../components/table/TablePageLengthUpdate.java    |   76 +
 .../table/TableRemoveActionHandlers.html           |  161 ++
 .../tests/components/table/TableRowHeight.html     |   32 +
 .../tests/components/table/TableRowHeight.java     |  122 +
 .../tests/components/table/TableRowHeight2.html    |   57 +
 .../tests/components/table/TableRowHeight2.java    |   58 +
 .../tests/components/table/TableRowHeight3.html    |   27 +
 .../tests/components/table/TableRowHeight3.java    |   61 +
 .../tests/components/table/TableScrollOnFocus.html |   47 +
 .../tests/components/table/TableScrollOnFocus.java |   49 +
 .../tests/components/table/TableScrolling.html     |  121 +
 .../components/table/TableScrollsOnSelection.html  |   45 +
 .../components/table/TableScrollsOnSelection.java  |   36 +
 .../components/table/TableSelectPagingOff.java     |   69 +
 .../table/TableShouldNotEatValueChanges.html       |   77 +
 .../table/TableShouldNotEatValueChanges.java       |   62 +
 .../tests/components/table/TableSingleSelect.html  |   67 +
 .../tests/components/table/TableSingleSelect.java  |   54 +
 .../tests/components/table/TableSorting.java       |   67 +
 .../components/table/TableToggleVisibility.html    |  116 +
 .../components/table/TableToggleVisibility.java    |  169 ++
 .../tests/components/table/TableTooltips.html      |   77 +
 .../tests/components/table/TableUndefinedSize.html |  127 ++
 .../tests/components/table/TableUndefinedSize.java |  165 ++
 .../components/table/TableUnregisterComponent.html |   52 +
 .../components/table/TableUnregisterComponent.java |  102 +
 .../table/TableVisibleColumnsUpdate.html           |   77 +
 .../table/TableVisibleColumnsUpdate.java           |   57 +
 .../components/table/TableWithManyColumns.html     |   56 +
 .../components/table/TableWithManyColumns.java     |   42 +
 .../com/vaadin/tests/components/table/Tables.java  |  838 +++++++
 .../components/table/TestCurrentPageFirstItem.java |   60 +
 .../components/table/TextFieldRelativeWidth.html   |   63 +
 .../components/table/TextFieldRelativeWidth.java   |  129 ++
 .../components/table/UncollapsedCollumnWidth.html  |   37 +
 .../components/table/UncollapsedCollumnWidth.java  |   42 +
 .../components/table/WideSelectableTable.java      |   45 +
 .../com/vaadin/tests/components/table/fi.gif       |  Bin 0 -> 371 bytes
 .../com/vaadin/tests/components/table/se.gif       |  Bin 0 -> 367 bytes
 .../components/tabsheet/AddAndRemoveTabs.html      |  126 +
 .../components/tabsheet/AddAndRemoveTabs.java      |   60 +
 .../components/tabsheet/PreventTabChange.html      |   77 +
 .../components/tabsheet/PreventTabChange.java      |   67 +
 .../tests/components/tabsheet/RemoveTabs.java      |  145 ++
 .../components/tabsheet/RemoveTabsTabsheet.html    |  138 ++
 .../tabsheet/TabGetAndReplaceComponent.html        |   72 +
 .../tabsheet/TabGetAndReplaceComponent.java        |   54 +
 .../tabsheet/TabSheetBasicOperations.html          |  330 +++
 .../components/tabsheet/TabSheetCaptions.html      |   77 +
 .../components/tabsheet/TabSheetCaptions.java      |   64 +
 .../components/tabsheet/TabSheetDisabling.html     |  162 ++
 .../components/tabsheet/TabSheetDisabling.java     |   62 +
 .../tabsheet/TabSheetDiscardsMovedComponents.html  |   51 +
 .../tabsheet/TabSheetDiscardsMovedComponents.java  |   52 +
 .../tests/components/tabsheet/TabSheetIcons.html   |   27 +
 .../tests/components/tabsheet/TabSheetIcons.java   |   54 +
 .../tabsheet/TabSheetIndexOperations.html          |   52 +
 .../tabsheet/TabSheetIndexOperations.java          |   75 +
 .../tests/components/tabsheet/TabSheetMinimal.java |   39 +
 .../components/tabsheet/TabSheetTabStyleNames.html |   42 +
 .../components/tabsheet/TabSheetTabStyleNames.java |   51 +
 .../components/tabsheet/TabSheetTabTheming.java    |   27 +
 .../tests/components/tabsheet/TabSheetTest.java    |  202 ++
 .../tabsheet/TabSheetWithoutTabCaption.html        |   32 +
 .../tabsheet/TabSheetWithoutTabCaption.java        |   28 +
 .../tests/components/tabsheet/TabsheetNPE.java     |   59 +
 .../components/tabsheet/TabsheetScrolling.html     |  106 +
 .../components/tabsheet/TabsheetScrolling.java     |   74 +
 .../tests/components/tabsheet/TabsheetTooltip.html |   82 +
 .../tests/components/tabsheet/TabsheetTooltip.java |   37 +
 .../tabsheet/VerticalScrollbarPosition.html        |   77 +
 .../tabsheet/VerticalScrollbarPosition.java        |   40 +
 .../components/textarea/TextAreaBasicStates.html   |  128 ++
 .../textarea/TextAreaNullRepresentation.html       |  111 +
 .../tests/components/textarea/TextAreaTest.java    |   43 +
 .../components/textarea/TextAreaWordwrap.html      |   56 +
 .../vaadin/tests/components/textarea/Wordwrap.java |   59 +
 .../EnterShortcutMaySendInputPromptAsValue.java    |   57 +
 .../tests/components/textfield/IE6Cursor.java      |   28 +
 .../OutOfSyncIssueWithKeyboardShortcut.java        |  192 ++
 .../textfield/SelectionAndCursorPosition.html      |  222 ++
 .../textfield/SelectionAndCursorPosition.java      |  105 +
 .../tests/components/textfield/SetTabIndex.html    |  132 ++
 .../tests/components/textfield/SetTabIndex.java    |   54 +
 .../components/textfield/SizedTextFields.java      |   72 +
 .../components/textfield/TextChangeEvents.java     |  137 ++
 .../components/textfield/TextChangeEvents2.java    |  175 ++
 .../textfield/TextChangeEventsEternalLoop.html     |   37 +
 .../textfield/TextChangeEventsEternalLoop.java     |   32 +
 ...extChangeEventsWithNonImmediateValueChange.java |   55 +
 .../textfield/TextChangeTimeoutAfterDetach.html    |   48 +
 .../textfield/TextChangeTimeoutAfterDetach.java    |   48 +
 .../components/textfield/TextFieldBasicStates.html |  128 ++
 .../textfield/TextFieldEagerRepaint.html           |   81 +
 .../textfield/TextFieldEagerRepaint.java           |   53 +
 .../textfield/TextFieldFocusAndBlurListeners.java  |   95 +
 .../textfield/TextFieldInLayoutInTable.html        |   32 +
 .../textfield/TextFieldInLayoutInTable.java        |   34 +
 .../components/textfield/TextFieldMaxLength.html   |  196 ++
 .../textfield/TextFieldNullRepresentation.html     |  111 +
 .../TextFieldNullRepresentationAndSelection.html   |  172 ++
 .../components/textfield/TextFieldSecret.html      |  196 ++
 .../tests/components/textfield/TextFieldTest.java  |   59 +
 .../textfield/TextFieldTextChangeEvent.htm         |  359 +++
 .../tests/components/textfield/TextFields.html     |   81 +
 .../tests/components/textfield/TextFields.java     |   65 +
 .../components/tree/ActionsOnTreeBackground.html   |  105 +
 .../components/tree/CtrlShiftMultiselect.java      |  119 +
 .../tests/components/tree/ExpandCollapseTree.html  |   66 +
 .../tests/components/tree/ExpandCollapseTree.java  |  119 +
 .../tests/components/tree/ItemStyleGenerator.java  |   52 +
 .../components/tree/PreselectedTreeVisible.html    |   27 +
 .../components/tree/PreselectedTreeVisible.java    |   36 +
 .../tests/components/tree/TreeConnectors.html      |   67 +
 .../tests/components/tree/TreeConnectors.java      |  131 ++
 .../tests/components/tree/TreeContainerChange      |   47 +
 .../tests/components/tree/TreeContainerChange.java |  101 +
 .../components/tree/TreeContextMenuAndIcons.html   |  156 ++
 .../tests/components/tree/TreeFiltering.html       |   81 +
 .../tests/components/tree/TreeFiltering.java       |  126 +
 .../tests/components/tree/TreeFocusGaining.html    |   77 +
 .../tests/components/tree/TreeFocusGaining.java    |   62 +
 .../components/tree/TreeHorizontalResize.html      |  103 +
 .../components/tree/TreeHorizontalResize.java      |   87 +
 .../components/tree/TreeItemClickListening.html    |   81 +
 .../components/tree/TreeItemClickListening.java    |   61 +
 .../components/tree/TreeKeyboardNavigationScroll   |   87 +
 .../tree/TreeKeyboardNavigationScrolls.java        |   54 +
 .../tree/TreeKeyboardNavigationValidators          |   97 +
 .../tree/TreeKeyboardNavigationValidators.java     |   54 +
 .../components/tree/TreeNodeCaptionWrapping.html   |   42 +
 .../components/tree/TreeNodeCaptionWrapping.java   |   44 +
 .../tests/components/tree/TreePerformanceTest.java |   75 +
 .../tests/components/tree/TreeScrolling.html       |   36 +
 .../tests/components/tree/TreeScrolling.java       |   54 +
 .../components/tree/TreeScrollingOnSelection.html  |   76 +
 .../components/tree/TreeScrollingOnSelection.java  |   72 +
 .../vaadin/tests/components/tree/TreeToolTips.java |   89 +
 .../vaadin/tests/components/tree/TreeTooltip.html  |   52 +
 .../tests/components/tree/TreeWithIcons.html       |   62 +
 .../tests/components/tree/TreeWithIcons.java       |   69 +
 .../tree/TreeWithPreselectedItemNotShown.java      |   52 +
 .../com/vaadin/tests/components/tree/Trees.java    |  391 ++++
 .../treetable/ExpandAndCollapseListeners.html      |  181 ++
 .../treetable/ExpandAnimationsInChameleon.java     |  126 +
 .../components/treetable/KeepAllItemsVisible.html  |   52 +
 .../components/treetable/KeepAllItemsVisible.java  |  133 ++
 .../components/treetable/ProgrammaticSelect.java   |  128 ++
 .../treetable/TreeTableExpandWithRowStyle.html     |   72 +
 .../treetable/TreeTableGeneratedColumns.html       |  152 ++
 .../treetable/TreeTableGeneratedRows.html          |  182 ++
 .../components/treetable/TreeTableOutOfSync.html   |   37 +
 .../components/treetable/TreeTableOutOfSync.java   |   53 +
 .../TreeTablePartialUpdates-LongScroll.html        |   52 +
 .../treetable/TreeTablePartialUpdates.java         |   63 +
 .../treetable/TreeTableSetCollapsed.html           |   36 +
 .../treetable/TreeTableSetCollapsed.java           |   46 +
 .../tests/components/treetable/TreeTableTest.java  |  300 +++
 .../twincolselect/TwinColSelectSelection.html      |  132 ++
 .../components/twincolselect/TwinColSelects.java   |   64 +
 .../tests/components/upload/ForceSubmit.java       |   85 +
 .../upload/TestImmediateUploadInFormLayout.java    |   53 +
 .../vaadin/tests/components/upload/TestUpload.java |   59 +
 .../upload/TestUploadAndDisableOnSuccess.java      |  102 +
 .../components/upload/TestUploadFilename.java      |   61 +
 .../window/CenteredWindowWithUndefinedSize.html    |   32 +
 .../window/CenteredWindowWithUndefinedSize.java    |   33 +
 .../tests/components/window/CloseSubWindow.html    |   91 +
 .../tests/components/window/CloseSubWindow.java    |  129 ++
 .../components/window/EmbeddedInSubWindow.html     |   32 +
 .../components/window/EmbeddedInSubWindow.java     |   39 +
 .../tests/components/window/ExecuteJavaScript.java |   46 +
 .../components/window/ExtraLargeSubWindow.html     |   27 +
 .../components/window/ExtraLargeSubWindow.java     |   32 +
 .../tests/components/window/ExtraWindowShown.html  |   61 +
 .../tests/components/window/ExtraWindowShown.java  |   53 +
 .../tests/components/window/FullSizedWindow.java   |   31 +
 .../window/HugeWindowShouldBeClosable.java         |   27 +
 .../tests/components/window/LazyWindowResize.java  |  108 +
 .../tests/components/window/LongNotifications.java |   79 +
 .../components/window/ModalWindowNativeSelect.java |   32 +
 .../components/window/PositionedSubWindows.java    |   41 +
 .../tests/components/window/SubWindowFocus.java    |   83 +
 .../window/SubWindowFocusAndBlurListeners.java     |   82 +
 .../tests/components/window/SubWindowOrder.html    |  137 ++
 .../tests/components/window/SubWindowOrder.java    |   80 +
 .../components/window/SubWindowPositionUpdate.java |   44 +
 .../tests/components/window/SubWindows-runo.html   |   87 +
 .../vaadin/tests/components/window/SubWindows.html |   87 +
 .../vaadin/tests/components/window/SubWindows.java |  111 +
 .../components/window/SubwindowDraggability.java   |   46 +
 .../components/window/SubwindowInvalidLayout.java  |   35 +
 .../window/TestTooSmallSubwindowSize.html          |   32 +
 .../window/TestTooSmallSubwindowSize.java          |   44 +
 .../tests/components/window/WindowCaptionTest.html |   77 +
 .../tests/components/window/WindowClickEvents.html |   77 +
 .../tests/components/window/WindowClickEvents.java |   88 +
 .../components/window/WindowResizeListener.java    |  102 +
 .../window/WindowScrollingComponentIntoView.java   |  137 ++
 .../tests/components/window/WindowScrollingUp.java |   39 +
 .../window/WindowShouldRemoveActionHandler.html    |  107 +
 .../window/WindowShouldRemoveActionHandler.java    |  116 +
 .../tests/components/window/WindowStyleNames.java  |   54 +
 .../vaadin/tests/components/window/WindowTest.java |   19 +
 .../containers/BeanItemContainerFilteringTest.java |  172 ++
 .../tests/containers/BeanItemContainerTest.java    |   75 +
 .../containers/HierarchicalWrapperOrdering.java    |  127 ++
 .../containers/IndexedContainerFilteringTest.java  |  139 ++
 .../containers/TableWithFileSystemContainer.java   |   33 +
 .../vaadin/tests/containers/TestItemSorter.java    |   94 +
 .../sqlcontainer/CheckboxUpdateProblem.java        |  190 ++
 .../sqlcontainer/MassInsertMemoryLeakTestApp.java  |  134 ++
 .../com/vaadin/tests/dd/AcceptAnythingWindow.java  |  136 ++
 .../com/vaadin/tests/dd/AcceptFromComponent.java   |  153 ++
 .../vaadin/tests/dd/ActiveDragSourceClassName.java |  117 +
 .../vaadin/tests/dd/CustomDDImplementation.java    |   84 +
 tests/testbench/com/vaadin/tests/dd/DDTest1.java   |  267 +++
 tests/testbench/com/vaadin/tests/dd/DDTest2.java   |  312 +++
 tests/testbench/com/vaadin/tests/dd/DDTest4.java   |  161 ++
 tests/testbench/com/vaadin/tests/dd/DDTest5.java   |  177 ++
 tests/testbench/com/vaadin/tests/dd/DDTest6.java   |  548 +++++
 tests/testbench/com/vaadin/tests/dd/DDTest7.java   |  189 ++
 tests/testbench/com/vaadin/tests/dd/DDTest8.java   |  178 ++
 .../com/vaadin/tests/dd/DragAndDropFiles.java      |  124 +
 .../com/vaadin/tests/dd/DragDropPane.java          |  179 ++
 .../dd/HorizontalLayoutSortableWithWrappers.java   |  109 +
 .../HorizontalSortableCssLayoutWithWrappers.java   |  103 +
 .../com/vaadin/tests/dd/TreeDragStart.java         |  324 +++
 .../com/vaadin/tests/dd/VMyDragSource.java         |   92 +
 .../com/vaadin/tests/dd/VMyDropTarget.java         |   52 +
 .../com/vaadin/tests/debug/DebugWindowPresent.html |   36 +
 .../com/vaadin/tests/debug/DebugWindowPresent.java |   22 +
 .../componentlocator/TestDetachedNotPresent.html   |   62 +
 .../integration/IntegrationTestApplication.java    |   47 +
 .../integration/JSR286PortletApplication.java      |  160 ++
 .../vaadin/tests/integration/LiferayThemeDemo.java |  721 ++++++
 .../testbench/com/vaadin/tests/integration/fi.gif  |  Bin 0 -> 371 bytes
 .../testbench/com/vaadin/tests/integration/se.gif  |  Bin 0 -> 367 bytes
 .../tests/layouts/AbsoluteLayoutAddRemove.java     |   50 +
 .../vaadin/tests/layouts/CaptionsInLayouts.java    |  277 +++
 .../ComplexGLColumnExpansionWithColSpan.html       |   32 +
 .../ComplexGLColumnExpansionWithColSpan.java       |   80 +
 .../tests/layouts/CssLayoutRemoveComponent.html    |   37 +
 .../tests/layouts/CssLayoutRemoveComponent.java    |   42 +
 .../CssLayoutRemoveComponentWithCaption.java       |   41 +
 .../layouts/CssLayoutSizeChangePropagation.java    |   61 +
 .../vaadin/tests/layouts/DeepComponentTrees.java   |  114 +
 .../layouts/FormLayoutWithInvisibleComponent.java  |   49 +
 .../vaadin/tests/layouts/GridLayoutCaptions.java   |  221 ++
 .../layouts/GridLayoutExpandRatioModification.java |   83 +
 .../tests/layouts/GridLayoutInsidePanel.java       |   52 +
 .../tests/layouts/GridLayoutInsidePanel2.java      |   28 +
 .../tests/layouts/GridLayoutMoveComponent.html     |   57 +
 .../tests/layouts/GridLayoutMoveComponent.java     |   66 +
 .../com/vaadin/tests/layouts/GridLayoutNPE.java    |   72 +
 .../tests/layouts/GridLayoutRemoveFinalRow.java    |   46 +
 .../tests/layouts/GridLayoutSpanExpansion.html     |   26 +
 .../tests/layouts/GridLayoutSpanExpansion.java     |   67 +
 .../tests/layouts/GridLayoutWidthChange.html       |   47 +
 .../tests/layouts/GridLayoutWidthChange.java       |   64 +
 .../tests/layouts/HiddenHorizontalLayout.java      |   57 +
 .../MovingComponentsWhileOldParentInvisible.html   |  514 +++++
 .../MovingComponentsWhileOldParentInvisible.java   |  116 +
 .../vaadin/tests/layouts/MovingInvisibleField.html |   47 +
 .../vaadin/tests/layouts/MovingInvisibleField.java |   56 +
 .../vaadin/tests/layouts/OrderedLayoutBasics.java  | 1202 ++++++++++
 .../layouts/OrderedLayoutCSSCompatibility.java     |   31 +
 .../vaadin/tests/layouts/TestAbsoluteLayout.java   |  314 +++
 .../tests/layouts/TestLayoutClickListeners.html    |  190 ++
 .../tests/layouts/TestLayoutClickListeners.java    |  208 ++
 .../tests/layouts/TestLayoutPerformance.java       |  133 ++
 .../tests/layouts/TreeWithBordersInLayout.html     |   27 +
 .../tests/layouts/TreeWithBordersInLayout.java     |   42 +
 .../VerticalLayoutExpandRatioModification.java     |   77 +
 .../VerticalLayoutWithRelativeSizeComponents.java  |   38 +
 ...tWithRelativeSizeComponentsInitiallyHidden.java |   58 +
 .../tests/layouts/WidgetImplementationSwap.html    |  182 ++
 .../tests/layouts/WidgetImplementationSwap.java    |  157 ++
 .../layouts/layouttester/AbstractLayoutTests.java  |   30 +
 .../layouts/layouttester/GridLayoutTests.java      |  593 +++++
 .../layouttester/HorizontalLayoutTests.java        |  559 +++++
 .../layouttester/LayoutTesterApplication.html      |  902 ++++++++
 .../layouttester/LayoutTesterApplication.java      |  128 ++
 .../tests/layouts/layouttester/UndefWideLabel.java |   12 +
 .../layouts/layouttester/VerticalLayoutTests.java  |  589 +++++
 tests/testbench/com/vaadin/tests/m.gif             |  Bin 0 -> 1036 bytes
 .../tests/resources/DownloadLargeFileResource.java |   71 +
 .../tests/resources/NonExistingFileResource.java   |   48 +
 .../vaadin/tests/resources/ResourceDownload.java   |   89 +
 .../com/vaadin/tests/themes/ButtonsTest.java       |  158 ++
 .../com/vaadin/tests/tickets/Ticket1225.java       |   68 +
 .../com/vaadin/tests/tickets/Ticket1230.java       |  152 ++
 .../com/vaadin/tests/tickets/Ticket124.java        |   90 +
 .../com/vaadin/tests/tickets/Ticket1245.java       |   93 +
 .../com/vaadin/tests/tickets/Ticket1362Login.java  |  275 +++
 .../com/vaadin/tests/tickets/Ticket1365.java       |   45 +
 .../com/vaadin/tests/tickets/Ticket1368.java       |   36 +
 .../com/vaadin/tests/tickets/Ticket1397.java       |  149 ++
 .../com/vaadin/tests/tickets/Ticket1435.java       |  230 ++
 .../com/vaadin/tests/tickets/Ticket1444.java       |   30 +
 .../tests/tickets/Ticket1465ModalNotification.java |   77 +
 .../com/vaadin/tests/tickets/Ticket1506.java       |   15 +
 .../com/vaadin/tests/tickets/Ticket1506_Panel.java |   48 +
 .../tests/tickets/Ticket1506_TestContainer.java    |  126 +
 .../tests/tickets/Ticket1506_TestContainer2.java   |  118 +
 .../com/vaadin/tests/tickets/Ticket1519.java       |   25 +
 .../com/vaadin/tests/tickets/Ticket1572.java       |  118 +
 .../com/vaadin/tests/tickets/Ticket1581.java       |   71 +
 .../com/vaadin/tests/tickets/Ticket1589.java       |   94 +
 .../com/vaadin/tests/tickets/Ticket1598.java       |  126 +
 .../com/vaadin/tests/tickets/Ticket161.java        |   47 +
 .../com/vaadin/tests/tickets/Ticket1632.java       |   64 +
 .../com/vaadin/tests/tickets/Ticket1659.java       |   34 +
 .../com/vaadin/tests/tickets/Ticket1663.java       |   22 +
 .../com/vaadin/tests/tickets/Ticket1673.java       |   28 +
 .../com/vaadin/tests/tickets/Ticket1710.java       |  411 ++++
 .../com/vaadin/tests/tickets/Ticket1737.java       |   52 +
 .../com/vaadin/tests/tickets/Ticket1767.java       |   30 +
 .../com/vaadin/tests/tickets/Ticket1772.java       |   37 +
 .../com/vaadin/tests/tickets/Ticket1775.java       |   48 +
 .../com/vaadin/tests/tickets/Ticket1804.java       |  150 ++
 .../com/vaadin/tests/tickets/Ticket1805.java       |   57 +
 .../com/vaadin/tests/tickets/Ticket1806.java       |   45 +
 .../com/vaadin/tests/tickets/Ticket1811.java       |   78 +
 .../com/vaadin/tests/tickets/Ticket1819.java       |   64 +
 .../tests/tickets/Ticket1834PanelScrolling.java    |   89 +
 .../com/vaadin/tests/tickets/Ticket1857.java       |  109 +
 .../com/vaadin/tests/tickets/Ticket1868.java       |   20 +
 .../com/vaadin/tests/tickets/Ticket1869.java       |   55 +
 .../com/vaadin/tests/tickets/Ticket1878.java       |  384 ++++
 .../com/vaadin/tests/tickets/Ticket1900.java       |   76 +
 .../com/vaadin/tests/tickets/Ticket1904.java       |   46 +
 .../com/vaadin/tests/tickets/Ticket1916.java       |   28 +
 .../com/vaadin/tests/tickets/Ticket1919.java       |   53 +
 .../com/vaadin/tests/tickets/Ticket1921.java       |  109 +
 .../com/vaadin/tests/tickets/Ticket1923.java       |   80 +
 .../tests/tickets/Ticket1924ThemeChanging.java     |   51 +
 .../com/vaadin/tests/tickets/Ticket1925.java       |   15 +
 .../com/vaadin/tests/tickets/Ticket1939.java       |   36 +
 .../com/vaadin/tests/tickets/Ticket1940.java       |   25 +
 .../com/vaadin/tests/tickets/Ticket1953.java       |  114 +
 .../com/vaadin/tests/tickets/Ticket1966.java       |  111 +
 .../com/vaadin/tests/tickets/Ticket1966_2.java     |  168 ++
 .../com/vaadin/tests/tickets/Ticket1966_3.java     |   63 +
 .../com/vaadin/tests/tickets/Ticket1969.java       |  105 +
 .../com/vaadin/tests/tickets/Ticket1970.java       |   79 +
 .../com/vaadin/tests/tickets/Ticket1972.java       |   30 +
 .../com/vaadin/tests/tickets/Ticket1973.java       |   51 +
 .../com/vaadin/tests/tickets/Ticket1973_2.java     |   54 +
 .../com/vaadin/tests/tickets/Ticket1975.java       |   62 +
 .../com/vaadin/tests/tickets/Ticket1982.java       |   84 +
 .../com/vaadin/tests/tickets/Ticket1983.java       |  141 ++
 .../com/vaadin/tests/tickets/Ticket1986.java       |   79 +
 .../com/vaadin/tests/tickets/Ticket1991.java       |   28 +
 .../com/vaadin/tests/tickets/Ticket1995.java       |   67 +
 .../com/vaadin/tests/tickets/Ticket20.java         |   99 +
 .../com/vaadin/tests/tickets/Ticket2001.java       |   37 +
 .../com/vaadin/tests/tickets/Ticket2002.java       |   51 +
 .../com/vaadin/tests/tickets/Ticket2007.java       |   28 +
 .../com/vaadin/tests/tickets/Ticket2009.java       |  126 +
 .../com/vaadin/tests/tickets/Ticket2011.java       |   26 +
 .../com/vaadin/tests/tickets/Ticket2014.java       |   63 +
 .../com/vaadin/tests/tickets/Ticket2021.java       |  141 ++
 .../com/vaadin/tests/tickets/Ticket2022.java       |   32 +
 .../com/vaadin/tests/tickets/Ticket2023.java       |   51 +
 .../com/vaadin/tests/tickets/Ticket2024.java       |   35 +
 .../com/vaadin/tests/tickets/Ticket2026.java       |   35 +
 .../com/vaadin/tests/tickets/Ticket2029.java       |  139 ++
 .../com/vaadin/tests/tickets/Ticket2037.java       |   48 +
 .../com/vaadin/tests/tickets/Ticket2038.java       |   45 +
 .../com/vaadin/tests/tickets/Ticket2040.java       |   87 +
 .../com/vaadin/tests/tickets/Ticket2042.java       |   38 +
 .../com/vaadin/tests/tickets/Ticket2043.java       |   28 +
 .../com/vaadin/tests/tickets/Ticket2048.java       |  103 +
 .../com/vaadin/tests/tickets/Ticket2051.java       |   44 +
 .../com/vaadin/tests/tickets/Ticket2053.java       |   73 +
 .../com/vaadin/tests/tickets/Ticket2060.java       |   50 +
 .../com/vaadin/tests/tickets/Ticket2061.java       |  128 ++
 .../com/vaadin/tests/tickets/Ticket2061b.java      |  200 ++
 .../com/vaadin/tests/tickets/Ticket2061c.java      |  148 ++
 .../com/vaadin/tests/tickets/Ticket2062.java       |   41 +
 .../com/vaadin/tests/tickets/Ticket2083.java       |   28 +
 .../com/vaadin/tests/tickets/Ticket2090.java       |   62 +
 .../com/vaadin/tests/tickets/Ticket2095.java       |   29 +
 .../com/vaadin/tests/tickets/Ticket2098.java       |   37 +
 .../com/vaadin/tests/tickets/Ticket2099.java       |   77 +
 .../com/vaadin/tests/tickets/Ticket2101.java       |   21 +
 .../com/vaadin/tests/tickets/Ticket2103.java       |  100 +
 .../com/vaadin/tests/tickets/Ticket2104.java       |  127 ++
 .../com/vaadin/tests/tickets/Ticket2106.java       |   38 +
 .../com/vaadin/tests/tickets/Ticket2107.java       |   60 +
 .../com/vaadin/tests/tickets/Ticket2117.java       |   60 +
 .../com/vaadin/tests/tickets/Ticket2119.java       |   92 +
 .../com/vaadin/tests/tickets/Ticket2125.java       |   62 +
 .../com/vaadin/tests/tickets/Ticket2126.java       |   62 +
 .../com/vaadin/tests/tickets/Ticket2151.java       |  110 +
 .../com/vaadin/tests/tickets/Ticket2157.java       |  109 +
 .../com/vaadin/tests/tickets/Ticket2178.java       |  109 +
 .../com/vaadin/tests/tickets/Ticket2179.java       |   56 +
 .../com/vaadin/tests/tickets/Ticket2180.java       |   41 +
 .../com/vaadin/tests/tickets/Ticket2181.java       |  104 +
 .../com/vaadin/tests/tickets/Ticket2186.java       |   54 +
 .../com/vaadin/tests/tickets/Ticket2204.java       |  177 ++
 .../com/vaadin/tests/tickets/Ticket2208.java       |   68 +
 .../com/vaadin/tests/tickets/Ticket2209.java       |   42 +
 .../com/vaadin/tests/tickets/Ticket2209OL.java     |   49 +
 .../com/vaadin/tests/tickets/Ticket2209OL2.java    |   55 +
 .../com/vaadin/tests/tickets/Ticket2215.java       |   29 +
 .../com/vaadin/tests/tickets/Ticket2221.java       |   91 +
 .../com/vaadin/tests/tickets/Ticket2222.java       |   64 +
 .../tickets/Ticket2227OrderedlayoutInTable.java    |   45 +
 .../com/vaadin/tests/tickets/Ticket2231.java       |   42 +
 .../com/vaadin/tests/tickets/Ticket2232.java       |   74 +
 .../com/vaadin/tests/tickets/Ticket2234.java       |   43 +
 .../com/vaadin/tests/tickets/Ticket2235.java       |   28 +
 .../com/vaadin/tests/tickets/Ticket2240.java       |   48 +
 .../com/vaadin/tests/tickets/Ticket2242.java       |   79 +
 .../com/vaadin/tests/tickets/Ticket2244.java       |  126 +
 .../com/vaadin/tests/tickets/Ticket2245.java       |   17 +
 .../com/vaadin/tests/tickets/Ticket2267.java       |   41 +
 .../com/vaadin/tests/tickets/Ticket2271.java       |   35 +
 .../com/vaadin/tests/tickets/Ticket2279.java       |  209 ++
 .../com/vaadin/tests/tickets/Ticket2282.java       |   55 +
 .../com/vaadin/tests/tickets/Ticket2283.java       |   29 +
 .../com/vaadin/tests/tickets/Ticket2287.java       |   32 +
 .../com/vaadin/tests/tickets/Ticket2289.java       |   99 +
 .../com/vaadin/tests/tickets/Ticket2292.java       |   87 +
 .../com/vaadin/tests/tickets/Ticket2294.java       |   56 +
 .../com/vaadin/tests/tickets/Ticket2296.java       |   33 +
 .../com/vaadin/tests/tickets/Ticket2297.java       |   41 +
 .../com/vaadin/tests/tickets/Ticket2303.java       |   43 +
 .../com/vaadin/tests/tickets/Ticket2304.java       |   30 +
 .../com/vaadin/tests/tickets/Ticket2310.java       |   56 +
 .../com/vaadin/tests/tickets/Ticket2319.java       |   66 +
 .../com/vaadin/tests/tickets/Ticket2323.java       |   22 +
 .../com/vaadin/tests/tickets/Ticket2325.java       |   29 +
 .../com/vaadin/tests/tickets/Ticket2329.java       |   42 +
 .../com/vaadin/tests/tickets/Ticket2337.java       |   44 +
 .../com/vaadin/tests/tickets/Ticket2339.java       |   38 +
 .../com/vaadin/tests/tickets/Ticket2341.java       |   47 +
 .../com/vaadin/tests/tickets/Ticket2344.java       |   54 +
 .../com/vaadin/tests/tickets/Ticket2347.java       |   49 +
 .../com/vaadin/tests/tickets/Ticket2364.java       |   37 +
 .../com/vaadin/tests/tickets/Ticket2365.java       |   58 +
 .../com/vaadin/tests/tickets/Ticket2398.java       |   40 +
 .../com/vaadin/tests/tickets/Ticket2404.java       |   28 +
 .../com/vaadin/tests/tickets/Ticket2405.java       |   80 +
 .../com/vaadin/tests/tickets/Ticket2406.java       |   48 +
 .../com/vaadin/tests/tickets/Ticket2407.java       |   21 +
 .../com/vaadin/tests/tickets/Ticket2411.java       |   29 +
 .../com/vaadin/tests/tickets/Ticket2415.java       |   40 +
 .../com/vaadin/tests/tickets/Ticket2420.java       |   54 +
 .../com/vaadin/tests/tickets/Ticket2425.java       |   24 +
 .../com/vaadin/tests/tickets/Ticket2426.java       |   28 +
 .../com/vaadin/tests/tickets/Ticket2431.java       |   52 +
 .../com/vaadin/tests/tickets/Ticket2432.java       |   51 +
 .../com/vaadin/tests/tickets/Ticket2434.java       |   30 +
 .../com/vaadin/tests/tickets/Ticket2436.java       |   36 +
 .../com/vaadin/tests/tickets/Ticket2440.java       |   77 +
 .../com/vaadin/tests/tickets/Ticket2526.java       |   22 +
 .../com/vaadin/tests/tickets/Ticket2742.java       |   42 +
 .../com/vaadin/tests/tickets/Ticket2901.java       |   33 +
 .../com/vaadin/tests/tickets/Ticket2998.java       |  332 +++
 .../com/vaadin/tests/tickets/Ticket3146.java       |   96 +
 .../com/vaadin/tests/tickets/Ticket34.java         |  111 +
 .../com/vaadin/tests/tickets/Ticket5053.java       |   35 +
 .../com/vaadin/tests/tickets/Ticket5157.java       |   52 +
 .../com/vaadin/tests/tickets/Ticket5952.java       |   30 +
 .../com/vaadin/tests/tickets/Ticket6002.java       |   88 +
 .../com/vaadin/tests/tickets/Ticket677.java        |  210 ++
 .../com/vaadin/tests/tickets/Ticket695.java        |   41 +
 .../com/vaadin/tests/tickets/Ticket736.java        |  194 ++
 .../com/vaadin/tests/tickets/Ticket846.java        |   66 +
 .../com/vaadin/tests/tickets/Ticket932.java        |   61 +
 tests/testbench/com/vaadin/tests/util/Log.java     |   62 +
 .../com/vaadin/tests/util/LogPrintWriter.java      |   34 +
 .../com/vaadin/tests/util/LoremIpsum.java          |   13 +
 tests/testbench/com/vaadin/tests/util/Person.java  |  120 +
 .../com/vaadin/tests/util/PersonContainer.java     |   94 +
 .../com/vaadin/tests/util/PortableRandom.java      |   52 +
 .../com/vaadin/tests/util/SampleDirectory.java     |   73 +
 .../com/vaadin/tests/util/TestClickListener.java   |   37 +
 .../testbench/com/vaadin/tests/util/TestUtils.java |  140 ++
 tests/testbench/com/vaadin/tests/vaadin_spin.swf   |  Bin 0 -> 2991 bytes
 .../validation/EmptyFieldErrorIndicators.html      |  247 ++
 .../validation/EmptyFieldErrorIndicators.java      |  146 ++
 .../tests/validation/RequiredErrorMessage.java     |   52 +
 .../validation/RequiredIndicatorForReadOnly.java   |   33 +
 .../vaadin/tests/validation/TestValidators.java    |  171 ++
 2157 files changed, 107490 insertions(+), 107528 deletions(-)
 create mode 100644 tests/client-side/com/vaadin/terminal/gwt/client/ApplicationConnectionTestURLGeneration.java
 create mode 100644 tests/client-side/com/vaadin/terminal/gwt/client/TestVBrowserDetailsUserAgentParser.java
 create mode 100644 tests/server-side/com/vaadin/data/util/AbstractBeanContainerTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/AbstractContainerTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/AbstractHierarchicalContainerTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/AbstractInMemoryContainerTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/BeanContainerTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/BeanItemContainerSortTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/BeanItemContainerTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/BeanItemTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/NestedMethodPropertyTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/ObjectPropertyTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/PerformanceTestIndexedContainer.java
 create mode 100644 tests/server-side/com/vaadin/data/util/PropertyDescriptorTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/PropertySetItemTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/TestContainerHierarchicalWrapper.java
 create mode 100644 tests/server-side/com/vaadin/data/util/TestContainerSorting.java
 create mode 100644 tests/server-side/com/vaadin/data/util/TestHierarchicalContainer.java
 create mode 100644 tests/server-side/com/vaadin/data/util/TestIndexedContainer.java
 create mode 100644 tests/server-side/com/vaadin/data/util/filter/AbstractFilterTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/filter/AndOrFilterTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/filter/CompareFilterTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/filter/IsNullFilterTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/filter/NotFilterTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/filter/SimpleStringFilterTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/AllTests.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/ColumnPropertyTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/DataGenerator.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/FreeformQueryUtil.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/ReadOnlyRowIdTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/RowIdTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/SQLContainerTableQueryTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/SQLContainerTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/TicketTests.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/UtilTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/connection/J2EEConnectionPoolTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/connection/MockInitialContextFactory.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/connection/SimpleJDBCConnectionPoolTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/filters/BetweenTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/filters/LikeTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/generator/SQLGeneratorsTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/query/FreeformQueryTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/query/QueryBuilderTest.java
 create mode 100644 tests/server-side/com/vaadin/data/util/sqlcontainer/query/TableQueryTest.java
 create mode 100644 tests/server-side/com/vaadin/terminal/gwt/server/TestAbstractApplicationServletStaticFilesLocation.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/IndexedContainerListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/LicenseInJavaFiles.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/PropertysetItemListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/TestAbstractBeanContainerListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/TestAbstractContainerListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/TestAbstractInMemoryContainerListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/TestAbstractPropertyListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/TestClassesSerializable.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/TestEventRouter.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/TestFileTypeResolver.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/TestKeyMapper.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/TestMimeTypes.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/TestSerialization.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/TestSimpleMultiPartInputStream.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/TransactionListenersConcurrency.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/AbstractListenerMethodsTest.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/FinalMethodTest.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/absolutelayout/AbsoluteLayoutListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/absolutelayout/ComponentPosition.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/abstractcomponent/TestAbstractComponentStyleNames.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/abstractcomponentcontainer/TestAbstractComponentContainerListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/abstractfield/TestAbstractFieldListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/abstractorderedlayout/TestAbstractOrderedLayoutListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/abstractselect/TestAbstractSelectListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/abstractsplitpanel/TestAbstractSplitPanelListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/abstracttextfield/TestAbstractTextFieldListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/button/ButtonListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/csslayout/CssLayoutListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/datefield/DateFieldListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/datefield/WeekNumberCalculation.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/embedded/EmbeddedListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/gridlayout/GridLayoutListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/label/LabelListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/loginform/LoginFormListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/menubar/MenuBarIds.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/optiongroup/OptionGroupListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/orderedlayout/TestOrderedLayout.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/panel/PanelListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/popupview/PopupViewListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/select/SelectListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/table/TableColumnAlignments.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/table/TableGenerator.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/table/TableListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/table/TableVisibleColumns.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/table/TestFooter.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/table/TestMultipleSelection.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/tabsheet/TabSheetListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/tabsheet/TestTabSheet.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/tree/TestListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/tree/TreeListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/treetable/EmptyTreeTable.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/upload/UploadListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/urifragmentutility/UriFragmentUtilityListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/window/AddRemoveSubWindow.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/component/window/WindowListeners.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/componentcontainer/AddRemoveComponentTest.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/components/AbstractTestFieldValueChange.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/components/ComponentAttachDetachListenerTest.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/components/TestComboBoxValueChange.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/components/TestGridLayoutLastRowRemoval.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/components/TestTextFieldValueChange.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/components/TestWindow.java
 create mode 100644 tests/server-side/com/vaadin/tests/server/validation/TestReadOnlyValidation.java
 delete mode 100644 tests/src/com/vaadin/tests/Components.java
 delete mode 100644 tests/src/com/vaadin/tests/CustomLayoutDemo.java
 delete mode 100644 tests/src/com/vaadin/tests/FocusingComponents.java
 delete mode 100644 tests/src/com/vaadin/tests/LayoutDemo.java
 delete mode 100644 tests/src/com/vaadin/tests/ListenerOrder.java
 delete mode 100644 tests/src/com/vaadin/tests/ModalWindow.java
 delete mode 100644 tests/src/com/vaadin/tests/NativeWindowing.java
 delete mode 100644 tests/src/com/vaadin/tests/OrderedLayoutSwapComponents.java
 delete mode 100644 tests/src/com/vaadin/tests/Parameters.java
 delete mode 100644 tests/src/com/vaadin/tests/PerformanceTestBasicComponentRendering.java
 delete mode 100644 tests/src/com/vaadin/tests/PerformanceTestLabelsAndOrderedLayouts.java
 delete mode 100644 tests/src/com/vaadin/tests/PerformanceTestSubTreeCaching.java
 delete mode 100644 tests/src/com/vaadin/tests/RandomLayoutStress.java
 delete mode 100644 tests/src/com/vaadin/tests/ScrollbarStressTest.java
 delete mode 100644 tests/src/com/vaadin/tests/StressComponentsInTable.java
 delete mode 100644 tests/src/com/vaadin/tests/TableChangingDatasource.java
 delete mode 100644 tests/src/com/vaadin/tests/TableSelectTest.java
 delete mode 100644 tests/src/com/vaadin/tests/TestBench.java
 delete mode 100644 tests/src/com/vaadin/tests/TestCaptionWrapper.java
 delete mode 100644 tests/src/com/vaadin/tests/TestComponentAddAndRecursion.java
 delete mode 100644 tests/src/com/vaadin/tests/TestContainerChanges.java
 delete mode 100644 tests/src/com/vaadin/tests/TestDateField.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForAlignments.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForApplicationLayoutThatUsesWholeBrosersSpace.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForBasicApplicationLayout.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForChildComponentRendering.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForContainerFilterable.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForGridLayoutChildComponentRendering.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForMultipleStyleNames.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForNativeWindowing.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForPreconfiguredComponents.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForRichTextEditor.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForStyledUpload.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForTabSheet.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForTablesInitialColumnWidthLogicRendering.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForTrees.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForUpload.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForWindowOpen.java
 delete mode 100644 tests/src/com/vaadin/tests/TestForWindowing.java
 delete mode 100644 tests/src/com/vaadin/tests/TestIFrames.java
 delete mode 100644 tests/src/com/vaadin/tests/TestMethodProperty.java
 delete mode 100644 tests/src/com/vaadin/tests/TestSelectAndDatefieldInDeepLayouts.java
 delete mode 100644 tests/src/com/vaadin/tests/TestSetVisibleAndCaching.java
 delete mode 100644 tests/src/com/vaadin/tests/TestSizeableIncomponents.java
 delete mode 100644 tests/src/com/vaadin/tests/TestSplitPanel.java
 delete mode 100644 tests/src/com/vaadin/tests/TreeFilesystem.java
 delete mode 100644 tests/src/com/vaadin/tests/TreeFilesystemContainer.java
 delete mode 100644 tests/src/com/vaadin/tests/UpgradingSample.java
 delete mode 100644 tests/src/com/vaadin/tests/UsingCustomNewItemHandlerInSelect.java
 delete mode 100644 tests/src/com/vaadin/tests/UsingObjectsInSelect.java
 delete mode 100644 tests/src/com/vaadin/tests/VaadinClasses.java
 delete mode 100644 tests/src/com/vaadin/tests/appengine/GAESyncTest.java
 delete mode 100644 tests/src/com/vaadin/tests/appengine/img1.png
 delete mode 100644 tests/src/com/vaadin/tests/application/ApplicationCloseTest.java
 delete mode 100644 tests/src/com/vaadin/tests/application/ErrorInUnloadEvent.html
 delete mode 100644 tests/src/com/vaadin/tests/application/ErrorInUnloadEvent.java
 delete mode 100644 tests/src/com/vaadin/tests/application/WebBrowserTest.html
 delete mode 100644 tests/src/com/vaadin/tests/application/WebBrowserTest.java
 delete mode 100644 tests/src/com/vaadin/tests/applicationcontext/ChangeSessionId.html
 delete mode 100644 tests/src/com/vaadin/tests/applicationcontext/ChangeSessionId.java
 delete mode 100644 tests/src/com/vaadin/tests/applicationcontext/RemoveTransactionListener.java
 delete mode 100644 tests/src/com/vaadin/tests/applicationservlet/NoMainWindow.java
 delete mode 100644 tests/src/com/vaadin/tests/components/AbstractComponentContainerTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/AbstractComponentTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/AbstractComponentTestCase.java
 delete mode 100644 tests/src/com/vaadin/tests/components/AbstractLayoutTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/AbstractOrderedLayoutTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/AbstractTestCase.java
 delete mode 100644 tests/src/com/vaadin/tests/components/ComponentTestCase.java
 delete mode 100644 tests/src/com/vaadin/tests/components/CustomComponentwithUndefinedSize.java
 delete mode 100644 tests/src/com/vaadin/tests/components/ErrorMessages.html
 delete mode 100644 tests/src/com/vaadin/tests/components/ErrorMessages.java
 delete mode 100644 tests/src/com/vaadin/tests/components/FocusAndBlurListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/components/FocusFromShortcutAction.java
 delete mode 100644 tests/src/com/vaadin/tests/components/HierarchicalContainerSorting.java
 delete mode 100644 tests/src/com/vaadin/tests/components/LayoutAttachListenerInfo.html
 delete mode 100644 tests/src/com/vaadin/tests/components/LayoutAttachListenerInfo.java
 delete mode 100644 tests/src/com/vaadin/tests/components/LongTooltip.html
 delete mode 100644 tests/src/com/vaadin/tests/components/LongTooltip.java
 delete mode 100644 tests/src/com/vaadin/tests/components/MultipleDebugIds.java
 delete mode 100644 tests/src/com/vaadin/tests/components/TestBase.java
 delete mode 100644 tests/src/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutClipping.html
 delete mode 100644 tests/src/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutClipping.java
 delete mode 100644 tests/src/com/vaadin/tests/components/absolutelayout/MoveComponentFromAbsoluteLayoutToInnerLayout.html
 delete mode 100644 tests/src/com/vaadin/tests/components/absolutelayout/MoveComponentsFromAbsoluteLayoutToInnerLayout.java
 delete mode 100644 tests/src/com/vaadin/tests/components/abstractcomponent/EnableState.html
 delete mode 100644 tests/src/com/vaadin/tests/components/abstractcomponent/EnableState.java
 delete mode 100644 tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldCommitWithInvalidValues.html
 delete mode 100644 tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldCommitWithInvalidValues.java
 delete mode 100644 tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.html
 delete mode 100644 tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.java
 delete mode 100644 tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/abstractfield/AbstractTextFieldTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/abstractfield/ShortcutAddAndRemove.html
 delete mode 100644 tests/src/com/vaadin/tests/components/abstractfield/ShortcutAddAndRemove.java
 delete mode 100644 tests/src/com/vaadin/tests/components/accordion/AccordionInactiveTabSize.html
 delete mode 100644 tests/src/com/vaadin/tests/components/accordion/AccordionInactiveTabSize.java
 delete mode 100644 tests/src/com/vaadin/tests/components/accordion/AccordionTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/accordion/RemoveTabs.html
 delete mode 100644 tests/src/com/vaadin/tests/components/accordion/RemoveTabs.java
 delete mode 100644 tests/src/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerGenerator.java
 delete mode 100644 tests/src/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.html
 delete mode 100644 tests/src/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.java
 delete mode 100644 tests/src/com/vaadin/tests/components/beanitemcontainer/TestBeanItemContainerUsage.html
 delete mode 100644 tests/src/com/vaadin/tests/components/beanitemcontainer/TestBeanItemContainerUsage.java
 delete mode 100644 tests/src/com/vaadin/tests/components/button/ButtonDisableOnClick.html
 delete mode 100644 tests/src/com/vaadin/tests/components/button/ButtonErrorMessage.java
 delete mode 100644 tests/src/com/vaadin/tests/components/button/ButtonMouseDetails.java
 delete mode 100644 tests/src/com/vaadin/tests/components/button/ButtonUndefinedWidth.html
 delete mode 100644 tests/src/com/vaadin/tests/components/button/ButtonUndefinedWidth.java
 delete mode 100644 tests/src/com/vaadin/tests/components/button/Buttons.html
 delete mode 100644 tests/src/com/vaadin/tests/components/button/Buttons.java
 delete mode 100644 tests/src/com/vaadin/tests/components/button/Buttons2.java
 delete mode 100644 tests/src/com/vaadin/tests/components/button/DisabledButtons.html
 delete mode 100644 tests/src/com/vaadin/tests/components/button/DisabledButtons.java
 delete mode 100644 tests/src/com/vaadin/tests/components/button/IE7ButtonWithIcon.html
 delete mode 100644 tests/src/com/vaadin/tests/components/button/IE7ButtonWithIcon.java
 delete mode 100644 tests/src/com/vaadin/tests/components/button/ShortCutListenerModification.java
 delete mode 100644 tests/src/com/vaadin/tests/components/button/TooltipForDisabledButton.java
 delete mode 100644 tests/src/com/vaadin/tests/components/caption/EmptyCaptions.html
 delete mode 100644 tests/src/com/vaadin/tests/components/caption/EmptyCaptions.java
 delete mode 100644 tests/src/com/vaadin/tests/components/caption/IconsInCaption.java
 delete mode 100644 tests/src/com/vaadin/tests/components/caption/LargeCaptionIcon.html
 delete mode 100644 tests/src/com/vaadin/tests/components/caption/LargeCaptionIcon.java
 delete mode 100644 tests/src/com/vaadin/tests/components/checkbox/CheckBoxNullValue.html
 delete mode 100644 tests/src/com/vaadin/tests/components/checkbox/CheckBoxNullValue.java
 delete mode 100644 tests/src/com/vaadin/tests/components/checkbox/CheckBoxes.html
 delete mode 100644 tests/src/com/vaadin/tests/components/checkbox/CheckBoxes.java
 delete mode 100644 tests/src/com/vaadin/tests/components/checkbox/CheckBoxes2.java
 delete mode 100644 tests/src/com/vaadin/tests/components/checkbox/CheckboxCaptionWrapping.html
 delete mode 100644 tests/src/com/vaadin/tests/components/checkbox/CheckboxCaptionWrapping.java
 delete mode 100644 tests/src/com/vaadin/tests/components/checkbox/CheckboxIcon.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxClosePopupRetainText.html
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.html
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxDataSourceChange.html
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxDataSourceChange.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxEnablesComboBox.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxInPopupView.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxInvalidNullSelection.html
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxInvalidNullSelection.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxItemIcon.html
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxItemIcon.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxLargeIcons.html
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxLargeIcons.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxNavigation.html
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxNavigation.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxNoTextInput.html
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.html
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxRemoveAllItems.html
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxSlowInFF.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxSuggestionOnDetach.html
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxSuggestionOnDetach.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxTextFieldEventOrder.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxUndefinedWidthAndIcon.html
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxUndefinedWidthAndIcon.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxValueInput.html
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxValueInput.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxValueUpdate.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboBoxes2.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.html
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/Comboboxes.html
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/Comboboxes.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/ComboxBoxErrorMessage.java
 delete mode 100644 tests/src/com/vaadin/tests/components/combobox/NewItemsESCPress.java
 delete mode 100755 tests/src/com/vaadin/tests/components/combobox/fi.gif
 delete mode 100755 tests/src/com/vaadin/tests/components/combobox/se.gif
 delete mode 100644 tests/src/com/vaadin/tests/components/customcomponent/ClipContent.java
 delete mode 100644 tests/src/com/vaadin/tests/components/customcomponent/CustomComponentGrowingContent.html
 delete mode 100644 tests/src/com/vaadin/tests/components/customcomponent/CustomComponentGrowingContent.java
 delete mode 100644 tests/src/com/vaadin/tests/components/customcomponent/CustomComponentSizeUpdate.java
 delete mode 100644 tests/src/com/vaadin/tests/components/customcomponent/EmbeddedInCustomComponent.html
 delete mode 100644 tests/src/com/vaadin/tests/components/customcomponent/EmbeddedInCustomComponent.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/CommitInvalid.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/CommitInvalid.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/CustomDateFormat.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/CustomDateFormat.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/CustomDateFormats.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/CustomDateFormats.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DateFieldEmptyValid.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DateFieldEmptyValid.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DateFieldInSubWindow.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DateFieldInSubWindow.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DateFieldLocale.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DateFieldMinResolution.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DateFieldReadOnly.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DateFieldReadOnly.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DateFieldTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DateFieldTimezone.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DateFieldTimezone.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DateFieldUnparsableDate.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DefaultHandleUnparsableDateField.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DisabledDateFieldWidth
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/DisabledDateFieldWidth.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/InlineDateFieldResolutionMsec.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/InlineDateFieldTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/InlineDateFieldValueChange.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/InlineDateFields.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/LenientMode.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/LowResolution.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/NarrowPopupDateFieldInTable.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/NarrowPopupDateFieldInTable.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/PopupDateFieldDisabledReadonly.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/PopupDateFieldMonth.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/PopupDateFieldResolutions.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/PopupDateFieldTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/PopupDateFields.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/RequiredInvalidDateField.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/RequiredInvalidDateField.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/TestDatefieldYear.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/TestDatefieldYear.java
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/TestSettingTimeOnInitiallyNullInlineDateField.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/TestSettingTimeOnInitiallyNullPopupDateField.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/ValueThroughProperty.html
 delete mode 100644 tests/src/com/vaadin/tests/components/datefield/ValueThroughProperty.java
 delete mode 100644 tests/src/com/vaadin/tests/components/embedded/EmbeddedClickListenerRelativeCoordinates.html
 delete mode 100644 tests/src/com/vaadin/tests/components/embedded/EmbeddedClickListenerRelativeCoordinates.java
 delete mode 100644 tests/src/com/vaadin/tests/components/embedded/EmbeddedFlash.java
 delete mode 100644 tests/src/com/vaadin/tests/components/embedded/EmbeddedImageRefresh.java
 delete mode 100644 tests/src/com/vaadin/tests/components/embedded/EmbeddedPdf.java
 delete mode 100644 tests/src/com/vaadin/tests/components/embedded/EmbeddedTooltip.java
 delete mode 100644 tests/src/com/vaadin/tests/components/embedded/FlashIsVisible.html
 delete mode 100644 tests/src/com/vaadin/tests/components/embedded/FlashIsVisible.java
 delete mode 100644 tests/src/com/vaadin/tests/components/embedded/test.pdf
 delete mode 100644 tests/src/com/vaadin/tests/components/form/FormCaptionClickFocusing.html
 delete mode 100644 tests/src/com/vaadin/tests/components/form/FormCaptionClickFocusing.java
 delete mode 100644 tests/src/com/vaadin/tests/components/form/FormClearDatasourceRepaint.html
 delete mode 100644 tests/src/com/vaadin/tests/components/form/FormClearDatasourceRepaint.java
 delete mode 100644 tests/src/com/vaadin/tests/components/form/FormCommitWithInvalidValues.html
 delete mode 100644 tests/src/com/vaadin/tests/components/form/FormCommitWithInvalidValues.java
 delete mode 100644 tests/src/com/vaadin/tests/components/form/FormDescription.html
 delete mode 100644 tests/src/com/vaadin/tests/components/form/FormDescription.java
 delete mode 100644 tests/src/com/vaadin/tests/components/form/FormFieldCaptions.java
 delete mode 100644 tests/src/com/vaadin/tests/components/form/FormFieldCaptionsStyles.html
 delete mode 100644 tests/src/com/vaadin/tests/components/form/FormFieldCaptionsStyles.java
 delete mode 100644 tests/src/com/vaadin/tests/components/form/FormNotGettingSmaller.java
 delete mode 100644 tests/src/com/vaadin/tests/components/form/FormRenderingFlicker.java
 delete mode 100644 tests/src/com/vaadin/tests/components/form/FormWithEnterShortCut.java
 delete mode 100644 tests/src/com/vaadin/tests/components/form/FormWithEnterShortcut.html
 delete mode 100644 tests/src/com/vaadin/tests/components/form/FormWithRelativelySizedLayout.java
 delete mode 100644 tests/src/com/vaadin/tests/components/form/UndefinedWideFormWithRelativeWideFooter.html
 delete mode 100644 tests/src/com/vaadin/tests/components/form/UndefinedWideFormWithRelativeWideFooter.java
 delete mode 100644 tests/src/com/vaadin/tests/components/formlayout/FormLayoutReplaceComponent.html
 delete mode 100644 tests/src/com/vaadin/tests/components/formlayout/FormLayoutReplaceComponent.java
 delete mode 100644 tests/src/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.html
 delete mode 100644 tests/src/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.java
 delete mode 100644 tests/src/com/vaadin/tests/components/gridlayout/MoveComponentFromGridLayoutToInnerLayout.html
 delete mode 100644 tests/src/com/vaadin/tests/components/gridlayout/MoveComponentsFromGridLayoutToInnerLayout.java
 delete mode 100644 tests/src/com/vaadin/tests/components/label/HundredPercentWideLabelResize.html
 delete mode 100644 tests/src/com/vaadin/tests/components/label/HundredPercentWideLabelResize.java
 delete mode 100644 tests/src/com/vaadin/tests/components/label/LabelModes.html
 delete mode 100644 tests/src/com/vaadin/tests/components/label/LabelModes.java
 delete mode 100644 tests/src/com/vaadin/tests/components/label/LabelTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/label/LabelTooltip.html
 delete mode 100644 tests/src/com/vaadin/tests/components/label/LabelTooltip.java
 delete mode 100644 tests/src/com/vaadin/tests/components/label/LabelWrapping.html
 delete mode 100644 tests/src/com/vaadin/tests/components/label/LabelWrapping.java
 delete mode 100644 tests/src/com/vaadin/tests/components/label/Labels.html
 delete mode 100644 tests/src/com/vaadin/tests/components/label/Labels.java
 delete mode 100644 tests/src/com/vaadin/tests/components/link/LinkIcon.java
 delete mode 100644 tests/src/com/vaadin/tests/components/link/LinkTargetSize.java
 delete mode 100644 tests/src/com/vaadin/tests/components/link/LinkToPercentage.html
 delete mode 100644 tests/src/com/vaadin/tests/components/link/LinkToPercentage.java
 delete mode 100644 tests/src/com/vaadin/tests/components/listselect/ListSelectSelection.html
 delete mode 100644 tests/src/com/vaadin/tests/components/listselect/ListSelects.java
 delete mode 100644 tests/src/com/vaadin/tests/components/loginform/CustomizedLoginFormTest.html
 delete mode 100644 tests/src/com/vaadin/tests/components/loginform/CustomizedLoginFormTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/loginform/LoginFormTest.html
 delete mode 100644 tests/src/com/vaadin/tests/components/loginform/LoginFormTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/loginform/LoginFormWithMultipleWindows.java
 delete mode 100644 tests/src/com/vaadin/tests/components/media/Media.java
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/HiddenAndDisabledMenus.java
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/IconsInRootMenuBar.html
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/IconsInSubMenus.html
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/MenuBarHtmlItems.html
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/MenuBarHtmlItems.java
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/MenuBarInSplitPanel.java
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/MenuBarItemsCheckable.html
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/MenuBarLongMenus.html
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/MenuBarNavigation.java
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/MenuBarNavigationKeyboard.html
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/MenuBarNavigationMouse.html
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/MenuBarResize.html
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/MenuBarRootItemSelectWithKeyboard.html
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/MenuBarRootItemSelectWithKeyboard.java
 delete mode 100755 tests/src/com/vaadin/tests/components/menubar/MenuBarRunsOutOfBrowser.html
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/MenuBarRunsOutOfBrowser.java
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/MenuBarTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/MenuBarToolTips.html
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/MenuBarToolTips.java
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/Menubars.html
 delete mode 100644 tests/src/com/vaadin/tests/components/menubar/Menubars.java
 delete mode 100644 tests/src/com/vaadin/tests/components/nativebutton/NativeButtonDisableOnClick.html
 delete mode 100644 tests/src/com/vaadin/tests/components/nativebutton/NativeButtonTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/nativeselect/NativeSelects.java
 delete mode 100644 tests/src/com/vaadin/tests/components/notification/CloseErrorNotificationWithEscape.html
 delete mode 100644 tests/src/com/vaadin/tests/components/notification/Notifications.html
 delete mode 100644 tests/src/com/vaadin/tests/components/notification/Notifications.java
 delete mode 100644 tests/src/com/vaadin/tests/components/notification/NotificationsHtmlAllowed.html
 delete mode 100644 tests/src/com/vaadin/tests/components/notification/NotificationsHtmlAllowed.java
 delete mode 100644 tests/src/com/vaadin/tests/components/optiongroup/DisabledOptionGroupItems.html
 delete mode 100644 tests/src/com/vaadin/tests/components/optiongroup/DisabledOptionGroupItems.java
 delete mode 100644 tests/src/com/vaadin/tests/components/optiongroup/HtmlOptionGroupItems.html
 delete mode 100644 tests/src/com/vaadin/tests/components/optiongroup/HtmlOptionGroupItems.java
 delete mode 100644 tests/src/com/vaadin/tests/components/optiongroup/OptionGroupItemIcons.html
 delete mode 100644 tests/src/com/vaadin/tests/components/optiongroup/OptionGroupMultipleValueChange.java
 delete mode 100644 tests/src/com/vaadin/tests/components/optiongroup/OptionGroups.java
 delete mode 100644 tests/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/orderedlayout/LayoutClickListenerTest.html
 delete mode 100644 tests/src/com/vaadin/tests/components/orderedlayout/LayoutClickListenerTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/orderedlayout/ReplaceComponentNPE.html
 delete mode 100644 tests/src/com/vaadin/tests/components/orderedlayout/ReplaceComponentNPE.java
 delete mode 100644 tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.html
 delete mode 100644 tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.java
 delete mode 100644 tests/src/com/vaadin/tests/components/panel/PanelClickListenerRelativeCoordinates.html
 delete mode 100644 tests/src/com/vaadin/tests/components/panel/PanelClickListenerRelativeCoordinates.java
 delete mode 100644 tests/src/com/vaadin/tests/components/panel/PanelShouldNotScroll.html
 delete mode 100644 tests/src/com/vaadin/tests/components/panel/PanelShouldNotScroll.java
 delete mode 100644 tests/src/com/vaadin/tests/components/panel/PanelShouldRemoveActionHandler.java
 delete mode 100644 tests/src/com/vaadin/tests/components/panel/PanelTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/passwordfield/PasswordFieldBasicStates.html
 delete mode 100644 tests/src/com/vaadin/tests/components/passwordfield/PasswordFieldTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/popupview/PopupViewLabelResized.java
 delete mode 100644 tests/src/com/vaadin/tests/components/popupview/PopupViewNullValues.java
 delete mode 100644 tests/src/com/vaadin/tests/components/popupview/PopupViewOffScreen.html
 delete mode 100644 tests/src/com/vaadin/tests/components/popupview/PopupViewOffScreen.java
 delete mode 100644 tests/src/com/vaadin/tests/components/popupview/PopupViewShouldCloseOnTabOut.html
 delete mode 100644 tests/src/com/vaadin/tests/components/popupview/PopupViewShouldCloseOnTabOut.java
 delete mode 100644 tests/src/com/vaadin/tests/components/popupview/PopupViewWithRTE.java
 delete mode 100644 tests/src/com/vaadin/tests/components/progressindicator/ProgressIndicatorInvisible.java
 delete mode 100644 tests/src/com/vaadin/tests/components/richtextarea/RichTextAreaSize.html
 delete mode 100644 tests/src/com/vaadin/tests/components/richtextarea/RichTextAreaSize.java
 delete mode 100644 tests/src/com/vaadin/tests/components/richtextarea/RichTextAreaTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/richtextarea/RichTextAreaWithKeyboardShortcuts.java
 delete mode 100644 tests/src/com/vaadin/tests/components/richtextarea/RichTextAreas.html
 delete mode 100644 tests/src/com/vaadin/tests/components/richtextarea/RichTextAreas.java
 delete mode 100644 tests/src/com/vaadin/tests/components/select/AbstractSelectTestCase.java
 delete mode 100644 tests/src/com/vaadin/tests/components/select/ComboBoxAddWhileFiltering.java
 delete mode 100644 tests/src/com/vaadin/tests/components/select/MultiSelect.java
 delete mode 100644 tests/src/com/vaadin/tests/components/select/NativeSelects.html
 delete mode 100644 tests/src/com/vaadin/tests/components/select/NativeSelects.java
 delete mode 100644 tests/src/com/vaadin/tests/components/select/NullSelectionItemId.java
 delete mode 100644 tests/src/com/vaadin/tests/components/select/SelectDisplaysOldValue.html
 delete mode 100644 tests/src/com/vaadin/tests/components/select/SelectDisplaysOldValue.java
 delete mode 100644 tests/src/com/vaadin/tests/components/select/SelectIconPlacement.html
 delete mode 100644 tests/src/com/vaadin/tests/components/select/SelectIconPlacement.java
 delete mode 100644 tests/src/com/vaadin/tests/components/select/SelectTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/select/TwinColSelectCaptionStyles.html
 delete mode 100644 tests/src/com/vaadin/tests/components/select/TwinColSelectCaptionStyles.java
 delete mode 100644 tests/src/com/vaadin/tests/components/select/TwinColSelectDualCaptions.html
 delete mode 100644 tests/src/com/vaadin/tests/components/select/TwinColSelectTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/select/TwinColSelects.java
 delete mode 100644 tests/src/com/vaadin/tests/components/select/TwinColSelectsDisabledReadonly.html
 delete mode 100644 tests/src/com/vaadin/tests/components/slider/SliderKeyboardFocus.html
 delete mode 100644 tests/src/com/vaadin/tests/components/slider/SliderKeyboardFocus.java
 delete mode 100644 tests/src/com/vaadin/tests/components/slider/SliderTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/AbstractSplitPanelTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelBasicStates.html
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelMoveSplitter.html
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelSplitterClick.html
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanels.java
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/SplitPanelExtraScrollbars.html
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/SplitPanelExtraScrollbars.java
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/SplitPanelInModalWindow.java
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/SplitPanelReversePosition.html
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/SplitPanelReversePosition.java
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/SplitPanelSplitterWidth.java
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/SplitPanelSwapComponents.html
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/SplitPanelSwapComponents.java
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/SplitPanelWidthOnResize.java
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/SplitPanelWithRichTextArea.java
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/SplitPanels.java
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/VerticalSplitPanelBasicStates.html
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/VerticalSplitPanelMoveSplitter.html
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/VerticalSplitPanelSplitterClick.html
 delete mode 100644 tests/src/com/vaadin/tests/components/splitpanel/VerticalSplitPanels.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ActionsOnTableBackground.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/CellStyleGeneratorTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ClippedComponentsInTable.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ClippedComponentsInTable.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/CollapseIndicatorOverlapsColumn.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/CollapseIndicatorOverlapsColumn.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ColumnExpandRatio.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ColumnExpandRatio.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ColumnExpandWithFixedColumns.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ColumnExpandWithFixedColumns.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ColumnGeneratorAddingOrder.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ColumnHeaderAlignments.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ColumnReorderEvent.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ColumnResizeEvent.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ColumnWidths.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ContainerChangeWithPartlySamePropertyIds.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ContainerChangeWithPartlySamePropertyIds.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ContainerSizeChange.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ContainerSizeChange.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/CtrlShiftMultiselect.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/DisabledTableKeyboardNavigation.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/DisabledTableKeyboardNavigation.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/DisabledTableShouldNotSendPageLengthUpdates.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/EditableModeChange.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/EditableModeChange.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/EditableTableLeak.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/EmptyTable.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/FixedHeightTable.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/FixedHeightTable.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/Footer.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/Footer.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/FooterClick.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/FooterClick.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/HeaderClick.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/HeaderClick.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/HeaderPositionWhenSorting.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/HeaderSyncOnScroll.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/HeaderUpdateWhenNoRows.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/HeaderUpdateWhenNoRows.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/HiddenColumnsExpandRatios.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/HugeRowCount.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ItemClickEvents.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ItemClickEvents.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/KeyControl.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/KeyboardNavigationDatasourceChange.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/KeyboardNavigationWithChangingContent.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/MissingScrollbar.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/MissingScrollbar.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ModifyContainerProperty.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ModifyContainerProperty.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/MultiSelectWithNotIdentityEqualIds.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/NotselectablePaintSelections.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/OddEvenRowStyling.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/OddEvenRowStyling.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/PropertyValueChange.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/PropertyValueChange.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/ResizeColumnAfterScrolling.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/RowAdditionTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/RowGenerators.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/SafariRenderingBugWhiteSpace.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/SelectingItemScrollsRight.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/SortLongTable.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/SortLongTable.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableAndBrowserContextMenu.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableCacheBuildEfficiency.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableClickAndDragOnIconAndComponents.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableClickAndDragOnIconAndComponents.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableColumnAlignment.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableColumnHeaders.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableColumnIcons.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableColumnResizeContentsWidth.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableColumnResizeContentsWidth.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableColumnSorting.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableContextMenuAndIcons.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableContextMenuOnField.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableDragColumn.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableExtraScrollbars.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableGeneratedColumns.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableGeneratedRows.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableGeneratedStringColumns.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableHeaderShifting.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableHeightWhenHidingHeaders.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableHeightWhenHidingHeaders.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableItemDescriptionGeneratorTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableItemIcon.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableLastRowMissing.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableLastRowMissing.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableModifcationsWhenScrolledRight.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableModificationsWhenScrolledRight.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableMultiSelectMouse.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableMultiSelectSimple.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableMultiSelectSimple.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TablePageLengthCalculation.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TablePageLengthUpdate.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TablePageLengthUpdate.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableRemoveActionHandlers.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableRowHeight.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableRowHeight.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableRowHeight2.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableRowHeight2.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableRowHeight3.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableRowHeight3.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableScrollOnFocus.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableScrollOnFocus.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableScrolling.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableScrollsOnSelection.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableScrollsOnSelection.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableSelectPagingOff.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableShouldNotEatValueChanges.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableShouldNotEatValueChanges.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableSingleSelect.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableSingleSelect.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableSorting.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableToggleVisibility.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableToggleVisibility.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableTooltips.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableUndefinedSize.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableUndefinedSize.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableUnregisterComponent.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableUnregisterComponent.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableVisibleColumnsUpdate.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableVisibleColumnsUpdate.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableWithManyColumns.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TableWithManyColumns.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/Tables.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TestCurrentPageFirstItem.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TextFieldRelativeWidth.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/TextFieldRelativeWidth.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/UncollapsedCollumnWidth.html
 delete mode 100644 tests/src/com/vaadin/tests/components/table/UncollapsedCollumnWidth.java
 delete mode 100644 tests/src/com/vaadin/tests/components/table/WideSelectableTable.java
 delete mode 100755 tests/src/com/vaadin/tests/components/table/fi.gif
 delete mode 100755 tests/src/com/vaadin/tests/components/table/se.gif
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/AddAndRemoveTabs.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/AddAndRemoveTabs.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/PreventTabChange.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/PreventTabChange.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/RemoveTabs.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/RemoveTabsTabsheet.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabGetAndReplaceComponent.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabGetAndReplaceComponent.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetBasicOperations.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetCaptions.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetCaptions.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetDisabling.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetDisabling.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetDiscardsMovedComponents.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetDiscardsMovedComponents.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetIndexOperations.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetIndexOperations.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetMinimal.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetTabStyleNames.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetTabStyleNames.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetTabTheming.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetWithoutTabCaption.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabSheetWithoutTabCaption.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabsheetNPE.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabsheetScrolling.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabsheetScrolling.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabsheetTooltip.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/TabsheetTooltip.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/VerticalScrollbarPosition.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tabsheet/VerticalScrollbarPosition.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textarea/TextAreaBasicStates.html
 delete mode 100644 tests/src/com/vaadin/tests/components/textarea/TextAreaNullRepresentation.html
 delete mode 100644 tests/src/com/vaadin/tests/components/textarea/TextAreaTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textarea/TextAreaWordwrap.html
 delete mode 100644 tests/src/com/vaadin/tests/components/textarea/Wordwrap.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/EnterShortcutMaySendInputPromptAsValue.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/IE6Cursor.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/OutOfSyncIssueWithKeyboardShortcut.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/SelectionAndCursorPosition.html
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/SelectionAndCursorPosition.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/SetTabIndex.html
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/SetTabIndex.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/SizedTextFields.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextChangeEvents.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextChangeEvents2.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextChangeEventsEternalLoop.html
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextChangeEventsEternalLoop.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextChangeEventsWithNonImmediateValueChange.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextChangeTimeoutAfterDetach.html
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextChangeTimeoutAfterDetach.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextFieldBasicStates.html
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextFieldEagerRepaint.html
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextFieldEagerRepaint.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextFieldFocusAndBlurListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextFieldInLayoutInTable.html
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextFieldInLayoutInTable.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextFieldMaxLength.html
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextFieldNullRepresentation.html
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextFieldNullRepresentationAndSelection.html
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextFieldSecret.html
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextFieldTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextFieldTextChangeEvent.htm
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextFields.html
 delete mode 100644 tests/src/com/vaadin/tests/components/textfield/TextFields.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/ActionsOnTreeBackground.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/CtrlShiftMultiselect.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/ExpandCollapseTree.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/ExpandCollapseTree.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/ItemStyleGenerator.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/PreselectedTreeVisible.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/PreselectedTreeVisible.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeConnectors.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeConnectors.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeContainerChange
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeContainerChange.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeContextMenuAndIcons.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeFiltering.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeFiltering.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeFocusGaining.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeFocusGaining.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeHorizontalResize.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeHorizontalResize.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeItemClickListening.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeItemClickListening.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationScroll
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationScrolls.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeNodeCaptionWrapping.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeNodeCaptionWrapping.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreePerformanceTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeScrolling.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeScrolling.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeScrollingOnSelection.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeScrollingOnSelection.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeToolTips.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeTooltip.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeWithIcons.html
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeWithIcons.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/TreeWithPreselectedItemNotShown.java
 delete mode 100644 tests/src/com/vaadin/tests/components/tree/Trees.java
 delete mode 100644 tests/src/com/vaadin/tests/components/treetable/ExpandAndCollapseListeners.html
 delete mode 100644 tests/src/com/vaadin/tests/components/treetable/ExpandAnimationsInChameleon.java
 delete mode 100644 tests/src/com/vaadin/tests/components/treetable/KeepAllItemsVisible.html
 delete mode 100644 tests/src/com/vaadin/tests/components/treetable/KeepAllItemsVisible.java
 delete mode 100644 tests/src/com/vaadin/tests/components/treetable/ProgrammaticSelect.java
 delete mode 100644 tests/src/com/vaadin/tests/components/treetable/TreeTableExpandWithRowStyle.html
 delete mode 100644 tests/src/com/vaadin/tests/components/treetable/TreeTableGeneratedColumns.html
 delete mode 100644 tests/src/com/vaadin/tests/components/treetable/TreeTableGeneratedRows.html
 delete mode 100644 tests/src/com/vaadin/tests/components/treetable/TreeTableOutOfSync.html
 delete mode 100644 tests/src/com/vaadin/tests/components/treetable/TreeTableOutOfSync.java
 delete mode 100644 tests/src/com/vaadin/tests/components/treetable/TreeTablePartialUpdates-LongScroll.html
 delete mode 100644 tests/src/com/vaadin/tests/components/treetable/TreeTablePartialUpdates.java
 delete mode 100644 tests/src/com/vaadin/tests/components/treetable/TreeTableSetCollapsed.html
 delete mode 100644 tests/src/com/vaadin/tests/components/treetable/TreeTableSetCollapsed.java
 delete mode 100644 tests/src/com/vaadin/tests/components/treetable/TreeTableTest.java
 delete mode 100644 tests/src/com/vaadin/tests/components/twincolselect/TwinColSelectSelection.html
 delete mode 100644 tests/src/com/vaadin/tests/components/twincolselect/TwinColSelects.java
 delete mode 100644 tests/src/com/vaadin/tests/components/upload/ForceSubmit.java
 delete mode 100644 tests/src/com/vaadin/tests/components/upload/TestImmediateUploadInFormLayout.java
 delete mode 100644 tests/src/com/vaadin/tests/components/upload/TestUpload.java
 delete mode 100644 tests/src/com/vaadin/tests/components/upload/TestUploadAndDisableOnSuccess.java
 delete mode 100644 tests/src/com/vaadin/tests/components/upload/TestUploadFilename.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/CenteredWindowWithUndefinedSize.html
 delete mode 100644 tests/src/com/vaadin/tests/components/window/CenteredWindowWithUndefinedSize.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/CloseSubWindow.html
 delete mode 100644 tests/src/com/vaadin/tests/components/window/CloseSubWindow.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/EmbeddedInSubWindow.html
 delete mode 100644 tests/src/com/vaadin/tests/components/window/EmbeddedInSubWindow.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/ExecuteJavaScript.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/ExtraLargeSubWindow.html
 delete mode 100644 tests/src/com/vaadin/tests/components/window/ExtraLargeSubWindow.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/ExtraWindowShown.html
 delete mode 100644 tests/src/com/vaadin/tests/components/window/ExtraWindowShown.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/FullSizedWindow.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/HugeWindowShouldBeClosable.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/LazyWindowResize.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/LongNotifications.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/ModalWindowNativeSelect.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/PositionedSubWindows.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/SubWindowFocus.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/SubWindowFocusAndBlurListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/SubWindowOrder.html
 delete mode 100644 tests/src/com/vaadin/tests/components/window/SubWindowOrder.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/SubWindowPositionUpdate.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/SubWindows-runo.html
 delete mode 100644 tests/src/com/vaadin/tests/components/window/SubWindows.html
 delete mode 100644 tests/src/com/vaadin/tests/components/window/SubWindows.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/SubwindowDraggability.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/SubwindowInvalidLayout.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/TestTooSmallSubwindowSize.html
 delete mode 100644 tests/src/com/vaadin/tests/components/window/TestTooSmallSubwindowSize.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/WindowCaptionTest.html
 delete mode 100644 tests/src/com/vaadin/tests/components/window/WindowClickEvents.html
 delete mode 100644 tests/src/com/vaadin/tests/components/window/WindowClickEvents.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/WindowResizeListener.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/WindowScrollingComponentIntoView.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/WindowScrollingUp.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/WindowShouldRemoveActionHandler.html
 delete mode 100644 tests/src/com/vaadin/tests/components/window/WindowShouldRemoveActionHandler.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/WindowStyleNames.java
 delete mode 100644 tests/src/com/vaadin/tests/components/window/WindowTest.java
 delete mode 100644 tests/src/com/vaadin/tests/containers/BeanItemContainerFilteringTest.java
 delete mode 100644 tests/src/com/vaadin/tests/containers/BeanItemContainerTest.java
 delete mode 100644 tests/src/com/vaadin/tests/containers/HierarchicalWrapperOrdering.java
 delete mode 100644 tests/src/com/vaadin/tests/containers/IndexedContainerFilteringTest.java
 delete mode 100644 tests/src/com/vaadin/tests/containers/TableWithFileSystemContainer.java
 delete mode 100644 tests/src/com/vaadin/tests/containers/TestItemSorter.java
 delete mode 100644 tests/src/com/vaadin/tests/containers/sqlcontainer/CheckboxUpdateProblem.java
 delete mode 100644 tests/src/com/vaadin/tests/containers/sqlcontainer/MassInsertMemoryLeakTestApp.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/AcceptAnythingWindow.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/AcceptFromComponent.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/ActiveDragSourceClassName.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/CustomDDImplementation.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/DDTest1.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/DDTest2.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/DDTest4.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/DDTest5.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/DDTest6.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/DDTest7.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/DDTest8.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/DragAndDropFiles.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/DragDropPane.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/HorizontalLayoutSortableWithWrappers.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/HorizontalSortableCssLayoutWithWrappers.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/TreeDragStart.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/VMyDragSource.java
 delete mode 100644 tests/src/com/vaadin/tests/dd/VMyDropTarget.java
 delete mode 100644 tests/src/com/vaadin/tests/debug/DebugWindowPresent.html
 delete mode 100644 tests/src/com/vaadin/tests/debug/DebugWindowPresent.java
 delete mode 100644 tests/src/com/vaadin/tests/gwtadapter/applicationconnection/URLGeneration.java
 delete mode 100644 tests/src/com/vaadin/tests/gwtadapter/componentlocator/TestDetachedNotPresent.html
 delete mode 100644 tests/src/com/vaadin/tests/integration/IntegrationTestApplication.java
 delete mode 100644 tests/src/com/vaadin/tests/integration/JSR286PortletApplication.java
 delete mode 100644 tests/src/com/vaadin/tests/integration/LiferayThemeDemo.java
 delete mode 100755 tests/src/com/vaadin/tests/integration/fi.gif
 delete mode 100755 tests/src/com/vaadin/tests/integration/se.gif
 delete mode 100644 tests/src/com/vaadin/tests/layouts/AbsoluteLayoutAddRemove.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/CaptionsInLayouts.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/ComplexGLColumnExpansionWithColSpan.html
 delete mode 100644 tests/src/com/vaadin/tests/layouts/ComplexGLColumnExpansionWithColSpan.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/CssLayoutRemoveComponent.html
 delete mode 100644 tests/src/com/vaadin/tests/layouts/CssLayoutRemoveComponent.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/CssLayoutRemoveComponentWithCaption.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/CssLayoutSizeChangePropagation.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/DeepComponentTrees.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/FormLayoutWithInvisibleComponent.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/GridLayoutCaptions.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/GridLayoutExpandRatioModification.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/GridLayoutInsidePanel.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/GridLayoutInsidePanel2.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/GridLayoutMoveComponent.html
 delete mode 100644 tests/src/com/vaadin/tests/layouts/GridLayoutMoveComponent.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/GridLayoutNPE.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/GridLayoutRemoveFinalRow.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/GridLayoutSpanExpansion.html
 delete mode 100644 tests/src/com/vaadin/tests/layouts/GridLayoutSpanExpansion.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/GridLayoutWidthChange.html
 delete mode 100644 tests/src/com/vaadin/tests/layouts/GridLayoutWidthChange.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/HiddenHorizontalLayout.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/MovingComponentsWhileOldParentInvisible.html
 delete mode 100644 tests/src/com/vaadin/tests/layouts/MovingComponentsWhileOldParentInvisible.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/MovingInvisibleField.html
 delete mode 100644 tests/src/com/vaadin/tests/layouts/MovingInvisibleField.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/OrderedLayoutBasics.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/OrderedLayoutCSSCompatibility.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/TestAbsoluteLayout.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/TestLayoutClickListeners.html
 delete mode 100644 tests/src/com/vaadin/tests/layouts/TestLayoutClickListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/TestLayoutPerformance.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/TreeWithBordersInLayout.html
 delete mode 100644 tests/src/com/vaadin/tests/layouts/TreeWithBordersInLayout.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/VerticalLayoutExpandRatioModification.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/VerticalLayoutWithRelativeSizeComponents.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/VerticalLayoutWithRelativeSizeComponentsInitiallyHidden.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/WidgetImplementationSwap.html
 delete mode 100644 tests/src/com/vaadin/tests/layouts/WidgetImplementationSwap.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/layouttester/AbstractLayoutTests.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/layouttester/GridLayoutTests.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/layouttester/LayoutTesterApplication.html
 delete mode 100644 tests/src/com/vaadin/tests/layouts/layouttester/LayoutTesterApplication.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/layouttester/UndefWideLabel.java
 delete mode 100644 tests/src/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java
 delete mode 100644 tests/src/com/vaadin/tests/m.gif
 delete mode 100644 tests/src/com/vaadin/tests/resources/DownloadLargeFileResource.java
 delete mode 100644 tests/src/com/vaadin/tests/resources/NonExistingFileResource.java
 delete mode 100644 tests/src/com/vaadin/tests/resources/ResourceDownload.java
 delete mode 100644 tests/src/com/vaadin/tests/server/BrowserUserAgentParser.java
 delete mode 100644 tests/src/com/vaadin/tests/server/IndexedContainerListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/LicenseInJavaFiles.java
 delete mode 100644 tests/src/com/vaadin/tests/server/PropertysetItemListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/TestAbstractBeanContainerListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/TestAbstractContainerListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/TestAbstractInMemoryContainerListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/TestAbstractPropertyListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/TestClassesSerializable.java
 delete mode 100644 tests/src/com/vaadin/tests/server/TestEventRouter.java
 delete mode 100644 tests/src/com/vaadin/tests/server/TestFileTypeResolver.java
 delete mode 100644 tests/src/com/vaadin/tests/server/TestKeyMapper.java
 delete mode 100644 tests/src/com/vaadin/tests/server/TestMimeTypes.java
 delete mode 100644 tests/src/com/vaadin/tests/server/TestSerialization.java
 delete mode 100644 tests/src/com/vaadin/tests/server/TestSimpleMultiPartInputStream.java
 delete mode 100644 tests/src/com/vaadin/tests/server/TransactionListenersConcurrency.java
 delete mode 100644 tests/src/com/vaadin/tests/server/applicationservlet/TestStaticFilesLocation.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/AbstractListenerMethodsTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/FinalMethodTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/absolutelayout/AbsoluteLayoutListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/absolutelayout/ComponentPosition.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/abstractcomponent/TestAbstractComponentStyleNames.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/abstractcomponentcontainer/TestAbstractComponentContainerListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/abstractfield/TestAbstractFieldListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/abstractorderedlayout/TestAbstractOrderedLayoutListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/abstractselect/TestAbstractSelectListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/abstractsplitpanel/TestAbstractSplitPanelListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/abstracttextfield/TestAbstractTextFieldListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/button/ButtonListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/csslayout/CssLayoutListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/datefield/DateFieldListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/datefield/WeekNumberCalculation.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/embedded/EmbeddedListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/gridlayout/GridLayoutListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/label/LabelListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/loginform/LoginFormListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/menubar/MenuBarIds.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/optiongroup/OptionGroupListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/orderedlayout/TestOrderedLayout.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/panel/PanelListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/popupview/PopupViewListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/select/SelectListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/table/TableColumnAlignments.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/table/TableGenerator.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/table/TableListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/table/TableVisibleColumns.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/table/TestFooter.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/table/TestMultipleSelection.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/tabsheet/TabSheetListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/tabsheet/TestTabSheet.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/tree/TestListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/tree/TreeListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/treetable/EmptyTreeTable.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/upload/UploadListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/urifragmentutility/UriFragmentUtilityListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/window/AddRemoveSubWindow.java
 delete mode 100644 tests/src/com/vaadin/tests/server/component/window/WindowListeners.java
 delete mode 100644 tests/src/com/vaadin/tests/server/componentcontainer/AddRemoveComponentTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/components/AbstractTestFieldValueChange.java
 delete mode 100644 tests/src/com/vaadin/tests/server/components/ComponentAttachDetachListenerTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/components/TestComboBoxValueChange.java
 delete mode 100644 tests/src/com/vaadin/tests/server/components/TestGridLayoutLastRowRemoval.java
 delete mode 100644 tests/src/com/vaadin/tests/server/components/TestTextFieldValueChange.java
 delete mode 100644 tests/src/com/vaadin/tests/server/components/TestWindow.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/AbstractBeanContainerTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/AbstractContainerTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/AbstractHierarchicalContainerTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/AbstractInMemoryContainerTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/BeanContainerTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/BeanItemContainerSortTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/BeanItemContainerTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/BeanItemTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/NestedMethodPropertyTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/ObjectPropertyTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/PerformanceTestIndexedContainer.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/PropertyDescriptorTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/PropertySetItemTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/TestContainerHierarchicalWrapper.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/TestContainerSorting.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/TestHierarchicalContainer.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/TestIndexedContainer.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/filter/AbstractFilterTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/filter/AndOrFilterTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/filter/CompareFilterTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/filter/IsNullFilterTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/filter/NotFilterTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/filter/SimpleStringFilterTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/AllTests.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/ColumnPropertyTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/DataGenerator.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/FreeformQueryUtil.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/ReadOnlyRowIdTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/RowIdTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/SQLContainerTableQueryTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/SQLContainerTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/TicketTests.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/UtilTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/connection/J2EEConnectionPoolTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/connection/MockInitialContextFactory.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/connection/SimpleJDBCConnectionPoolTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/filters/BetweenTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/filters/LikeTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/generator/SQLGeneratorsTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/query/FreeformQueryTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/query/QueryBuilderTest.java
 delete mode 100644 tests/src/com/vaadin/tests/server/container/sqlcontainer/query/TableQueryTest.java
 delete mode 100644 tests/src/com/vaadin/tests/themes/ButtonsTest.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1225.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1230.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket124.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1245.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1362Login.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1365.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1368.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1397.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1435.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1444.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1465ModalNotification.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1506.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1506_Panel.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1506_TestContainer.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1506_TestContainer2.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1519.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1572.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1581.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1589.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1598.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket161.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1632.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1659.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1663.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1673.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1710.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1737.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1767.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1772.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1775.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1804.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1805.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1806.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1811.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1819.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1834PanelScrolling.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1857.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1868.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1869.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1878.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1900.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1904.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1916.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1919.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1921.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1923.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1924ThemeChanging.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1925.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1939.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1940.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1953.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1966.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1966_2.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1966_3.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1969.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1970.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1972.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1973.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1973_2.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1975.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1982.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1983.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1986.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1991.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket1995.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket20.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2001.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2002.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2007.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2009.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2011.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2014.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2021.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2022.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2023.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2024.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2026.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2029.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2037.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2038.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2040.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2042.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2043.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2048.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2051.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2053.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2060.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2061.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2061b.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2061c.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2062.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2083.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2090.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2095.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2098.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2099.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2101.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2103.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2104.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2106.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2107.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2117.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2119.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2125.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2126.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2151.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2157.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2178.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2179.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2180.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2181.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2186.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2204.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2208.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2209.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2209OL.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2209OL2.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2215.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2221.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2222.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2227OrderedlayoutInTable.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2231.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2232.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2234.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2235.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2240.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2242.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2244.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2245.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2267.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2271.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2279.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2282.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2283.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2287.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2289.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2292.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2294.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2296.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2297.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2303.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2304.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2310.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2319.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2323.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2325.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2329.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2337.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2339.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2341.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2344.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2347.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2364.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2365.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2398.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2404.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2405.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2406.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2407.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2411.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2415.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2420.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2425.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2426.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2431.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2432.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2434.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2436.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2440.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2526.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2742.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2901.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket2998.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket3146.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket34.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket5053.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket5157.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket5952.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket6002.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket677.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket695.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket736.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket846.java
 delete mode 100644 tests/src/com/vaadin/tests/tickets/Ticket932.java
 delete mode 100644 tests/src/com/vaadin/tests/util/Log.java
 delete mode 100644 tests/src/com/vaadin/tests/util/LogPrintWriter.java
 delete mode 100644 tests/src/com/vaadin/tests/util/LoremIpsum.java
 delete mode 100644 tests/src/com/vaadin/tests/util/Person.java
 delete mode 100644 tests/src/com/vaadin/tests/util/PersonContainer.java
 delete mode 100644 tests/src/com/vaadin/tests/util/PortableRandom.java
 delete mode 100644 tests/src/com/vaadin/tests/util/SampleDirectory.java
 delete mode 100644 tests/src/com/vaadin/tests/util/TestClickListener.java
 delete mode 100644 tests/src/com/vaadin/tests/util/TestUtils.java
 delete mode 100644 tests/src/com/vaadin/tests/vaadin_spin.swf
 delete mode 100644 tests/src/com/vaadin/tests/validation/EmptyFieldErrorIndicators.html
 delete mode 100644 tests/src/com/vaadin/tests/validation/EmptyFieldErrorIndicators.java
 delete mode 100644 tests/src/com/vaadin/tests/validation/RequiredErrorMessage.java
 delete mode 100644 tests/src/com/vaadin/tests/validation/RequiredIndicatorForReadOnly.java
 delete mode 100644 tests/src/com/vaadin/tests/validation/TestReadOnlyValidation.java
 delete mode 100644 tests/src/com/vaadin/tests/validation/TestValidators.java
 create mode 100644 tests/testbench/com/vaadin/tests/Components.java
 create mode 100644 tests/testbench/com/vaadin/tests/CustomLayoutDemo.java
 create mode 100644 tests/testbench/com/vaadin/tests/FocusingComponents.java
 create mode 100644 tests/testbench/com/vaadin/tests/LayoutDemo.java
 create mode 100644 tests/testbench/com/vaadin/tests/ListenerOrder.java
 create mode 100644 tests/testbench/com/vaadin/tests/ModalWindow.java
 create mode 100644 tests/testbench/com/vaadin/tests/NativeWindowing.java
 create mode 100644 tests/testbench/com/vaadin/tests/OrderedLayoutSwapComponents.java
 create mode 100644 tests/testbench/com/vaadin/tests/Parameters.java
 create mode 100644 tests/testbench/com/vaadin/tests/PerformanceTestBasicComponentRendering.java
 create mode 100644 tests/testbench/com/vaadin/tests/PerformanceTestLabelsAndOrderedLayouts.java
 create mode 100644 tests/testbench/com/vaadin/tests/PerformanceTestSubTreeCaching.java
 create mode 100644 tests/testbench/com/vaadin/tests/RandomLayoutStress.java
 create mode 100644 tests/testbench/com/vaadin/tests/ScrollbarStressTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/StressComponentsInTable.java
 create mode 100644 tests/testbench/com/vaadin/tests/TableChangingDatasource.java
 create mode 100644 tests/testbench/com/vaadin/tests/TableSelectTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestBench.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestCaptionWrapper.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestComponentAddAndRecursion.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestContainerChanges.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestDateField.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForAlignments.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForApplicationLayoutThatUsesWholeBrosersSpace.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForBasicApplicationLayout.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForChildComponentRendering.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForContainerFilterable.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForGridLayoutChildComponentRendering.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForMultipleStyleNames.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForNativeWindowing.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForPreconfiguredComponents.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForRichTextEditor.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForStyledUpload.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForTabSheet.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForTablesInitialColumnWidthLogicRendering.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForTrees.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForUpload.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForWindowOpen.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestForWindowing.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestIFrames.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestMethodProperty.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestSelectAndDatefieldInDeepLayouts.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestSetVisibleAndCaching.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestSizeableIncomponents.java
 create mode 100644 tests/testbench/com/vaadin/tests/TestSplitPanel.java
 create mode 100644 tests/testbench/com/vaadin/tests/TreeFilesystem.java
 create mode 100644 tests/testbench/com/vaadin/tests/TreeFilesystemContainer.java
 create mode 100644 tests/testbench/com/vaadin/tests/UpgradingSample.java
 create mode 100644 tests/testbench/com/vaadin/tests/UsingCustomNewItemHandlerInSelect.java
 create mode 100644 tests/testbench/com/vaadin/tests/UsingObjectsInSelect.java
 create mode 100644 tests/testbench/com/vaadin/tests/VaadinClasses.java
 create mode 100644 tests/testbench/com/vaadin/tests/appengine/GAESyncTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/appengine/img1.png
 create mode 100644 tests/testbench/com/vaadin/tests/application/ApplicationCloseTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/application/ErrorInUnloadEvent.html
 create mode 100644 tests/testbench/com/vaadin/tests/application/ErrorInUnloadEvent.java
 create mode 100644 tests/testbench/com/vaadin/tests/application/WebBrowserTest.html
 create mode 100644 tests/testbench/com/vaadin/tests/application/WebBrowserTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/applicationcontext/ChangeSessionId.html
 create mode 100644 tests/testbench/com/vaadin/tests/applicationcontext/ChangeSessionId.java
 create mode 100644 tests/testbench/com/vaadin/tests/applicationcontext/RemoveTransactionListener.java
 create mode 100644 tests/testbench/com/vaadin/tests/applicationservlet/NoMainWindow.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/AbstractComponentContainerTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/AbstractComponentTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/AbstractComponentTestCase.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/AbstractLayoutTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/AbstractOrderedLayoutTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/AbstractTestCase.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/ComponentTestCase.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/CustomComponentwithUndefinedSize.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/ErrorMessages.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/ErrorMessages.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/FocusAndBlurListeners.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/FocusFromShortcutAction.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/HierarchicalContainerSorting.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/LayoutAttachListenerInfo.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/LayoutAttachListenerInfo.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/LongTooltip.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/LongTooltip.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/MultipleDebugIds.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/TestBase.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutClipping.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutClipping.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/absolutelayout/MoveComponentFromAbsoluteLayoutToInnerLayout.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/absolutelayout/MoveComponentsFromAbsoluteLayoutToInnerLayout.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/abstractcomponent/EnableState.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/abstractcomponent/EnableState.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldCommitWithInvalidValues.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldCommitWithInvalidValues.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/abstractfield/AbstractTextFieldTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/abstractfield/ShortcutAddAndRemove.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/abstractfield/ShortcutAddAndRemove.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/accordion/AccordionInactiveTabSize.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/accordion/AccordionInactiveTabSize.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/accordion/AccordionTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/accordion/RemoveTabs.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/accordion/RemoveTabs.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerGenerator.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/beanitemcontainer/TestBeanItemContainerUsage.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/beanitemcontainer/TestBeanItemContainerUsage.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/button/ButtonDisableOnClick.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/button/ButtonErrorMessage.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/button/ButtonMouseDetails.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/button/ButtonUndefinedWidth.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/button/ButtonUndefinedWidth.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/button/Buttons.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/button/Buttons.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/button/Buttons2.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/button/DisabledButtons.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/button/DisabledButtons.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/button/IE7ButtonWithIcon.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/button/IE7ButtonWithIcon.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/button/ShortCutListenerModification.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/button/TooltipForDisabledButton.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/caption/EmptyCaptions.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/caption/EmptyCaptions.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/caption/IconsInCaption.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/caption/LargeCaptionIcon.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/caption/LargeCaptionIcon.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxNullValue.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxNullValue.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxes.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxes.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxes2.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/checkbox/CheckboxCaptionWrapping.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/checkbox/CheckboxCaptionWrapping.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/checkbox/CheckboxIcon.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxClosePopupRetainText.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxDataSourceChange.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxDataSourceChange.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxEnablesComboBox.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxInPopupView.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxInvalidNullSelection.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxInvalidNullSelection.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxItemIcon.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxItemIcon.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxLargeIcons.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxLargeIcons.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxNavigation.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxNavigation.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxNoTextInput.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxRemoveAllItems.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxSlowInFF.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxSuggestionOnDetach.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxSuggestionOnDetach.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxTextFieldEventOrder.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxUndefinedWidthAndIcon.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxUndefinedWidthAndIcon.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxValueInput.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxValueInput.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxValueUpdate.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboBoxes2.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/Comboboxes.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/Comboboxes.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/ComboxBoxErrorMessage.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/combobox/NewItemsESCPress.java
 create mode 100755 tests/testbench/com/vaadin/tests/components/combobox/fi.gif
 create mode 100755 tests/testbench/com/vaadin/tests/components/combobox/se.gif
 create mode 100644 tests/testbench/com/vaadin/tests/components/customcomponent/ClipContent.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/customcomponent/CustomComponentGrowingContent.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/customcomponent/CustomComponentGrowingContent.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/customcomponent/CustomComponentSizeUpdate.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/customcomponent/EmbeddedInCustomComponent.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/customcomponent/EmbeddedInCustomComponent.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/CommitInvalid.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/CommitInvalid.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/CustomDateFormat.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/CustomDateFormat.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/CustomDateFormats.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/CustomDateFormats.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DateFieldEmptyValid.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DateFieldEmptyValid.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DateFieldInSubWindow.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DateFieldInSubWindow.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DateFieldLocale.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DateFieldMinResolution.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DateFieldReadOnly.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DateFieldReadOnly.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DateFieldTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DateFieldTimezone.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DateFieldTimezone.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DateFieldUnparsableDate.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DefaultHandleUnparsableDateField.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DisabledDateFieldWidth
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/DisabledDateFieldWidth.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/InlineDateFieldResolutionMsec.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/InlineDateFieldTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/InlineDateFieldValueChange.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/InlineDateFields.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/LenientMode.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/LowResolution.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/NarrowPopupDateFieldInTable.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/NarrowPopupDateFieldInTable.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/PopupDateFieldDisabledReadonly.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/PopupDateFieldMonth.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/PopupDateFieldResolutions.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/PopupDateFieldTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/PopupDateFields.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/RequiredInvalidDateField.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/RequiredInvalidDateField.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/TestDatefieldYear.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/TestDatefieldYear.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/TestSettingTimeOnInitiallyNullInlineDateField.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/TestSettingTimeOnInitiallyNullPopupDateField.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/ValueThroughProperty.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/datefield/ValueThroughProperty.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/embedded/EmbeddedClickListenerRelativeCoordinates.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/embedded/EmbeddedClickListenerRelativeCoordinates.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/embedded/EmbeddedFlash.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/embedded/EmbeddedImageRefresh.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/embedded/EmbeddedPdf.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/embedded/EmbeddedTooltip.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/embedded/FlashIsVisible.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/embedded/FlashIsVisible.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/embedded/test.pdf
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/FormCaptionClickFocusing.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/FormCaptionClickFocusing.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/FormClearDatasourceRepaint.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/FormClearDatasourceRepaint.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/FormCommitWithInvalidValues.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/FormCommitWithInvalidValues.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/FormDescription.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/FormDescription.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/FormFieldCaptions.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/FormFieldCaptionsStyles.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/FormFieldCaptionsStyles.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/FormNotGettingSmaller.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/FormRenderingFlicker.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/FormWithEnterShortCut.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/FormWithEnterShortcut.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/FormWithRelativelySizedLayout.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/UndefinedWideFormWithRelativeWideFooter.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/form/UndefinedWideFormWithRelativeWideFooter.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/formlayout/FormLayoutReplaceComponent.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/formlayout/FormLayoutReplaceComponent.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/gridlayout/MoveComponentFromGridLayoutToInnerLayout.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/gridlayout/MoveComponentsFromGridLayoutToInnerLayout.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/label/HundredPercentWideLabelResize.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/label/HundredPercentWideLabelResize.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/label/LabelModes.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/label/LabelModes.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/label/LabelTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/label/LabelTooltip.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/label/LabelTooltip.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/label/LabelWrapping.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/label/LabelWrapping.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/label/Labels.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/label/Labels.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/link/LinkIcon.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/link/LinkTargetSize.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/link/LinkToPercentage.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/link/LinkToPercentage.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/listselect/ListSelectSelection.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/listselect/ListSelects.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/loginform/CustomizedLoginFormTest.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/loginform/CustomizedLoginFormTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/loginform/LoginFormTest.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/loginform/LoginFormTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/loginform/LoginFormWithMultipleWindows.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/media/Media.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/HiddenAndDisabledMenus.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/IconsInRootMenuBar.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/IconsInSubMenus.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/MenuBarHtmlItems.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/MenuBarHtmlItems.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/MenuBarInSplitPanel.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/MenuBarItemsCheckable.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/MenuBarLongMenus.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/MenuBarNavigation.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/MenuBarNavigationKeyboard.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/MenuBarNavigationMouse.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/MenuBarResize.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/MenuBarRootItemSelectWithKeyboard.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/MenuBarRootItemSelectWithKeyboard.java
 create mode 100755 tests/testbench/com/vaadin/tests/components/menubar/MenuBarRunsOutOfBrowser.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/MenuBarRunsOutOfBrowser.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/MenuBarTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/MenuBarToolTips.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/MenuBarToolTips.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/Menubars.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/menubar/Menubars.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/nativebutton/NativeButtonDisableOnClick.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/nativebutton/NativeButtonTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/nativeselect/NativeSelects.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/notification/CloseErrorNotificationWithEscape.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/notification/Notifications.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/notification/Notifications.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/notification/NotificationsHtmlAllowed.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/notification/NotificationsHtmlAllowed.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/optiongroup/DisabledOptionGroupItems.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/optiongroup/DisabledOptionGroupItems.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/optiongroup/HtmlOptionGroupItems.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/optiongroup/HtmlOptionGroupItems.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroupItemIcons.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroupMultipleValueChange.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroups.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/orderedlayout/HorizontalLayoutTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/orderedlayout/LayoutClickListenerTest.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/orderedlayout/LayoutClickListenerTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/orderedlayout/ReplaceComponentNPE.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/orderedlayout/ReplaceComponentNPE.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/orderedlayout/VerticalLayoutTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/panel/PanelClickListenerRelativeCoordinates.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/panel/PanelClickListenerRelativeCoordinates.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/panel/PanelShouldNotScroll.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/panel/PanelShouldNotScroll.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/panel/PanelShouldRemoveActionHandler.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/panel/PanelTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/passwordfield/PasswordFieldBasicStates.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/passwordfield/PasswordFieldTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/popupview/PopupViewLabelResized.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/popupview/PopupViewNullValues.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/popupview/PopupViewOffScreen.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/popupview/PopupViewOffScreen.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/popupview/PopupViewShouldCloseOnTabOut.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/popupview/PopupViewShouldCloseOnTabOut.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/popupview/PopupViewWithRTE.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/progressindicator/ProgressIndicatorInvisible.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreaSize.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreaSize.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreaTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreaWithKeyboardShortcuts.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreas.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreas.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/AbstractSelectTestCase.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/ComboBoxAddWhileFiltering.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/MultiSelect.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/NativeSelects.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/NativeSelects.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/NullSelectionItemId.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/SelectDisplaysOldValue.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/SelectDisplaysOldValue.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/SelectIconPlacement.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/SelectIconPlacement.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/SelectTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/TwinColSelectCaptionStyles.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/TwinColSelectCaptionStyles.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/TwinColSelectDualCaptions.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/TwinColSelectTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/TwinColSelects.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/select/TwinColSelectsDisabledReadonly.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/slider/SliderKeyboardFocus.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/slider/SliderKeyboardFocus.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/slider/SliderTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/AbstractSplitPanelTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelBasicStates.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelMoveSplitter.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelSplitterClick.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/HorizontalSplitPanels.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelExtraScrollbars.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelExtraScrollbars.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelInModalWindow.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelReversePosition.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelReversePosition.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelSplitterWidth.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelSwapComponents.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelSwapComponents.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelWidthOnResize.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelWithRichTextArea.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanels.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/VerticalSplitPanelBasicStates.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/VerticalSplitPanelMoveSplitter.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/VerticalSplitPanelSplitterClick.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/splitpanel/VerticalSplitPanels.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ActionsOnTableBackground.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/CellStyleGeneratorTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ClippedComponentsInTable.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ClippedComponentsInTable.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/CollapseIndicatorOverlapsColumn.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/CollapseIndicatorOverlapsColumn.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ColumnExpandRatio.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ColumnExpandRatio.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ColumnExpandWithFixedColumns.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ColumnExpandWithFixedColumns.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ColumnGeneratorAddingOrder.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ColumnHeaderAlignments.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ColumnReorderEvent.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ColumnResizeEvent.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ColumnWidths.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ContainerChangeWithPartlySamePropertyIds.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ContainerChangeWithPartlySamePropertyIds.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ContainerSizeChange.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ContainerSizeChange.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/CtrlShiftMultiselect.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/DisabledTableKeyboardNavigation.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/DisabledTableKeyboardNavigation.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/DisabledTableShouldNotSendPageLengthUpdates.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/EditableModeChange.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/EditableModeChange.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/EditableTableLeak.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/EmptyTable.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/FixedHeightTable.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/FixedHeightTable.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/Footer.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/Footer.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/FooterClick.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/FooterClick.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/HeaderClick.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/HeaderClick.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/HeaderPositionWhenSorting.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/HeaderSyncOnScroll.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/HeaderUpdateWhenNoRows.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/HeaderUpdateWhenNoRows.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/HiddenColumnsExpandRatios.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/HugeRowCount.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ItemClickEvents.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ItemClickEvents.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/KeyControl.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/KeyboardNavigationDatasourceChange.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/KeyboardNavigationWithChangingContent.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/MissingScrollbar.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/MissingScrollbar.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ModifyContainerProperty.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ModifyContainerProperty.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/MultiSelectWithNotIdentityEqualIds.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/NotselectablePaintSelections.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/OddEvenRowStyling.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/OddEvenRowStyling.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/PropertyValueChange.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/PropertyValueChange.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/ResizeColumnAfterScrolling.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/RowAdditionTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/RowGenerators.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/SafariRenderingBugWhiteSpace.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/SelectingItemScrollsRight.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/SortLongTable.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/SortLongTable.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableAndBrowserContextMenu.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableCacheBuildEfficiency.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableClickAndDragOnIconAndComponents.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableClickAndDragOnIconAndComponents.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableColumnAlignment.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableColumnHeaders.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableColumnIcons.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableColumnResizeContentsWidth.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableColumnResizeContentsWidth.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableColumnSorting.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableContextMenuAndIcons.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableContextMenuOnField.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableDragColumn.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableExtraScrollbars.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableGeneratedColumns.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableGeneratedRows.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableGeneratedStringColumns.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableHeaderShifting.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableHeightWhenHidingHeaders.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableHeightWhenHidingHeaders.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableItemDescriptionGeneratorTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableItemIcon.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableLastRowMissing.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableLastRowMissing.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableModifcationsWhenScrolledRight.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableModificationsWhenScrolledRight.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableMultiSelectMouse.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableMultiSelectSimple.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableMultiSelectSimple.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TablePageLengthCalculation.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TablePageLengthUpdate.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TablePageLengthUpdate.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableRemoveActionHandlers.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableRowHeight.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableRowHeight.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableRowHeight2.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableRowHeight2.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableRowHeight3.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableRowHeight3.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableScrollOnFocus.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableScrollOnFocus.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableScrolling.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableScrollsOnSelection.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableScrollsOnSelection.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableSelectPagingOff.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableShouldNotEatValueChanges.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableShouldNotEatValueChanges.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableSingleSelect.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableSingleSelect.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableSorting.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableToggleVisibility.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableToggleVisibility.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableTooltips.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableUndefinedSize.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableUndefinedSize.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableUnregisterComponent.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableUnregisterComponent.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableVisibleColumnsUpdate.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableVisibleColumnsUpdate.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableWithManyColumns.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableWithManyColumns.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/Tables.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TestCurrentPageFirstItem.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TextFieldRelativeWidth.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/TextFieldRelativeWidth.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/UncollapsedCollumnWidth.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/UncollapsedCollumnWidth.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/table/WideSelectableTable.java
 create mode 100755 tests/testbench/com/vaadin/tests/components/table/fi.gif
 create mode 100755 tests/testbench/com/vaadin/tests/components/table/se.gif
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/AddAndRemoveTabs.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/AddAndRemoveTabs.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/PreventTabChange.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/PreventTabChange.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/RemoveTabs.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/RemoveTabsTabsheet.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabGetAndReplaceComponent.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabGetAndReplaceComponent.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetBasicOperations.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetCaptions.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetCaptions.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetDisabling.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetDisabling.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetDiscardsMovedComponents.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetDiscardsMovedComponents.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetIcons.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetIcons.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetIndexOperations.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetIndexOperations.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetMinimal.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetTabStyleNames.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetTabStyleNames.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetTabTheming.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetWithoutTabCaption.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetWithoutTabCaption.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetNPE.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetScrolling.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetScrolling.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetTooltip.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetTooltip.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/VerticalScrollbarPosition.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/VerticalScrollbarPosition.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textarea/TextAreaBasicStates.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/textarea/TextAreaNullRepresentation.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/textarea/TextAreaTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textarea/TextAreaWordwrap.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/textarea/Wordwrap.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/EnterShortcutMaySendInputPromptAsValue.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/IE6Cursor.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/OutOfSyncIssueWithKeyboardShortcut.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/SelectionAndCursorPosition.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/SelectionAndCursorPosition.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/SetTabIndex.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/SetTabIndex.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/SizedTextFields.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextChangeEvents.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextChangeEvents2.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextChangeEventsEternalLoop.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextChangeEventsEternalLoop.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextChangeEventsWithNonImmediateValueChange.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextChangeTimeoutAfterDetach.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextChangeTimeoutAfterDetach.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextFieldBasicStates.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextFieldEagerRepaint.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextFieldEagerRepaint.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextFieldFocusAndBlurListeners.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextFieldInLayoutInTable.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextFieldInLayoutInTable.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextFieldMaxLength.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextFieldNullRepresentation.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextFieldNullRepresentationAndSelection.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextFieldSecret.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextFieldTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextFieldTextChangeEvent.htm
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextFields.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/textfield/TextFields.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/ActionsOnTreeBackground.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/CtrlShiftMultiselect.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/ExpandCollapseTree.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/ExpandCollapseTree.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/ItemStyleGenerator.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/PreselectedTreeVisible.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/PreselectedTreeVisible.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeConnectors.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeConnectors.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeContainerChange
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeContainerChange.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeContextMenuAndIcons.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeFiltering.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeFiltering.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeFocusGaining.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeFocusGaining.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeHorizontalResize.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeHorizontalResize.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeItemClickListening.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeItemClickListening.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationScroll
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationScrolls.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeNodeCaptionWrapping.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeNodeCaptionWrapping.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreePerformanceTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeScrolling.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeScrolling.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeScrollingOnSelection.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeScrollingOnSelection.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeToolTips.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeTooltip.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeWithIcons.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeWithIcons.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/TreeWithPreselectedItemNotShown.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/tree/Trees.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/treetable/ExpandAndCollapseListeners.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/treetable/ExpandAnimationsInChameleon.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/treetable/KeepAllItemsVisible.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/treetable/KeepAllItemsVisible.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/treetable/ProgrammaticSelect.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/treetable/TreeTableExpandWithRowStyle.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/treetable/TreeTableGeneratedColumns.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/treetable/TreeTableGeneratedRows.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/treetable/TreeTableOutOfSync.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/treetable/TreeTableOutOfSync.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/treetable/TreeTablePartialUpdates-LongScroll.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/treetable/TreeTablePartialUpdates.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/treetable/TreeTableSetCollapsed.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/treetable/TreeTableSetCollapsed.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/treetable/TreeTableTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/twincolselect/TwinColSelectSelection.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/twincolselect/TwinColSelects.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/upload/ForceSubmit.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/upload/TestImmediateUploadInFormLayout.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/upload/TestUpload.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/upload/TestUploadAndDisableOnSuccess.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/upload/TestUploadFilename.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/CenteredWindowWithUndefinedSize.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/CenteredWindowWithUndefinedSize.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/CloseSubWindow.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/CloseSubWindow.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/EmbeddedInSubWindow.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/EmbeddedInSubWindow.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/ExecuteJavaScript.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/ExtraLargeSubWindow.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/ExtraLargeSubWindow.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/ExtraWindowShown.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/ExtraWindowShown.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/FullSizedWindow.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/HugeWindowShouldBeClosable.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/LazyWindowResize.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/LongNotifications.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/ModalWindowNativeSelect.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/PositionedSubWindows.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/SubWindowFocus.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/SubWindowFocusAndBlurListeners.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/SubWindowOrder.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/SubWindowOrder.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/SubWindowPositionUpdate.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/SubWindows-runo.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/SubWindows.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/SubWindows.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/SubwindowDraggability.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/SubwindowInvalidLayout.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/TestTooSmallSubwindowSize.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/TestTooSmallSubwindowSize.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/WindowCaptionTest.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/WindowClickEvents.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/WindowClickEvents.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/WindowResizeListener.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/WindowScrollingComponentIntoView.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/WindowScrollingUp.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/WindowShouldRemoveActionHandler.html
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/WindowShouldRemoveActionHandler.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/WindowStyleNames.java
 create mode 100644 tests/testbench/com/vaadin/tests/components/window/WindowTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/containers/BeanItemContainerFilteringTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/containers/BeanItemContainerTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/containers/HierarchicalWrapperOrdering.java
 create mode 100644 tests/testbench/com/vaadin/tests/containers/IndexedContainerFilteringTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/containers/TableWithFileSystemContainer.java
 create mode 100644 tests/testbench/com/vaadin/tests/containers/TestItemSorter.java
 create mode 100644 tests/testbench/com/vaadin/tests/containers/sqlcontainer/CheckboxUpdateProblem.java
 create mode 100644 tests/testbench/com/vaadin/tests/containers/sqlcontainer/MassInsertMemoryLeakTestApp.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/AcceptAnythingWindow.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/AcceptFromComponent.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/ActiveDragSourceClassName.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/CustomDDImplementation.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/DDTest1.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/DDTest2.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/DDTest4.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/DDTest5.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/DDTest6.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/DDTest7.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/DDTest8.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/DragAndDropFiles.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/DragDropPane.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/HorizontalLayoutSortableWithWrappers.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/HorizontalSortableCssLayoutWithWrappers.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/TreeDragStart.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/VMyDragSource.java
 create mode 100644 tests/testbench/com/vaadin/tests/dd/VMyDropTarget.java
 create mode 100644 tests/testbench/com/vaadin/tests/debug/DebugWindowPresent.html
 create mode 100644 tests/testbench/com/vaadin/tests/debug/DebugWindowPresent.java
 create mode 100644 tests/testbench/com/vaadin/tests/gwtadapter/componentlocator/TestDetachedNotPresent.html
 create mode 100644 tests/testbench/com/vaadin/tests/integration/IntegrationTestApplication.java
 create mode 100644 tests/testbench/com/vaadin/tests/integration/JSR286PortletApplication.java
 create mode 100644 tests/testbench/com/vaadin/tests/integration/LiferayThemeDemo.java
 create mode 100755 tests/testbench/com/vaadin/tests/integration/fi.gif
 create mode 100755 tests/testbench/com/vaadin/tests/integration/se.gif
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/AbsoluteLayoutAddRemove.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/CaptionsInLayouts.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/ComplexGLColumnExpansionWithColSpan.html
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/ComplexGLColumnExpansionWithColSpan.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/CssLayoutRemoveComponent.html
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/CssLayoutRemoveComponent.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/CssLayoutRemoveComponentWithCaption.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/CssLayoutSizeChangePropagation.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/DeepComponentTrees.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/FormLayoutWithInvisibleComponent.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/GridLayoutCaptions.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/GridLayoutExpandRatioModification.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/GridLayoutInsidePanel.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/GridLayoutInsidePanel2.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/GridLayoutMoveComponent.html
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/GridLayoutMoveComponent.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/GridLayoutNPE.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/GridLayoutRemoveFinalRow.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/GridLayoutSpanExpansion.html
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/GridLayoutSpanExpansion.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/GridLayoutWidthChange.html
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/GridLayoutWidthChange.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/HiddenHorizontalLayout.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/MovingComponentsWhileOldParentInvisible.html
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/MovingComponentsWhileOldParentInvisible.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/MovingInvisibleField.html
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/MovingInvisibleField.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/OrderedLayoutBasics.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/OrderedLayoutCSSCompatibility.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/TestAbsoluteLayout.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/TestLayoutClickListeners.html
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/TestLayoutClickListeners.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/TestLayoutPerformance.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/TreeWithBordersInLayout.html
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/TreeWithBordersInLayout.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/VerticalLayoutExpandRatioModification.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/VerticalLayoutWithRelativeSizeComponents.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/VerticalLayoutWithRelativeSizeComponentsInitiallyHidden.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/WidgetImplementationSwap.html
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/WidgetImplementationSwap.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/layouttester/AbstractLayoutTests.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/layouttester/GridLayoutTests.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/layouttester/LayoutTesterApplication.html
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/layouttester/LayoutTesterApplication.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/layouttester/UndefWideLabel.java
 create mode 100644 tests/testbench/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java
 create mode 100644 tests/testbench/com/vaadin/tests/m.gif
 create mode 100644 tests/testbench/com/vaadin/tests/resources/DownloadLargeFileResource.java
 create mode 100644 tests/testbench/com/vaadin/tests/resources/NonExistingFileResource.java
 create mode 100644 tests/testbench/com/vaadin/tests/resources/ResourceDownload.java
 create mode 100644 tests/testbench/com/vaadin/tests/themes/ButtonsTest.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1225.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1230.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket124.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1245.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1362Login.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1365.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1368.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1397.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1435.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1444.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1465ModalNotification.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1506.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1506_Panel.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1506_TestContainer.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1506_TestContainer2.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1519.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1572.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1581.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1589.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1598.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket161.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1632.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1659.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1663.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1673.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1710.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1737.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1767.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1772.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1775.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1804.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1805.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1806.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1811.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1819.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1834PanelScrolling.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1857.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1868.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1869.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1878.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1900.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1904.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1916.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1919.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1921.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1923.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1924ThemeChanging.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1925.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1939.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1940.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1953.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1966.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1966_2.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1966_3.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1969.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1970.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1972.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1973.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1973_2.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1975.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1982.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1983.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1986.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1991.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket1995.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket20.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2001.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2002.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2007.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2009.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2011.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2014.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2021.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2022.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2023.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2024.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2026.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2029.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2037.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2038.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2040.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2042.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2043.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2048.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2051.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2053.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2060.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2061.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2061b.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2061c.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2062.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2083.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2090.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2095.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2098.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2099.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2101.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2103.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2104.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2106.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2107.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2117.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2119.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2125.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2126.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2151.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2157.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2178.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2179.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2180.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2181.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2186.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2204.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2208.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2209.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2209OL.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2209OL2.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2215.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2221.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2222.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2227OrderedlayoutInTable.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2231.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2232.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2234.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2235.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2240.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2242.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2244.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2245.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2267.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2271.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2279.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2282.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2283.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2287.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2289.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2292.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2294.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2296.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2297.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2303.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2304.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2310.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2319.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2323.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2325.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2329.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2337.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2339.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2341.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2344.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2347.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2364.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2365.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2398.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2404.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2405.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2406.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2407.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2411.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2415.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2420.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2425.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2426.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2431.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2432.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2434.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2436.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2440.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2526.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2742.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2901.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket2998.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket3146.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket34.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket5053.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket5157.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket5952.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket6002.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket677.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket695.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket736.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket846.java
 create mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket932.java
 create mode 100644 tests/testbench/com/vaadin/tests/util/Log.java
 create mode 100644 tests/testbench/com/vaadin/tests/util/LogPrintWriter.java
 create mode 100644 tests/testbench/com/vaadin/tests/util/LoremIpsum.java
 create mode 100644 tests/testbench/com/vaadin/tests/util/Person.java
 create mode 100644 tests/testbench/com/vaadin/tests/util/PersonContainer.java
 create mode 100644 tests/testbench/com/vaadin/tests/util/PortableRandom.java
 create mode 100644 tests/testbench/com/vaadin/tests/util/SampleDirectory.java
 create mode 100644 tests/testbench/com/vaadin/tests/util/TestClickListener.java
 create mode 100644 tests/testbench/com/vaadin/tests/util/TestUtils.java
 create mode 100644 tests/testbench/com/vaadin/tests/vaadin_spin.swf
 create mode 100644 tests/testbench/com/vaadin/tests/validation/EmptyFieldErrorIndicators.html
 create mode 100644 tests/testbench/com/vaadin/tests/validation/EmptyFieldErrorIndicators.java
 create mode 100644 tests/testbench/com/vaadin/tests/validation/RequiredErrorMessage.java
 create mode 100644 tests/testbench/com/vaadin/tests/validation/RequiredIndicatorForReadOnly.java
 create mode 100644 tests/testbench/com/vaadin/tests/validation/TestValidators.java

(limited to 'tests')

diff --git a/tests/client-side/com/vaadin/terminal/gwt/client/ApplicationConnectionTestURLGeneration.java b/tests/client-side/com/vaadin/terminal/gwt/client/ApplicationConnectionTestURLGeneration.java
new file mode 100644
index 0000000000..fe3b724aaf
--- /dev/null
+++ b/tests/client-side/com/vaadin/terminal/gwt/client/ApplicationConnectionTestURLGeneration.java
@@ -0,0 +1,77 @@
+package com.vaadin.terminal.gwt.client;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import com.vaadin.terminal.gwt.client.ApplicationConnection;
+
+public class ApplicationConnectionTestURLGeneration {
+
+    private static final String[] URIS = new String[] {
+            "http://demo.vaadin.com/", //
+            "https://demo.vaadin.com/",
+            "http://demo.vaadin.com/foo",
+            "http://demo.vaadin.com/foo?f",
+            "http://demo.vaadin.com/foo?f=1",
+            "http://demo.vaadin.com:1234/foo?a",
+            "http://demo.vaadin.com:1234/foo#frag?fakeparam",
+            // Jetspeed
+            "http://localhost:8080/jetspeed/portal/_ns:Z3RlbXBsYXRlLXRvcDJfX3BhZ2UtdGVtcGxhdGVfX2RwLTFfX1AtMTJjNTRkYjdlYjUtMTAwMDJ8YzB8ZDF8aVVJREx8Zg__",
+            // Liferay generated url
+            "http://vaadin.com/directory?p_p_id=Directory_WAR_Directory&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=UIDL&p_p_cacheability=cacheLevelPage&p_p_col_id=row-1&p_p_col_count=1",
+
+    };
+    private static final String[] URIS_WITH_ABCD_PARAM = new String[] {
+            "http://demo.vaadin.com/?a=b&c=d",
+            "https://demo.vaadin.com/?a=b&c=d",
+            "http://demo.vaadin.com/foo?a=b&c=d",
+            "http://demo.vaadin.com/foo?f&a=b&c=d",
+            "http://demo.vaadin.com/foo?f=1&a=b&c=d",
+            "http://demo.vaadin.com:1234/foo?a&a=b&c=d",
+            "http://demo.vaadin.com:1234/foo?a=b&c=d#frag?fakeparam",
+            "http://localhost:8080/jetspeed/portal/_ns:Z3RlbXBsYXRlLXRvcDJfX3BhZ2UtdGVtcGxhdGVfX2RwLTFfX1AtMTJjNTRkYjdlYjUtMTAwMDJ8YzB8ZDF8aVVJREx8Zg__?a=b&c=d",
+            "http://vaadin.com/directory?p_p_id=Directory_WAR_Directory&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=UIDL&p_p_cacheability=cacheLevelPage&p_p_col_id=row-1&p_p_col_count=1&a=b&c=d",
+
+    };
+
+    private static final String[] URIS_WITH_ABCD_PARAM_AND_FRAGMENT = new String[] {
+            "http://demo.vaadin.com/?a=b&c=d#fragment",
+            "https://demo.vaadin.com/?a=b&c=d#fragment",
+            "http://demo.vaadin.com/foo?a=b&c=d#fragment",
+            "http://demo.vaadin.com/foo?f&a=b&c=d#fragment",
+            "http://demo.vaadin.com/foo?f=1&a=b&c=d#fragment",
+            "http://demo.vaadin.com:1234/foo?a&a=b&c=d#fragment",
+            "",
+            "http://localhost:8080/jetspeed/portal/_ns:Z3RlbXBsYXRlLXRvcDJfX3BhZ2UtdGVtcGxhdGVfX2RwLTFfX1AtMTJjNTRkYjdlYjUtMTAwMDJ8YzB8ZDF8aVVJREx8Zg__?a=b&c=d#fragment",
+            "http://vaadin.com/directory?p_p_id=Directory_WAR_Directory&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=UIDL&p_p_cacheability=cacheLevelPage&p_p_col_id=row-1&p_p_col_count=1&a=b&c=d#fragment",
+
+    };
+
+    @Test
+    public void testParameterAdding() {
+        for (int i = 0; i < URIS.length; i++) {
+            // Adding nothing
+            assertEquals(URIS[i],
+                    ApplicationConnection.addGetParameters(URIS[i], ""));
+
+            // Adding a=b&c=d
+            assertEquals(URIS_WITH_ABCD_PARAM[i],
+                    ApplicationConnection.addGetParameters(URIS[i], "a=b&c=d"));
+
+            // Fragments
+            if (URIS_WITH_ABCD_PARAM_AND_FRAGMENT[i].length() > 0) {
+                assertEquals(
+                        URIS_WITH_ABCD_PARAM_AND_FRAGMENT[i],
+                        ApplicationConnection.addGetParameters(URIS[i]
+                                + "#fragment", "a=b&c=d"));
+
+                // Empty fragment
+                assertEquals(URIS_WITH_ABCD_PARAM_AND_FRAGMENT[i].replace(
+                        "#fragment", "#"),
+                        ApplicationConnection.addGetParameters(URIS[i] + "#",
+                                "a=b&c=d"));
+            }
+        }
+    }
+}
diff --git a/tests/client-side/com/vaadin/terminal/gwt/client/TestVBrowserDetailsUserAgentParser.java b/tests/client-side/com/vaadin/terminal/gwt/client/TestVBrowserDetailsUserAgentParser.java
new file mode 100644
index 0000000000..183a4d0fe3
--- /dev/null
+++ b/tests/client-side/com/vaadin/terminal/gwt/client/TestVBrowserDetailsUserAgentParser.java
@@ -0,0 +1,369 @@
+package com.vaadin.terminal.gwt.client;
+
+import junit.framework.TestCase;
+
+import com.vaadin.terminal.gwt.client.VBrowserDetails;
+
+public class TestVBrowserDetailsUserAgentParser extends TestCase {
+
+    private static final String FIREFOX30_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6";
+    private static final String FIREFOX30_LINUX = "Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.0.12) Gecko/2009070811 Ubuntu/9.04 (jaunty) Firefox/3.0.12";
+    private static final String FIREFOX35_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 (.NET CLR 3.5.30729) FirePHP/0.4";
+    private static final String FIREFOX36_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)";
+    private static final String FIREFOX36B_MAC = "UAString mozilla/5.0 (macintosh; u; intel mac os x 10.6; en-us; rv:1.9.2) gecko/20100115 firefox/3.6";
+    private static final String FIREFOX_30B5_MAC = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5";
+    private static final String FIREFOX_40B7_WIN = "Mozilla/5.0 (Windows NT 5.1; rv:2.0b7) Gecko/20100101 Firefox/4.0b7";
+    private static final String FIREFOX_40B11_WIN = "Mozilla/5.0 (Windows NT 5.1; rv:2.0b11) Gecko/20100101 Firefox/4.0b11";
+    private static final String KONQUEROR_LINUX = "Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Exabot-Thumbnails)";
+
+    private static final String IE6_WINDOWS = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";
+    private static final String IE7_WINDOWS = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
+
+    private static final String IE8_WINDOWS = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)";
+    private static final String IE8_IN_IE7_MODE_WINDOWS = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)";
+
+    private static final String IE9_BETA_IN_IE7_MODE_WINDOWS_7 = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)";
+    private static final String IE9_BETA_IN_IE8_MODE_WINDOWS_7 = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)";
+    private static final String IE9_BETA_WINDOWS_7 = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";
+
+    // "Version/" was added in 10.00
+    private static final String OPERA964_WINDOWS = "Opera/9.64(Windows NT 5.1; U; en) Presto/2.1.1";
+    private static final String OPERA1010_WINDOWS = "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10";
+    private static final String OPERA1050_WINDOWS = "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.5.22 Version/10.50";
+
+    private static final String CHROME3_MAC = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.198 Safari/532.0";
+    private static final String CHROME4_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.89 Safari/532.5";
+
+    private static final String SAFARI3_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 5.1; cs-CZ) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.29";
+    private static final String SAFARI4_MAC = "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; en-us) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7";
+
+    public void testSafari3() {
+        VBrowserDetails bd = new VBrowserDetails(SAFARI3_WINDOWS);
+        assertWebKit(bd);
+        assertSafari(bd);
+        assertBrowserMajorVersion(bd, 3);
+        assertBrowserMinorVersion(bd, 2);
+        assertEngineVersion(bd, 525.0f);
+        assertWindows(bd);
+    }
+
+    public void testSafari4() {
+        VBrowserDetails bd = new VBrowserDetails(SAFARI4_MAC);
+        assertWebKit(bd);
+        assertSafari(bd);
+        assertBrowserMajorVersion(bd, 4);
+        assertBrowserMinorVersion(bd, 0);
+        assertEngineVersion(bd, 531f);
+        assertMacOSX(bd);
+    }
+
+    public void testChrome3() {
+        VBrowserDetails bd = new VBrowserDetails(CHROME3_MAC);
+        assertWebKit(bd);
+        assertChrome(bd);
+        assertBrowserMajorVersion(bd, 3);
+        assertBrowserMinorVersion(bd, 0);
+        assertEngineVersion(bd, 532.0f);
+        assertMacOSX(bd);
+    }
+
+    public void testChrome4() {
+        VBrowserDetails bd = new VBrowserDetails(CHROME4_WINDOWS);
+        assertWebKit(bd);
+        assertChrome(bd);
+        assertBrowserMajorVersion(bd, 4);
+        assertBrowserMinorVersion(bd, 0);
+        assertEngineVersion(bd, 532f);
+        assertWindows(bd);
+    }
+
+    public void testFirefox3() {
+        VBrowserDetails bd = new VBrowserDetails(FIREFOX30_WINDOWS);
+        assertGecko(bd);
+        assertFirefox(bd);
+        assertBrowserMajorVersion(bd, 3);
+        assertBrowserMinorVersion(bd, 0);
+        assertEngineVersion(bd, 1.9f);
+        assertWindows(bd);
+
+        bd = new VBrowserDetails(FIREFOX30_LINUX);
+        assertGecko(bd);
+        assertFirefox(bd);
+        assertBrowserMajorVersion(bd, 3);
+        assertBrowserMinorVersion(bd, 0);
+        assertEngineVersion(bd, 1.9f);
+        assertLinux(bd);
+    }
+
+    public void testFirefox35() {
+        VBrowserDetails bd = new VBrowserDetails(FIREFOX35_WINDOWS);
+        assertGecko(bd);
+        assertFirefox(bd);
+        assertBrowserMajorVersion(bd, 3);
+        assertBrowserMinorVersion(bd, 5);
+        assertEngineVersion(bd, 1.9f);
+        assertWindows(bd);
+    }
+
+    public void testFirefox36() {
+        VBrowserDetails bd = new VBrowserDetails(FIREFOX36_WINDOWS);
+        assertGecko(bd);
+        assertFirefox(bd);
+        assertBrowserMajorVersion(bd, 3);
+        assertBrowserMinorVersion(bd, 6);
+        assertEngineVersion(bd, 1.9f);
+        assertWindows(bd);
+    }
+
+    public void testFirefox30b5() {
+        VBrowserDetails bd = new VBrowserDetails(FIREFOX_30B5_MAC);
+        assertGecko(bd);
+        assertFirefox(bd);
+        assertBrowserMajorVersion(bd, 3);
+        assertBrowserMinorVersion(bd, 0);
+        assertEngineVersion(bd, 1.9f);
+        assertMacOSX(bd);
+    }
+
+    public void testFirefox40b11() {
+        VBrowserDetails bd = new VBrowserDetails(FIREFOX_40B11_WIN);
+        assertGecko(bd);
+        assertFirefox(bd);
+        assertBrowserMajorVersion(bd, 4);
+        assertBrowserMinorVersion(bd, 0);
+        assertEngineVersion(bd, 2.0f);
+        assertWindows(bd);
+    }
+
+    public void testFirefox40b7() {
+        VBrowserDetails bd = new VBrowserDetails(FIREFOX_40B7_WIN);
+        assertGecko(bd);
+        assertFirefox(bd);
+        assertBrowserMajorVersion(bd, 4);
+        assertBrowserMinorVersion(bd, 0);
+        assertEngineVersion(bd, 2.0f);
+        assertWindows(bd);
+    }
+
+    public void testKonquerorLinux() {
+        // Just ensure detection does not crash
+        VBrowserDetails bd = new VBrowserDetails(KONQUEROR_LINUX);
+        assertLinux(bd);
+    }
+
+    public void testFirefox36b() {
+        VBrowserDetails bd = new VBrowserDetails(FIREFOX36B_MAC);
+        assertGecko(bd);
+        assertFirefox(bd);
+        assertBrowserMajorVersion(bd, 3);
+        assertBrowserMinorVersion(bd, 6);
+        assertEngineVersion(bd, 1.9f);
+        assertMacOSX(bd);
+    }
+
+    public void testOpera964() {
+        VBrowserDetails bd = new VBrowserDetails(OPERA964_WINDOWS);
+        assertPresto(bd);
+        assertOpera(bd);
+        assertBrowserMajorVersion(bd, 9);
+        assertBrowserMinorVersion(bd, 64);
+        assertWindows(bd);
+    }
+
+    public void testOpera1010() {
+        VBrowserDetails bd = new VBrowserDetails(OPERA1010_WINDOWS);
+        assertPresto(bd);
+        assertOpera(bd);
+        assertBrowserMajorVersion(bd, 10);
+        assertBrowserMinorVersion(bd, 10);
+        assertWindows(bd);
+    }
+
+    public void testOpera1050() {
+        VBrowserDetails bd = new VBrowserDetails(OPERA1050_WINDOWS);
+        assertPresto(bd);
+        assertOpera(bd);
+        assertBrowserMajorVersion(bd, 10);
+        assertBrowserMinorVersion(bd, 50);
+        assertWindows(bd);
+    }
+
+    public void testIE6() {
+        VBrowserDetails bd = new VBrowserDetails(IE6_WINDOWS);
+        // assertTrident(bd);
+        assertIE(bd);
+        assertBrowserMajorVersion(bd, 6);
+        assertBrowserMinorVersion(bd, 0);
+        assertWindows(bd);
+    }
+
+    public void testIE7() {
+        VBrowserDetails bd = new VBrowserDetails(IE7_WINDOWS);
+        // assertTrident(bd);
+        assertIE(bd);
+        assertBrowserMajorVersion(bd, 7);
+        assertBrowserMinorVersion(bd, 0);
+        assertWindows(bd);
+    }
+
+    public void testIE8() {
+        VBrowserDetails bd = new VBrowserDetails(IE8_WINDOWS);
+        // assertTrident(bd);
+        assertIE(bd);
+        assertBrowserMajorVersion(bd, 8);
+        assertBrowserMinorVersion(bd, 0);
+        assertWindows(bd);
+    }
+
+    public void testIE8CompatibilityMode() {
+        VBrowserDetails bd = new VBrowserDetails(IE8_IN_IE7_MODE_WINDOWS);
+        bd.setIEMode(7);
+
+        // assertTrident(bd);
+        assertIE(bd);
+        assertBrowserMajorVersion(bd, 7);
+        assertBrowserMinorVersion(bd, 0);
+
+        assertWindows(bd);
+    }
+
+    public void testIE9() {
+        VBrowserDetails bd = new VBrowserDetails(IE9_BETA_WINDOWS_7);
+        // assertTrident(bd);
+        assertIE(bd);
+        assertBrowserMajorVersion(bd, 9);
+        assertBrowserMinorVersion(bd, 0);
+        assertWindows(bd);
+    }
+
+    public void testIE9InIE7CompatibilityMode() {
+        VBrowserDetails bd = new VBrowserDetails(IE9_BETA_IN_IE7_MODE_WINDOWS_7);
+        // bd.setIE8InCompatibilityMode();
+
+        // assertTrident(bd);
+        assertIE(bd);
+        assertBrowserMajorVersion(bd, 7);
+        assertBrowserMinorVersion(bd, 0);
+
+        assertWindows(bd);
+    }
+
+    public void testIE9InIE8CompatibilityMode() {
+        VBrowserDetails bd = new VBrowserDetails(IE9_BETA_IN_IE8_MODE_WINDOWS_7);
+        // bd.setIE8InCompatibilityMode();
+
+        // assertTrident(bd);
+        assertIE(bd);
+        assertBrowserMajorVersion(bd, 8);
+        assertBrowserMinorVersion(bd, 0);
+
+        assertWindows(bd);
+    }
+
+    /*
+     * Helper methods below
+     */
+
+    private void assertEngineVersion(VBrowserDetails browserDetails,
+            float version) {
+        assertEquals(version, browserDetails.getBrowserEngineVersion());
+
+    }
+
+    private void assertBrowserMajorVersion(VBrowserDetails browserDetails,
+            int version) {
+        assertEquals(version, browserDetails.getBrowserMajorVersion());
+
+    }
+
+    private void assertBrowserMinorVersion(VBrowserDetails browserDetails,
+            int version) {
+        assertEquals(version, browserDetails.getBrowserMinorVersion());
+
+    }
+
+    private void assertGecko(VBrowserDetails browserDetails) {
+        // Engine
+        assertTrue(browserDetails.isGecko());
+        assertFalse(browserDetails.isWebKit());
+        assertFalse(browserDetails.isPresto());
+    }
+
+    private void assertPresto(VBrowserDetails browserDetails) {
+        // Engine
+        assertFalse(browserDetails.isGecko());
+        assertFalse(browserDetails.isWebKit());
+        assertTrue(browserDetails.isPresto());
+    }
+
+    private void assertWebKit(VBrowserDetails browserDetails) {
+        // Engine
+        assertFalse(browserDetails.isGecko());
+        assertTrue(browserDetails.isWebKit());
+        assertFalse(browserDetails.isPresto());
+    }
+
+    private void assertFirefox(VBrowserDetails browserDetails) {
+        // Browser
+        assertTrue(browserDetails.isFirefox());
+        assertFalse(browserDetails.isChrome());
+        assertFalse(browserDetails.isIE());
+        assertFalse(browserDetails.isOpera());
+        assertFalse(browserDetails.isSafari());
+    }
+
+    private void assertChrome(VBrowserDetails browserDetails) {
+        // Browser
+        assertFalse(browserDetails.isFirefox());
+        assertTrue(browserDetails.isChrome());
+        assertFalse(browserDetails.isIE());
+        assertFalse(browserDetails.isOpera());
+        assertFalse(browserDetails.isSafari());
+    }
+
+    private void assertIE(VBrowserDetails browserDetails) {
+        // Browser
+        assertFalse(browserDetails.isFirefox());
+        assertFalse(browserDetails.isChrome());
+        assertTrue(browserDetails.isIE());
+        assertFalse(browserDetails.isOpera());
+        assertFalse(browserDetails.isSafari());
+    }
+
+    private void assertOpera(VBrowserDetails browserDetails) {
+        // Browser
+        assertFalse(browserDetails.isFirefox());
+        assertFalse(browserDetails.isChrome());
+        assertFalse(browserDetails.isIE());
+        assertTrue(browserDetails.isOpera());
+        assertFalse(browserDetails.isSafari());
+    }
+
+    private void assertSafari(VBrowserDetails browserDetails) {
+        // Browser
+        assertFalse(browserDetails.isFirefox());
+        assertFalse(browserDetails.isChrome());
+        assertFalse(browserDetails.isIE());
+        assertFalse(browserDetails.isOpera());
+        assertTrue(browserDetails.isSafari());
+    }
+
+    private void assertMacOSX(VBrowserDetails browserDetails) {
+        assertFalse(browserDetails.isLinux());
+        assertFalse(browserDetails.isWindows());
+        assertTrue(browserDetails.isMacOSX());
+    }
+
+    private void assertWindows(VBrowserDetails browserDetails) {
+        assertFalse(browserDetails.isLinux());
+        assertTrue(browserDetails.isWindows());
+        assertFalse(browserDetails.isMacOSX());
+    }
+
+    private void assertLinux(VBrowserDetails browserDetails) {
+        assertTrue(browserDetails.isLinux());
+        assertFalse(browserDetails.isWindows());
+        assertFalse(browserDetails.isMacOSX());
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/AbstractBeanContainerTest.java b/tests/server-side/com/vaadin/data/util/AbstractBeanContainerTest.java
new file mode 100644
index 0000000000..3c74a45bd7
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/AbstractBeanContainerTest.java
@@ -0,0 +1,81 @@
+package com.vaadin.data.util;
+
+import com.vaadin.data.util.AbstractBeanContainer;
+import com.vaadin.data.util.BeanContainer;
+import com.vaadin.data.util.BeanItemContainer;
+
+/**
+ * Automated test for {@link AbstractBeanContainer}.
+ * 
+ * Only a limited subset of the functionality is tested here, the rest in tests
+ * of subclasses including {@link BeanItemContainer} and {@link BeanContainer}.
+ */
+public abstract class AbstractBeanContainerTest extends
+        AbstractInMemoryContainerTest {
+
+    public static class Person {
+        private String name;
+
+        public Person(String name) {
+            setName(name);
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getName() {
+            return name;
+        }
+    }
+
+    public static class ClassName {
+        // field names match constants in parent test class
+        private String fullyQualifiedName;
+        private String simpleName;
+        private String reverseFullyQualifiedName;
+        private Integer idNumber;
+
+        public ClassName(String fullyQualifiedName, Integer idNumber) {
+            this.fullyQualifiedName = fullyQualifiedName;
+            simpleName = AbstractContainerTest
+                    .getSimpleName(fullyQualifiedName);
+            reverseFullyQualifiedName = reverse(fullyQualifiedName);
+            this.idNumber = idNumber;
+        }
+
+        public String getFullyQualifiedName() {
+            return fullyQualifiedName;
+        }
+
+        public void setFullyQualifiedName(String fullyQualifiedName) {
+            this.fullyQualifiedName = fullyQualifiedName;
+        }
+
+        public String getSimpleName() {
+            return simpleName;
+        }
+
+        public void setSimpleName(String simpleName) {
+            this.simpleName = simpleName;
+        }
+
+        public String getReverseFullyQualifiedName() {
+            return reverseFullyQualifiedName;
+        }
+
+        public void setReverseFullyQualifiedName(
+                String reverseFullyQualifiedName) {
+            this.reverseFullyQualifiedName = reverseFullyQualifiedName;
+        }
+
+        public Integer getIdNumber() {
+            return idNumber;
+        }
+
+        public void setIdNumber(Integer idNumber) {
+            this.idNumber = idNumber;
+        }
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/AbstractContainerTest.java b/tests/server-side/com/vaadin/data/util/AbstractContainerTest.java
new file mode 100644
index 0000000000..8f6fb0ab8a
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/AbstractContainerTest.java
@@ -0,0 +1,670 @@
+package com.vaadin.data.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Container.Filterable;
+import com.vaadin.data.Container.ItemSetChangeEvent;
+import com.vaadin.data.Container.ItemSetChangeListener;
+import com.vaadin.data.Container.Sortable;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.filter.SimpleStringFilter;
+
+public abstract class AbstractContainerTest extends TestCase {
+
+    /**
+     * Helper class for testing e.g. listeners expecting events to be fired.
+     */
+    protected abstract static class AbstractEventCounter {
+        private int eventCount = 0;
+        private int lastAssertedEventCount = 0;
+
+        /**
+         * Increment the event count. To be called by subclasses e.g. from a
+         * listener method.
+         */
+        protected void increment() {
+            ++eventCount;
+        }
+
+        /**
+         * Check that no one event has occurred since the previous assert call.
+         */
+        public void assertNone() {
+            Assert.assertEquals(lastAssertedEventCount, eventCount);
+        }
+
+        /**
+         * Check that exactly one event has occurred since the previous assert
+         * call.
+         */
+        public void assertOnce() {
+            Assert.assertEquals(++lastAssertedEventCount, eventCount);
+        }
+
+        /**
+         * Reset the counter and the expected count.
+         */
+        public void reset() {
+            eventCount = 0;
+            lastAssertedEventCount = 0;
+        }
+    }
+
+    /**
+     * Test class for counting item set change events and verifying they have
+     * been received.
+     */
+    protected static class ItemSetChangeCounter extends AbstractEventCounter
+            implements ItemSetChangeListener {
+
+        public void containerItemSetChange(ItemSetChangeEvent event) {
+            increment();
+        }
+
+    }
+
+    // #6043: for items that have been filtered out, Container interface does
+    // not specify what to return from getItem() and getContainerProperty(), so
+    // need checkGetItemNull parameter for the test to be usable for most
+    // current containers
+    protected void validateContainer(Container container,
+            Object expectedFirstItemId, Object expectedLastItemId,
+            Object itemIdInSet, Object itemIdNotInSet,
+            boolean checkGetItemNull, int expectedSize) {
+        Container.Indexed indexed = null;
+        if (container instanceof Container.Indexed) {
+            indexed = (Container.Indexed) container;
+        }
+
+        List<Object> itemIdList = new ArrayList<Object>(container.getItemIds());
+
+        // size()
+        assertEquals(expectedSize, container.size());
+        assertEquals(expectedSize, itemIdList.size());
+
+        // first item, last item
+        Object first = itemIdList.get(0);
+        Object last = itemIdList.get(itemIdList.size() - 1);
+
+        assertEquals(expectedFirstItemId, first);
+        assertEquals(expectedLastItemId, last);
+
+        // containsId
+        assertFalse(container.containsId(itemIdNotInSet));
+        assertTrue(container.containsId(itemIdInSet));
+
+        // getItem
+        if (checkGetItemNull) {
+            assertNull(container.getItem(itemIdNotInSet));
+        }
+        assertNotNull(container.getItem(itemIdInSet));
+
+        // getContainerProperty
+        for (Object propId : container.getContainerPropertyIds()) {
+            if (checkGetItemNull) {
+                assertNull(container.getContainerProperty(itemIdNotInSet,
+                        propId));
+            }
+            assertNotNull(container.getContainerProperty(itemIdInSet, propId));
+        }
+
+        if (indexed != null) {
+            // firstItemId
+            assertEquals(first, indexed.firstItemId());
+
+            // lastItemId
+            assertEquals(last, indexed.lastItemId());
+
+            // nextItemId
+            assertEquals(itemIdList.get(1), indexed.nextItemId(first));
+
+            // prevItemId
+            assertEquals(itemIdList.get(itemIdList.size() - 2),
+                    indexed.prevItemId(last));
+
+            // isFirstId
+            assertTrue(indexed.isFirstId(first));
+            assertFalse(indexed.isFirstId(last));
+
+            // isLastId
+            assertTrue(indexed.isLastId(last));
+            assertFalse(indexed.isLastId(first));
+
+            // indexOfId
+            assertEquals(0, indexed.indexOfId(first));
+            assertEquals(expectedSize - 1, indexed.indexOfId(last));
+
+            // getIdByIndex
+            assertEquals(indexed.getIdByIndex(0), first);
+            assertEquals(indexed.getIdByIndex(expectedSize - 1), last);
+
+        }
+
+    }
+
+    protected static final Object FULLY_QUALIFIED_NAME = "fullyQualifiedName";
+    protected static final Object SIMPLE_NAME = "simpleName";
+    protected static final Object REVERSE_FULLY_QUALIFIED_NAME = "reverseFullyQualifiedName";
+    protected static final Object ID_NUMBER = "idNumber";
+
+    protected void testBasicContainerOperations(Container container) {
+        initializeContainer(container);
+
+        // Basic container
+        validateContainer(container, sampleData[0],
+                sampleData[sampleData.length - 1], sampleData[10], "abc", true,
+                sampleData.length);
+    }
+
+    protected void testContainerOrdered(Container.Ordered container) {
+        Object id = container.addItem();
+        assertNotNull(id);
+        Item item = container.getItem(id);
+        assertNotNull(item);
+
+        assertEquals(id, container.firstItemId());
+        assertEquals(id, container.lastItemId());
+
+        // isFirstId
+        assertTrue(container.isFirstId(id));
+        assertTrue(container.isFirstId(container.firstItemId()));
+        // isLastId
+        assertTrue(container.isLastId(id));
+        assertTrue(container.isLastId(container.lastItemId()));
+
+        // Add a new item before the first
+        // addItemAfter
+        Object newFirstId = container.addItemAfter(null);
+        assertNotNull(newFirstId);
+        assertNotNull(container.getItem(newFirstId));
+
+        // isFirstId
+        assertTrue(container.isFirstId(newFirstId));
+        assertTrue(container.isFirstId(container.firstItemId()));
+        // isLastId
+        assertTrue(container.isLastId(id));
+        assertTrue(container.isLastId(container.lastItemId()));
+
+        // nextItemId
+        assertEquals(id, container.nextItemId(newFirstId));
+        assertNull(container.nextItemId(id));
+        assertNull(container.nextItemId("not-in-container"));
+
+        // prevItemId
+        assertEquals(newFirstId, container.prevItemId(id));
+        assertNull(container.prevItemId(newFirstId));
+        assertNull(container.prevItemId("not-in-container"));
+
+        // addItemAfter(Object)
+        Object newSecondItemId = container.addItemAfter(newFirstId);
+        // order is now: newFirstId, newSecondItemId, id
+        assertNotNull(newSecondItemId);
+        assertNotNull(container.getItem(newSecondItemId));
+        assertEquals(id, container.nextItemId(newSecondItemId));
+        assertEquals(newFirstId, container.prevItemId(newSecondItemId));
+
+        // addItemAfter(Object,Object)
+        String fourthId = "id of the fourth item";
+        Item fourth = container.addItemAfter(newFirstId, fourthId);
+        // order is now: newFirstId, fourthId, newSecondItemId, id
+        assertNotNull(fourth);
+        assertEquals(fourth, container.getItem(fourthId));
+        assertEquals(newSecondItemId, container.nextItemId(fourthId));
+        assertEquals(newFirstId, container.prevItemId(fourthId));
+
+        // addItemAfter(Object,Object)
+        Object fifthId = new Object();
+        Item fifth = container.addItemAfter(null, fifthId);
+        // order is now: fifthId, newFirstId, fourthId, newSecondItemId, id
+        assertNotNull(fifth);
+        assertEquals(fifth, container.getItem(fifthId));
+        assertEquals(newFirstId, container.nextItemId(fifthId));
+        assertNull(container.prevItemId(fifthId));
+
+    }
+
+    protected void testContainerIndexed(Container.Indexed container,
+            Object itemId, int itemPosition, boolean testAddEmptyItemAt,
+            Object newItemId, boolean testAddItemAtWithId) {
+        initializeContainer(container);
+
+        // indexOfId
+        Assert.assertEquals(itemPosition, container.indexOfId(itemId));
+
+        // getIdByIndex
+        Assert.assertEquals(itemId, container.getIdByIndex(itemPosition));
+
+        // addItemAt
+        if (testAddEmptyItemAt) {
+            Object addedId = container.addItemAt(itemPosition);
+            Assert.assertEquals(itemPosition, container.indexOfId(addedId));
+            Assert.assertEquals(itemPosition + 1, container.indexOfId(itemId));
+            Assert.assertEquals(addedId, container.getIdByIndex(itemPosition));
+            Assert.assertEquals(itemId,
+                    container.getIdByIndex(itemPosition + 1));
+
+            Object newFirstId = container.addItemAt(0);
+            Assert.assertEquals(0, container.indexOfId(newFirstId));
+            Assert.assertEquals(itemPosition + 2, container.indexOfId(itemId));
+            Assert.assertEquals(newFirstId, container.firstItemId());
+            Assert.assertEquals(newFirstId, container.getIdByIndex(0));
+            Assert.assertEquals(itemId,
+                    container.getIdByIndex(itemPosition + 2));
+
+            Object newLastId = container.addItemAt(container.size());
+            Assert.assertEquals(container.size() - 1,
+                    container.indexOfId(newLastId));
+            Assert.assertEquals(itemPosition + 2, container.indexOfId(itemId));
+            Assert.assertEquals(newLastId, container.lastItemId());
+            Assert.assertEquals(newLastId,
+                    container.getIdByIndex(container.size() - 1));
+            Assert.assertEquals(itemId,
+                    container.getIdByIndex(itemPosition + 2));
+
+            Assert.assertTrue(container.removeItem(addedId));
+            Assert.assertTrue(container.removeItem(newFirstId));
+            Assert.assertTrue(container.removeItem(newLastId));
+
+            Assert.assertFalse(
+                    "Removing non-existing item should indicate failure",
+                    container.removeItem(addedId));
+        }
+
+        // addItemAt
+        if (testAddItemAtWithId) {
+            container.addItemAt(itemPosition, newItemId);
+            Assert.assertEquals(itemPosition, container.indexOfId(newItemId));
+            Assert.assertEquals(itemPosition + 1, container.indexOfId(itemId));
+            Assert.assertEquals(newItemId, container.getIdByIndex(itemPosition));
+            Assert.assertEquals(itemId,
+                    container.getIdByIndex(itemPosition + 1));
+            Assert.assertTrue(container.removeItem(newItemId));
+            Assert.assertFalse(container.containsId(newItemId));
+
+            container.addItemAt(0, newItemId);
+            Assert.assertEquals(0, container.indexOfId(newItemId));
+            Assert.assertEquals(itemPosition + 1, container.indexOfId(itemId));
+            Assert.assertEquals(newItemId, container.firstItemId());
+            Assert.assertEquals(newItemId, container.getIdByIndex(0));
+            Assert.assertEquals(itemId,
+                    container.getIdByIndex(itemPosition + 1));
+            Assert.assertTrue(container.removeItem(newItemId));
+            Assert.assertFalse(container.containsId(newItemId));
+
+            container.addItemAt(container.size(), newItemId);
+            Assert.assertEquals(container.size() - 1,
+                    container.indexOfId(newItemId));
+            Assert.assertEquals(itemPosition, container.indexOfId(itemId));
+            Assert.assertEquals(newItemId, container.lastItemId());
+            Assert.assertEquals(newItemId,
+                    container.getIdByIndex(container.size() - 1));
+            Assert.assertEquals(itemId, container.getIdByIndex(itemPosition));
+            Assert.assertTrue(container.removeItem(newItemId));
+            Assert.assertFalse(container.containsId(newItemId));
+        }
+    }
+
+    protected void testContainerFiltering(Container.Filterable container) {
+        initializeContainer(container);
+
+        // Filter by "contains ab"
+        container.addContainerFilter(new SimpleStringFilter(
+                FULLY_QUALIFIED_NAME, "ab", false, false));
+
+        validateContainer(container, "com.vaadin.data.BufferedValidatable",
+                "com.vaadin.ui.TabSheet",
+                "com.vaadin.terminal.gwt.client.Focusable",
+                "com.vaadin.data.Buffered", isFilteredOutItemNull(), 20);
+
+        // Filter by "contains da" (reversed as ad here)
+        container.removeAllContainerFilters();
+        container.addContainerFilter(new SimpleStringFilter(
+                REVERSE_FULLY_QUALIFIED_NAME, "ad", false, false));
+
+        validateContainer(container, "com.vaadin.data.Buffered",
+                "com.vaadin.terminal.gwt.server.ComponentSizeValidator",
+                "com.vaadin.data.util.IndexedContainer",
+                "com.vaadin.terminal.gwt.client.ui.VUriFragmentUtility",
+                isFilteredOutItemNull(), 37);
+    }
+
+    /**
+     * Override in subclasses to return false if the container getItem() method
+     * returns a non-null value for an item that has been filtered out.
+     * 
+     * @return
+     */
+    protected boolean isFilteredOutItemNull() {
+        return true;
+    }
+
+    protected void testContainerSortingAndFiltering(Container.Sortable sortable) {
+        Filterable filterable = (Filterable) sortable;
+
+        initializeContainer(sortable);
+
+        // Filter by "contains ab"
+        filterable.addContainerFilter(new SimpleStringFilter(
+                FULLY_QUALIFIED_NAME, "ab", false, false));
+
+        // Must be able to sort based on PROP1 for this test
+        assertTrue(sortable.getSortableContainerPropertyIds().contains(
+                FULLY_QUALIFIED_NAME));
+
+        sortable.sort(new Object[] { FULLY_QUALIFIED_NAME },
+                new boolean[] { true });
+
+        validateContainer(sortable, "com.vaadin.data.BufferedValidatable",
+                "com.vaadin.ui.TableFieldFactory",
+                "com.vaadin.ui.TableFieldFactory",
+                "com.vaadin.data.util.BeanItem", isFilteredOutItemNull(), 20);
+    }
+
+    protected void testContainerSorting(Container.Filterable container) {
+        Container.Sortable sortable = (Sortable) container;
+
+        initializeContainer(container);
+
+        // Must be able to sort based on PROP1 for this test
+        assertTrue(sortable.getSortableContainerPropertyIds().contains(
+                FULLY_QUALIFIED_NAME));
+        assertTrue(sortable.getSortableContainerPropertyIds().contains(
+                REVERSE_FULLY_QUALIFIED_NAME));
+
+        sortable.sort(new Object[] { FULLY_QUALIFIED_NAME },
+                new boolean[] { true });
+
+        validateContainer(container, "com.vaadin.Application",
+                "org.vaadin.test.LastClass",
+                "com.vaadin.terminal.ApplicationResource", "blah", true,
+                sampleData.length);
+
+        sortable.sort(new Object[] { REVERSE_FULLY_QUALIFIED_NAME },
+                new boolean[] { true });
+
+        validateContainer(container,
+                "com.vaadin.terminal.gwt.server.ApplicationPortlet2",
+                "com.vaadin.data.util.ObjectProperty",
+                "com.vaadin.ui.BaseFieldFactory", "blah", true,
+                sampleData.length);
+
+    }
+
+    protected void initializeContainer(Container container) {
+        Assert.assertTrue(container.removeAllItems());
+        Object[] propertyIds = container.getContainerPropertyIds().toArray();
+        for (Object propertyId : propertyIds) {
+            container.removeContainerProperty(propertyId);
+        }
+
+        container.addContainerProperty(FULLY_QUALIFIED_NAME, String.class, "");
+        container.addContainerProperty(SIMPLE_NAME, String.class, "");
+        container.addContainerProperty(REVERSE_FULLY_QUALIFIED_NAME,
+                String.class, null);
+        container.addContainerProperty(ID_NUMBER, Integer.class, null);
+
+        for (int i = 0; i < sampleData.length; i++) {
+            String id = sampleData[i];
+            Item item = container.addItem(id);
+
+            item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(sampleData[i]);
+            item.getItemProperty(SIMPLE_NAME).setValue(
+                    getSimpleName(sampleData[i]));
+            item.getItemProperty(REVERSE_FULLY_QUALIFIED_NAME).setValue(
+                    reverse(sampleData[i]));
+            item.getItemProperty(ID_NUMBER).setValue(i);
+        }
+    }
+
+    protected static String getSimpleName(String name) {
+        if (name.contains(".")) {
+            return name.substring(name.lastIndexOf('.') + 1);
+        } else {
+            return name;
+        }
+    }
+
+    protected static String reverse(String string) {
+        return new StringBuilder(string).reverse().toString();
+    }
+
+    protected final String[] sampleData = {
+            "com.vaadin.annotations.AutoGenerated", "com.vaadin.Application",
+            "com.vaadin.data.Buffered", "com.vaadin.data.BufferedValidatable",
+            "com.vaadin.data.Container", "com.vaadin.data.Item",
+            "com.vaadin.data.Property", "com.vaadin.data.util.BeanItem",
+            "com.vaadin.data.util.BeanItemContainer",
+            "com.vaadin.data.util.ContainerHierarchicalWrapper",
+            "com.vaadin.data.util.ContainerOrderedWrapper",
+            "com.vaadin.data.util.DefaultItemSorter",
+            "com.vaadin.data.util.FilesystemContainer",
+            "com.vaadin.data.util.Filter",
+            "com.vaadin.data.util.HierarchicalContainer",
+            "com.vaadin.data.util.IndexedContainer",
+            "com.vaadin.data.util.ItemSorter",
+            "com.vaadin.data.util.MethodProperty",
+            "com.vaadin.data.util.ObjectProperty",
+            "com.vaadin.data.util.PropertyFormatter",
+            "com.vaadin.data.util.PropertysetItem",
+            "com.vaadin.data.util.QueryContainer",
+            "com.vaadin.data.util.TextFileProperty",
+            "com.vaadin.data.Validatable",
+            "com.vaadin.data.validator.AbstractStringValidator",
+            "com.vaadin.data.validator.AbstractValidator",
+            "com.vaadin.data.validator.CompositeValidator",
+            "com.vaadin.data.validator.DoubleValidator",
+            "com.vaadin.data.validator.EmailValidator",
+            "com.vaadin.data.validator.IntegerValidator",
+            "com.vaadin.data.validator.NullValidator",
+            "com.vaadin.data.validator.RegexpValidator",
+            "com.vaadin.data.validator.StringLengthValidator",
+            "com.vaadin.data.Validator", "com.vaadin.event.Action",
+            "com.vaadin.event.ComponentEventListener",
+            "com.vaadin.event.EventRouter", "com.vaadin.event.FieldEvents",
+            "com.vaadin.event.ItemClickEvent", "com.vaadin.event.LayoutEvents",
+            "com.vaadin.event.ListenerMethod",
+            "com.vaadin.event.MethodEventSource",
+            "com.vaadin.event.MouseEvents", "com.vaadin.event.ShortcutAction",
+            "com.vaadin.launcher.DemoLauncher",
+            "com.vaadin.launcher.DevelopmentServerLauncher",
+            "com.vaadin.launcher.util.BrowserLauncher",
+            "com.vaadin.service.ApplicationContext",
+            "com.vaadin.service.FileTypeResolver",
+            "com.vaadin.terminal.ApplicationResource",
+            "com.vaadin.terminal.ClassResource",
+            "com.vaadin.terminal.CompositeErrorMessage",
+            "com.vaadin.terminal.DownloadStream",
+            "com.vaadin.terminal.ErrorMessage",
+            "com.vaadin.terminal.ExternalResource",
+            "com.vaadin.terminal.FileResource",
+            "com.vaadin.terminal.gwt.client.ApplicationConfiguration",
+            "com.vaadin.terminal.gwt.client.ApplicationConnection",
+            "com.vaadin.terminal.gwt.client.BrowserInfo",
+            "com.vaadin.terminal.gwt.client.ClientExceptionHandler",
+            "com.vaadin.terminal.gwt.client.ComponentDetail",
+            "com.vaadin.terminal.gwt.client.ComponentDetailMap",
+            "com.vaadin.terminal.gwt.client.ComponentLocator",
+            "com.vaadin.terminal.gwt.client.Console",
+            "com.vaadin.terminal.gwt.client.Container",
+            "com.vaadin.terminal.gwt.client.ContainerResizedListener",
+            "com.vaadin.terminal.gwt.client.CSSRule",
+            "com.vaadin.terminal.gwt.client.DateTimeService",
+            "com.vaadin.terminal.gwt.client.DefaultWidgetSet",
+            "com.vaadin.terminal.gwt.client.Focusable",
+            "com.vaadin.terminal.gwt.client.HistoryImplIEVaadin",
+            "com.vaadin.terminal.gwt.client.LocaleNotLoadedException",
+            "com.vaadin.terminal.gwt.client.LocaleService",
+            "com.vaadin.terminal.gwt.client.MouseEventDetails",
+            "com.vaadin.terminal.gwt.client.NullConsole",
+            "com.vaadin.terminal.gwt.client.Paintable",
+            "com.vaadin.terminal.gwt.client.RenderInformation",
+            "com.vaadin.terminal.gwt.client.RenderSpace",
+            "com.vaadin.terminal.gwt.client.StyleConstants",
+            "com.vaadin.terminal.gwt.client.TooltipInfo",
+            "com.vaadin.terminal.gwt.client.ui.Action",
+            "com.vaadin.terminal.gwt.client.ui.ActionOwner",
+            "com.vaadin.terminal.gwt.client.ui.AlignmentInfo",
+            "com.vaadin.terminal.gwt.client.ui.CalendarEntry",
+            "com.vaadin.terminal.gwt.client.ui.ClickEventHandler",
+            "com.vaadin.terminal.gwt.client.ui.Field",
+            "com.vaadin.terminal.gwt.client.ui.Icon",
+            "com.vaadin.terminal.gwt.client.ui.layout.CellBasedLayout",
+            "com.vaadin.terminal.gwt.client.ui.layout.ChildComponentContainer",
+            "com.vaadin.terminal.gwt.client.ui.layout.Margins",
+            "com.vaadin.terminal.gwt.client.ui.LayoutClickEventHandler",
+            "com.vaadin.terminal.gwt.client.ui.MenuBar",
+            "com.vaadin.terminal.gwt.client.ui.MenuItem",
+            "com.vaadin.terminal.gwt.client.ui.richtextarea.VRichTextArea",
+            "com.vaadin.terminal.gwt.client.ui.richtextarea.VRichTextToolbar",
+            "com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler",
+            "com.vaadin.terminal.gwt.client.ui.SubPartAware",
+            "com.vaadin.terminal.gwt.client.ui.Table",
+            "com.vaadin.terminal.gwt.client.ui.TreeAction",
+            "com.vaadin.terminal.gwt.client.ui.TreeImages",
+            "com.vaadin.terminal.gwt.client.ui.VAbsoluteLayout",
+            "com.vaadin.terminal.gwt.client.ui.VAccordion",
+            "com.vaadin.terminal.gwt.client.ui.VButton",
+            "com.vaadin.terminal.gwt.client.ui.VCalendarPanel",
+            "com.vaadin.terminal.gwt.client.ui.VCheckBox",
+            "com.vaadin.terminal.gwt.client.ui.VContextMenu",
+            "com.vaadin.terminal.gwt.client.ui.VCssLayout",
+            "com.vaadin.terminal.gwt.client.ui.VCustomComponent",
+            "com.vaadin.terminal.gwt.client.ui.VCustomLayout",
+            "com.vaadin.terminal.gwt.client.ui.VDateField",
+            "com.vaadin.terminal.gwt.client.ui.VDateFieldCalendar",
+            "com.vaadin.terminal.gwt.client.ui.VEmbedded",
+            "com.vaadin.terminal.gwt.client.ui.VFilterSelect",
+            "com.vaadin.terminal.gwt.client.ui.VForm",
+            "com.vaadin.terminal.gwt.client.ui.VFormLayout",
+            "com.vaadin.terminal.gwt.client.ui.VGridLayout",
+            "com.vaadin.terminal.gwt.client.ui.VHorizontalLayout",
+            "com.vaadin.terminal.gwt.client.ui.VLabel",
+            "com.vaadin.terminal.gwt.client.ui.VLink",
+            "com.vaadin.terminal.gwt.client.ui.VListSelect",
+            "com.vaadin.terminal.gwt.client.ui.VMarginInfo",
+            "com.vaadin.terminal.gwt.client.ui.VMenuBar",
+            "com.vaadin.terminal.gwt.client.ui.VNativeButton",
+            "com.vaadin.terminal.gwt.client.ui.VNativeSelect",
+            "com.vaadin.terminal.gwt.client.ui.VNotification",
+            "com.vaadin.terminal.gwt.client.ui.VOptionGroup",
+            "com.vaadin.terminal.gwt.client.ui.VOptionGroupBase",
+            "com.vaadin.terminal.gwt.client.ui.VOrderedLayout",
+            "com.vaadin.terminal.gwt.client.ui.VOverlay",
+            "com.vaadin.terminal.gwt.client.ui.VPanel",
+            "com.vaadin.terminal.gwt.client.ui.VPasswordField",
+            "com.vaadin.terminal.gwt.client.ui.VPopupCalendar",
+            "com.vaadin.terminal.gwt.client.ui.VPopupView",
+            "com.vaadin.terminal.gwt.client.ui.VProgressIndicator",
+            "com.vaadin.terminal.gwt.client.ui.VScrollTable",
+            "com.vaadin.terminal.gwt.client.ui.VSlider",
+            "com.vaadin.terminal.gwt.client.ui.VSplitPanel",
+            "com.vaadin.terminal.gwt.client.ui.VSplitPanelHorizontal",
+            "com.vaadin.terminal.gwt.client.ui.VSplitPanelVertical",
+            "com.vaadin.terminal.gwt.client.ui.VTablePaging",
+            "com.vaadin.terminal.gwt.client.ui.VTabsheet",
+            "com.vaadin.terminal.gwt.client.ui.VTabsheetBase",
+            "com.vaadin.terminal.gwt.client.ui.VTabsheetPanel",
+            "com.vaadin.terminal.gwt.client.ui.VTextArea",
+            "com.vaadin.terminal.gwt.client.ui.VTextField",
+            "com.vaadin.terminal.gwt.client.ui.VTextualDate",
+            "com.vaadin.terminal.gwt.client.ui.VTime",
+            "com.vaadin.terminal.gwt.client.ui.VTree",
+            "com.vaadin.terminal.gwt.client.ui.VTwinColSelect",
+            "com.vaadin.terminal.gwt.client.ui.VUnknownComponent",
+            "com.vaadin.terminal.gwt.client.ui.VUpload",
+            "com.vaadin.terminal.gwt.client.ui.VUriFragmentUtility",
+            "com.vaadin.terminal.gwt.client.ui.VVerticalLayout",
+            "com.vaadin.terminal.gwt.client.ui.VView",
+            "com.vaadin.terminal.gwt.client.ui.VWindow",
+            "com.vaadin.terminal.gwt.client.UIDL",
+            "com.vaadin.terminal.gwt.client.Util",
+            "com.vaadin.terminal.gwt.client.ValueMap",
+            "com.vaadin.terminal.gwt.client.VCaption",
+            "com.vaadin.terminal.gwt.client.VCaptionWrapper",
+            "com.vaadin.terminal.gwt.client.VDebugConsole",
+            "com.vaadin.terminal.gwt.client.VErrorMessage",
+            "com.vaadin.terminal.gwt.client.VTooltip",
+            "com.vaadin.terminal.gwt.client.VUIDLBrowser",
+            "com.vaadin.terminal.gwt.client.WidgetMap",
+            "com.vaadin.terminal.gwt.client.WidgetSet",
+            "com.vaadin.terminal.gwt.server.AbstractApplicationPortlet",
+            "com.vaadin.terminal.gwt.server.AbstractApplicationServlet",
+            "com.vaadin.terminal.gwt.server.AbstractCommunicationManager",
+            "com.vaadin.terminal.gwt.server.AbstractWebApplicationContext",
+            "com.vaadin.terminal.gwt.server.ApplicationPortlet",
+            "com.vaadin.terminal.gwt.server.ApplicationPortlet2",
+            "com.vaadin.terminal.gwt.server.ApplicationRunnerServlet",
+            "com.vaadin.terminal.gwt.server.ApplicationServlet",
+            "com.vaadin.terminal.gwt.server.ChangeVariablesErrorEvent",
+            "com.vaadin.terminal.gwt.server.CommunicationManager",
+            "com.vaadin.terminal.gwt.server.ComponentSizeValidator",
+            "com.vaadin.terminal.gwt.server.Constants",
+            "com.vaadin.terminal.gwt.server.GAEApplicationServlet",
+            "com.vaadin.terminal.gwt.server.HttpServletRequestListener",
+            "com.vaadin.terminal.gwt.server.HttpUploadStream",
+            "com.vaadin.terminal.gwt.server.JsonPaintTarget",
+            "com.vaadin.terminal.gwt.server.PortletApplicationContext",
+            "com.vaadin.terminal.gwt.server.PortletApplicationContext2",
+            "com.vaadin.terminal.gwt.server.PortletCommunicationManager",
+            "com.vaadin.terminal.gwt.server.PortletRequestListener",
+            "com.vaadin.terminal.gwt.server.RestrictedRenderResponse",
+            "com.vaadin.terminal.gwt.server.SessionExpiredException",
+            "com.vaadin.terminal.gwt.server.SystemMessageException",
+            "com.vaadin.terminal.gwt.server.WebApplicationContext",
+            "com.vaadin.terminal.gwt.server.WebBrowser",
+            "com.vaadin.terminal.gwt.widgetsetutils.ClassPathExplorer",
+            "com.vaadin.terminal.gwt.widgetsetutils.WidgetMapGenerator",
+            "com.vaadin.terminal.gwt.widgetsetutils.WidgetSetBuilder",
+            "com.vaadin.terminal.KeyMapper", "com.vaadin.terminal.Paintable",
+            "com.vaadin.terminal.PaintException",
+            "com.vaadin.terminal.PaintTarget",
+            "com.vaadin.terminal.ParameterHandler",
+            "com.vaadin.terminal.Resource", "com.vaadin.terminal.Scrollable",
+            "com.vaadin.terminal.Sizeable",
+            "com.vaadin.terminal.StreamResource",
+            "com.vaadin.terminal.SystemError", "com.vaadin.terminal.Terminal",
+            "com.vaadin.terminal.ThemeResource",
+            "com.vaadin.terminal.UploadStream",
+            "com.vaadin.terminal.URIHandler", "com.vaadin.terminal.UserError",
+            "com.vaadin.terminal.VariableOwner",
+            "com.vaadin.tools.ReflectTools",
+            "com.vaadin.tools.WidgetsetCompiler",
+            "com.vaadin.ui.AbsoluteLayout", "com.vaadin.ui.AbstractComponent",
+            "com.vaadin.ui.AbstractComponentContainer",
+            "com.vaadin.ui.AbstractField", "com.vaadin.ui.AbstractLayout",
+            "com.vaadin.ui.AbstractOrderedLayout",
+            "com.vaadin.ui.AbstractSelect", "com.vaadin.ui.Accordion",
+            "com.vaadin.ui.Alignment", "com.vaadin.ui.AlignmentUtils",
+            "com.vaadin.ui.BaseFieldFactory", "com.vaadin.ui.Button",
+            "com.vaadin.ui.CheckBox", "com.vaadin.ui.ClientWidget",
+            "com.vaadin.ui.ComboBox", "com.vaadin.ui.Component",
+            "com.vaadin.ui.ComponentContainer", "com.vaadin.ui.CssLayout",
+            "com.vaadin.ui.CustomComponent", "com.vaadin.ui.CustomLayout",
+            "com.vaadin.ui.DateField", "com.vaadin.ui.DefaultFieldFactory",
+            "com.vaadin.ui.Embedded", "com.vaadin.ui.ExpandLayout",
+            "com.vaadin.ui.Field", "com.vaadin.ui.FieldFactory",
+            "com.vaadin.ui.Form", "com.vaadin.ui.FormFieldFactory",
+            "com.vaadin.ui.FormLayout", "com.vaadin.ui.GridLayout",
+            "com.vaadin.ui.HorizontalLayout", "com.vaadin.ui.InlineDateField",
+            "com.vaadin.ui.Label", "com.vaadin.ui.Layout",
+            "com.vaadin.ui.Link", "com.vaadin.ui.ListSelect",
+            "com.vaadin.ui.LoginForm", "com.vaadin.ui.MenuBar",
+            "com.vaadin.ui.NativeButton", "com.vaadin.ui.NativeSelect",
+            "com.vaadin.ui.OptionGroup", "com.vaadin.ui.OrderedLayout",
+            "com.vaadin.ui.Panel", "com.vaadin.ui.PopupDateField",
+            "com.vaadin.ui.PopupView", "com.vaadin.ui.ProgressIndicator",
+            "com.vaadin.ui.RichTextArea", "com.vaadin.ui.Select",
+            "com.vaadin.ui.Slider", "com.vaadin.ui.SplitPanel",
+            "com.vaadin.ui.Table", "com.vaadin.ui.TableFieldFactory",
+            "com.vaadin.ui.TabSheet", "com.vaadin.ui.TextField",
+            "com.vaadin.ui.Tree", "com.vaadin.ui.TwinColSelect",
+            "com.vaadin.ui.Upload", "com.vaadin.ui.UriFragmentUtility",
+            "com.vaadin.ui.VerticalLayout", "com.vaadin.ui.Window",
+            "com.vaadin.util.SerializerHelper", "org.vaadin.test.LastClass" };
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/AbstractHierarchicalContainerTest.java b/tests/server-side/com/vaadin/data/util/AbstractHierarchicalContainerTest.java
new file mode 100644
index 0000000000..6ab624b8ff
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/AbstractHierarchicalContainerTest.java
@@ -0,0 +1,256 @@
+package com.vaadin.data.util;
+
+import java.util.Collection;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Container.Hierarchical;
+import com.vaadin.data.Container.Sortable;
+import com.vaadin.data.Item;
+
+public abstract class AbstractHierarchicalContainerTest extends
+        AbstractContainerTest {
+
+    /**
+     * @param container
+     *            The container to validate
+     * @param expectedFirstItemId
+     *            Expected first item id
+     * @param expectedLastItemId
+     *            Expected last item id
+     * @param itemIdInSet
+     *            An item id that is in the container
+     * @param itemIdNotInSet
+     *            An item id that is not in the container
+     * @param checkGetItemNull
+     *            true if getItem() should return null for itemIdNotInSet, false
+     *            to skip the check (container.containsId() is checked in any
+     *            case)
+     * @param expectedSize
+     *            Expected number of items in the container. Not related to
+     *            hierarchy.
+     * @param expectedTraversalSize
+     *            Expected number of items found when traversing from the roots
+     *            down to all available nodes.
+     * @param expectedRootSize
+     *            Expected number of root items
+     * @param rootsHaveChildren
+     *            true if all roots have children, false otherwise (skips some
+     *            asserts)
+     */
+    protected void validateHierarchicalContainer(Hierarchical container,
+            Object expectedFirstItemId, Object expectedLastItemId,
+            Object itemIdInSet, Object itemIdNotInSet,
+            boolean checkGetItemNull, int expectedSize, int expectedRootSize,
+            boolean rootsHaveChildren) {
+
+        validateContainer(container, expectedFirstItemId, expectedLastItemId,
+                itemIdInSet, itemIdNotInSet, checkGetItemNull, expectedSize);
+
+        // rootItemIds
+        Collection<?> rootIds = container.rootItemIds();
+        assertEquals(expectedRootSize, rootIds.size());
+
+        for (Object rootId : rootIds) {
+            // All roots must be in container
+            assertTrue(container.containsId(rootId));
+
+            // All roots must have no parent
+            assertNull(container.getParent(rootId));
+
+            // all roots must be roots
+            assertTrue(container.isRoot(rootId));
+
+            if (rootsHaveChildren) {
+                // all roots have children allowed in this case
+                assertTrue(container.areChildrenAllowed(rootId));
+
+                // all roots have children in this case
+                Collection<?> children = container.getChildren(rootId);
+                assertNotNull(rootId + " should have children", children);
+                assertTrue(rootId + " should have children",
+                        (children.size() > 0));
+                // getParent
+                for (Object childId : children) {
+                    assertEquals(container.getParent(childId), rootId);
+                }
+
+            }
+        }
+
+        // isRoot should return false for unknown items
+        assertFalse(container.isRoot(itemIdNotInSet));
+
+        // hasChildren should return false for unknown items
+        assertFalse(container.hasChildren(itemIdNotInSet));
+
+        // areChildrenAllowed should return false for unknown items
+        assertFalse(container.areChildrenAllowed(itemIdNotInSet));
+
+        // removeItem of unknown items should return false
+        assertFalse(container.removeItem(itemIdNotInSet));
+
+        assertEquals(expectedSize, countNodes(container));
+
+        validateHierarchy(container);
+    }
+
+    private int countNodes(Hierarchical container) {
+        int totalNodes = 0;
+        for (Object rootId : container.rootItemIds()) {
+            totalNodes += countNodes(container, rootId);
+        }
+
+        return totalNodes;
+    }
+
+    private int countNodes(Hierarchical container, Object itemId) {
+        int nodes = 1; // This
+        Collection<?> children = container.getChildren(itemId);
+        if (children != null) {
+            for (Object id : children) {
+                nodes += countNodes(container, id);
+            }
+        }
+
+        return nodes;
+    }
+
+    private void validateHierarchy(Hierarchical container) {
+        for (Object rootId : container.rootItemIds()) {
+            validateHierarchy(container, rootId, null);
+        }
+    }
+
+    private void validateHierarchy(Hierarchical container, Object itemId,
+            Object parentId) {
+        Collection<?> children = container.getChildren(itemId);
+
+        // getParent
+        assertEquals(container.getParent(itemId), parentId);
+
+        if (!container.areChildrenAllowed(itemId)) {
+            // If no children is allowed the item should have no children
+            assertFalse(container.hasChildren(itemId));
+            assertTrue(children == null || children.size() == 0);
+
+            return;
+        }
+        if (children != null) {
+            for (Object id : children) {
+                validateHierarchy(container, id, itemId);
+            }
+        }
+    }
+
+    protected void testHierarchicalContainer(Container.Hierarchical container) {
+        initializeContainer(container);
+
+        int packages = 21 + 3;
+        int expectedSize = sampleData.length + packages;
+        validateHierarchicalContainer(container, "com",
+                "org.vaadin.test.LastClass",
+                "com.vaadin.terminal.ApplicationResource", "blah", true,
+                expectedSize, 2, true);
+
+    }
+
+    protected void testHierarchicalSorting(Container.Hierarchical container) {
+        Container.Sortable sortable = (Sortable) container;
+
+        initializeContainer(container);
+
+        // Must be able to sort based on PROP1 and PROP2 for this test
+        assertTrue(sortable.getSortableContainerPropertyIds().contains(
+                FULLY_QUALIFIED_NAME));
+        assertTrue(sortable.getSortableContainerPropertyIds().contains(
+                REVERSE_FULLY_QUALIFIED_NAME));
+
+        sortable.sort(new Object[] { FULLY_QUALIFIED_NAME },
+                new boolean[] { true });
+
+        int packages = 21 + 3;
+        int expectedSize = sampleData.length + packages;
+        validateHierarchicalContainer(container, "com",
+                "org.vaadin.test.LastClass",
+                "com.vaadin.terminal.ApplicationResource", "blah", true,
+                expectedSize, 2, true);
+
+        sortable.sort(new Object[] { REVERSE_FULLY_QUALIFIED_NAME },
+                new boolean[] { true });
+
+        validateHierarchicalContainer(container,
+                "com.vaadin.terminal.gwt.server.ApplicationPortlet2",
+                "com.vaadin.data.util.ObjectProperty",
+                "com.vaadin.terminal.ApplicationResource", "blah", true,
+                expectedSize, 2, true);
+
+    }
+
+    protected void initializeContainer(Container.Hierarchical container) {
+        container.removeAllItems();
+        Object[] propertyIds = container.getContainerPropertyIds().toArray();
+        for (Object propertyId : propertyIds) {
+            container.removeContainerProperty(propertyId);
+        }
+
+        container.addContainerProperty(FULLY_QUALIFIED_NAME, String.class, "");
+        container.addContainerProperty(SIMPLE_NAME, String.class, "");
+        container.addContainerProperty(REVERSE_FULLY_QUALIFIED_NAME,
+                String.class, null);
+        container.addContainerProperty(ID_NUMBER, Integer.class, null);
+
+        for (int i = 0; i < sampleData.length; i++) {
+            String id = sampleData[i];
+
+            // Add path as parent
+            String paths[] = id.split("\\.");
+            String path = paths[0];
+            // Adds "com" and other items multiple times so should return null
+            // for all but the first time
+            if (container.addItem(path) != null) {
+                assertTrue(container.setChildrenAllowed(path, false));
+                Item item = container.getItem(path);
+                item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(path);
+                item.getItemProperty(SIMPLE_NAME).setValue(getSimpleName(path));
+                item.getItemProperty(REVERSE_FULLY_QUALIFIED_NAME).setValue(
+                        reverse(path));
+                item.getItemProperty(ID_NUMBER).setValue(1);
+            }
+            for (int j = 1; j < paths.length; j++) {
+                String parent = path;
+                path = path + "." + paths[j];
+
+                // Adds "com" and other items multiple times so should return
+                // null for all but the first time
+                if (container.addItem(path) != null) {
+                    assertTrue(container.setChildrenAllowed(path, false));
+
+                    Item item = container.getItem(path);
+                    item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(path);
+                    item.getItemProperty(SIMPLE_NAME).setValue(
+                            getSimpleName(path));
+                    item.getItemProperty(REVERSE_FULLY_QUALIFIED_NAME)
+                            .setValue(reverse(path));
+                    item.getItemProperty(ID_NUMBER).setValue(1);
+
+                }
+                assertTrue(container.setChildrenAllowed(parent, true));
+                assertTrue(
+                        "Failed to set " + parent + " as parent for " + path,
+                        container.setParent(path, parent));
+            }
+
+            Item item = container.getItem(id);
+            assertNotNull(item);
+            String parent = id.substring(0, id.lastIndexOf('.'));
+            assertTrue(container.setParent(id, parent));
+            item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(sampleData[i]);
+            item.getItemProperty(SIMPLE_NAME).setValue(
+                    getSimpleName(sampleData[i]));
+            item.getItemProperty(REVERSE_FULLY_QUALIFIED_NAME).setValue(
+                    reverse(sampleData[i]));
+            item.getItemProperty(ID_NUMBER).setValue(i % 2);
+        }
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/AbstractInMemoryContainerTest.java b/tests/server-side/com/vaadin/data/util/AbstractInMemoryContainerTest.java
new file mode 100644
index 0000000000..bbad33c5bc
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/AbstractInMemoryContainerTest.java
@@ -0,0 +1,6 @@
+package com.vaadin.data.util;
+
+public abstract class AbstractInMemoryContainerTest extends
+        AbstractContainerTest {
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/BeanContainerTest.java b/tests/server-side/com/vaadin/data/util/BeanContainerTest.java
new file mode 100644
index 0000000000..5a753e19d0
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/BeanContainerTest.java
@@ -0,0 +1,425 @@
+package com.vaadin.data.util;
+
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import junit.framework.Assert;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.AbstractBeanContainer.BeanIdResolver;
+import com.vaadin.data.util.BeanContainer;
+
+public class BeanContainerTest extends AbstractBeanContainerTest {
+
+    protected static class PersonNameResolver implements
+            BeanIdResolver<String, Person> {
+
+        public String getIdForBean(Person bean) {
+            return bean != null ? bean.getName() : null;
+        }
+
+    }
+
+    protected static class NullResolver implements
+            BeanIdResolver<String, Person> {
+
+        public String getIdForBean(Person bean) {
+            return null;
+        }
+
+    }
+
+    private Map<String, ClassName> nameToBean = new LinkedHashMap<String, ClassName>();
+
+    private BeanContainer<String, ClassName> getContainer() {
+        return new BeanContainer<String, ClassName>(ClassName.class);
+    }
+
+    @Override
+    public void setUp() {
+        nameToBean.clear();
+
+        for (int i = 0; i < sampleData.length; i++) {
+            ClassName className = new ClassName(sampleData[i], i);
+            nameToBean.put(sampleData[i], className);
+        }
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    protected void initializeContainer(Container container) {
+        BeanContainer<String, ClassName> beanItemContainer = (BeanContainer<String, ClassName>) container;
+
+        beanItemContainer.removeAllItems();
+
+        for (Entry<String, ClassName> entry : nameToBean.entrySet()) {
+            beanItemContainer.addItem(entry.getKey(), entry.getValue());
+        }
+    }
+
+    @Override
+    protected boolean isFilteredOutItemNull() {
+        return false;
+    }
+
+    public void testBasicOperations() {
+        testBasicContainerOperations(getContainer());
+    }
+
+    public void testFiltering() {
+        testContainerFiltering(getContainer());
+    }
+
+    public void testSorting() {
+        testContainerSorting(getContainer());
+    }
+
+    public void testSortingAndFiltering() {
+        testContainerSortingAndFiltering(getContainer());
+    }
+
+    // duplicated from parent class and modified - adding items to
+    // BeanContainer differs from other containers
+    public void testContainerOrdered() {
+        BeanContainer<String, String> container = new BeanContainer<String, String>(
+                String.class);
+
+        String id = "test1";
+
+        Item item = container.addItem(id, "value");
+        assertNotNull(item);
+
+        assertEquals(id, container.firstItemId());
+        assertEquals(id, container.lastItemId());
+
+        // isFirstId
+        assertTrue(container.isFirstId(id));
+        assertTrue(container.isFirstId(container.firstItemId()));
+        // isLastId
+        assertTrue(container.isLastId(id));
+        assertTrue(container.isLastId(container.lastItemId()));
+
+        // Add a new item before the first
+        // addItemAfter
+        String newFirstId = "newFirst";
+        item = container.addItemAfter(null, newFirstId, "newFirstValue");
+        assertNotNull(item);
+        assertNotNull(container.getItem(newFirstId));
+
+        // isFirstId
+        assertTrue(container.isFirstId(newFirstId));
+        assertTrue(container.isFirstId(container.firstItemId()));
+        // isLastId
+        assertTrue(container.isLastId(id));
+        assertTrue(container.isLastId(container.lastItemId()));
+
+        // nextItemId
+        assertEquals(id, container.nextItemId(newFirstId));
+        assertNull(container.nextItemId(id));
+        assertNull(container.nextItemId("not-in-container"));
+
+        // prevItemId
+        assertEquals(newFirstId, container.prevItemId(id));
+        assertNull(container.prevItemId(newFirstId));
+        assertNull(container.prevItemId("not-in-container"));
+
+        // addItemAfter(IDTYPE, IDTYPE, BT)
+        String newSecondItemId = "newSecond";
+        item = container.addItemAfter(newFirstId, newSecondItemId,
+                "newSecondValue");
+        // order is now: newFirstId, newSecondItemId, id
+        assertNotNull(item);
+        assertNotNull(container.getItem(newSecondItemId));
+        assertEquals(id, container.nextItemId(newSecondItemId));
+        assertEquals(newFirstId, container.prevItemId(newSecondItemId));
+
+        // addItemAfter(IDTYPE, IDTYPE, BT)
+        String fourthId = "id of the fourth item";
+        Item fourth = container.addItemAfter(newFirstId, fourthId,
+                "fourthValue");
+        // order is now: newFirstId, fourthId, newSecondItemId, id
+        assertNotNull(fourth);
+        assertEquals(fourth, container.getItem(fourthId));
+        assertEquals(newSecondItemId, container.nextItemId(fourthId));
+        assertEquals(newFirstId, container.prevItemId(fourthId));
+
+        // addItemAfter(IDTYPE, IDTYPE, BT)
+        String fifthId = "fifth";
+        Item fifth = container.addItemAfter(null, fifthId, "fifthValue");
+        // order is now: fifthId, newFirstId, fourthId, newSecondItemId, id
+        assertNotNull(fifth);
+        assertEquals(fifth, container.getItem(fifthId));
+        assertEquals(newFirstId, container.nextItemId(fifthId));
+        assertNull(container.prevItemId(fifthId));
+
+    }
+
+    // TODO test Container.Indexed interface operation - testContainerIndexed()?
+
+    public void testAddItemAt() {
+        BeanContainer<String, String> container = new BeanContainer<String, String>(
+                String.class);
+
+        container.addItem("id1", "value1");
+        // id1
+        container.addItemAt(0, "id2", "value2");
+        // id2, id1
+        container.addItemAt(1, "id3", "value3");
+        // id2, id3, id1
+        container.addItemAt(container.size(), "id4", "value4");
+        // id2, id3, id1, id4
+
+        assertNull(container.addItemAt(-1, "id5", "value5"));
+        assertNull(container.addItemAt(container.size() + 1, "id6", "value6"));
+
+        assertEquals(4, container.size());
+        assertEquals("id2", container.getIdByIndex(0));
+        assertEquals("id3", container.getIdByIndex(1));
+        assertEquals("id1", container.getIdByIndex(2));
+        assertEquals("id4", container.getIdByIndex(3));
+    }
+
+    public void testUnsupportedMethods() {
+        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
+                Person.class);
+        container.addItem("John", new Person("John"));
+
+        try {
+            container.addItem();
+            Assert.fail();
+        } catch (UnsupportedOperationException e) {
+            // should get exception
+        }
+
+        try {
+            container.addItem(null);
+            Assert.fail();
+        } catch (UnsupportedOperationException e) {
+            // should get exception
+        }
+
+        try {
+            container.addItemAfter(null, null);
+            Assert.fail();
+        } catch (UnsupportedOperationException e) {
+            // should get exception
+        }
+
+        try {
+            container.addItemAfter(new Person("Jane"));
+            Assert.fail();
+        } catch (UnsupportedOperationException e) {
+            // should get exception
+        }
+
+        try {
+            container.addItemAt(0);
+            Assert.fail();
+        } catch (UnsupportedOperationException e) {
+            // should get exception
+        }
+
+        try {
+            container.addItemAt(0, new Person("Jane"));
+            Assert.fail();
+        } catch (UnsupportedOperationException e) {
+            // should get exception
+        }
+
+        try {
+            container.addContainerProperty("lastName", String.class, "");
+            Assert.fail();
+        } catch (UnsupportedOperationException e) {
+            // should get exception
+        }
+
+        assertEquals(1, container.size());
+    }
+
+    public void testRemoveContainerProperty() {
+        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
+                Person.class);
+        container.setBeanIdResolver(new PersonNameResolver());
+        container.addBean(new Person("John"));
+
+        Assert.assertEquals("John",
+                container.getContainerProperty("John", "name").getValue());
+        Assert.assertTrue(container.removeContainerProperty("name"));
+        Assert.assertNull(container.getContainerProperty("John", "name"));
+
+        Assert.assertNotNull(container.getItem("John"));
+        // property removed also from item
+        Assert.assertNull(container.getItem("John").getItemProperty("name"));
+    }
+
+    public void testAddNullBeans() {
+        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
+                Person.class);
+
+        assertNull(container.addItem("id1", null));
+        assertNull(container.addItemAfter(null, "id2", null));
+        assertNull(container.addItemAt(0, "id3", null));
+
+        assertEquals(0, container.size());
+    }
+
+    public void testAddNullId() {
+        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
+                Person.class);
+
+        Person john = new Person("John");
+
+        assertNull(container.addItem(null, john));
+        assertNull(container.addItemAfter(null, null, john));
+        assertNull(container.addItemAt(0, null, john));
+
+        assertEquals(0, container.size());
+    }
+
+    public void testEmptyContainer() {
+        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
+                Person.class);
+
+        assertNull(container.firstItemId());
+        assertNull(container.lastItemId());
+
+        assertEquals(0, container.size());
+
+        // could test more about empty container
+    }
+
+    public void testAddBeanWithoutResolver() {
+        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
+                Person.class);
+
+        try {
+            container.addBean(new Person("John"));
+            Assert.fail();
+        } catch (IllegalStateException e) {
+            // should get exception
+        }
+        try {
+            container.addBeanAfter(null, new Person("Jane"));
+            Assert.fail();
+        } catch (IllegalStateException e) {
+            // should get exception
+        }
+        try {
+            container.addBeanAt(0, new Person("Jack"));
+            Assert.fail();
+        } catch (IllegalStateException e) {
+            // should get exception
+        }
+        try {
+            container
+                    .addAll(Arrays.asList(new Person[] { new Person("Jack") }));
+            Assert.fail();
+        } catch (IllegalStateException e) {
+            // should get exception
+        }
+
+        assertEquals(0, container.size());
+    }
+
+    public void testAddBeanWithNullResolver() {
+        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
+                Person.class);
+        // resolver that returns null as item id
+        container.setBeanIdResolver(new NullResolver());
+
+        try {
+            container.addBean(new Person("John"));
+            Assert.fail();
+        } catch (IllegalArgumentException e) {
+            // should get exception
+        }
+        try {
+            container.addBeanAfter(null, new Person("Jane"));
+            Assert.fail();
+        } catch (IllegalArgumentException e) {
+            // should get exception
+        }
+        try {
+            container.addBeanAt(0, new Person("Jack"));
+            Assert.fail();
+        } catch (IllegalArgumentException e) {
+            // should get exception
+        }
+
+        assertEquals(0, container.size());
+    }
+
+    public void testAddBeanWithResolver() {
+        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
+                Person.class);
+        container.setBeanIdResolver(new PersonNameResolver());
+
+        assertNotNull(container.addBean(new Person("John")));
+        assertNotNull(container.addBeanAfter(null, new Person("Jane")));
+        assertNotNull(container.addBeanAt(0, new Person("Jack")));
+
+        container.addAll(Arrays.asList(new Person[] { new Person("Jill"),
+                new Person("Joe") }));
+
+        assertTrue(container.containsId("John"));
+        assertTrue(container.containsId("Jane"));
+        assertTrue(container.containsId("Jack"));
+        assertTrue(container.containsId("Jill"));
+        assertTrue(container.containsId("Joe"));
+        assertEquals(3, container.indexOfId("Jill"));
+        assertEquals(4, container.indexOfId("Joe"));
+        assertEquals(5, container.size());
+    }
+
+    public void testAddNullBeansWithResolver() {
+        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
+                Person.class);
+        container.setBeanIdResolver(new PersonNameResolver());
+
+        assertNull(container.addBean(null));
+        assertNull(container.addBeanAfter(null, null));
+        assertNull(container.addBeanAt(0, null));
+
+        assertEquals(0, container.size());
+    }
+
+    public void testAddBeanWithPropertyResolver() {
+        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
+                Person.class);
+        container.setBeanIdProperty("name");
+
+        assertNotNull(container.addBean(new Person("John")));
+        assertNotNull(container.addBeanAfter(null, new Person("Jane")));
+        assertNotNull(container.addBeanAt(0, new Person("Jack")));
+
+        container.addAll(Arrays.asList(new Person[] { new Person("Jill"),
+                new Person("Joe") }));
+
+        assertTrue(container.containsId("John"));
+        assertTrue(container.containsId("Jane"));
+        assertTrue(container.containsId("Jack"));
+        assertTrue(container.containsId("Jill"));
+        assertTrue(container.containsId("Joe"));
+        assertEquals(3, container.indexOfId("Jill"));
+        assertEquals(4, container.indexOfId("Joe"));
+        assertEquals(5, container.size());
+    }
+
+    public void testAddNestedContainerProperty() {
+        BeanContainer<String, NestedMethodPropertyTest.Person> container = new BeanContainer<String, NestedMethodPropertyTest.Person>(
+                NestedMethodPropertyTest.Person.class);
+        container.setBeanIdProperty("name");
+
+        container.addBean(new NestedMethodPropertyTest.Person("John",
+                new NestedMethodPropertyTest.Address("Ruukinkatu 2-4", 20540)));
+
+        assertTrue(container.addNestedContainerProperty("address.street"));
+        assertEquals("Ruukinkatu 2-4",
+                container.getContainerProperty("John", "address.street")
+                        .getValue());
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/BeanItemContainerSortTest.java b/tests/server-side/com/vaadin/data/util/BeanItemContainerSortTest.java
new file mode 100644
index 0000000000..38f317fef1
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/BeanItemContainerSortTest.java
@@ -0,0 +1,170 @@
+package com.vaadin.data.util;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.data.util.DefaultItemSorter;
+
+public class BeanItemContainerSortTest {
+    public class Person {
+        private String name;
+
+        public int getAge() {
+            return age;
+        }
+
+        public void setAge(int age) {
+            this.age = age;
+        }
+
+        private int age;
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getName() {
+            return name;
+        }
+    }
+
+    public class Parent extends Person {
+        private Set<Person> children = new HashSet<Person>();
+
+        public void setChildren(Set<Person> children) {
+            this.children = children;
+        }
+
+        public Set<Person> getChildren() {
+            return children;
+        }
+    }
+
+    String[] names = new String[] { "Antti", "Ville", "Sirkka", "Jaakko",
+            "Pekka", "John" };
+    int[] ages = new int[] { 10, 20, 50, 12, 64, 67 };
+    String[] sortedByAge = new String[] { names[0], names[3], names[1],
+            names[2], names[4], names[5] };
+
+    public BeanItemContainer<Person> getContainer() {
+        BeanItemContainer<Person> bc = new BeanItemContainer<Person>(
+                Person.class);
+        for (int i = 0; i < names.length; i++) {
+            Person p = new Person();
+            p.setName(names[i]);
+            p.setAge(ages[i]);
+            bc.addBean(p);
+        }
+        return bc;
+
+    }
+
+    public BeanItemContainer<Parent> getParentContainer() {
+        BeanItemContainer<Parent> bc = new BeanItemContainer<Parent>(
+                Parent.class);
+        for (int i = 0; i < names.length; i++) {
+            Parent p = new Parent();
+            p.setName(names[i]);
+            p.setAge(ages[i]);
+            bc.addBean(p);
+        }
+        return bc;
+    }
+
+    @Test
+    public void testSort() {
+        testSort(true);
+    }
+
+    public void testSort(boolean b) {
+        BeanItemContainer<Person> container = getContainer();
+        container.sort(new Object[] { "name" }, new boolean[] { b });
+
+        List<String> asList = Arrays.asList(names);
+        Collections.sort(asList);
+        if (!b) {
+            Collections.reverse(asList);
+        }
+
+        int i = 0;
+        for (String string : asList) {
+            Person idByIndex = container.getIdByIndex(i++);
+            Assert.assertTrue(container.containsId(idByIndex));
+            Assert.assertEquals(string, idByIndex.getName());
+        }
+    }
+
+    @Test
+    public void testReverseSort() {
+        testSort(false);
+    }
+
+    @Test
+    public void primitiveSorting() {
+        BeanItemContainer<Person> container = getContainer();
+        container.sort(new Object[] { "age" }, new boolean[] { true });
+
+        int i = 0;
+        for (String string : sortedByAge) {
+            Person idByIndex = container.getIdByIndex(i++);
+            Assert.assertTrue(container.containsId(idByIndex));
+            Assert.assertEquals(string, idByIndex.getName());
+        }
+    }
+
+    @Test
+    public void customSorting() {
+        BeanItemContainer<Person> container = getContainer();
+
+        // custom sorter using the reverse order
+        container.setItemSorter(new DefaultItemSorter() {
+            @Override
+            public int compare(Object o1, Object o2) {
+                return -super.compare(o1, o2);
+            }
+        });
+
+        container.sort(new Object[] { "age" }, new boolean[] { true });
+
+        int i = container.size() - 1;
+        for (String string : sortedByAge) {
+            Person idByIndex = container.getIdByIndex(i--);
+            Assert.assertTrue(container.containsId(idByIndex));
+            Assert.assertEquals(string, idByIndex.getName());
+        }
+    }
+
+    @Test
+    public void testGetSortableProperties() {
+        BeanItemContainer<Person> container = getContainer();
+
+        Collection<?> sortablePropertyIds = container
+                .getSortableContainerPropertyIds();
+        Assert.assertEquals(2, sortablePropertyIds.size());
+        Assert.assertTrue(sortablePropertyIds.contains("name"));
+        Assert.assertTrue(sortablePropertyIds.contains("age"));
+    }
+
+    @Test
+    public void testGetNonSortableProperties() {
+        BeanItemContainer<Parent> container = getParentContainer();
+
+        Assert.assertEquals(3, container.getContainerPropertyIds().size());
+
+        Collection<?> sortablePropertyIds = container
+                .getSortableContainerPropertyIds();
+        Assert.assertEquals(2, sortablePropertyIds.size());
+        Assert.assertTrue(sortablePropertyIds.contains("name"));
+        Assert.assertTrue(sortablePropertyIds.contains("age"));
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/BeanItemContainerTest.java b/tests/server-side/com/vaadin/data/util/BeanItemContainerTest.java
new file mode 100644
index 0000000000..29043b1670
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/BeanItemContainerTest.java
@@ -0,0 +1,718 @@
+package com.vaadin.data.util;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.BeanItemContainer;
+
+/**
+ * Test basic functionality of BeanItemContainer.
+ * 
+ * Most sorting related tests are in {@link BeanItemContainerSortTest}.
+ */
+public class BeanItemContainerTest extends AbstractBeanContainerTest {
+
+    // basics from the common container test
+
+    private Map<String, ClassName> nameToBean = new LinkedHashMap<String, ClassName>();
+
+    private BeanItemContainer<ClassName> getContainer() {
+        return new BeanItemContainer<ClassName>(ClassName.class);
+    }
+
+    @Override
+    public void setUp() {
+        nameToBean.clear();
+
+        for (int i = 0; i < sampleData.length; i++) {
+            ClassName className = new ClassName(sampleData[i], i);
+            nameToBean.put(sampleData[i], className);
+        }
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    protected void initializeContainer(Container container) {
+        BeanItemContainer<ClassName> beanItemContainer = (BeanItemContainer<ClassName>) container;
+
+        beanItemContainer.removeAllItems();
+
+        Iterator<ClassName> it = nameToBean.values().iterator();
+        while (it.hasNext()) {
+            beanItemContainer.addBean(it.next());
+        }
+    }
+
+    @Override
+    protected void validateContainer(Container container,
+            Object expectedFirstItemId, Object expectedLastItemId,
+            Object itemIdInSet, Object itemIdNotInSet,
+            boolean checkGetItemNull, int expectedSize) {
+        Object notInSet = nameToBean.get(itemIdNotInSet);
+        if (notInSet == null && itemIdNotInSet != null) {
+            notInSet = new ClassName(String.valueOf(itemIdNotInSet), 9999);
+        }
+        super.validateContainer(container, nameToBean.get(expectedFirstItemId),
+                nameToBean.get(expectedLastItemId),
+                nameToBean.get(itemIdInSet), notInSet, checkGetItemNull,
+                expectedSize);
+    }
+
+    @Override
+    protected boolean isFilteredOutItemNull() {
+        return false;
+    }
+
+    public void testBasicOperations() {
+        testBasicContainerOperations(getContainer());
+    }
+
+    public void testFiltering() {
+        testContainerFiltering(getContainer());
+    }
+
+    public void testSorting() {
+        testContainerSorting(getContainer());
+    }
+
+    public void testSortingAndFiltering() {
+        testContainerSortingAndFiltering(getContainer());
+    }
+
+    // duplicated from parent class and modified - adding items to
+    // BeanItemContainer differs from other containers
+    public void testContainerOrdered() {
+        BeanItemContainer<String> container = new BeanItemContainer<String>(
+                String.class);
+
+        String id = "test1";
+
+        Item item = container.addBean(id);
+        assertNotNull(item);
+
+        assertEquals(id, container.firstItemId());
+        assertEquals(id, container.lastItemId());
+
+        // isFirstId
+        assertTrue(container.isFirstId(id));
+        assertTrue(container.isFirstId(container.firstItemId()));
+        // isLastId
+        assertTrue(container.isLastId(id));
+        assertTrue(container.isLastId(container.lastItemId()));
+
+        // Add a new item before the first
+        // addItemAfter
+        String newFirstId = "newFirst";
+        item = container.addItemAfter(null, newFirstId);
+        assertNotNull(item);
+        assertNotNull(container.getItem(newFirstId));
+
+        // isFirstId
+        assertTrue(container.isFirstId(newFirstId));
+        assertTrue(container.isFirstId(container.firstItemId()));
+        // isLastId
+        assertTrue(container.isLastId(id));
+        assertTrue(container.isLastId(container.lastItemId()));
+
+        // nextItemId
+        assertEquals(id, container.nextItemId(newFirstId));
+        assertNull(container.nextItemId(id));
+        assertNull(container.nextItemId("not-in-container"));
+
+        // prevItemId
+        assertEquals(newFirstId, container.prevItemId(id));
+        assertNull(container.prevItemId(newFirstId));
+        assertNull(container.prevItemId("not-in-container"));
+
+        // addItemAfter(Object)
+        String newSecondItemId = "newSecond";
+        item = container.addItemAfter(newFirstId, newSecondItemId);
+        // order is now: newFirstId, newSecondItemId, id
+        assertNotNull(item);
+        assertNotNull(container.getItem(newSecondItemId));
+        assertEquals(id, container.nextItemId(newSecondItemId));
+        assertEquals(newFirstId, container.prevItemId(newSecondItemId));
+
+        // addItemAfter(Object,Object)
+        String fourthId = "id of the fourth item";
+        Item fourth = container.addItemAfter(newFirstId, fourthId);
+        // order is now: newFirstId, fourthId, newSecondItemId, id
+        assertNotNull(fourth);
+        assertEquals(fourth, container.getItem(fourthId));
+        assertEquals(newSecondItemId, container.nextItemId(fourthId));
+        assertEquals(newFirstId, container.prevItemId(fourthId));
+
+        // addItemAfter(Object,Object)
+        Object fifthId = "fifth";
+        Item fifth = container.addItemAfter(null, fifthId);
+        // order is now: fifthId, newFirstId, fourthId, newSecondItemId, id
+        assertNotNull(fifth);
+        assertEquals(fifth, container.getItem(fifthId));
+        assertEquals(newFirstId, container.nextItemId(fifthId));
+        assertNull(container.prevItemId(fifthId));
+
+    }
+
+    public void testContainerIndexed() {
+        testContainerIndexed(getContainer(), nameToBean.get(sampleData[2]), 2,
+                false, new ClassName("org.vaadin.test.Test", 8888), true);
+    }
+
+    @SuppressWarnings("deprecation")
+    public void testCollectionConstructors() {
+        List<ClassName> classNames = new ArrayList<ClassName>();
+        classNames.add(new ClassName("a.b.c.Def", 1));
+        classNames.add(new ClassName("a.b.c.Fed", 2));
+        classNames.add(new ClassName("b.c.d.Def", 3));
+
+        // note that this constructor is problematic, users should use the
+        // version that
+        // takes the bean class as a parameter
+        BeanItemContainer<ClassName> container = new BeanItemContainer<ClassName>(
+                classNames);
+
+        Assert.assertEquals(3, container.size());
+        Assert.assertEquals(classNames.get(0), container.firstItemId());
+        Assert.assertEquals(classNames.get(1), container.getIdByIndex(1));
+        Assert.assertEquals(classNames.get(2), container.lastItemId());
+
+        BeanItemContainer<ClassName> container2 = new BeanItemContainer<ClassName>(
+                ClassName.class, classNames);
+
+        Assert.assertEquals(3, container2.size());
+        Assert.assertEquals(classNames.get(0), container2.firstItemId());
+        Assert.assertEquals(classNames.get(1), container2.getIdByIndex(1));
+        Assert.assertEquals(classNames.get(2), container2.lastItemId());
+    }
+
+    // this only applies to the collection constructor with no type parameter
+    @SuppressWarnings("deprecation")
+    public void testEmptyCollectionConstructor() {
+        try {
+            new BeanItemContainer<ClassName>((Collection<ClassName>) null);
+            Assert.fail("Initializing BeanItemContainer from a null collection should not work!");
+        } catch (IllegalArgumentException e) {
+            // success
+        }
+        try {
+            new BeanItemContainer<ClassName>(new ArrayList<ClassName>());
+            Assert.fail("Initializing BeanItemContainer from an empty collection should not work!");
+        } catch (IllegalArgumentException e) {
+            // success
+        }
+    }
+
+    public void testItemSetChangeListeners() {
+        BeanItemContainer<ClassName> container = getContainer();
+        ItemSetChangeCounter counter = new ItemSetChangeCounter();
+        container.addListener(counter);
+
+        ClassName cn1 = new ClassName("com.example.Test", 1111);
+        ClassName cn2 = new ClassName("com.example.Test2", 2222);
+
+        initializeContainer(container);
+        counter.reset();
+        container.addBean(cn1);
+        counter.assertOnce();
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItem(cn1);
+        counter.assertOnce();
+        // no notification if already in container
+        container.addItem(cn1);
+        counter.assertNone();
+        container.addItem(cn2);
+        counter.assertOnce();
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAfter(null, cn1);
+        counter.assertOnce();
+        Assert.assertEquals(
+                "com.example.Test",
+                container.getContainerProperty(container.firstItemId(),
+                        FULLY_QUALIFIED_NAME).getValue());
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAfter(container.firstItemId(), cn1);
+        counter.assertOnce();
+        Assert.assertEquals(
+                "com.example.Test",
+                container.getContainerProperty(container.getIdByIndex(1),
+                        FULLY_QUALIFIED_NAME).getValue());
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAfter(container.lastItemId(), cn1);
+        counter.assertOnce();
+        Assert.assertEquals(
+                "com.example.Test",
+                container.getContainerProperty(container.lastItemId(),
+                        FULLY_QUALIFIED_NAME).getValue());
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAt(0, cn1);
+        counter.assertOnce();
+        Assert.assertEquals(
+                "com.example.Test",
+                container.getContainerProperty(container.firstItemId(),
+                        FULLY_QUALIFIED_NAME).getValue());
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAt(1, cn1);
+        counter.assertOnce();
+        Assert.assertEquals(
+                "com.example.Test",
+                container.getContainerProperty(container.getIdByIndex(1),
+                        FULLY_QUALIFIED_NAME).getValue());
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAt(container.size(), cn1);
+        counter.assertOnce();
+        Assert.assertEquals(
+                "com.example.Test",
+                container.getContainerProperty(container.lastItemId(),
+                        FULLY_QUALIFIED_NAME).getValue());
+
+        initializeContainer(container);
+        counter.reset();
+        container.removeItem(nameToBean.get(sampleData[0]));
+        counter.assertOnce();
+
+        initializeContainer(container);
+        counter.reset();
+        // no notification for removing a non-existing item
+        container.removeItem(cn1);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        container.removeAllItems();
+        counter.assertOnce();
+        // already empty
+        container.removeAllItems();
+        counter.assertNone();
+
+    }
+
+    public void testItemSetChangeListenersFiltering() {
+        BeanItemContainer<ClassName> container = getContainer();
+        ItemSetChangeCounter counter = new ItemSetChangeCounter();
+        container.addListener(counter);
+
+        ClassName cn1 = new ClassName("com.example.Test", 1111);
+        ClassName cn2 = new ClassName("com.example.Test2", 2222);
+        ClassName other = new ClassName("com.example.Other", 3333);
+
+        // simply adding or removing container filters should cause event
+        // (content changes)
+
+        initializeContainer(container);
+        counter.reset();
+        container.addContainerFilter(SIMPLE_NAME, "a", true, false);
+        counter.assertOnce();
+        container.removeContainerFilters(SIMPLE_NAME);
+        counter.assertOnce();
+
+        initializeContainer(container);
+        counter.reset();
+        container.addContainerFilter(SIMPLE_NAME, "a", true, false);
+        counter.assertOnce();
+        container.removeAllContainerFilters();
+        counter.assertOnce();
+
+        // perform operations while filtering container
+
+        initializeContainer(container);
+        counter.reset();
+        container.addContainerFilter(FULLY_QUALIFIED_NAME, "Test", true, false);
+        counter.assertOnce();
+
+        // passes filter
+        container.addBean(cn1);
+        counter.assertOnce();
+
+        // passes filter but already in the container
+        container.addBean(cn1);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+
+        // passes filter
+        container.addItem(cn1);
+        counter.assertOnce();
+        // already in the container
+        container.addItem(cn1);
+        counter.assertNone();
+        container.addItem(cn2);
+        counter.assertOnce();
+        // does not pass filter
+        container.addItem(other);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAfter(null, cn1);
+        counter.assertOnce();
+        Assert.assertEquals(
+                "com.example.Test",
+                container.getContainerProperty(container.firstItemId(),
+                        FULLY_QUALIFIED_NAME).getValue());
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAfter(container.firstItemId(), cn1);
+        counter.assertOnce();
+        Assert.assertEquals(
+                "com.example.Test",
+                container.getContainerProperty(container.getIdByIndex(1),
+                        FULLY_QUALIFIED_NAME).getValue());
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAfter(container.lastItemId(), cn1);
+        counter.assertOnce();
+        Assert.assertEquals(
+                "com.example.Test",
+                container.getContainerProperty(container.lastItemId(),
+                        FULLY_QUALIFIED_NAME).getValue());
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAt(0, cn1);
+        counter.assertOnce();
+        Assert.assertEquals(
+                "com.example.Test",
+                container.getContainerProperty(container.firstItemId(),
+                        FULLY_QUALIFIED_NAME).getValue());
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAt(1, cn1);
+        counter.assertOnce();
+        Assert.assertEquals(
+                "com.example.Test",
+                container.getContainerProperty(container.getIdByIndex(1),
+                        FULLY_QUALIFIED_NAME).getValue());
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAt(container.size(), cn1);
+        counter.assertOnce();
+        Assert.assertEquals(
+                "com.example.Test",
+                container.getContainerProperty(container.lastItemId(),
+                        FULLY_QUALIFIED_NAME).getValue());
+
+        // does not pass filter
+        // note: testAddRemoveWhileFiltering() checks position for these after
+        // removing filter etc, here concentrating on listeners
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAfter(null, other);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAfter(container.firstItemId(), other);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAfter(container.lastItemId(), other);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAt(0, other);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAt(1, other);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAt(container.size(), other);
+        counter.assertNone();
+
+        // passes filter
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItem(cn1);
+        counter.assertOnce();
+        container.removeItem(cn1);
+        counter.assertOnce();
+
+        // does not pass filter
+
+        initializeContainer(container);
+        counter.reset();
+        // not visible
+        container.removeItem(nameToBean.get(sampleData[0]));
+        counter.assertNone();
+
+        container.removeAllItems();
+        counter.assertOnce();
+        // no visible items
+        container.removeAllItems();
+        counter.assertNone();
+    }
+
+    public void testAddRemoveWhileFiltering() {
+        BeanItemContainer<Person> container = new BeanItemContainer<Person>(
+                Person.class);
+
+        Person john = new Person("John");
+        Person jane = new Person("Jane");
+        Person matthew = new Person("Matthew");
+
+        Person jack = new Person("Jack");
+        Person michael = new Person("Michael");
+        Person william = new Person("William");
+        Person julia = new Person("Julia");
+        Person george = new Person("George");
+        Person mark = new Person("Mark");
+
+        container.addBean(john);
+        container.addBean(jane);
+        container.addBean(matthew);
+
+        assertEquals(3, container.size());
+        // john, jane, matthew
+
+        container.addContainerFilter("name", "j", true, true);
+
+        assertEquals(2, container.size());
+        // john, jane, (matthew)
+
+        // add a bean that passes the filter
+        container.addBean(jack);
+        assertEquals(3, container.size());
+        assertEquals(jack, container.lastItemId());
+        // john, jane, (matthew), jack
+
+        // add beans that do not pass the filter
+        container.addBean(michael);
+        // john, jane, (matthew), jack, (michael)
+        container.addItemAfter(null, william);
+        // (william), john, jane, (matthew), jack, (michael)
+
+        // add after an item that is shown
+        container.addItemAfter(john, george);
+        // (william), john, (george), jane, (matthew), jack, (michael)
+        assertEquals(3, container.size());
+        assertEquals(john, container.firstItemId());
+
+        // add after an item that is not shown does nothing
+        container.addItemAfter(william, julia);
+        // (william), john, (george), jane, (matthew), jack, (michael)
+        assertEquals(3, container.size());
+        assertEquals(john, container.firstItemId());
+
+        container.addItemAt(1, julia);
+        // (william), john, julia, (george), jane, (matthew), jack, (michael)
+
+        container.addItemAt(2, mark);
+        // (william), john, julia, (mark), (george), jane, (matthew), jack,
+        // (michael)
+
+        container.removeItem(matthew);
+        // (william), john, julia, (mark), (george), jane, jack, (michael)
+
+        assertEquals(4, container.size());
+        assertEquals(jack, container.lastItemId());
+
+        container.removeContainerFilters("name");
+
+        assertEquals(8, container.size());
+        assertEquals(william, container.firstItemId());
+        assertEquals(john, container.nextItemId(william));
+        assertEquals(julia, container.nextItemId(john));
+        assertEquals(mark, container.nextItemId(julia));
+        assertEquals(george, container.nextItemId(mark));
+        assertEquals(jane, container.nextItemId(george));
+        assertEquals(jack, container.nextItemId(jane));
+        assertEquals(michael, container.lastItemId());
+    }
+
+    public void testRefilterOnPropertyModification() {
+        BeanItemContainer<Person> container = new BeanItemContainer<Person>(
+                Person.class);
+
+        Person john = new Person("John");
+        Person jane = new Person("Jane");
+        Person matthew = new Person("Matthew");
+
+        container.addBean(john);
+        container.addBean(jane);
+        container.addBean(matthew);
+
+        assertEquals(3, container.size());
+        // john, jane, matthew
+
+        container.addContainerFilter("name", "j", true, true);
+
+        assertEquals(2, container.size());
+        // john, jane, (matthew)
+
+        // #6053 currently, modification of an item that is not visible does not
+        // trigger refiltering - should it?
+        // matthew.setName("Julia");
+        // assertEquals(3, container.size());
+        // john, jane, julia
+
+        john.setName("Mark");
+        assertEquals(2, container.size());
+        // (mark), jane, julia
+
+        container.removeAllContainerFilters();
+
+        assertEquals(3, container.size());
+    }
+
+    public void testAddAll() {
+        BeanItemContainer<Person> container = new BeanItemContainer<Person>(
+                Person.class);
+
+        Person john = new Person("John");
+        Person jane = new Person("Jane");
+        Person matthew = new Person("Matthew");
+
+        container.addBean(john);
+        container.addBean(jane);
+        container.addBean(matthew);
+
+        assertEquals(3, container.size());
+        // john, jane, matthew
+
+        Person jack = new Person("Jack");
+        Person michael = new Person("Michael");
+
+        // addAll
+        container.addAll(Arrays.asList(jack, michael));
+        // john, jane, matthew, jack, michael
+
+        assertEquals(5, container.size());
+        assertEquals(jane, container.nextItemId(john));
+        assertEquals(matthew, container.nextItemId(jane));
+        assertEquals(jack, container.nextItemId(matthew));
+        assertEquals(michael, container.nextItemId(jack));
+    }
+
+    public void testUnsupportedMethods() {
+        BeanItemContainer<Person> container = new BeanItemContainer<Person>(
+                Person.class);
+        container.addBean(new Person("John"));
+
+        try {
+            container.addItem();
+            Assert.fail();
+        } catch (UnsupportedOperationException e) {
+            // should get exception
+        }
+
+        try {
+            container.addItemAfter(new Person("Jane"));
+            Assert.fail();
+        } catch (UnsupportedOperationException e) {
+            // should get exception
+        }
+
+        try {
+            container.addItemAt(0);
+            Assert.fail();
+        } catch (UnsupportedOperationException e) {
+            // should get exception
+        }
+
+        try {
+            container.addContainerProperty("lastName", String.class, "");
+            Assert.fail();
+        } catch (UnsupportedOperationException e) {
+            // should get exception
+        }
+
+        assertEquals(1, container.size());
+    }
+
+    public void testRemoveContainerProperty() {
+        BeanItemContainer<Person> container = new BeanItemContainer<Person>(
+                Person.class);
+        Person john = new Person("John");
+        container.addBean(john);
+
+        Assert.assertEquals("John", container
+                .getContainerProperty(john, "name").getValue());
+        Assert.assertTrue(container.removeContainerProperty("name"));
+        Assert.assertNull(container.getContainerProperty(john, "name"));
+
+        Assert.assertNotNull(container.getItem(john));
+        // property removed also from item
+        Assert.assertNull(container.getItem(john).getItemProperty("name"));
+    }
+
+    public void testAddNullBean() {
+        BeanItemContainer<Person> container = new BeanItemContainer<Person>(
+                Person.class);
+        Person john = new Person("John");
+        container.addBean(john);
+
+        assertNull(container.addItem(null));
+        assertNull(container.addItemAfter(null, null));
+        assertNull(container.addItemAfter(john, null));
+        assertNull(container.addItemAt(0, null));
+
+        assertEquals(1, container.size());
+    }
+
+    public void testBeanIdResolver() {
+        BeanItemContainer<Person> container = new BeanItemContainer<Person>(
+                Person.class);
+        Person john = new Person("John");
+
+        assertSame(john, container.getBeanIdResolver().getIdForBean(john));
+    }
+
+    public void testNullBeanClass() {
+        try {
+            new BeanItemContainer<Object>((Class<Object>) null);
+        } catch (IllegalArgumentException e) {
+            // should get exception
+        }
+    }
+
+    public void testAddNestedContainerProperty() {
+        BeanItemContainer<NestedMethodPropertyTest.Person> container = new BeanItemContainer<NestedMethodPropertyTest.Person>(
+                NestedMethodPropertyTest.Person.class);
+
+        NestedMethodPropertyTest.Person john = new NestedMethodPropertyTest.Person(
+                "John", new NestedMethodPropertyTest.Address("Ruukinkatu 2-4",
+                        20540));
+        container.addBean(john);
+
+        assertTrue(container.addNestedContainerProperty("address.street"));
+        assertEquals("Ruukinkatu 2-4",
+                container.getContainerProperty(john, "address.street")
+                        .getValue());
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/BeanItemTest.java b/tests/server-side/com/vaadin/data/util/BeanItemTest.java
new file mode 100644
index 0000000000..044a410803
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/BeanItemTest.java
@@ -0,0 +1,337 @@
+package com.vaadin.data.util;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.data.util.MethodProperty;
+import com.vaadin.data.util.MethodPropertyDescriptor;
+import com.vaadin.data.util.VaadinPropertyDescriptor;
+
+/**
+ * Test BeanItem specific features.
+ * 
+ * Only public API is tested, not the methods with package visibility.
+ * 
+ * See also {@link PropertySetItemTest}, which tests the base class.
+ */
+public class BeanItemTest extends TestCase {
+
+    @SuppressWarnings("unused")
+    protected static class MySuperClass {
+        private int superPrivate = 1;
+        private int superPrivate2 = 2;
+        protected double superProtected = 3.0;
+        private double superProtected2 = 4.0;
+        public boolean superPublic = true;
+        private boolean superPublic2 = true;
+
+        public int getSuperPrivate() {
+            return superPrivate;
+        }
+
+        public void setSuperPrivate(int superPrivate) {
+            this.superPrivate = superPrivate;
+        }
+
+        public double getSuperProtected() {
+            return superProtected;
+        }
+
+        public void setSuperProtected(double superProtected) {
+            this.superProtected = superProtected;
+        }
+
+        public boolean isSuperPublic() {
+            return superPublic;
+        }
+
+        public void setSuperPublic(boolean superPublic) {
+            this.superPublic = superPublic;
+        }
+
+    }
+
+    protected static class MyClass extends MySuperClass {
+        private String name;
+        public int value = 123;
+
+        public MyClass(String name) {
+            this.name = name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setNoField(String name) {
+        }
+
+        public String getNoField() {
+            return "no field backing this setter";
+        }
+
+        public String getName2() {
+            return name;
+        }
+    }
+
+    protected static class MyClass2 extends MyClass {
+        public MyClass2(String name) {
+            super(name);
+        }
+
+        @Override
+        public void setName(String name) {
+            super.setName(name + "2");
+        }
+
+        @Override
+        public String getName() {
+            return super.getName() + "2";
+        }
+
+        @Override
+        public String getName2() {
+            return super.getName();
+        }
+
+        public void setName2(String name) {
+            super.setName(name);
+        }
+    }
+
+    protected static interface MySuperInterface {
+        public int getSuper1();
+
+        public void setSuper1(int i);
+
+        public int getOverride();
+    }
+
+    protected static interface MySuperInterface2 {
+        public int getSuper2();
+    }
+
+    protected static interface MySubInterface extends MySuperInterface,
+            MySuperInterface2 {
+        public int getSub();
+
+        public void setSub(int i);
+
+        public int getOverride();
+
+        public void setOverride(int i);
+    }
+
+    public void testGetProperties() {
+        BeanItem<MySuperClass> item = new BeanItem<MySuperClass>(
+                new MySuperClass());
+
+        Collection<?> itemPropertyIds = item.getItemPropertyIds();
+        Assert.assertEquals(3, itemPropertyIds.size());
+        Assert.assertTrue(itemPropertyIds.contains("superPrivate"));
+        Assert.assertTrue(itemPropertyIds.contains("superProtected"));
+        Assert.assertTrue(itemPropertyIds.contains("superPublic"));
+    }
+
+    public void testGetSuperClassProperties() {
+        BeanItem<MyClass> item = new BeanItem<MyClass>(new MyClass("bean1"));
+
+        Collection<?> itemPropertyIds = item.getItemPropertyIds();
+        Assert.assertEquals(6, itemPropertyIds.size());
+        Assert.assertTrue(itemPropertyIds.contains("superPrivate"));
+        Assert.assertTrue(itemPropertyIds.contains("superProtected"));
+        Assert.assertTrue(itemPropertyIds.contains("superPublic"));
+        Assert.assertTrue(itemPropertyIds.contains("name"));
+        Assert.assertTrue(itemPropertyIds.contains("noField"));
+        Assert.assertTrue(itemPropertyIds.contains("name2"));
+    }
+
+    public void testOverridingProperties() {
+        BeanItem<MyClass2> item = new BeanItem<MyClass2>(new MyClass2("bean2"));
+
+        Collection<?> itemPropertyIds = item.getItemPropertyIds();
+        Assert.assertEquals(6, itemPropertyIds.size());
+
+        Assert.assertTrue(MyClass2.class.equals(item.getBean().getClass()));
+
+        // check that name2 accessed via MyClass2, not MyClass
+        Assert.assertFalse(item.getItemProperty("name2").isReadOnly());
+    }
+
+    public void testGetInterfaceProperties() throws SecurityException,
+            NoSuchMethodException, IllegalArgumentException,
+            IllegalAccessException, InvocationTargetException {
+        Method method = BeanItem.class.getDeclaredMethod(
+                "getPropertyDescriptors", Class.class);
+        method.setAccessible(true);
+        LinkedHashMap<String, VaadinPropertyDescriptor<Class>> propertyDescriptors = (LinkedHashMap<String, VaadinPropertyDescriptor<Class>>) method
+                .invoke(null, MySuperInterface.class);
+
+        Assert.assertEquals(2, propertyDescriptors.size());
+        Assert.assertTrue(propertyDescriptors.containsKey("super1"));
+        Assert.assertTrue(propertyDescriptors.containsKey("override"));
+
+        MethodProperty<?> property = (MethodProperty<?>) propertyDescriptors
+                .get("override").createProperty(getClass());
+        Assert.assertTrue(property.isReadOnly());
+    }
+
+    public void testGetSuperInterfaceProperties() throws SecurityException,
+            NoSuchMethodException, IllegalArgumentException,
+            IllegalAccessException, InvocationTargetException {
+        Method method = BeanItem.class.getDeclaredMethod(
+                "getPropertyDescriptors", Class.class);
+        method.setAccessible(true);
+        LinkedHashMap<String, VaadinPropertyDescriptor<Class>> propertyDescriptors = (LinkedHashMap<String, VaadinPropertyDescriptor<Class>>) method
+                .invoke(null, MySubInterface.class);
+
+        Assert.assertEquals(4, propertyDescriptors.size());
+        Assert.assertTrue(propertyDescriptors.containsKey("sub"));
+        Assert.assertTrue(propertyDescriptors.containsKey("super1"));
+        Assert.assertTrue(propertyDescriptors.containsKey("super2"));
+        Assert.assertTrue(propertyDescriptors.containsKey("override"));
+
+        MethodProperty<?> property = (MethodProperty<?>) propertyDescriptors
+                .get("override").createProperty(getClass());
+        Assert.assertFalse(property.isReadOnly());
+    }
+
+    public void testPropertyExplicitOrder() {
+        Collection<String> ids = new ArrayList<String>();
+        ids.add("name");
+        ids.add("superPublic");
+        ids.add("name2");
+        ids.add("noField");
+
+        BeanItem<MyClass> item = new BeanItem<MyClass>(new MyClass("bean1"),
+                ids);
+
+        Iterator<?> it = item.getItemPropertyIds().iterator();
+        Assert.assertEquals("name", it.next());
+        Assert.assertEquals("superPublic", it.next());
+        Assert.assertEquals("name2", it.next());
+        Assert.assertEquals("noField", it.next());
+        Assert.assertFalse(it.hasNext());
+    }
+
+    public void testPropertyExplicitOrder2() {
+        BeanItem<MyClass> item = new BeanItem<MyClass>(new MyClass("bean1"),
+                new String[] { "name", "superPublic", "name2", "noField" });
+
+        Iterator<?> it = item.getItemPropertyIds().iterator();
+        Assert.assertEquals("name", it.next());
+        Assert.assertEquals("superPublic", it.next());
+        Assert.assertEquals("name2", it.next());
+        Assert.assertEquals("noField", it.next());
+        Assert.assertFalse(it.hasNext());
+    }
+
+    public void testPropertyBadPropertyName() {
+        Collection<String> ids = new ArrayList<String>();
+        ids.add("name3");
+        ids.add("name");
+
+        // currently silently ignores non-existent properties
+        BeanItem<MyClass> item = new BeanItem<MyClass>(new MyClass("bean1"),
+                ids);
+
+        Iterator<?> it = item.getItemPropertyIds().iterator();
+        Assert.assertEquals("name", it.next());
+        Assert.assertFalse(it.hasNext());
+    }
+
+    public void testRemoveProperty() {
+        BeanItem<MyClass> item = new BeanItem<MyClass>(new MyClass("bean1"));
+
+        Collection<?> itemPropertyIds = item.getItemPropertyIds();
+        Assert.assertEquals(6, itemPropertyIds.size());
+
+        item.removeItemProperty("name2");
+        Assert.assertEquals(5, itemPropertyIds.size());
+        Assert.assertFalse(itemPropertyIds.contains("name2"));
+    }
+
+    public void testRemoveSuperProperty() {
+        BeanItem<MyClass> item = new BeanItem<MyClass>(new MyClass("bean1"));
+
+        Collection<?> itemPropertyIds = item.getItemPropertyIds();
+        Assert.assertEquals(6, itemPropertyIds.size());
+
+        item.removeItemProperty("superPrivate");
+        Assert.assertEquals(5, itemPropertyIds.size());
+        Assert.assertFalse(itemPropertyIds.contains("superPrivate"));
+    }
+
+    public void testPropertyTypes() {
+        BeanItem<MyClass> item = new BeanItem<MyClass>(new MyClass("bean1"));
+
+        Assert.assertTrue(Integer.class.equals(item.getItemProperty(
+                "superPrivate").getType()));
+        Assert.assertTrue(Double.class.equals(item.getItemProperty(
+                "superProtected").getType()));
+        Assert.assertTrue(Boolean.class.equals(item.getItemProperty(
+                "superPublic").getType()));
+        Assert.assertTrue(String.class.equals(item.getItemProperty("name")
+                .getType()));
+    }
+
+    public void testPropertyReadOnly() {
+        BeanItem<MyClass> item = new BeanItem<MyClass>(new MyClass("bean1"));
+
+        Assert.assertFalse(item.getItemProperty("name").isReadOnly());
+        Assert.assertTrue(item.getItemProperty("name2").isReadOnly());
+    }
+
+    public void testCustomProperties() throws Exception {
+        LinkedHashMap<String, VaadinPropertyDescriptor<MyClass>> propertyDescriptors = new LinkedHashMap<String, VaadinPropertyDescriptor<MyClass>>();
+        propertyDescriptors.put(
+                "myname",
+                new MethodPropertyDescriptor<BeanItemTest.MyClass>("myname",
+                        MyClass.class, MyClass.class
+                                .getDeclaredMethod("getName"), MyClass.class
+                                .getDeclaredMethod("setName", String.class)));
+        MyClass instance = new MyClass("bean1");
+        Constructor<BeanItem> constructor = BeanItem.class
+                .getDeclaredConstructor(Object.class, Map.class);
+        constructor.setAccessible(true);
+        BeanItem<MyClass> item = constructor.newInstance(instance,
+                propertyDescriptors);
+
+        Assert.assertEquals(1, item.getItemPropertyIds().size());
+        Assert.assertEquals("bean1", item.getItemProperty("myname").getValue());
+    }
+
+    public void testAddRemoveProperty() throws Exception {
+        MethodPropertyDescriptor<BeanItemTest.MyClass> pd = new MethodPropertyDescriptor<BeanItemTest.MyClass>(
+                "myname", MyClass.class,
+                MyClass.class.getDeclaredMethod("getName"),
+                MyClass.class.getDeclaredMethod("setName", String.class));
+
+        BeanItem<MyClass> item = new BeanItem(new MyClass("bean1"));
+
+        Assert.assertEquals(6, item.getItemPropertyIds().size());
+        Assert.assertEquals(null, item.getItemProperty("myname"));
+
+        item.addItemProperty("myname", pd.createProperty(item.getBean()));
+        Assert.assertEquals(7, item.getItemPropertyIds().size());
+        Assert.assertEquals("bean1", item.getItemProperty("myname").getValue());
+        item.removeItemProperty("myname");
+        Assert.assertEquals(6, item.getItemPropertyIds().size());
+        Assert.assertEquals(null, item.getItemProperty("myname"));
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/NestedMethodPropertyTest.java b/tests/server-side/com/vaadin/data/util/NestedMethodPropertyTest.java
new file mode 100644
index 0000000000..b110ea1c6b
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/NestedMethodPropertyTest.java
@@ -0,0 +1,326 @@
+package com.vaadin.data.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import com.vaadin.data.util.NestedMethodProperty;
+
+public class NestedMethodPropertyTest extends TestCase {
+
+    public static class Address implements Serializable {
+        private String street;
+        private int postalCodePrimitive;
+        private Integer postalCodeObject;
+
+        public Address(String street, int postalCode) {
+            this.street = street;
+            postalCodePrimitive = postalCode;
+            postalCodeObject = postalCode;
+        }
+
+        public void setStreet(String street) {
+            this.street = street;
+        }
+
+        public String getStreet() {
+            return street;
+        }
+
+        public void setPostalCodePrimitive(int postalCodePrimitive) {
+            this.postalCodePrimitive = postalCodePrimitive;
+        }
+
+        public int getPostalCodePrimitive() {
+            return postalCodePrimitive;
+        }
+
+        public void setPostalCodeObject(Integer postalCodeObject) {
+            this.postalCodeObject = postalCodeObject;
+        }
+
+        public Integer getPostalCodeObject() {
+            return postalCodeObject;
+        }
+
+        // read-only boolean property
+        public boolean isBoolean() {
+            return true;
+        }
+    }
+
+    public static class Person implements Serializable {
+        private String name;
+        private Address address;
+
+        public Person(String name, Address address) {
+            this.name = name;
+            this.address = address;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setAddress(Address address) {
+            this.address = address;
+        }
+
+        public Address getAddress() {
+            return address;
+        }
+    }
+
+    public static class Team implements Serializable {
+        private String name;
+        private Person manager;
+
+        public Team(String name, Person manager) {
+            this.name = name;
+            this.manager = manager;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setManager(Person manager) {
+            this.manager = manager;
+        }
+
+        public Person getManager() {
+            return manager;
+        }
+    }
+
+    private Address oldMill;
+    private Person joonas;
+    private Team vaadin;
+
+    @Override
+    public void setUp() {
+        oldMill = new Address("Ruukinkatu 2-4", 20540);
+        joonas = new Person("Joonas", oldMill);
+        vaadin = new Team("Vaadin", joonas);
+    }
+
+    @Override
+    public void tearDown() {
+        vaadin = null;
+        joonas = null;
+        oldMill = null;
+    }
+
+    public void testSingleLevelNestedSimpleProperty() {
+        NestedMethodProperty nameProperty = new NestedMethodProperty(vaadin,
+                "name");
+
+        Assert.assertEquals(String.class, nameProperty.getType());
+        Assert.assertEquals("Vaadin", nameProperty.getValue());
+    }
+
+    public void testSingleLevelNestedObjectProperty() {
+        NestedMethodProperty managerProperty = new NestedMethodProperty(vaadin,
+                "manager");
+
+        Assert.assertEquals(Person.class, managerProperty.getType());
+        Assert.assertEquals(joonas, managerProperty.getValue());
+    }
+
+    public void testMultiLevelNestedProperty() {
+        NestedMethodProperty managerNameProperty = new NestedMethodProperty(
+                vaadin, "manager.name");
+        NestedMethodProperty addressProperty = new NestedMethodProperty(vaadin,
+                "manager.address");
+        NestedMethodProperty streetProperty = new NestedMethodProperty(vaadin,
+                "manager.address.street");
+        NestedMethodProperty postalCodePrimitiveProperty = new NestedMethodProperty(
+                vaadin, "manager.address.postalCodePrimitive");
+        NestedMethodProperty postalCodeObjectProperty = new NestedMethodProperty(
+                vaadin, "manager.address.postalCodeObject");
+        NestedMethodProperty booleanProperty = new NestedMethodProperty(vaadin,
+                "manager.address.boolean");
+
+        Assert.assertEquals(String.class, managerNameProperty.getType());
+        Assert.assertEquals("Joonas", managerNameProperty.getValue());
+
+        Assert.assertEquals(Address.class, addressProperty.getType());
+        Assert.assertEquals(oldMill, addressProperty.getValue());
+
+        Assert.assertEquals(String.class, streetProperty.getType());
+        Assert.assertEquals("Ruukinkatu 2-4", streetProperty.getValue());
+
+        Assert.assertEquals(Integer.class,
+                postalCodePrimitiveProperty.getType());
+        Assert.assertEquals(20540, postalCodePrimitiveProperty.getValue());
+
+        Assert.assertEquals(Integer.class, postalCodeObjectProperty.getType());
+        Assert.assertEquals(20540, postalCodeObjectProperty.getValue());
+
+        Assert.assertEquals(Boolean.class, booleanProperty.getType());
+        Assert.assertEquals(true, booleanProperty.getValue());
+    }
+
+    public void testEmptyPropertyName() {
+        try {
+            new NestedMethodProperty(vaadin, "");
+            fail();
+        } catch (IllegalArgumentException e) {
+            // should get exception
+        }
+
+        try {
+            new NestedMethodProperty(vaadin, " ");
+            fail();
+        } catch (IllegalArgumentException e) {
+            // should get exception
+        }
+    }
+
+    public void testInvalidPropertyName() {
+        try {
+            new NestedMethodProperty(vaadin, ".");
+            fail();
+        } catch (IllegalArgumentException e) {
+            // should get exception
+        }
+        try {
+            new NestedMethodProperty(vaadin, ".manager");
+            fail();
+        } catch (IllegalArgumentException e) {
+            // should get exception
+        }
+        try {
+            new NestedMethodProperty(vaadin, "manager.");
+            fail();
+        } catch (IllegalArgumentException e) {
+            // should get exception
+        }
+        try {
+            new NestedMethodProperty(vaadin, "manager..name");
+            fail();
+        } catch (IllegalArgumentException e) {
+            // should get exception
+        }
+    }
+
+    public void testInvalidNestedPropertyName() {
+        try {
+            new NestedMethodProperty(vaadin, "member");
+            fail();
+        } catch (IllegalArgumentException e) {
+            // should get exception
+        }
+
+        try {
+            new NestedMethodProperty(vaadin, "manager.pet");
+            fail();
+        } catch (IllegalArgumentException e) {
+            // should get exception
+        }
+
+        try {
+            new NestedMethodProperty(vaadin, "manager.address.city");
+            fail();
+        } catch (IllegalArgumentException e) {
+            // should get exception
+        }
+    }
+
+    public void testNullNestedProperty() {
+        NestedMethodProperty managerNameProperty = new NestedMethodProperty(
+                vaadin, "manager.name");
+        NestedMethodProperty streetProperty = new NestedMethodProperty(vaadin,
+                "manager.address.street");
+
+        joonas.setAddress(null);
+        try {
+            streetProperty.getValue();
+            fail();
+        } catch (Exception e) {
+            // should get exception
+        }
+
+        vaadin.setManager(null);
+        try {
+            managerNameProperty.getValue();
+            fail();
+        } catch (Exception e) {
+            // should get exception
+        }
+        try {
+            streetProperty.getValue();
+            fail();
+        } catch (Exception e) {
+            // should get exception
+        }
+
+        vaadin.setManager(joonas);
+        Assert.assertEquals("Joonas", managerNameProperty.getValue());
+    }
+
+    public void testMultiLevelNestedPropertySetValue() {
+        NestedMethodProperty managerNameProperty = new NestedMethodProperty(
+                vaadin, "manager.name");
+        NestedMethodProperty addressProperty = new NestedMethodProperty(vaadin,
+                "manager.address");
+        NestedMethodProperty streetProperty = new NestedMethodProperty(vaadin,
+                "manager.address.street");
+        NestedMethodProperty postalCodePrimitiveProperty = new NestedMethodProperty(
+                vaadin, "manager.address.postalCodePrimitive");
+        NestedMethodProperty postalCodeObjectProperty = new NestedMethodProperty(
+                vaadin, "manager.address.postalCodeObject");
+
+        managerNameProperty.setValue("Joonas L");
+        Assert.assertEquals("Joonas L", joonas.getName());
+        streetProperty.setValue("Ruukinkatu");
+        Assert.assertEquals("Ruukinkatu", oldMill.getStreet());
+        postalCodePrimitiveProperty.setValue(0);
+        postalCodeObjectProperty.setValue(1);
+        Assert.assertEquals(0, oldMill.getPostalCodePrimitive());
+        Assert.assertEquals(Integer.valueOf(1), oldMill.getPostalCodeObject());
+
+        postalCodeObjectProperty.setValue(null);
+        Assert.assertNull(oldMill.getPostalCodeObject());
+
+        Address address2 = new Address("Other street", 12345);
+        addressProperty.setValue(address2);
+        Assert.assertEquals("Other street", streetProperty.getValue());
+    }
+
+    public void testSerialization() throws IOException, ClassNotFoundException {
+        NestedMethodProperty streetProperty = new NestedMethodProperty(vaadin,
+                "manager.address.street");
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        new ObjectOutputStream(baos).writeObject(streetProperty);
+        NestedMethodProperty property2 = (NestedMethodProperty) new ObjectInputStream(
+                new ByteArrayInputStream(baos.toByteArray())).readObject();
+
+        Assert.assertEquals("Ruukinkatu 2-4", property2.getValue());
+    }
+
+    public void testIsReadOnly() {
+        NestedMethodProperty streetProperty = new NestedMethodProperty(vaadin,
+                "manager.address.street");
+        NestedMethodProperty booleanProperty = new NestedMethodProperty(vaadin,
+                "manager.address.boolean");
+
+        Assert.assertFalse(streetProperty.isReadOnly());
+        Assert.assertTrue(booleanProperty.isReadOnly());
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/ObjectPropertyTest.java b/tests/server-side/com/vaadin/data/util/ObjectPropertyTest.java
new file mode 100644
index 0000000000..a934b40dce
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/ObjectPropertyTest.java
@@ -0,0 +1,99 @@
+package com.vaadin.data.util;
+
+import junit.framework.TestCase;
+
+import org.junit.Assert;
+
+import com.vaadin.data.util.ObjectProperty;
+
+public class ObjectPropertyTest extends TestCase {
+
+    public static class TestSuperClass {
+        private String name;
+
+        public TestSuperClass(String name) {
+            this.name = name;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        @Override
+        public String toString() {
+            return getName();
+        }
+    }
+
+    public static class TestSubClass extends TestSuperClass {
+        public TestSubClass(String name) {
+            super("Subclass: " + name);
+        }
+    }
+
+    private TestSuperClass super1 = new TestSuperClass("super1");
+    private TestSubClass sub1 = new TestSubClass("sub1");
+
+    public void testSimple() {
+        ObjectProperty<TestSuperClass> prop1 = new ObjectProperty<TestSuperClass>(
+                super1, TestSuperClass.class);
+        Assert.assertEquals("super1", prop1.getValue().getName());
+        prop1 = new ObjectProperty<TestSuperClass>(super1);
+        Assert.assertEquals("super1", prop1.getValue().getName());
+
+        ObjectProperty<TestSubClass> prop2 = new ObjectProperty<TestSubClass>(
+                sub1, TestSubClass.class);
+        Assert.assertEquals("Subclass: sub1", prop2.getValue().getName());
+        prop2 = new ObjectProperty<TestSubClass>(sub1);
+        Assert.assertEquals("Subclass: sub1", prop2.getValue().getName());
+    }
+
+    public void testSetValueObjectSuper() {
+        ObjectProperty<TestSuperClass> prop = new ObjectProperty<TestSuperClass>(
+                super1, TestSuperClass.class);
+        Assert.assertEquals("super1", prop.getValue().getName());
+        prop.setValue(new TestSuperClass("super2"));
+        Assert.assertEquals("super1", super1.getName());
+        Assert.assertEquals("super2", prop.getValue().getName());
+    }
+
+    public void testSetValueObjectSub() {
+        ObjectProperty<TestSubClass> prop = new ObjectProperty<TestSubClass>(
+                sub1, TestSubClass.class);
+        Assert.assertEquals("Subclass: sub1", prop.getValue().getName());
+        prop.setValue(new TestSubClass("sub2"));
+        Assert.assertEquals("Subclass: sub1", sub1.getName());
+        Assert.assertEquals("Subclass: sub2", prop.getValue().getName());
+    }
+
+    public void testSetValueStringSuper() {
+        ObjectProperty<TestSuperClass> prop = new ObjectProperty<TestSuperClass>(
+                super1, TestSuperClass.class);
+        Assert.assertEquals("super1", prop.getValue().getName());
+        prop.setValue("super2");
+        Assert.assertEquals("super1", super1.getName());
+        Assert.assertEquals("super2", prop.getValue().getName());
+    }
+
+    public void testSetValueStringSub() {
+        ObjectProperty<TestSubClass> prop = new ObjectProperty<TestSubClass>(
+                sub1, TestSubClass.class);
+        Assert.assertEquals("Subclass: sub1", prop.getValue().getName());
+        prop.setValue("sub2");
+        Assert.assertEquals("Subclass: sub1", sub1.getName());
+        Assert.assertEquals("Subclass: sub2", prop.getValue().getName());
+    }
+
+    public void testMixedGenerics() {
+        ObjectProperty<TestSuperClass> prop = new ObjectProperty<TestSuperClass>(
+                sub1);
+        Assert.assertEquals("Subclass: sub1", prop.getValue().getName());
+        Assert.assertEquals(prop.getType(), TestSubClass.class);
+        // create correct subclass based on the runtime type of the instance
+        // given to ObjectProperty constructor, which is a subclass of the type
+        // parameter
+        prop.setValue("sub2");
+        Assert.assertEquals("Subclass: sub2", prop.getValue().getName());
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/PerformanceTestIndexedContainer.java b/tests/server-side/com/vaadin/data/util/PerformanceTestIndexedContainer.java
new file mode 100644
index 0000000000..c4ed12efc0
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/PerformanceTestIndexedContainer.java
@@ -0,0 +1,117 @@
+package com.vaadin.data.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import com.vaadin.data.util.IndexedContainer;
+
+public class PerformanceTestIndexedContainer extends TestCase {
+
+    private static final int REPEATS = 10;
+    private final static int ITEMS = 50000;
+    private static final long ADD_ITEM_FAIL_THRESHOLD = 200;
+    // TODO should improve performance of these methods
+    private static final long ADD_ITEM_AT_FAIL_THRESHOLD = 5000;
+    private static final long ADD_ITEM_AFTER_FAIL_THRESHOLD = 5000;
+    private static final long ADD_ITEM_AFTER_LAST_FAIL_THRESHOLD = 5000;
+    private static final long ADD_ITEMS_CONSTRUCTOR_FAIL_THRESHOLD = 200;
+
+    public void testAddItemPerformance() {
+        Collection<Long> times = new ArrayList<Long>();
+        for (int j = 0; j < REPEATS; ++j) {
+            IndexedContainer c = new IndexedContainer();
+            long start = System.currentTimeMillis();
+            for (int i = 0; i < ITEMS; i++) {
+                c.addItem();
+            }
+            times.add(System.currentTimeMillis() - start);
+        }
+        checkMedian(ITEMS, times, "IndexedContainer.addItem()",
+                ADD_ITEM_FAIL_THRESHOLD);
+    }
+
+    public void testAddItemAtPerformance() {
+        Collection<Long> times = new ArrayList<Long>();
+        for (int j = 0; j < REPEATS; ++j) {
+            IndexedContainer c = new IndexedContainer();
+            long start = System.currentTimeMillis();
+            for (int i = 0; i < ITEMS; i++) {
+                c.addItemAt(0);
+            }
+            times.add(System.currentTimeMillis() - start);
+        }
+        checkMedian(ITEMS, times, "IndexedContainer.addItemAt()",
+                ADD_ITEM_AT_FAIL_THRESHOLD);
+    }
+
+    public void testAddItemAfterPerformance() {
+        Object initialId = "Item0";
+        Collection<Long> times = new ArrayList<Long>();
+        for (int j = 0; j < REPEATS; ++j) {
+            IndexedContainer c = new IndexedContainer();
+            c.addItem(initialId);
+            long start = System.currentTimeMillis();
+            for (int i = 0; i < ITEMS; i++) {
+                c.addItemAfter(initialId);
+            }
+            times.add(System.currentTimeMillis() - start);
+        }
+        checkMedian(ITEMS, times, "IndexedContainer.addItemAfter()",
+                ADD_ITEM_AFTER_FAIL_THRESHOLD);
+    }
+
+    public void testAddItemAfterLastPerformance() {
+        // TODO running with less items because slow otherwise
+        Collection<Long> times = new ArrayList<Long>();
+        for (int j = 0; j < REPEATS; ++j) {
+            IndexedContainer c = new IndexedContainer();
+            c.addItem();
+            long start = System.currentTimeMillis();
+            for (int i = 0; i < ITEMS / 3; i++) {
+                c.addItemAfter(c.lastItemId());
+            }
+            times.add(System.currentTimeMillis() - start);
+        }
+        checkMedian(ITEMS / 3, times, "IndexedContainer.addItemAfter(lastId)",
+                ADD_ITEM_AFTER_LAST_FAIL_THRESHOLD);
+    }
+
+    public void testAddItemsConstructorPerformance() {
+        Collection<Object> items = new ArrayList<Object>(50000);
+        for (int i = 0; i < ITEMS; ++i) {
+            items.add(new Object());
+        }
+
+        SortedSet<Long> times = new TreeSet<Long>();
+        for (int j = 0; j < REPEATS; ++j) {
+            long start = System.currentTimeMillis();
+            new IndexedContainer(items);
+            times.add(System.currentTimeMillis() - start);
+        }
+        checkMedian(ITEMS, times, "IndexedContainer(Collection)",
+                ADD_ITEMS_CONSTRUCTOR_FAIL_THRESHOLD);
+    }
+
+    private void checkMedian(int items, Collection<Long> times,
+            String methodName, long threshold) {
+        long median = median(times);
+        System.out.println(methodName + " timings (ms) for " + items
+                + " items: " + times);
+        Assert.assertTrue(methodName + " too slow, median time " + median
+                + "ms for " + items + " items", median <= threshold);
+    }
+
+    private Long median(Collection<Long> times) {
+        ArrayList<Long> list = new ArrayList<Long>(times);
+        Collections.sort(list);
+        // not exact median in some cases, but good enough
+        return list.get(list.size() / 2);
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/PropertyDescriptorTest.java b/tests/server-side/com/vaadin/data/util/PropertyDescriptorTest.java
new file mode 100644
index 0000000000..c3621fa99b
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/PropertyDescriptorTest.java
@@ -0,0 +1,56 @@
+package com.vaadin.data.util;
+
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.util.MethodPropertyDescriptor;
+import com.vaadin.data.util.NestedPropertyDescriptor;
+import com.vaadin.data.util.VaadinPropertyDescriptor;
+import com.vaadin.data.util.NestedMethodPropertyTest.Person;
+
+public class PropertyDescriptorTest extends TestCase {
+    public void testMethodPropertyDescriptorSerialization() throws Exception {
+        PropertyDescriptor[] pds = Introspector.getBeanInfo(Person.class)
+                .getPropertyDescriptors();
+
+        MethodPropertyDescriptor<Person> descriptor = null;
+
+        for (PropertyDescriptor pd : pds) {
+            if ("name".equals(pd.getName())) {
+                descriptor = new MethodPropertyDescriptor<Person>(pd.getName(),
+                        String.class, pd.getReadMethod(), pd.getWriteMethod());
+                break;
+            }
+        }
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        new ObjectOutputStream(baos).writeObject(descriptor);
+        VaadinPropertyDescriptor<Person> descriptor2 = (VaadinPropertyDescriptor<Person>) new ObjectInputStream(
+                new ByteArrayInputStream(baos.toByteArray())).readObject();
+
+        Property property = descriptor2
+                .createProperty(new Person("John", null));
+        Assert.assertEquals("John", property.getValue());
+    }
+
+    public void testNestedPropertyDescriptorSerialization() throws Exception {
+        NestedPropertyDescriptor<Person> pd = new NestedPropertyDescriptor<Person>(
+                "name", Person.class);
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        new ObjectOutputStream(baos).writeObject(pd);
+        VaadinPropertyDescriptor<Person> pd2 = (VaadinPropertyDescriptor<Person>) new ObjectInputStream(
+                new ByteArrayInputStream(baos.toByteArray())).readObject();
+
+        Property property = pd2.createProperty(new Person("John", null));
+        Assert.assertEquals("John", property.getValue());
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/PropertySetItemTest.java b/tests/server-side/com/vaadin/data/util/PropertySetItemTest.java
new file mode 100644
index 0000000000..4516e8d109
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/PropertySetItemTest.java
@@ -0,0 +1,407 @@
+package com.vaadin.data.util;
+
+import java.util.Iterator;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.easymock.EasyMock;
+
+import com.vaadin.data.Item.PropertySetChangeEvent;
+import com.vaadin.data.Item.PropertySetChangeListener;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.data.util.PropertysetItem;
+
+public class PropertySetItemTest extends TestCase {
+
+    private static final String ID1 = "id1";
+    private static final String ID2 = "id2";
+    private static final String ID3 = "id3";
+
+    private static final String VALUE1 = "value1";
+    private static final String VALUE2 = "value2";
+    private static final String VALUE3 = "value3";
+
+    private ObjectProperty<String> prop1;
+    private ObjectProperty<String> prop2;
+    private ObjectProperty<String> prop3;
+
+    private PropertySetChangeListener propertySetListenerMock;
+    private PropertySetChangeListener propertySetListenerMock2;
+
+    @Override
+    protected void setUp() throws Exception {
+        prop1 = new ObjectProperty<String>(VALUE1, String.class);
+        prop2 = new ObjectProperty<String>(VALUE2, String.class);
+        prop3 = new ObjectProperty<String>(VALUE3, String.class);
+
+        propertySetListenerMock = EasyMock
+                .createStrictMock(PropertySetChangeListener.class);
+        propertySetListenerMock2 = EasyMock
+                .createMock(PropertySetChangeListener.class);
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        prop1 = null;
+        prop2 = null;
+        prop3 = null;
+
+        propertySetListenerMock = null;
+        propertySetListenerMock2 = null;
+    }
+
+    private PropertysetItem createPropertySetItem() {
+        return new PropertysetItem();
+    }
+
+    public void testEmptyItem() {
+        PropertysetItem item = createPropertySetItem();
+        Assert.assertNotNull(item.getItemPropertyIds());
+        Assert.assertEquals(0, item.getItemPropertyIds().size());
+    }
+
+    public void testGetProperty() {
+        PropertysetItem item = createPropertySetItem();
+
+        Assert.assertNull(item.getItemProperty(ID1));
+
+        item.addItemProperty(ID1, prop1);
+
+        Assert.assertEquals(prop1, item.getItemProperty(ID1));
+        Assert.assertNull(item.getItemProperty(ID2));
+    }
+
+    public void testAddSingleProperty() {
+        PropertysetItem item = createPropertySetItem();
+
+        item.addItemProperty(ID1, prop1);
+        Assert.assertEquals(1, item.getItemPropertyIds().size());
+        Object firstValue = item.getItemPropertyIds().iterator().next();
+        Assert.assertEquals(ID1, firstValue);
+        Assert.assertEquals(prop1, item.getItemProperty(ID1));
+    }
+
+    public void testAddMultipleProperties() {
+        PropertysetItem item = createPropertySetItem();
+
+        item.addItemProperty(ID1, prop1);
+        Assert.assertEquals(1, item.getItemPropertyIds().size());
+        Assert.assertEquals(prop1, item.getItemProperty(ID1));
+
+        item.addItemProperty(ID2, prop2);
+        Assert.assertEquals(2, item.getItemPropertyIds().size());
+        Assert.assertEquals(prop1, item.getItemProperty(ID1));
+        Assert.assertEquals(prop2, item.getItemProperty(ID2));
+
+        item.addItemProperty(ID3, prop3);
+        Assert.assertEquals(3, item.getItemPropertyIds().size());
+    }
+
+    public void testAddedPropertyOrder() {
+        PropertysetItem item = createPropertySetItem();
+        item.addItemProperty(ID1, prop1);
+        item.addItemProperty(ID2, prop2);
+        item.addItemProperty(ID3, prop3);
+
+        Iterator<?> it = item.getItemPropertyIds().iterator();
+        Assert.assertEquals(ID1, it.next());
+        Assert.assertEquals(ID2, it.next());
+        Assert.assertEquals(ID3, it.next());
+    }
+
+    public void testAddPropertyTwice() {
+        PropertysetItem item = createPropertySetItem();
+        Assert.assertTrue(item.addItemProperty(ID1, prop1));
+        Assert.assertFalse(item.addItemProperty(ID1, prop1));
+
+        Assert.assertEquals(1, item.getItemPropertyIds().size());
+        Assert.assertEquals(prop1, item.getItemProperty(ID1));
+    }
+
+    public void testCannotChangeProperty() {
+        PropertysetItem item = createPropertySetItem();
+        Assert.assertTrue(item.addItemProperty(ID1, prop1));
+
+        Assert.assertEquals(prop1, item.getItemProperty(ID1));
+
+        Assert.assertFalse(item.addItemProperty(ID1, prop2));
+
+        Assert.assertEquals(1, item.getItemPropertyIds().size());
+        Assert.assertEquals(prop1, item.getItemProperty(ID1));
+    }
+
+    public void testRemoveProperty() {
+        PropertysetItem item = createPropertySetItem();
+        item.addItemProperty(ID1, prop1);
+        item.removeItemProperty(ID1);
+
+        Assert.assertEquals(0, item.getItemPropertyIds().size());
+        Assert.assertNull(item.getItemProperty(ID1));
+    }
+
+    public void testRemovePropertyOrder() {
+        PropertysetItem item = createPropertySetItem();
+        item.addItemProperty(ID1, prop1);
+        item.addItemProperty(ID2, prop2);
+        item.addItemProperty(ID3, prop3);
+
+        item.removeItemProperty(ID2);
+
+        Iterator<?> it = item.getItemPropertyIds().iterator();
+        Assert.assertEquals(ID1, it.next());
+        Assert.assertEquals(ID3, it.next());
+    }
+
+    public void testRemoveNonExistentListener() {
+        PropertysetItem item = createPropertySetItem();
+        item.removeListener(propertySetListenerMock);
+    }
+
+    public void testRemoveListenerTwice() {
+        PropertysetItem item = createPropertySetItem();
+        item.addListener(propertySetListenerMock);
+        item.removeListener(propertySetListenerMock);
+        item.removeListener(propertySetListenerMock);
+    }
+
+    public void testAddPropertyNotification() {
+        // exactly one notification each time
+        PropertysetItem item = createPropertySetItem();
+
+        // Expectations and start test
+        propertySetListenerMock.itemPropertySetChange(EasyMock
+                .isA(PropertySetChangeEvent.class));
+        EasyMock.replay(propertySetListenerMock);
+
+        // Add listener and add a property -> should end up in listener once
+        item.addListener(propertySetListenerMock);
+        item.addItemProperty(ID1, prop1);
+
+        // Ensure listener was called once
+        EasyMock.verify(propertySetListenerMock);
+
+        // Remove the listener -> should not end up in listener when adding a
+        // property
+        item.removeListener(propertySetListenerMock);
+        item.addItemProperty(ID2, prop2);
+
+        // Ensure listener still has been called only once
+        EasyMock.verify(propertySetListenerMock);
+    }
+
+    public void testRemovePropertyNotification() {
+        // exactly one notification each time
+        PropertysetItem item = createPropertySetItem();
+        item.addItemProperty(ID1, prop1);
+        item.addItemProperty(ID2, prop2);
+
+        // Expectations and start test
+        propertySetListenerMock.itemPropertySetChange(EasyMock
+                .isA(PropertySetChangeEvent.class));
+        EasyMock.replay(propertySetListenerMock);
+
+        // Add listener and add a property -> should end up in listener once
+        item.addListener(propertySetListenerMock);
+        item.removeItemProperty(ID1);
+
+        // Ensure listener was called once
+        EasyMock.verify(propertySetListenerMock);
+
+        // Remove the listener -> should not end up in listener
+        item.removeListener(propertySetListenerMock);
+        item.removeItemProperty(ID2);
+
+        // Ensure listener still has been called only once
+        EasyMock.verify(propertySetListenerMock);
+    }
+
+    public void testItemEqualsNull() {
+        PropertysetItem item = createPropertySetItem();
+
+        Assert.assertFalse(item.equals(null));
+    }
+
+    public void testEmptyItemEquals() {
+        PropertysetItem item1 = createPropertySetItem();
+        PropertysetItem item2 = createPropertySetItem();
+
+        Assert.assertTrue(item1.equals(item2));
+    }
+
+    public void testItemEqualsSingleProperty() {
+        PropertysetItem item1 = createPropertySetItem();
+        PropertysetItem item2 = createPropertySetItem();
+        item2.addItemProperty(ID1, prop1);
+        PropertysetItem item3 = createPropertySetItem();
+        item3.addItemProperty(ID1, prop1);
+        PropertysetItem item4 = createPropertySetItem();
+        item4.addItemProperty(ID1, prop2);
+        PropertysetItem item5 = createPropertySetItem();
+        item5.addItemProperty(ID2, prop2);
+
+        Assert.assertFalse(item1.equals(item2));
+        Assert.assertFalse(item1.equals(item3));
+        Assert.assertFalse(item1.equals(item4));
+        Assert.assertFalse(item1.equals(item5));
+
+        Assert.assertTrue(item2.equals(item3));
+        Assert.assertFalse(item2.equals(item4));
+        Assert.assertFalse(item2.equals(item5));
+
+        Assert.assertFalse(item3.equals(item4));
+        Assert.assertFalse(item3.equals(item5));
+
+        Assert.assertFalse(item4.equals(item5));
+
+        Assert.assertFalse(item2.equals(item1));
+    }
+
+    public void testItemEqualsMultipleProperties() {
+        PropertysetItem item1 = createPropertySetItem();
+        item1.addItemProperty(ID1, prop1);
+
+        PropertysetItem item2 = createPropertySetItem();
+        item2.addItemProperty(ID1, prop1);
+        item2.addItemProperty(ID2, prop2);
+
+        PropertysetItem item3 = createPropertySetItem();
+        item3.addItemProperty(ID1, prop1);
+        item3.addItemProperty(ID2, prop2);
+
+        Assert.assertFalse(item1.equals(item2));
+
+        Assert.assertTrue(item2.equals(item3));
+    }
+
+    public void testItemEqualsPropertyOrder() {
+        PropertysetItem item1 = createPropertySetItem();
+        item1.addItemProperty(ID1, prop1);
+        item1.addItemProperty(ID2, prop2);
+
+        PropertysetItem item2 = createPropertySetItem();
+        item2.addItemProperty(ID2, prop2);
+        item2.addItemProperty(ID1, prop1);
+
+        Assert.assertFalse(item1.equals(item2));
+    }
+
+    public void testEqualsSingleListener() {
+        PropertysetItem item1 = createPropertySetItem();
+        PropertysetItem item2 = createPropertySetItem();
+
+        item1.addListener(propertySetListenerMock);
+
+        Assert.assertFalse(item1.equals(item2));
+        Assert.assertFalse(item2.equals(item1));
+
+        item2.addListener(propertySetListenerMock);
+
+        Assert.assertTrue(item1.equals(item2));
+        Assert.assertTrue(item2.equals(item1));
+    }
+
+    public void testEqualsMultipleListeners() {
+        PropertysetItem item1 = createPropertySetItem();
+        PropertysetItem item2 = createPropertySetItem();
+
+        item1.addListener(propertySetListenerMock);
+        item1.addListener(propertySetListenerMock2);
+
+        item2.addListener(propertySetListenerMock);
+
+        Assert.assertFalse(item1.equals(item2));
+        Assert.assertFalse(item2.equals(item1));
+
+        item2.addListener(propertySetListenerMock2);
+
+        Assert.assertTrue(item1.equals(item2));
+        Assert.assertTrue(item2.equals(item1));
+    }
+
+    public void testEqualsAddRemoveListener() {
+        PropertysetItem item1 = createPropertySetItem();
+        PropertysetItem item2 = createPropertySetItem();
+
+        item1.addListener(propertySetListenerMock);
+        item1.removeListener(propertySetListenerMock);
+
+        Assert.assertTrue(item1.equals(item2));
+        Assert.assertTrue(item2.equals(item1));
+    }
+
+    public void testItemHashCodeEmpty() {
+        PropertysetItem item1 = createPropertySetItem();
+        PropertysetItem item2 = createPropertySetItem();
+
+        Assert.assertEquals(item1.hashCode(), item2.hashCode());
+    }
+
+    public void testItemHashCodeAddProperties() {
+        PropertysetItem item1 = createPropertySetItem();
+        PropertysetItem item2 = createPropertySetItem();
+
+        Assert.assertEquals(item1.hashCode(), item2.hashCode());
+
+        item1.addItemProperty(ID1, prop1);
+        item1.addItemProperty(ID2, prop2);
+        // hashCodes can be equal even if items are different
+
+        item2.addItemProperty(ID1, prop1);
+        item2.addItemProperty(ID2, prop2);
+        // but here hashCodes must be equal
+        Assert.assertEquals(item1.hashCode(), item2.hashCode());
+    }
+
+    public void testItemHashCodeAddListeners() {
+        PropertysetItem item1 = createPropertySetItem();
+        PropertysetItem item2 = createPropertySetItem();
+
+        Assert.assertEquals(item1.hashCode(), item2.hashCode());
+
+        item1.addListener(propertySetListenerMock);
+        // hashCodes can be equal even if items are different
+
+        item2.addListener(propertySetListenerMock);
+        // but here hashCodes must be equal
+        Assert.assertEquals(item1.hashCode(), item2.hashCode());
+    }
+
+    public void testItemHashCodeAddRemoveProperty() {
+        PropertysetItem item1 = createPropertySetItem();
+        PropertysetItem item2 = createPropertySetItem();
+
+        item1.addItemProperty(ID1, prop1);
+        item1.removeItemProperty(ID1);
+
+        Assert.assertEquals(item1.hashCode(), item2.hashCode());
+    }
+
+    public void testItemHashCodeAddRemoveListener() {
+        PropertysetItem item1 = createPropertySetItem();
+        PropertysetItem item2 = createPropertySetItem();
+
+        item1.addListener(propertySetListenerMock);
+        item1.removeListener(propertySetListenerMock);
+
+        Assert.assertEquals(item1.hashCode(), item2.hashCode());
+    }
+
+    public void testToString() {
+        // toString() behavior is specified in the class javadoc
+        PropertysetItem item = createPropertySetItem();
+
+        Assert.assertEquals("", item.toString());
+
+        item.addItemProperty(ID1, prop1);
+
+        Assert.assertEquals(String.valueOf(prop1), item.toString());
+
+        item.addItemProperty(ID2, prop2);
+
+        Assert.assertEquals(
+                String.valueOf(prop1) + " " + String.valueOf(prop2),
+                item.toString());
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/TestContainerHierarchicalWrapper.java b/tests/server-side/com/vaadin/data/util/TestContainerHierarchicalWrapper.java
new file mode 100644
index 0000000000..ec0fe1de37
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/TestContainerHierarchicalWrapper.java
@@ -0,0 +1,45 @@
+package com.vaadin.data.util;
+
+import java.util.Collection;
+
+import com.vaadin.data.util.ContainerHierarchicalWrapper;
+import com.vaadin.data.util.IndexedContainer;
+
+public class TestContainerHierarchicalWrapper extends
+        AbstractHierarchicalContainerTest {
+
+    public void testBasicOperations() {
+        testBasicContainerOperations(new ContainerHierarchicalWrapper(
+                new IndexedContainer()));
+    }
+
+    public void testHierarchicalContainer() {
+        testHierarchicalContainer(new ContainerHierarchicalWrapper(
+                new IndexedContainer()));
+    }
+
+    public void testRemoveSubtree() {
+        testRemoveHierarchicalWrapperSubtree(new ContainerHierarchicalWrapper(
+                new IndexedContainer()));
+    }
+
+    protected void testRemoveHierarchicalWrapperSubtree(
+            ContainerHierarchicalWrapper container) {
+        initializeContainer(container);
+
+        // remove root item
+        container.removeItemRecursively("org");
+
+        int packages = 21 + 3 - 3;
+        int expectedSize = sampleData.length + packages - 1;
+
+        validateContainer(container, "com", "com.vaadin.util.SerializerHelper",
+                "com.vaadin.terminal.ApplicationResource", "blah", true,
+                expectedSize);
+
+        // rootItemIds
+        Collection<?> rootIds = container.rootItemIds();
+        assertEquals(1, rootIds.size());
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/TestContainerSorting.java b/tests/server-side/com/vaadin/data/util/TestContainerSorting.java
new file mode 100644
index 0000000000..dbfea7d75d
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/TestContainerSorting.java
@@ -0,0 +1,238 @@
+package com.vaadin.data.util;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.data.util.IndexedContainer;
+
+public class TestContainerSorting extends TestCase {
+
+    private static final String ITEM_DATA_MINUS2_NULL = "Data -2 null";
+    private static final String ITEM_DATA_MINUS2 = "Data -2";
+    private static final String ITEM_DATA_MINUS1 = "Data -1";
+    private static final String ITEM_DATA_MINUS1_NULL = "Data -1 null";
+    private static final String ITEM_ANOTHER_NULL = "Another null";
+    private static final String ITEM_STRING_2 = "String 2";
+    private static final String ITEM_STRING_NULL2 = "String null";
+    private static final String ITEM_STRING_1 = "String 1";
+
+    private static final String PROPERTY_INTEGER_NULL2 = "integer-null";
+    private static final String PROPERTY_INTEGER_NOT_NULL = "integer-not-null";
+    private static final String PROPERTY_STRING_NULL = "string-null";
+    private static final String PROPERTY_STRING_ID = "string-not-null";
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    public void testEmptyFilteredIndexedContainer() {
+        IndexedContainer ic = new IndexedContainer();
+
+        addProperties(ic);
+        populate(ic);
+
+        ic.addContainerFilter(PROPERTY_STRING_ID, "aasdfasdfasdf", true, false);
+        ic.sort(new Object[] { PROPERTY_STRING_ID }, new boolean[] { true });
+
+    }
+
+    public void testFilteredIndexedContainer() {
+        IndexedContainer ic = new IndexedContainer();
+
+        addProperties(ic);
+        populate(ic);
+
+        ic.addContainerFilter(PROPERTY_STRING_ID, "a", true, false);
+        ic.sort(new Object[] { PROPERTY_STRING_ID }, new boolean[] { true });
+        verifyOrder(ic,
+                new String[] { ITEM_ANOTHER_NULL, ITEM_DATA_MINUS1,
+                        ITEM_DATA_MINUS1_NULL, ITEM_DATA_MINUS2,
+                        ITEM_DATA_MINUS2_NULL, });
+    }
+
+    public void testIndexedContainer() {
+        IndexedContainer ic = new IndexedContainer();
+
+        addProperties(ic);
+        populate(ic);
+
+        ic.sort(new Object[] { PROPERTY_STRING_ID }, new boolean[] { true });
+        verifyOrder(ic, new String[] { ITEM_ANOTHER_NULL, ITEM_DATA_MINUS1,
+                ITEM_DATA_MINUS1_NULL, ITEM_DATA_MINUS2, ITEM_DATA_MINUS2_NULL,
+                ITEM_STRING_1, ITEM_STRING_2, ITEM_STRING_NULL2 });
+
+        ic.sort(new Object[] { PROPERTY_INTEGER_NOT_NULL,
+                PROPERTY_INTEGER_NULL2, PROPERTY_STRING_ID }, new boolean[] {
+                true, false, true });
+        verifyOrder(ic, new String[] { ITEM_DATA_MINUS2, ITEM_DATA_MINUS2_NULL,
+                ITEM_DATA_MINUS1, ITEM_DATA_MINUS1_NULL, ITEM_ANOTHER_NULL,
+                ITEM_STRING_NULL2, ITEM_STRING_1, ITEM_STRING_2 });
+
+        ic.sort(new Object[] { PROPERTY_INTEGER_NOT_NULL,
+                PROPERTY_INTEGER_NULL2, PROPERTY_STRING_ID }, new boolean[] {
+                true, true, true });
+        verifyOrder(ic, new String[] { ITEM_DATA_MINUS2_NULL, ITEM_DATA_MINUS2,
+                ITEM_DATA_MINUS1_NULL, ITEM_DATA_MINUS1, ITEM_ANOTHER_NULL,
+                ITEM_STRING_NULL2, ITEM_STRING_1, ITEM_STRING_2 });
+
+    }
+
+    public void testHierarchicalContainer() {
+        HierarchicalContainer hc = new HierarchicalContainer();
+        populateContainer(hc);
+        hc.sort(new Object[] { "name" }, new boolean[] { true });
+        verifyOrder(hc, new String[] { "Audi", "C++", "Call of Duty", "Cars",
+                "English", "Fallout", "Finnish", "Ford", "Games", "Java",
+                "Might and Magic", "Natural languages", "PHP",
+                "Programming languages", "Python", "Red Alert", "Swedish",
+                "Toyota", "Volvo" });
+        assertArrays(
+                hc.rootItemIds().toArray(),
+                new Integer[] { nameToId.get("Cars"), nameToId.get("Games"),
+                        nameToId.get("Natural languages"),
+                        nameToId.get("Programming languages") });
+        assertArrays(
+                hc.getChildren(nameToId.get("Games")).toArray(),
+                new Integer[] { nameToId.get("Call of Duty"),
+                        nameToId.get("Fallout"),
+                        nameToId.get("Might and Magic"),
+                        nameToId.get("Red Alert") });
+    }
+
+    private static void populateContainer(HierarchicalContainer container) {
+        container.addContainerProperty("name", String.class, null);
+
+        addItem(container, "Games", null);
+        addItem(container, "Call of Duty", "Games");
+        addItem(container, "Might and Magic", "Games");
+        addItem(container, "Fallout", "Games");
+        addItem(container, "Red Alert", "Games");
+
+        addItem(container, "Cars", null);
+        addItem(container, "Toyota", "Cars");
+        addItem(container, "Volvo", "Cars");
+        addItem(container, "Audi", "Cars");
+        addItem(container, "Ford", "Cars");
+
+        addItem(container, "Natural languages", null);
+        addItem(container, "Swedish", "Natural languages");
+        addItem(container, "English", "Natural languages");
+        addItem(container, "Finnish", "Natural languages");
+
+        addItem(container, "Programming languages", null);
+        addItem(container, "C++", "Programming languages");
+        addItem(container, "PHP", "Programming languages");
+        addItem(container, "Java", "Programming languages");
+        addItem(container, "Python", "Programming languages");
+
+    }
+
+    private static int index = 0;
+    private static Map<String, Integer> nameToId = new HashMap<String, Integer>();
+    private static Map<Integer, String> idToName = new HashMap<Integer, String>();
+
+    public static void addItem(IndexedContainer container, String string,
+            String parent) {
+        nameToId.put(string, index);
+        idToName.put(index, string);
+
+        Item item = container.addItem(index);
+        item.getItemProperty("name").setValue(string);
+
+        if (parent != null && container instanceof HierarchicalContainer) {
+            ((HierarchicalContainer) container).setParent(index,
+                    nameToId.get(parent));
+        }
+
+        index++;
+    }
+
+    private void verifyOrder(Container.Sortable ic, Object[] idOrder) {
+        int size = ic.size();
+        Object[] actual = new Object[size];
+        Iterator<?> i = ic.getItemIds().iterator();
+        int index = 0;
+        while (i.hasNext()) {
+            Object o = i.next();
+            if (o.getClass() == Integer.class
+                    && idOrder[index].getClass() == String.class) {
+                o = idToName.get(o);
+            }
+            actual[index++] = o;
+        }
+
+        assertArrays(actual, idOrder);
+
+    }
+
+    private void assertArrays(Object[] actualObjects, Object[] expectedObjects) {
+        assertEquals(
+                "Actual contains a different number of values than was expected",
+                expectedObjects.length, actualObjects.length);
+
+        for (int i = 0; i < actualObjects.length; i++) {
+            Object actual = actualObjects[i];
+            Object expected = expectedObjects[i];
+
+            assertEquals("Item[" + i + "] does not match", expected, actual);
+        }
+
+    }
+
+    private void populate(IndexedContainer ic) {
+        addItem(ic, ITEM_STRING_1, ITEM_STRING_1, 1, 1);
+        addItem(ic, ITEM_STRING_NULL2, null, 0, null);
+        addItem(ic, ITEM_STRING_2, ITEM_STRING_2, 2, 2);
+        addItem(ic, ITEM_ANOTHER_NULL, null, 0, null);
+        addItem(ic, ITEM_DATA_MINUS1, ITEM_DATA_MINUS1, -1, -1);
+        addItem(ic, ITEM_DATA_MINUS1_NULL, null, -1, null);
+        addItem(ic, ITEM_DATA_MINUS2, ITEM_DATA_MINUS2, -2, -2);
+        addItem(ic, ITEM_DATA_MINUS2_NULL, null, -2, null);
+    }
+
+    private Item addItem(Container ic, String id, String string_null,
+            int integer, Integer integer_null) {
+        Item i = ic.addItem(id);
+        i.getItemProperty(PROPERTY_STRING_ID).setValue(id);
+        i.getItemProperty(PROPERTY_STRING_NULL).setValue(string_null);
+        i.getItemProperty(PROPERTY_INTEGER_NOT_NULL).setValue(integer);
+        i.getItemProperty(PROPERTY_INTEGER_NULL2).setValue(integer_null);
+
+        return i;
+    }
+
+    private void addProperties(IndexedContainer ic) {
+        ic.addContainerProperty("id", String.class, null);
+        ic.addContainerProperty(PROPERTY_STRING_ID, String.class, "");
+        ic.addContainerProperty(PROPERTY_STRING_NULL, String.class, null);
+        ic.addContainerProperty(PROPERTY_INTEGER_NULL2, Integer.class, null);
+        ic.addContainerProperty(PROPERTY_INTEGER_NOT_NULL, Integer.class, 0);
+        ic.addContainerProperty("comparable-null", Integer.class, 0);
+    }
+
+    public class MyObject implements Comparable<MyObject> {
+        private String data;
+
+        public int compareTo(MyObject o) {
+            if (o == null) {
+                return 1;
+            }
+
+            if (o.data == null) {
+                return data == null ? 0 : 1;
+            } else if (data == null) {
+                return -1;
+            } else {
+                return data.compareTo(o.data);
+            }
+        }
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/TestHierarchicalContainer.java b/tests/server-side/com/vaadin/data/util/TestHierarchicalContainer.java
new file mode 100644
index 0000000000..5bbb72fe36
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/TestHierarchicalContainer.java
@@ -0,0 +1,269 @@
+package com.vaadin.data.util;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.HierarchicalContainer;
+
+public class TestHierarchicalContainer extends
+        AbstractHierarchicalContainerTest {
+
+    public void testBasicOperations() {
+        testBasicContainerOperations(new HierarchicalContainer());
+    }
+
+    public void testFiltering() {
+        testContainerFiltering(new HierarchicalContainer());
+    }
+
+    public void testSorting() {
+        testContainerSorting(new HierarchicalContainer());
+    }
+
+    public void testOrdered() {
+        testContainerOrdered(new HierarchicalContainer());
+    }
+
+    public void testHierarchicalSorting() {
+        testHierarchicalSorting(new HierarchicalContainer());
+    }
+
+    public void testSortingAndFiltering() {
+        testContainerSortingAndFiltering(new HierarchicalContainer());
+    }
+
+    public void testRemovingItemsFromFilteredContainer() {
+        HierarchicalContainer container = new HierarchicalContainer();
+        initializeContainer(container);
+        container.setIncludeParentsWhenFiltering(true);
+        container.addContainerFilter(FULLY_QUALIFIED_NAME, "ab", false, false);
+        Object p1 = container.getParent("com.vaadin.ui.TabSheet");
+        assertEquals("com.vaadin.ui", p1);
+
+        container.removeItem("com.vaadin.ui.TabSheet");
+        // Parent for the removed item must be null because the item is no
+        // longer in the container
+        p1 = container.getParent("com.vaadin.ui.TabSheet");
+        assertNull("Parent should be null, is " + p1, p1);
+
+        container.removeAllItems();
+        p1 = container.getParent("com.vaadin.terminal.gwt.client.Focusable");
+        assertNull("Parent should be null, is " + p1, p1);
+
+    }
+
+    public void testParentWhenRemovingFilterFromContainer() {
+        HierarchicalContainer container = new HierarchicalContainer();
+        initializeContainer(container);
+        container.setIncludeParentsWhenFiltering(true);
+        container.addContainerFilter(FULLY_QUALIFIED_NAME, "ab", false, false);
+        Object p1 = container.getParent("com.vaadin.ui.TabSheet");
+        assertEquals("com.vaadin.ui", p1);
+        p1 = container
+                .getParent("com.vaadin.terminal.gwt.client.ui.VPopupCalendar");
+        assertNull(p1);
+        container.removeAllContainerFilters();
+        p1 = container
+                .getParent("com.vaadin.terminal.gwt.client.ui.VPopupCalendar");
+        assertEquals("com.vaadin.terminal.gwt.client.ui", p1);
+
+    }
+
+    public void testChangeParentInFilteredContainer() {
+        HierarchicalContainer container = new HierarchicalContainer();
+        initializeContainer(container);
+        container.setIncludeParentsWhenFiltering(true);
+        container.addContainerFilter(FULLY_QUALIFIED_NAME, "Tab", false, false);
+
+        // Change parent of filtered item
+        Object p1 = container.getParent("com.vaadin.ui.TabSheet");
+        assertEquals("com.vaadin.ui", p1);
+        container.setParent("com.vaadin.ui.TabSheet", "com.vaadin");
+        p1 = container.getParent("com.vaadin.ui.TabSheet");
+        assertEquals("com.vaadin", p1);
+        container.setParent("com.vaadin.ui.TabSheet", "com");
+        p1 = container.getParent("com.vaadin.ui.TabSheet");
+        assertEquals("com", p1);
+        container.setParent("com.vaadin.ui.TabSheet", null);
+        p1 = container.getParent("com.vaadin.ui.TabSheet");
+        assertNull(p1);
+
+        // root -> non-root
+        container.setParent("com.vaadin.ui.TabSheet", "com");
+        p1 = container.getParent("com.vaadin.ui.TabSheet");
+        assertEquals("com", p1);
+
+    }
+
+    public void testHierarchicalFilteringWithParents() {
+        HierarchicalContainer container = new HierarchicalContainer();
+        initializeContainer(container);
+        container.setIncludeParentsWhenFiltering(true);
+
+        // Filter by "contains ab"
+        container.addContainerFilter(FULLY_QUALIFIED_NAME, "ab", false, false);
+
+        // 20 items match the filters and the have 8 parents that should also be
+        // included
+        // only one root "com" should exist
+        // filtered
+        int expectedSize = 29;
+        int expectedRoots = 1;
+
+        validateHierarchicalContainer(container, "com",
+                "com.vaadin.ui.TabSheet",
+                "com.vaadin.terminal.gwt.client.Focusable", "blah", true,
+                expectedSize, expectedRoots, true);
+
+        // only include .gwt.client classes
+        container.removeAllContainerFilters();
+        container.addContainerFilter(FULLY_QUALIFIED_NAME, ".gwt.client.",
+                false, false);
+
+        int packages = 6;
+        int classes = 112;
+
+        expectedSize = packages + classes;
+        expectedRoots = 1;
+
+        validateHierarchicalContainer(container, "com",
+                "com.vaadin.terminal.gwt.client.WidgetSet",
+                "com.vaadin.terminal.gwt.client.ui.VSplitPanelVertical",
+                "blah", true, expectedSize, expectedRoots, true);
+
+        // Additionally remove all without 'm' in the simple name.
+        container.addContainerFilter(SIMPLE_NAME, "m", false, false);
+
+        expectedSize = 7 + 18;
+        expectedRoots = 1;
+
+        validateHierarchicalContainer(
+                container,
+                "com",
+                "com.vaadin.terminal.gwt.client.ui.VUriFragmentUtility",
+                "com.vaadin.terminal.gwt.client.ui.layout.ChildComponentContainer",
+                "blah", true, expectedSize, expectedRoots, true);
+
+    }
+
+    public void testRemoveLastChild() {
+        HierarchicalContainer c = new HierarchicalContainer();
+
+        c.addItem("root");
+        assertEquals(false, c.hasChildren("root"));
+
+        c.addItem("child");
+        c.setParent("child", "root");
+        assertEquals(true, c.hasChildren("root"));
+
+        c.removeItem("child");
+        assertFalse(c.containsId("child"));
+        assertNull(c.getChildren("root"));
+        assertNull(c.getChildren("child"));
+        assertFalse(c.hasChildren("child"));
+        assertFalse(c.hasChildren("root"));
+    }
+
+    public void testRemoveLastChildFromFiltered() {
+        HierarchicalContainer c = new HierarchicalContainer();
+
+        c.addItem("root");
+        assertEquals(false, c.hasChildren("root"));
+
+        c.addItem("child");
+        c.setParent("child", "root");
+        assertEquals(true, c.hasChildren("root"));
+
+        // Dummy filter that does not remove any items
+        c.addContainerFilter(new Filter() {
+
+            public boolean passesFilter(Object itemId, Item item)
+                    throws UnsupportedOperationException {
+                return true;
+            }
+
+            public boolean appliesToProperty(Object propertyId) {
+                return true;
+            }
+        });
+        c.removeItem("child");
+
+        assertFalse(c.containsId("child"));
+        assertNull(c.getChildren("root"));
+        assertNull(c.getChildren("child"));
+        assertFalse(c.hasChildren("child"));
+        assertFalse(c.hasChildren("root"));
+    }
+
+    public void testHierarchicalFilteringWithoutParents() {
+        HierarchicalContainer container = new HierarchicalContainer();
+
+        initializeContainer(container);
+        container.setIncludeParentsWhenFiltering(false);
+
+        // Filter by "contains ab"
+        container.addContainerFilter(SIMPLE_NAME, "ab", false, false);
+
+        // 20 items match the filter.
+        // com.vaadin.data.BufferedValidatable
+        // com.vaadin.data.Validatable
+        // com.vaadin.terminal.gwt.client.Focusable
+        // com.vaadin.terminal.gwt.client.Paintable
+        // com.vaadin.terminal.gwt.client.ui.Table
+        // com.vaadin.terminal.gwt.client.ui.VLabel
+        // com.vaadin.terminal.gwt.client.ui.VScrollTable
+        // com.vaadin.terminal.gwt.client.ui.VTablePaging
+        // com.vaadin.terminal.gwt.client.ui.VTabsheet
+        // com.vaadin.terminal.gwt.client.ui.VTabsheetBase
+        // com.vaadin.terminal.gwt.client.ui.VTabsheetPanel
+        // com.vaadin.terminal.gwt.server.ChangeVariablesErrorEvent
+        // com.vaadin.terminal.Paintable
+        // com.vaadin.terminal.Scrollable
+        // com.vaadin.terminal.Sizeable
+        // com.vaadin.terminal.VariableOwner
+        // com.vaadin.ui.Label
+        // com.vaadin.ui.Table
+        // com.vaadin.ui.TableFieldFactory
+        // com.vaadin.ui.TabSheet
+        // all become roots.
+        int expectedSize = 20;
+        int expectedRoots = 20;
+
+        validateHierarchicalContainer(container,
+                "com.vaadin.data.BufferedValidatable",
+                "com.vaadin.ui.TabSheet",
+                "com.vaadin.terminal.gwt.client.ui.VTabsheetBase", "blah",
+                true, expectedSize, expectedRoots, false);
+
+        // only include .gwt.client classes
+        container.removeAllContainerFilters();
+        container.addContainerFilter(FULLY_QUALIFIED_NAME, ".gwt.client.",
+                false, false);
+
+        int packages = 3;
+        int classes = 110;
+
+        expectedSize = packages + classes;
+        expectedRoots = 35 + 1; // com.vaadin.terminal.gwt.client.ui +
+        // com.vaadin.terminal.gwt.client.*
+
+        // Sorting is case insensitive
+        validateHierarchicalContainer(container,
+                "com.vaadin.terminal.gwt.client.ApplicationConfiguration",
+                "com.vaadin.terminal.gwt.client.WidgetSet",
+                "com.vaadin.terminal.gwt.client.ui.VOptionGroup", "blah", true,
+                expectedSize, expectedRoots, false);
+
+        // Additionally remove all without 'P' in the simple name.
+        container.addContainerFilter(SIMPLE_NAME, "P", false, false);
+
+        expectedSize = 13;
+        expectedRoots = expectedSize;
+
+        validateHierarchicalContainer(container,
+                "com.vaadin.terminal.gwt.client.Paintable",
+                "com.vaadin.terminal.gwt.client.ui.VTabsheetPanel",
+                "com.vaadin.terminal.gwt.client.ui.VPopupCalendar", "blah",
+                true, expectedSize, expectedRoots, false);
+
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/TestIndexedContainer.java b/tests/server-side/com/vaadin/data/util/TestIndexedContainer.java
new file mode 100644
index 0000000000..99bd4838cf
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/TestIndexedContainer.java
@@ -0,0 +1,271 @@
+package com.vaadin.data.util;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+
+public class TestIndexedContainer extends AbstractInMemoryContainerTest {
+
+    public void testBasicOperations() {
+        testBasicContainerOperations(new IndexedContainer());
+    }
+
+    public void testFiltering() {
+        testContainerFiltering(new IndexedContainer());
+    }
+
+    public void testSorting() {
+        testContainerSorting(new IndexedContainer());
+    }
+
+    public void testSortingAndFiltering() {
+        testContainerSortingAndFiltering(new IndexedContainer());
+    }
+
+    public void testContainerOrdered() {
+        testContainerOrdered(new IndexedContainer());
+    }
+
+    public void testContainerIndexed() {
+        testContainerIndexed(new IndexedContainer(), sampleData[2], 2, true,
+                "newItemId", true);
+    }
+
+    public void testItemSetChangeListeners() {
+        IndexedContainer container = new IndexedContainer();
+        ItemSetChangeCounter counter = new ItemSetChangeCounter();
+        container.addListener(counter);
+
+        String id1 = "id1";
+        String id2 = "id2";
+        String id3 = "id3";
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItem();
+        counter.assertOnce();
+        container.addItem(id1);
+        counter.assertOnce();
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAt(0);
+        counter.assertOnce();
+        container.addItemAt(0, id1);
+        counter.assertOnce();
+        container.addItemAt(0, id2);
+        counter.assertOnce();
+        container.addItemAt(container.size(), id3);
+        counter.assertOnce();
+        // no notification if already in container
+        container.addItemAt(0, id1);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        container.addItemAfter(null);
+        counter.assertOnce();
+        container.addItemAfter(null, id1);
+        counter.assertOnce();
+        container.addItemAfter(id1);
+        counter.assertOnce();
+        container.addItemAfter(id1, id2);
+        counter.assertOnce();
+        container.addItemAfter(container.firstItemId());
+        counter.assertOnce();
+        container.addItemAfter(container.lastItemId());
+        counter.assertOnce();
+        container.addItemAfter(container.lastItemId(), id3);
+        counter.assertOnce();
+        // no notification if already in container
+        container.addItemAfter(0, id1);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        container.removeItem(sampleData[0]);
+        counter.assertOnce();
+
+        initializeContainer(container);
+        counter.reset();
+        // no notification for removing a non-existing item
+        container.removeItem(id1);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        container.removeAllItems();
+        counter.assertOnce();
+        // already empty
+        container.removeAllItems();
+        counter.assertNone();
+
+    }
+
+    public void testAddRemoveContainerFilter() {
+        IndexedContainer container = new IndexedContainer();
+        ItemSetChangeCounter counter = new ItemSetChangeCounter();
+        container.addListener(counter);
+
+        // simply adding or removing container filters should cause events
+        // (content changes)
+
+        initializeContainer(container);
+        counter.reset();
+        container.addContainerFilter(SIMPLE_NAME, "a", true, false);
+        counter.assertOnce();
+        container.removeContainerFilters(SIMPLE_NAME);
+        counter.assertOnce();
+        container.addContainerFilter(SIMPLE_NAME, "a", true, false);
+        counter.assertOnce();
+        container.removeAllContainerFilters();
+        counter.assertOnce();
+    }
+
+    // TODO other tests should check positions after removing filter etc,
+    // here concentrating on listeners
+    public void testItemSetChangeListenersFiltering() {
+        IndexedContainer container = new IndexedContainer();
+        ItemSetChangeCounter counter = new ItemSetChangeCounter();
+        container.addListener(counter);
+
+        counter.reset();
+        container.addContainerFilter(FULLY_QUALIFIED_NAME, "Test", true, false);
+        // no real change, so no notification required
+        counter.assertNone();
+
+        String id1 = "com.example.Test1";
+        String id2 = "com.example.Test2";
+        String id3 = "com.example.Other";
+
+        // perform operations while filtering container
+
+        Item item;
+
+        initializeContainer(container);
+        counter.reset();
+        // passes filter
+        item = container.addItem(id1);
+        // no event if filtered out
+        counter.assertNone();
+        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1);
+        counter.assertOnce();
+        // passes filter but already in the container
+        item = container.addItem(id1);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        // passes filter after change
+        item = container.addItemAt(0, id1);
+        counter.assertNone();
+        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1);
+        counter.assertOnce();
+        item = container.addItemAt(container.size(), id2);
+        counter.assertNone();
+        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id2);
+        counter.assertOnce();
+        // passes filter but already in the container
+        item = container.addItemAt(0, id1);
+        counter.assertNone();
+        item = container.addItemAt(container.size(), id2);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        // passes filter
+        item = container.addItemAfter(null, id1);
+        counter.assertNone();
+        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1);
+        counter.assertOnce();
+        item = container.addItemAfter(container.lastItemId(), id2);
+        counter.assertNone();
+        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id2);
+        counter.assertOnce();
+        // passes filter but already in the container
+        item = container.addItemAfter(null, id1);
+        counter.assertNone();
+        item = container.addItemAfter(container.lastItemId(), id2);
+        counter.assertNone();
+
+        // does not pass filter
+
+        // TODO implement rest
+
+        initializeContainer(container);
+        counter.reset();
+        item = container.addItemAfter(null, id3);
+        counter.assertNone();
+        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        item = container.addItemAfter(container.firstItemId(), id3);
+        counter.assertNone();
+        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        item = container.addItemAfter(container.lastItemId(), id3);
+        counter.assertNone();
+        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        item = container.addItemAt(0, id3);
+        counter.assertNone();
+        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        item = container.addItemAt(1, id3);
+        counter.assertNone();
+        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
+        counter.assertNone();
+
+        initializeContainer(container);
+        counter.reset();
+        item = container.addItemAt(container.size(), id3);
+        counter.assertNone();
+        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
+        counter.assertNone();
+
+        // passes filter
+
+        initializeContainer(container);
+        counter.reset();
+        item = container.addItem(id1);
+        counter.assertNone();
+        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1);
+        counter.assertOnce();
+        container.removeItem(id1);
+        counter.assertOnce();
+        // already removed
+        container.removeItem(id1);
+        counter.assertNone();
+
+        item = container.addItem(id3);
+        counter.assertNone();
+        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
+        counter.assertNone();
+        // not visible
+        container.removeItem(id3);
+        counter.assertNone();
+
+        // remove all
+
+        initializeContainer(container);
+        item = container.addItem(id1);
+        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1);
+        counter.reset();
+        container.removeAllItems();
+        counter.assertOnce();
+        // no visible items
+        container.removeAllItems();
+        counter.assertNone();
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/filter/AbstractFilterTest.java b/tests/server-side/com/vaadin/data/util/filter/AbstractFilterTest.java
new file mode 100644
index 0000000000..beaa1c4e8f
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/filter/AbstractFilterTest.java
@@ -0,0 +1,91 @@
+package com.vaadin.data.util.filter;
+
+import junit.framework.TestCase;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.data.util.PropertysetItem;
+
+public abstract class AbstractFilterTest<FILTERTYPE extends Filter> extends
+        TestCase {
+
+    protected static final String PROPERTY1 = "property1";
+    protected static final String PROPERTY2 = "property2";
+
+    protected static class TestItem<T1, T2> extends PropertysetItem {
+
+        public TestItem(T1 value1, T2 value2) {
+            addItemProperty(PROPERTY1, new ObjectProperty<T1>(value1));
+            addItemProperty(PROPERTY2, new ObjectProperty<T2>(value2));
+        }
+    }
+
+    protected static class NullProperty implements Property {
+
+        public Object getValue() {
+            return null;
+        }
+
+        public void setValue(Object newValue) throws ReadOnlyException,
+                ConversionException {
+            throw new ReadOnlyException();
+        }
+
+        public Class<?> getType() {
+            return String.class;
+        }
+
+        public boolean isReadOnly() {
+            return true;
+        }
+
+        public void setReadOnly(boolean newStatus) {
+            // do nothing
+        }
+
+    }
+
+    public static class SameItemFilter implements Filter {
+
+        private final Item item;
+        private final Object propertyId;
+
+        public SameItemFilter(Item item) {
+            this(item, "");
+        }
+
+        public SameItemFilter(Item item, Object propertyId) {
+            this.item = item;
+            this.propertyId = propertyId;
+        }
+
+        public boolean passesFilter(Object itemId, Item item)
+                throws UnsupportedOperationException {
+            return this.item == item;
+        }
+
+        public boolean appliesToProperty(Object propertyId) {
+            return this.propertyId != null ? this.propertyId.equals(propertyId)
+                    : true;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (obj == null || !getClass().equals(obj.getClass())) {
+                return false;
+            }
+            SameItemFilter other = (SameItemFilter) obj;
+            return item == other.item
+                    && (propertyId == null ? other.propertyId == null
+                            : propertyId.equals(other.propertyId));
+        }
+
+        @Override
+        public int hashCode() {
+            return item.hashCode();
+        }
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/filter/AndOrFilterTest.java b/tests/server-side/com/vaadin/data/util/filter/AndOrFilterTest.java
new file mode 100644
index 0000000000..bdd852bd41
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/filter/AndOrFilterTest.java
@@ -0,0 +1,234 @@
+package com.vaadin.data.util.filter;
+
+import junit.framework.Assert;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.data.util.filter.And;
+import com.vaadin.data.util.filter.Or;
+
+public class AndOrFilterTest extends AbstractFilterTest {
+
+    protected Item item1 = new BeanItem<Integer>(1);
+    protected Item item2 = new BeanItem<Integer>(2);
+
+    public void testNoFilterAnd() {
+        Filter filter = new And();
+
+        Assert.assertTrue(filter.passesFilter(null, item1));
+    }
+
+    public void testSingleFilterAnd() {
+        Filter filter = new And(new SameItemFilter(item1));
+
+        Assert.assertTrue(filter.passesFilter(null, item1));
+        Assert.assertFalse(filter.passesFilter(null, item2));
+    }
+
+    public void testTwoFilterAnd() {
+        Filter filter1 = new And(new SameItemFilter(item1), new SameItemFilter(
+                item1));
+        Filter filter2 = new And(new SameItemFilter(item1), new SameItemFilter(
+                item2));
+
+        Assert.assertTrue(filter1.passesFilter(null, item1));
+        Assert.assertFalse(filter1.passesFilter(null, item2));
+
+        Assert.assertFalse(filter2.passesFilter(null, item1));
+        Assert.assertFalse(filter2.passesFilter(null, item2));
+    }
+
+    public void testThreeFilterAnd() {
+        Filter filter1 = new And(new SameItemFilter(item1), new SameItemFilter(
+                item1), new SameItemFilter(item1));
+        Filter filter2 = new And(new SameItemFilter(item1), new SameItemFilter(
+                item1), new SameItemFilter(item2));
+
+        Assert.assertTrue(filter1.passesFilter(null, item1));
+        Assert.assertFalse(filter1.passesFilter(null, item2));
+
+        Assert.assertFalse(filter2.passesFilter(null, item1));
+        Assert.assertFalse(filter2.passesFilter(null, item2));
+    }
+
+    public void testNoFilterOr() {
+        Filter filter = new Or();
+
+        Assert.assertFalse(filter.passesFilter(null, item1));
+    }
+
+    public void testSingleFilterOr() {
+        Filter filter = new Or(new SameItemFilter(item1));
+
+        Assert.assertTrue(filter.passesFilter(null, item1));
+        Assert.assertFalse(filter.passesFilter(null, item2));
+    }
+
+    public void testTwoFilterOr() {
+        Filter filter1 = new Or(new SameItemFilter(item1), new SameItemFilter(
+                item1));
+        Filter filter2 = new Or(new SameItemFilter(item1), new SameItemFilter(
+                item2));
+
+        Assert.assertTrue(filter1.passesFilter(null, item1));
+        Assert.assertFalse(filter1.passesFilter(null, item2));
+
+        Assert.assertTrue(filter2.passesFilter(null, item1));
+        Assert.assertTrue(filter2.passesFilter(null, item2));
+    }
+
+    public void testThreeFilterOr() {
+        Filter filter1 = new Or(new SameItemFilter(item1), new SameItemFilter(
+                item1), new SameItemFilter(item1));
+        Filter filter2 = new Or(new SameItemFilter(item1), new SameItemFilter(
+                item1), new SameItemFilter(item2));
+
+        Assert.assertTrue(filter1.passesFilter(null, item1));
+        Assert.assertFalse(filter1.passesFilter(null, item2));
+
+        Assert.assertTrue(filter2.passesFilter(null, item1));
+        Assert.assertTrue(filter2.passesFilter(null, item2));
+    }
+
+    public void testAndEqualsHashCode() {
+        Filter filter0 = new And();
+        Filter filter0b = new And();
+        Filter filter1a = new And(new SameItemFilter(item1));
+        Filter filter1a2 = new And(new SameItemFilter(item1));
+        Filter filter1b = new And(new SameItemFilter(item2));
+        Filter filter2a = new And(new SameItemFilter(item1),
+                new SameItemFilter(item1));
+        Filter filter2b = new And(new SameItemFilter(item1),
+                new SameItemFilter(item2));
+        Filter filter2b2 = new And(new SameItemFilter(item1),
+                new SameItemFilter(item2));
+        Filter other0 = new Or();
+        Filter other1 = new Or(new SameItemFilter(item1));
+
+        Assert.assertEquals(filter0, filter0);
+        Assert.assertEquals(filter0, filter0b);
+        Assert.assertFalse(filter0.equals(filter1a));
+        Assert.assertFalse(filter0.equals(other0));
+        Assert.assertFalse(filter0.equals(other1));
+
+        Assert.assertFalse(filter1a.equals(filter1b));
+        Assert.assertFalse(filter1a.equals(other1));
+
+        Assert.assertFalse(filter1a.equals(filter2a));
+        Assert.assertFalse(filter2a.equals(filter1a));
+
+        Assert.assertFalse(filter2a.equals(filter2b));
+        Assert.assertEquals(filter2b, filter2b2);
+
+        // hashCode()
+        Assert.assertEquals(filter0.hashCode(), filter0.hashCode());
+        Assert.assertEquals(filter0.hashCode(), filter0b.hashCode());
+        Assert.assertEquals(filter1a.hashCode(), filter1a.hashCode());
+        Assert.assertEquals(filter1a.hashCode(), filter1a2.hashCode());
+        Assert.assertEquals(filter2a.hashCode(), filter2a.hashCode());
+        Assert.assertEquals(filter2b.hashCode(), filter2b2.hashCode());
+    }
+
+    public void testOrEqualsHashCode() {
+        Filter filter0 = new Or();
+        Filter filter0b = new Or();
+        Filter filter1a = new Or(new SameItemFilter(item1));
+        Filter filter1a2 = new Or(new SameItemFilter(item1));
+        Filter filter1b = new Or(new SameItemFilter(item2));
+        Filter filter2a = new Or(new SameItemFilter(item1), new SameItemFilter(
+                item1));
+        Filter filter2b = new Or(new SameItemFilter(item1), new SameItemFilter(
+                item2));
+        Filter filter2b2 = new Or(new SameItemFilter(item1),
+                new SameItemFilter(item2));
+        Filter other0 = new And();
+        Filter other1 = new And(new SameItemFilter(item1));
+
+        Assert.assertEquals(filter0, filter0);
+        Assert.assertEquals(filter0, filter0b);
+        Assert.assertFalse(filter0.equals(filter1a));
+        Assert.assertFalse(filter0.equals(other0));
+        Assert.assertFalse(filter0.equals(other1));
+
+        Assert.assertFalse(filter1a.equals(filter1b));
+        Assert.assertFalse(filter1a.equals(other1));
+
+        Assert.assertFalse(filter1a.equals(filter2a));
+        Assert.assertFalse(filter2a.equals(filter1a));
+
+        Assert.assertFalse(filter2a.equals(filter2b));
+        Assert.assertEquals(filter2b, filter2b2);
+
+        // hashCode()
+        Assert.assertEquals(filter0.hashCode(), filter0.hashCode());
+        Assert.assertEquals(filter0.hashCode(), filter0b.hashCode());
+        Assert.assertEquals(filter1a.hashCode(), filter1a.hashCode());
+        Assert.assertEquals(filter1a.hashCode(), filter1a2.hashCode());
+        Assert.assertEquals(filter2a.hashCode(), filter2a.hashCode());
+        Assert.assertEquals(filter2b.hashCode(), filter2b2.hashCode());
+    }
+
+    public void testAndAppliesToProperty() {
+        Filter filter0 = new And();
+        Filter filter1a = new And(new SameItemFilter(item1, "a"));
+        Filter filter1b = new And(new SameItemFilter(item1, "b"));
+        Filter filter2aa = new And(new SameItemFilter(item1, "a"),
+                new SameItemFilter(item1, "a"));
+        Filter filter2ab = new And(new SameItemFilter(item1, "a"),
+                new SameItemFilter(item1, "b"));
+        Filter filter3abc = new And(new SameItemFilter(item1, "a"),
+                new SameItemFilter(item1, "b"), new SameItemFilter(item1, "c"));
+
+        // empty And does not filter out anything
+        Assert.assertFalse(filter0.appliesToProperty("a"));
+        Assert.assertFalse(filter0.appliesToProperty("d"));
+
+        Assert.assertTrue(filter1a.appliesToProperty("a"));
+        Assert.assertFalse(filter1a.appliesToProperty("b"));
+        Assert.assertFalse(filter1b.appliesToProperty("a"));
+        Assert.assertTrue(filter1b.appliesToProperty("b"));
+
+        Assert.assertTrue(filter2aa.appliesToProperty("a"));
+        Assert.assertFalse(filter2aa.appliesToProperty("b"));
+        Assert.assertTrue(filter2ab.appliesToProperty("a"));
+        Assert.assertTrue(filter2ab.appliesToProperty("b"));
+
+        Assert.assertTrue(filter3abc.appliesToProperty("a"));
+        Assert.assertTrue(filter3abc.appliesToProperty("b"));
+        Assert.assertTrue(filter3abc.appliesToProperty("c"));
+        Assert.assertFalse(filter3abc.appliesToProperty("d"));
+    }
+
+    public void testOrAppliesToProperty() {
+        Filter filter0 = new Or();
+        Filter filter1a = new Or(new SameItemFilter(item1, "a"));
+        Filter filter1b = new Or(new SameItemFilter(item1, "b"));
+        Filter filter2aa = new Or(new SameItemFilter(item1, "a"),
+                new SameItemFilter(item1, "a"));
+        Filter filter2ab = new Or(new SameItemFilter(item1, "a"),
+                new SameItemFilter(item1, "b"));
+        Filter filter3abc = new Or(new SameItemFilter(item1, "a"),
+                new SameItemFilter(item1, "b"), new SameItemFilter(item1, "c"));
+
+        // empty Or filters out everything
+        Assert.assertTrue(filter0.appliesToProperty("a"));
+        Assert.assertTrue(filter0.appliesToProperty("d"));
+
+        Assert.assertTrue(filter1a.appliesToProperty("a"));
+        Assert.assertFalse(filter1a.appliesToProperty("b"));
+        Assert.assertFalse(filter1b.appliesToProperty("a"));
+        Assert.assertTrue(filter1b.appliesToProperty("b"));
+
+        Assert.assertTrue(filter2aa.appliesToProperty("a"));
+        Assert.assertFalse(filter2aa.appliesToProperty("b"));
+        Assert.assertTrue(filter2ab.appliesToProperty("a"));
+        Assert.assertTrue(filter2ab.appliesToProperty("b"));
+
+        Assert.assertTrue(filter3abc.appliesToProperty("a"));
+        Assert.assertTrue(filter3abc.appliesToProperty("b"));
+        Assert.assertTrue(filter3abc.appliesToProperty("c"));
+        Assert.assertFalse(filter3abc.appliesToProperty("d"));
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/filter/CompareFilterTest.java b/tests/server-side/com/vaadin/data/util/filter/CompareFilterTest.java
new file mode 100644
index 0000000000..4cd683bfde
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/filter/CompareFilterTest.java
@@ -0,0 +1,260 @@
+package com.vaadin.data.util.filter;
+
+import java.util.Date;
+
+import junit.framework.Assert;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.data.util.PropertysetItem;
+import com.vaadin.data.util.filter.Compare.Equal;
+import com.vaadin.data.util.filter.Compare.Greater;
+import com.vaadin.data.util.filter.Compare.GreaterOrEqual;
+import com.vaadin.data.util.filter.Compare.Less;
+import com.vaadin.data.util.filter.Compare.LessOrEqual;
+
+public class CompareFilterTest extends AbstractFilterTest {
+
+    protected Item itemNull;
+    protected Item itemEmpty;
+    protected Item itemA;
+    protected Item itemB;
+    protected Item itemC;
+
+    protected final Filter equalB = new Equal(PROPERTY1, "b");
+    protected final Filter greaterB = new Greater(PROPERTY1, "b");
+    protected final Filter lessB = new Less(PROPERTY1, "b");
+    protected final Filter greaterEqualB = new GreaterOrEqual(PROPERTY1, "b");
+    protected final Filter lessEqualB = new LessOrEqual(PROPERTY1, "b");
+
+    protected final Filter equalNull = new Equal(PROPERTY1, null);
+    protected final Filter greaterNull = new Greater(PROPERTY1, null);
+    protected final Filter lessNull = new Less(PROPERTY1, null);
+    protected final Filter greaterEqualNull = new GreaterOrEqual(PROPERTY1,
+            null);
+    protected final Filter lessEqualNull = new LessOrEqual(PROPERTY1, null);
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        itemNull = new PropertysetItem();
+        itemNull.addItemProperty(PROPERTY1, new ObjectProperty<String>(null,
+                String.class));
+        itemEmpty = new PropertysetItem();
+        itemEmpty.addItemProperty(PROPERTY1, new ObjectProperty<String>("",
+                String.class));
+        itemA = new PropertysetItem();
+        itemA.addItemProperty(PROPERTY1, new ObjectProperty<String>("a",
+                String.class));
+        itemB = new PropertysetItem();
+        itemB.addItemProperty(PROPERTY1, new ObjectProperty<String>("b",
+                String.class));
+        itemC = new PropertysetItem();
+        itemC.addItemProperty(PROPERTY1, new ObjectProperty<String>("c",
+                String.class));
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        itemNull = null;
+        itemEmpty = null;
+        itemA = null;
+        itemB = null;
+    }
+
+    public void testCompareString() {
+        Assert.assertFalse(equalB.passesFilter(null, itemEmpty));
+        Assert.assertFalse(equalB.passesFilter(null, itemA));
+        Assert.assertTrue(equalB.passesFilter(null, itemB));
+        Assert.assertFalse(equalB.passesFilter(null, itemC));
+
+        Assert.assertFalse(greaterB.passesFilter(null, itemEmpty));
+        Assert.assertFalse(greaterB.passesFilter(null, itemA));
+        Assert.assertFalse(greaterB.passesFilter(null, itemB));
+        Assert.assertTrue(greaterB.passesFilter(null, itemC));
+
+        Assert.assertTrue(lessB.passesFilter(null, itemEmpty));
+        Assert.assertTrue(lessB.passesFilter(null, itemA));
+        Assert.assertFalse(lessB.passesFilter(null, itemB));
+        Assert.assertFalse(lessB.passesFilter(null, itemC));
+
+        Assert.assertFalse(greaterEqualB.passesFilter(null, itemEmpty));
+        Assert.assertFalse(greaterEqualB.passesFilter(null, itemA));
+        Assert.assertTrue(greaterEqualB.passesFilter(null, itemB));
+        Assert.assertTrue(greaterEqualB.passesFilter(null, itemC));
+
+        Assert.assertTrue(lessEqualB.passesFilter(null, itemEmpty));
+        Assert.assertTrue(lessEqualB.passesFilter(null, itemA));
+        Assert.assertTrue(lessEqualB.passesFilter(null, itemB));
+        Assert.assertFalse(lessEqualB.passesFilter(null, itemC));
+    }
+
+    public void testCompareWithNull() {
+        // null comparisons: null is less than any other value
+        Assert.assertFalse(equalB.passesFilter(null, itemNull));
+        Assert.assertTrue(greaterB.passesFilter(null, itemNull));
+        Assert.assertFalse(lessB.passesFilter(null, itemNull));
+        Assert.assertTrue(greaterEqualB.passesFilter(null, itemNull));
+        Assert.assertFalse(lessEqualB.passesFilter(null, itemNull));
+
+        Assert.assertTrue(equalNull.passesFilter(null, itemNull));
+        Assert.assertFalse(greaterNull.passesFilter(null, itemNull));
+        Assert.assertFalse(lessNull.passesFilter(null, itemNull));
+        Assert.assertTrue(greaterEqualNull.passesFilter(null, itemNull));
+        Assert.assertTrue(lessEqualNull.passesFilter(null, itemNull));
+
+        Assert.assertFalse(equalNull.passesFilter(null, itemA));
+        Assert.assertFalse(greaterNull.passesFilter(null, itemA));
+        Assert.assertTrue(lessNull.passesFilter(null, itemA));
+        Assert.assertFalse(greaterEqualNull.passesFilter(null, itemA));
+        Assert.assertTrue(lessEqualNull.passesFilter(null, itemA));
+    }
+
+    public void testCompareInteger() {
+        int negative = -1;
+        int zero = 0;
+        int positive = 1;
+
+        Item itemNegative = new PropertysetItem();
+        itemNegative.addItemProperty(PROPERTY1, new ObjectProperty<Integer>(
+                negative, Integer.class));
+        Item itemZero = new PropertysetItem();
+        itemZero.addItemProperty(PROPERTY1, new ObjectProperty<Integer>(zero,
+                Integer.class));
+        Item itemPositive = new PropertysetItem();
+        itemPositive.addItemProperty(PROPERTY1, new ObjectProperty<Integer>(
+                positive, Integer.class));
+
+        Filter equalZero = new Equal(PROPERTY1, zero);
+        Assert.assertFalse(equalZero.passesFilter(null, itemNegative));
+        Assert.assertTrue(equalZero.passesFilter(null, itemZero));
+        Assert.assertFalse(equalZero.passesFilter(null, itemPositive));
+
+        Filter isPositive = new Greater(PROPERTY1, zero);
+        Assert.assertFalse(isPositive.passesFilter(null, itemNegative));
+        Assert.assertFalse(isPositive.passesFilter(null, itemZero));
+        Assert.assertTrue(isPositive.passesFilter(null, itemPositive));
+
+        Filter isNegative = new Less(PROPERTY1, zero);
+        Assert.assertTrue(isNegative.passesFilter(null, itemNegative));
+        Assert.assertFalse(isNegative.passesFilter(null, itemZero));
+        Assert.assertFalse(isNegative.passesFilter(null, itemPositive));
+
+        Filter isNonNegative = new GreaterOrEqual(PROPERTY1, zero);
+        Assert.assertFalse(isNonNegative.passesFilter(null, itemNegative));
+        Assert.assertTrue(isNonNegative.passesFilter(null, itemZero));
+        Assert.assertTrue(isNonNegative.passesFilter(null, itemPositive));
+
+        Filter isNonPositive = new LessOrEqual(PROPERTY1, zero);
+        Assert.assertTrue(isNonPositive.passesFilter(null, itemNegative));
+        Assert.assertTrue(isNonPositive.passesFilter(null, itemZero));
+        Assert.assertFalse(isNonPositive.passesFilter(null, itemPositive));
+    }
+
+    public void testCompareDate() {
+        Date now = new Date();
+        // new Date() is only accurate to the millisecond, so repeating it gives
+        // the same date
+        Date earlier = new Date(now.getTime() - 1);
+        Date later = new Date(now.getTime() + 1);
+
+        Item itemEarlier = new PropertysetItem();
+        itemEarlier.addItemProperty(PROPERTY1, new ObjectProperty<Date>(
+                earlier, Date.class));
+        Item itemNow = new PropertysetItem();
+        itemNow.addItemProperty(PROPERTY1, new ObjectProperty<Date>(now,
+                Date.class));
+        Item itemLater = new PropertysetItem();
+        itemLater.addItemProperty(PROPERTY1, new ObjectProperty<Date>(later,
+                Date.class));
+
+        Filter equalNow = new Equal(PROPERTY1, now);
+        Assert.assertFalse(equalNow.passesFilter(null, itemEarlier));
+        Assert.assertTrue(equalNow.passesFilter(null, itemNow));
+        Assert.assertFalse(equalNow.passesFilter(null, itemLater));
+
+        Filter after = new Greater(PROPERTY1, now);
+        Assert.assertFalse(after.passesFilter(null, itemEarlier));
+        Assert.assertFalse(after.passesFilter(null, itemNow));
+        Assert.assertTrue(after.passesFilter(null, itemLater));
+
+        Filter before = new Less(PROPERTY1, now);
+        Assert.assertTrue(before.passesFilter(null, itemEarlier));
+        Assert.assertFalse(before.passesFilter(null, itemNow));
+        Assert.assertFalse(before.passesFilter(null, itemLater));
+
+        Filter afterOrNow = new GreaterOrEqual(PROPERTY1, now);
+        Assert.assertFalse(afterOrNow.passesFilter(null, itemEarlier));
+        Assert.assertTrue(afterOrNow.passesFilter(null, itemNow));
+        Assert.assertTrue(afterOrNow.passesFilter(null, itemLater));
+
+        Filter beforeOrNow = new LessOrEqual(PROPERTY1, now);
+        Assert.assertTrue(beforeOrNow.passesFilter(null, itemEarlier));
+        Assert.assertTrue(beforeOrNow.passesFilter(null, itemNow));
+        Assert.assertFalse(beforeOrNow.passesFilter(null, itemLater));
+    }
+
+    public void testCompareAppliesToProperty() {
+        Filter filterA = new Equal("a", 1);
+        Filter filterB = new Equal("b", 1);
+
+        Assert.assertTrue(filterA.appliesToProperty("a"));
+        Assert.assertFalse(filterA.appliesToProperty("b"));
+        Assert.assertFalse(filterB.appliesToProperty("a"));
+        Assert.assertTrue(filterB.appliesToProperty("b"));
+    }
+
+    public void testCompareEqualsHashCode() {
+        // most checks with Equal filter, then only some with others
+        Filter equalNull2 = new Equal(PROPERTY1, null);
+        Filter equalNullProperty2 = new Equal(PROPERTY2, null);
+        Filter equalEmpty = new Equal(PROPERTY1, "");
+        Filter equalEmpty2 = new Equal(PROPERTY1, "");
+        Filter equalEmptyProperty2 = new Equal(PROPERTY2, "");
+        Filter equalA = new Equal(PROPERTY1, "a");
+        Filter equalB2 = new Equal(PROPERTY1, "b");
+        Filter equalBProperty2 = new Equal(PROPERTY2, "b");
+
+        Filter greaterEmpty = new Greater(PROPERTY1, "");
+
+        // equals()
+        Assert.assertEquals(equalNull, equalNull);
+        Assert.assertEquals(equalNull, equalNull2);
+        Assert.assertFalse(equalNull.equals(equalNullProperty2));
+        Assert.assertFalse(equalNull.equals(equalEmpty));
+        Assert.assertFalse(equalNull.equals(equalB));
+
+        Assert.assertEquals(equalEmpty, equalEmpty);
+        Assert.assertFalse(equalEmpty.equals(equalNull));
+        Assert.assertEquals(equalEmpty, equalEmpty2);
+        Assert.assertFalse(equalEmpty.equals(equalEmptyProperty2));
+        Assert.assertFalse(equalEmpty.equals(equalB));
+
+        Assert.assertEquals(equalB, equalB);
+        Assert.assertFalse(equalB.equals(equalNull));
+        Assert.assertFalse(equalB.equals(equalEmpty));
+        Assert.assertEquals(equalB, equalB2);
+        Assert.assertFalse(equalB.equals(equalBProperty2));
+        Assert.assertFalse(equalB.equals(equalA));
+
+        Assert.assertEquals(greaterB, greaterB);
+        Assert.assertFalse(greaterB.equals(lessB));
+        Assert.assertFalse(greaterB.equals(greaterEqualB));
+        Assert.assertFalse(greaterB.equals(lessEqualB));
+
+        Assert.assertFalse(greaterNull.equals(greaterEmpty));
+        Assert.assertFalse(greaterNull.equals(greaterB));
+        Assert.assertFalse(greaterEmpty.equals(greaterNull));
+        Assert.assertFalse(greaterEmpty.equals(greaterB));
+        Assert.assertFalse(greaterB.equals(greaterNull));
+        Assert.assertFalse(greaterB.equals(greaterEmpty));
+
+        // hashCode()
+        Assert.assertEquals(equalNull.hashCode(), equalNull2.hashCode());
+        Assert.assertEquals(equalEmpty.hashCode(), equalEmpty2.hashCode());
+        Assert.assertEquals(equalB.hashCode(), equalB2.hashCode());
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/filter/IsNullFilterTest.java b/tests/server-side/com/vaadin/data/util/filter/IsNullFilterTest.java
new file mode 100644
index 0000000000..24d5152cf7
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/filter/IsNullFilterTest.java
@@ -0,0 +1,59 @@
+package com.vaadin.data.util.filter;
+
+import junit.framework.Assert;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.data.util.PropertysetItem;
+import com.vaadin.data.util.filter.And;
+import com.vaadin.data.util.filter.IsNull;
+
+public class IsNullFilterTest extends AbstractFilterTest {
+
+    public void testIsNull() {
+        Item item1 = new PropertysetItem();
+        item1.addItemProperty("a", new ObjectProperty<String>(null,
+                String.class));
+        item1.addItemProperty("b",
+                new ObjectProperty<String>("b", String.class));
+        Item item2 = new PropertysetItem();
+        item2.addItemProperty("a",
+                new ObjectProperty<String>("a", String.class));
+        item2.addItemProperty("b", new ObjectProperty<String>(null,
+                String.class));
+
+        Filter filter1 = new IsNull("a");
+        Filter filter2 = new IsNull("b");
+
+        Assert.assertTrue(filter1.passesFilter(null, item1));
+        Assert.assertFalse(filter1.passesFilter(null, item2));
+        Assert.assertFalse(filter2.passesFilter(null, item1));
+        Assert.assertTrue(filter2.passesFilter(null, item2));
+    }
+
+    public void testIsNullAppliesToProperty() {
+        Filter filterA = new IsNull("a");
+        Filter filterB = new IsNull("b");
+
+        Assert.assertTrue(filterA.appliesToProperty("a"));
+        Assert.assertFalse(filterA.appliesToProperty("b"));
+        Assert.assertFalse(filterB.appliesToProperty("a"));
+        Assert.assertTrue(filterB.appliesToProperty("b"));
+    }
+
+    public void testIsNullEqualsHashCode() {
+        Filter filter1 = new IsNull("a");
+        Filter filter1b = new IsNull("a");
+        Filter filter2 = new IsNull("b");
+
+        // equals()
+        Assert.assertEquals(filter1, filter1b);
+        Assert.assertFalse(filter1.equals(filter2));
+        Assert.assertFalse(filter1.equals(new And()));
+
+        // hashCode()
+        Assert.assertEquals(filter1.hashCode(), filter1b.hashCode());
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/filter/NotFilterTest.java b/tests/server-side/com/vaadin/data/util/filter/NotFilterTest.java
new file mode 100644
index 0000000000..be6417ccdf
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/filter/NotFilterTest.java
@@ -0,0 +1,52 @@
+package com.vaadin.data.util.filter;
+
+import junit.framework.Assert;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.data.util.filter.And;
+import com.vaadin.data.util.filter.Not;
+
+public class NotFilterTest extends AbstractFilterTest {
+
+    protected Item item1 = new BeanItem<Integer>(1);
+    protected Item item2 = new BeanItem<Integer>(2);
+
+    public void testNot() {
+        Filter origFilter = new SameItemFilter(item1);
+        Filter filter = new Not(origFilter);
+
+        Assert.assertTrue(origFilter.passesFilter(null, item1));
+        Assert.assertFalse(origFilter.passesFilter(null, item2));
+        Assert.assertFalse(filter.passesFilter(null, item1));
+        Assert.assertTrue(filter.passesFilter(null, item2));
+    }
+
+    public void testANotAppliesToProperty() {
+        Filter filterA = new Not(new SameItemFilter(item1, "a"));
+        Filter filterB = new Not(new SameItemFilter(item1, "b"));
+
+        Assert.assertTrue(filterA.appliesToProperty("a"));
+        Assert.assertFalse(filterA.appliesToProperty("b"));
+        Assert.assertFalse(filterB.appliesToProperty("a"));
+        Assert.assertTrue(filterB.appliesToProperty("b"));
+    }
+
+    public void testNotEqualsHashCode() {
+        Filter origFilter = new SameItemFilter(item1);
+        Filter filter1 = new Not(origFilter);
+        Filter filter1b = new Not(new SameItemFilter(item1));
+        Filter filter2 = new Not(new SameItemFilter(item2));
+
+        // equals()
+        Assert.assertEquals(filter1, filter1b);
+        Assert.assertFalse(filter1.equals(filter2));
+        Assert.assertFalse(filter1.equals(origFilter));
+        Assert.assertFalse(filter1.equals(new And()));
+
+        // hashCode()
+        Assert.assertEquals(filter1.hashCode(), filter1b.hashCode());
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/filter/SimpleStringFilterTest.java b/tests/server-side/com/vaadin/data/util/filter/SimpleStringFilterTest.java
new file mode 100644
index 0000000000..c36a764a54
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/filter/SimpleStringFilterTest.java
@@ -0,0 +1,131 @@
+package com.vaadin.data.util.filter;
+
+import junit.framework.Assert;
+
+import com.vaadin.data.util.filter.SimpleStringFilter;
+
+public class SimpleStringFilterTest extends AbstractFilterTest {
+
+    protected static TestItem<String, String> createTestItem() {
+        return new TestItem<String, String>("abcde", "TeSt");
+    }
+
+    protected TestItem<String, String> getTestItem() {
+        return createTestItem();
+    }
+
+    protected SimpleStringFilter f(Object propertyId, String filterString,
+            boolean ignoreCase, boolean onlyMatchPrefix) {
+        return new SimpleStringFilter(propertyId, filterString, ignoreCase,
+                onlyMatchPrefix);
+    }
+
+    protected boolean passes(Object propertyId, String filterString,
+            boolean ignoreCase, boolean onlyMatchPrefix) {
+        return f(propertyId, filterString, ignoreCase, onlyMatchPrefix)
+                .passesFilter(null, getTestItem());
+    }
+
+    public void testStartsWithCaseSensitive() {
+        Assert.assertTrue(passes(PROPERTY1, "ab", false, true));
+        Assert.assertTrue(passes(PROPERTY1, "", false, true));
+
+        Assert.assertFalse(passes(PROPERTY2, "ab", false, true));
+        Assert.assertFalse(passes(PROPERTY1, "AB", false, true));
+    }
+
+    public void testStartsWithCaseInsensitive() {
+        Assert.assertTrue(passes(PROPERTY1, "AB", true, true));
+        Assert.assertTrue(passes(PROPERTY2, "te", true, true));
+        Assert.assertFalse(passes(PROPERTY2, "AB", true, true));
+    }
+
+    public void testContainsCaseSensitive() {
+        Assert.assertTrue(passes(PROPERTY1, "ab", false, false));
+        Assert.assertTrue(passes(PROPERTY1, "abcde", false, false));
+        Assert.assertTrue(passes(PROPERTY1, "cd", false, false));
+        Assert.assertTrue(passes(PROPERTY1, "e", false, false));
+        Assert.assertTrue(passes(PROPERTY1, "", false, false));
+
+        Assert.assertFalse(passes(PROPERTY2, "ab", false, false));
+        Assert.assertFalse(passes(PROPERTY1, "es", false, false));
+    }
+
+    public void testContainsCaseInsensitive() {
+        Assert.assertTrue(passes(PROPERTY1, "AB", true, false));
+        Assert.assertTrue(passes(PROPERTY1, "aBcDe", true, false));
+        Assert.assertTrue(passes(PROPERTY1, "CD", true, false));
+        Assert.assertTrue(passes(PROPERTY1, "", true, false));
+
+        Assert.assertTrue(passes(PROPERTY2, "es", true, false));
+
+        Assert.assertFalse(passes(PROPERTY2, "ab", true, false));
+    }
+
+    public void testAppliesToProperty() {
+        SimpleStringFilter filter = f(PROPERTY1, "ab", false, true);
+        Assert.assertTrue(filter.appliesToProperty(PROPERTY1));
+        Assert.assertFalse(filter.appliesToProperty(PROPERTY2));
+        Assert.assertFalse(filter.appliesToProperty("other"));
+    }
+
+    public void testEqualsHashCode() {
+        SimpleStringFilter filter = f(PROPERTY1, "ab", false, true);
+
+        SimpleStringFilter f1 = f(PROPERTY2, "ab", false, true);
+        SimpleStringFilter f1b = f(PROPERTY2, "ab", false, true);
+        SimpleStringFilter f2 = f(PROPERTY1, "cd", false, true);
+        SimpleStringFilter f2b = f(PROPERTY1, "cd", false, true);
+        SimpleStringFilter f3 = f(PROPERTY1, "ab", true, true);
+        SimpleStringFilter f3b = f(PROPERTY1, "ab", true, true);
+        SimpleStringFilter f4 = f(PROPERTY1, "ab", false, false);
+        SimpleStringFilter f4b = f(PROPERTY1, "ab", false, false);
+
+        // equal but not same instance
+        Assert.assertEquals(f1, f1b);
+        Assert.assertEquals(f2, f2b);
+        Assert.assertEquals(f3, f3b);
+        Assert.assertEquals(f4, f4b);
+
+        // more than one property differ
+        Assert.assertFalse(f1.equals(f2));
+        Assert.assertFalse(f1.equals(f3));
+        Assert.assertFalse(f1.equals(f4));
+        Assert.assertFalse(f2.equals(f1));
+        Assert.assertFalse(f2.equals(f3));
+        Assert.assertFalse(f2.equals(f4));
+        Assert.assertFalse(f3.equals(f1));
+        Assert.assertFalse(f3.equals(f2));
+        Assert.assertFalse(f3.equals(f4));
+        Assert.assertFalse(f4.equals(f1));
+        Assert.assertFalse(f4.equals(f2));
+        Assert.assertFalse(f4.equals(f3));
+
+        // only one property differs
+        Assert.assertFalse(filter.equals(f1));
+        Assert.assertFalse(filter.equals(f2));
+        Assert.assertFalse(filter.equals(f3));
+        Assert.assertFalse(filter.equals(f4));
+
+        Assert.assertFalse(f1.equals(null));
+        Assert.assertFalse(f1.equals(new Object()));
+
+        Assert.assertEquals(f1.hashCode(), f1b.hashCode());
+        Assert.assertEquals(f2.hashCode(), f2b.hashCode());
+        Assert.assertEquals(f3.hashCode(), f3b.hashCode());
+        Assert.assertEquals(f4.hashCode(), f4b.hashCode());
+    }
+
+    public void testNonExistentProperty() {
+        Assert.assertFalse(passes("other1", "ab", false, true));
+    }
+
+    public void testNullValueForProperty() {
+        TestItem<String, String> item = createTestItem();
+        item.addItemProperty("other1", new NullProperty());
+
+        Assert.assertFalse(f("other1", "ab", false, true).passesFilter(null,
+                item));
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/AllTests.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/AllTests.java
new file mode 100644
index 0000000000..057527307f
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/AllTests.java
@@ -0,0 +1,145 @@
+package com.vaadin.data.util.sqlcontainer;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+import com.vaadin.data.util.sqlcontainer.connection.J2EEConnectionPoolTest;
+import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPoolTest;
+import com.vaadin.data.util.sqlcontainer.filters.BetweenTest;
+import com.vaadin.data.util.sqlcontainer.filters.LikeTest;
+import com.vaadin.data.util.sqlcontainer.generator.SQLGeneratorsTest;
+import com.vaadin.data.util.sqlcontainer.query.FreeformQueryTest;
+import com.vaadin.data.util.sqlcontainer.query.QueryBuilderTest;
+import com.vaadin.data.util.sqlcontainer.query.TableQueryTest;
+import com.vaadin.data.util.sqlcontainer.query.generator.DefaultSQLGenerator;
+import com.vaadin.data.util.sqlcontainer.query.generator.MSSQLGenerator;
+import com.vaadin.data.util.sqlcontainer.query.generator.OracleGenerator;
+import com.vaadin.data.util.sqlcontainer.query.generator.SQLGenerator;
+
+@RunWith(Suite.class)
+@SuiteClasses({ SimpleJDBCConnectionPoolTest.class,
+        J2EEConnectionPoolTest.class, LikeTest.class, QueryBuilderTest.class,
+        FreeformQueryTest.class, RowIdTest.class, SQLContainerTest.class,
+        SQLContainerTableQueryTest.class, ColumnPropertyTest.class,
+        TableQueryTest.class, SQLGeneratorsTest.class, UtilTest.class,
+        TicketTests.class, BetweenTest.class, ReadOnlyRowIdTest.class })
+public class AllTests {
+    /* Set the DB used for testing here! */
+    public enum DB {
+        HSQLDB, MYSQL, POSTGRESQL, MSSQL, ORACLE;
+    }
+
+    /* 0 = HSQLDB, 1 = MYSQL, 2 = POSTGRESQL, 3 = MSSQL, 4 = ORACLE */
+    public static final DB db = DB.HSQLDB;
+
+    /* Auto-increment column offset (HSQLDB = 0, MYSQL = 1, POSTGRES = 1) */
+    public static int offset;
+    /* Garbage table creation query (=three queries for oracle) */
+    public static String createGarbage;
+    public static String createGarbageSecond;
+    public static String createGarbageThird;
+    /* DB Drivers, urls, usernames and passwords */
+    public static String dbDriver;
+    public static String dbURL;
+    public static String dbUser;
+    public static String dbPwd;
+    /* People -test table creation statement(s) */
+    public static String peopleFirst;
+    public static String peopleSecond;
+    public static String peopleThird;
+    /* Versioned -test table createion statement(s) */
+    public static String[] versionStatements;
+    /* SQL Generator used during the testing */
+    public static SQLGenerator sqlGen;
+
+    /* Set DB-specific settings based on selected DB */
+    static {
+        sqlGen = new DefaultSQLGenerator();
+        switch (db) {
+        case HSQLDB:
+            offset = 0;
+            createGarbage = "create table garbage (id integer generated always as identity, type varchar(32), PRIMARY KEY(id))";
+            dbDriver = "org.hsqldb.jdbc.JDBCDriver";
+            dbURL = "jdbc:hsqldb:mem:sqlcontainer";
+            dbUser = "SA";
+            dbPwd = "";
+            peopleFirst = "create table people (id integer generated always as identity, name varchar(32), AGE INTEGER)";
+            peopleSecond = "alter table people add primary key (id)";
+            versionStatements = new String[] {
+                    "create table versioned (id integer generated always as identity, text varchar(255), version tinyint default 0)",
+                    "alter table versioned add primary key (id)" };
+            break;
+        case MYSQL:
+            offset = 1;
+            createGarbage = "create table GARBAGE (ID integer auto_increment, type varchar(32), PRIMARY KEY(ID))";
+            dbDriver = "com.mysql.jdbc.Driver";
+            dbURL = "jdbc:mysql:///sqlcontainer";
+            dbUser = "sqlcontainer";
+            dbPwd = "sqlcontainer";
+            peopleFirst = "create table PEOPLE (ID integer auto_increment not null, NAME varchar(32), AGE INTEGER, primary key(ID))";
+            peopleSecond = null;
+            versionStatements = new String[] {
+                    "create table VERSIONED (ID integer auto_increment not null, TEXT varchar(255), VERSION tinyint default 0, primary key(ID))",
+                    "CREATE TRIGGER upd_version BEFORE UPDATE ON VERSIONED"
+                            + " FOR EACH ROW SET NEW.VERSION = OLD.VERSION+1" };
+            break;
+        case POSTGRESQL:
+            offset = 1;
+            createGarbage = "create table GARBAGE (\"ID\" serial PRIMARY KEY, \"TYPE\" varchar(32))";
+            dbDriver = "org.postgresql.Driver";
+            dbURL = "jdbc:postgresql://localhost:5432/test";
+            dbUser = "postgres";
+            dbPwd = "postgres";
+            peopleFirst = "create table PEOPLE (\"ID\" serial primary key, \"NAME\" VARCHAR(32), \"AGE\" INTEGER)";
+            peopleSecond = null;
+            versionStatements = new String[] {
+                    "create table VERSIONED (\"ID\" serial primary key, \"TEXT\" VARCHAR(255), \"VERSION\" INTEGER DEFAULT 0)",
+                    "CREATE OR REPLACE FUNCTION zz_row_version() RETURNS TRIGGER AS $$"
+                            + "BEGIN"
+                            + "   IF TG_OP = 'UPDATE'"
+                            + "       AND NEW.\"VERSION\" = old.\"VERSION\""
+                            + "       AND ROW(NEW.*) IS DISTINCT FROM ROW (old.*)"
+                            + "   THEN"
+                            + "       NEW.\"VERSION\" := NEW.\"VERSION\" + 1;"
+                            + "   END IF;" + "   RETURN NEW;" + "END;"
+                            + "$$ LANGUAGE plpgsql;",
+                    "CREATE TRIGGER \"mytable_modify_dt_tr\" BEFORE UPDATE"
+                            + "   ON VERSIONED FOR EACH ROW"
+                            + "   EXECUTE PROCEDURE \"public\".\"zz_row_version\"();" };
+            break;
+        case MSSQL:
+            offset = 1;
+            createGarbage = "create table GARBAGE (\"ID\" int identity(1,1) primary key, \"TYPE\" varchar(32))";
+            dbDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
+            dbURL = "jdbc:sqlserver://localhost:1433;databaseName=tempdb;";
+            dbUser = "sa";
+            dbPwd = "sa";
+            peopleFirst = "create table PEOPLE (\"ID\" int identity(1,1) primary key, \"NAME\" VARCHAR(32), \"AGE\" INTEGER)";
+            peopleSecond = null;
+            versionStatements = new String[] { "create table VERSIONED (\"ID\" int identity(1,1) primary key, \"TEXT\" VARCHAR(255), \"VERSION\" rowversion not null)" };
+            sqlGen = new MSSQLGenerator();
+            break;
+        case ORACLE:
+            offset = 1;
+            createGarbage = "create table GARBAGE (\"ID\" integer primary key, \"TYPE\" varchar2(32))";
+            createGarbageSecond = "create sequence garbage_seq start with 1 increment by 1 nomaxvalue";
+            createGarbageThird = "create trigger garbage_trigger before insert on GARBAGE for each row begin select garbage_seq.nextval into :new.ID from dual; end;";
+            dbDriver = "oracle.jdbc.OracleDriver";
+            dbURL = "jdbc:oracle:thin:test/test@localhost:1521:XE";
+            dbUser = "test";
+            dbPwd = "test";
+            peopleFirst = "create table PEOPLE (\"ID\" integer primary key, \"NAME\" VARCHAR2(32), \"AGE\" INTEGER)";
+            peopleSecond = "create sequence people_seq start with 1 increment by 1 nomaxvalue";
+            peopleThird = "create trigger people_trigger before insert on PEOPLE for each row begin select people_seq.nextval into :new.ID from dual; end;";
+            versionStatements = new String[] {
+                    "create table VERSIONED (\"ID\" integer primary key, \"TEXT\" VARCHAR(255), \"VERSION\" INTEGER DEFAULT 0)",
+                    "create sequence versioned_seq start with 1 increment by 1 nomaxvalue",
+                    "create trigger versioned_trigger before insert on VERSIONED for each row begin select versioned_seq.nextval into :new.ID from dual; end;",
+                    "create sequence versioned_version start with 1 increment by 1 nomaxvalue",
+                    "create trigger versioned_version_trigger before insert or update on VERSIONED for each row begin select versioned_version.nextval into :new.VERSION from dual; end;" };
+            sqlGen = new OracleGenerator();
+            break;
+        }
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/ColumnPropertyTest.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/ColumnPropertyTest.java
new file mode 100644
index 0000000000..fac9fc98db
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/ColumnPropertyTest.java
@@ -0,0 +1,178 @@
+package com.vaadin.data.util.sqlcontainer;
+
+import java.util.Arrays;
+
+import org.easymock.EasyMock;
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.data.Property.ReadOnlyException;
+import com.vaadin.data.util.sqlcontainer.ColumnProperty.NotNullableException;
+
+public class ColumnPropertyTest {
+
+    @Test
+    public void constructor_legalParameters_shouldSucceed() {
+        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
+                "Ville", String.class);
+        Assert.assertNotNull(cp);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void constructor_missingPropertyId_shouldFail() {
+        new ColumnProperty(null, false, true, true, "Ville", String.class);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void constructor_missingType_shouldFail() {
+        new ColumnProperty("NAME", false, true, true, "Ville", null);
+    }
+
+    @Test
+    public void getValue_defaultValue_returnsVille() {
+        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
+                "Ville", String.class);
+        Assert.assertEquals("Ville", cp.getValue());
+    }
+
+    @Test
+    public void setValue_readWriteNullable_returnsKalle() {
+        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
+                "Ville", String.class);
+        SQLContainer container = EasyMock.createMock(SQLContainer.class);
+        RowItem owner = new RowItem(container, new RowId(new Object[] { 1 }),
+                Arrays.asList(cp));
+        container.itemChangeNotification(owner);
+        EasyMock.replay(container);
+        cp.setValue("Kalle");
+        Assert.assertEquals("Kalle", cp.getValue());
+        EasyMock.verify(container);
+    }
+
+    @Test(expected = ReadOnlyException.class)
+    public void setValue_readOnlyNullable_shouldFail() {
+        ColumnProperty cp = new ColumnProperty("NAME", true, true, true,
+                "Ville", String.class);
+        SQLContainer container = EasyMock.createMock(SQLContainer.class);
+        new RowItem(container, new RowId(new Object[] { 1 }), Arrays.asList(cp));
+        EasyMock.replay(container);
+        cp.setValue("Kalle");
+        EasyMock.verify(container);
+    }
+
+    @Test
+    public void setValue_readWriteNullable_nullShouldWork() {
+        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
+                "Ville", String.class);
+        SQLContainer container = EasyMock.createMock(SQLContainer.class);
+        RowItem owner = new RowItem(container, new RowId(new Object[] { 1 }),
+                Arrays.asList(cp));
+        container.itemChangeNotification(owner);
+        EasyMock.replay(container);
+        cp.setValue(null);
+        Assert.assertNull(cp.getValue());
+        EasyMock.verify(container);
+    }
+
+    @Test(expected = NotNullableException.class)
+    public void setValue_readWriteNotNullable_nullShouldFail() {
+        ColumnProperty cp = new ColumnProperty("NAME", false, true, false,
+                "Ville", String.class);
+        SQLContainer container = EasyMock.createMock(SQLContainer.class);
+        RowItem owner = new RowItem(container, new RowId(new Object[] { 1 }),
+                Arrays.asList(cp));
+        container.itemChangeNotification(owner);
+        EasyMock.replay(container);
+        cp.setValue(null);
+        Assert.assertNotNull(cp.getValue());
+        EasyMock.verify(container);
+    }
+
+    @Test
+    public void getType_normal_returnsStringClass() {
+        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
+                "Ville", String.class);
+        Assert.assertSame(String.class, cp.getType());
+    }
+
+    @Test
+    public void isReadOnly_readWriteNullable_returnsTrue() {
+        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
+                "Ville", String.class);
+        Assert.assertFalse(cp.isReadOnly());
+    }
+
+    @Test
+    public void isReadOnly_readOnlyNullable_returnsTrue() {
+        ColumnProperty cp = new ColumnProperty("NAME", true, true, true,
+                "Ville", String.class);
+        Assert.assertTrue(cp.isReadOnly());
+    }
+
+    @Test
+    public void setReadOnly_readOnlyChangeAllowed_shouldSucceed() {
+        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
+                "Ville", String.class);
+        cp.setReadOnly(true);
+        Assert.assertTrue(cp.isReadOnly());
+    }
+
+    @Test
+    public void setReadOnly_readOnlyChangeDisallowed_shouldFail() {
+        ColumnProperty cp = new ColumnProperty("NAME", false, false, true,
+                "Ville", String.class);
+        cp.setReadOnly(true);
+        Assert.assertFalse(cp.isReadOnly());
+    }
+
+    @Test
+    public void getPropertyId_normal_returnsNAME() {
+        ColumnProperty cp = new ColumnProperty("NAME", false, false, true,
+                "Ville", String.class);
+        Assert.assertEquals("NAME", cp.getPropertyId());
+    }
+
+    @Test
+    public void isModified_valueModified_returnsTrue() {
+        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
+                "Ville", String.class);
+        SQLContainer container = EasyMock.createMock(SQLContainer.class);
+        RowItem owner = new RowItem(container, new RowId(new Object[] { 1 }),
+                Arrays.asList(cp));
+        container.itemChangeNotification(owner);
+        EasyMock.replay(container);
+        cp.setValue("Kalle");
+        Assert.assertEquals("Kalle", cp.getValue());
+        Assert.assertTrue(cp.isModified());
+        EasyMock.verify(container);
+    }
+
+    @Test
+    public void isModified_valueNotModified_returnsFalse() {
+        ColumnProperty cp = new ColumnProperty("NAME", false, false, true,
+                "Ville", String.class);
+        Assert.assertFalse(cp.isModified());
+    }
+
+    @Test
+    public void setValue_nullOnNullable_shouldWork() {
+        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
+                "asdf", String.class);
+        SQLContainer container = EasyMock.createMock(SQLContainer.class);
+        new RowItem(container, new RowId(new Object[] { 1 }), Arrays.asList(cp));
+        cp.setValue(null);
+        Assert.assertNull(cp.getValue());
+    }
+
+    @Test
+    public void setValue_resetTonullOnNullable_shouldWork() {
+        ColumnProperty cp = new ColumnProperty("NAME", false, true, true, null,
+                String.class);
+        SQLContainer container = EasyMock.createMock(SQLContainer.class);
+        new RowItem(container, new RowId(new Object[] { 1 }), Arrays.asList(cp));
+        cp.setValue("asdf");
+        Assert.assertEquals("asdf", cp.getValue());
+        cp.setValue(null);
+        Assert.assertNull(cp.getValue());
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/DataGenerator.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/DataGenerator.java
new file mode 100644
index 0000000000..6fa807b007
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/DataGenerator.java
@@ -0,0 +1,138 @@
+package com.vaadin.data.util.sqlcontainer;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.data.util.sqlcontainer.AllTests.DB;
+import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
+
+public class DataGenerator {
+	
+	@Test
+	public void testDummy(){
+		// Added dummy test so JUnit will not complain about "No runnable methods".
+	}
+
+    public static void addPeopleToDatabase(JDBCConnectionPool connectionPool)
+            throws SQLException {
+        Connection conn = connectionPool.reserveConnection();
+        Statement statement = conn.createStatement();
+        try {
+            statement.execute("drop table PEOPLE");
+            if (AllTests.db == DB.ORACLE) {
+                statement.execute("drop sequence people_seq");
+            }
+        } catch (SQLException e) {
+            // Will fail if table doesn't exist, which is OK.
+            conn.rollback();
+        }
+        statement.execute(AllTests.peopleFirst);
+        if (AllTests.peopleSecond != null) {
+            statement.execute(AllTests.peopleSecond);
+        }
+        if (AllTests.db == DB.ORACLE) {
+            statement.execute(AllTests.peopleThird);
+        }
+        if (AllTests.db == DB.MSSQL) {
+            statement.executeUpdate("insert into people values('Ville', '23')");
+            statement.executeUpdate("insert into people values('Kalle', '7')");
+            statement.executeUpdate("insert into people values('Pelle', '18')");
+            statement.executeUpdate("insert into people values('Börje', '64')");
+        } else {
+            statement
+                    .executeUpdate("insert into people values(default, 'Ville', '23')");
+            statement
+                    .executeUpdate("insert into people values(default, 'Kalle', '7')");
+            statement
+                    .executeUpdate("insert into people values(default, 'Pelle', '18')");
+            statement
+                    .executeUpdate("insert into people values(default, 'Börje', '64')");
+        }
+        statement.close();
+        statement = conn.createStatement();
+        ResultSet rs = statement.executeQuery("select * from PEOPLE");
+        Assert.assertTrue(rs.next());
+        statement.close();
+        conn.commit();
+        connectionPool.releaseConnection(conn);
+    }
+
+    public static void addFiveThousandPeople(JDBCConnectionPool connectionPool)
+            throws SQLException {
+        Connection conn = connectionPool.reserveConnection();
+        Statement statement = conn.createStatement();
+        for (int i = 4; i < 5000; i++) {
+            if (AllTests.db == DB.MSSQL) {
+                statement.executeUpdate("insert into people values('Person "
+                        + i + "', '" + i % 99 + "')");
+            } else {
+                statement
+                        .executeUpdate("insert into people values(default, 'Person "
+                                + i + "', '" + i % 99 + "')");
+            }
+        }
+        statement.close();
+        conn.commit();
+        connectionPool.releaseConnection(conn);
+    }
+
+    public static void addVersionedData(JDBCConnectionPool connectionPool)
+            throws SQLException {
+        Connection conn = connectionPool.reserveConnection();
+        Statement statement = conn.createStatement();
+        try {
+            statement.execute("DROP TABLE VERSIONED");
+            if (AllTests.db == DB.ORACLE) {
+                statement.execute("drop sequence versioned_seq");
+                statement.execute("drop sequence versioned_version");
+            }
+        } catch (SQLException e) {
+            // Will fail if table doesn't exist, which is OK.
+            conn.rollback();
+        }
+        for (String stmtString : AllTests.versionStatements) {
+            statement.execute(stmtString);
+        }
+        if (AllTests.db == DB.MSSQL) {
+            statement
+                    .executeUpdate("insert into VERSIONED values('Junk', default)");
+        } else {
+            statement
+                    .executeUpdate("insert into VERSIONED values(default, 'Junk', default)");
+        }
+        statement.close();
+        statement = conn.createStatement();
+        ResultSet rs = statement.executeQuery("select * from VERSIONED");
+        Assert.assertTrue(rs.next());
+        statement.close();
+        conn.commit();
+        connectionPool.releaseConnection(conn);
+    }
+
+    public static void createGarbage(JDBCConnectionPool connectionPool)
+            throws SQLException {
+        Connection conn = connectionPool.reserveConnection();
+        Statement statement = conn.createStatement();
+        try {
+            statement.execute("drop table GARBAGE");
+            if (AllTests.db == DB.ORACLE) {
+                statement.execute("drop sequence garbage_seq");
+            }
+        } catch (SQLException e) {
+            // Will fail if table doesn't exist, which is OK.
+            conn.rollback();
+        }
+        statement.execute(AllTests.createGarbage);
+        if (AllTests.db == DB.ORACLE) {
+            statement.execute(AllTests.createGarbageSecond);
+            statement.execute(AllTests.createGarbageThird);
+        }
+        conn.commit();
+        connectionPool.releaseConnection(conn);
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/FreeformQueryUtil.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/FreeformQueryUtil.java
new file mode 100644
index 0000000000..2579a38aa1
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/FreeformQueryUtil.java
@@ -0,0 +1,73 @@
+package com.vaadin.data.util.sqlcontainer;
+
+import java.util.List;
+
+import org.junit.Test;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.util.sqlcontainer.AllTests.DB;
+import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
+import com.vaadin.data.util.sqlcontainer.query.generator.filter.QueryBuilder;
+
+public class FreeformQueryUtil {
+
+	@Test
+	public void testDummy(){
+		// Added dummy test so JUnit will not complain about "No runnable methods".
+	}
+	
+    public static StatementHelper getQueryWithFilters(List<Filter> filters,
+            int offset, int limit) {
+        StatementHelper sh = new StatementHelper();
+        if (AllTests.db == DB.MSSQL) {
+            if (limit > 1) {
+                offset++;
+                limit--;
+            }
+            StringBuilder query = new StringBuilder();
+            query.append("SELECT * FROM (SELECT row_number() OVER (");
+            query.append("ORDER BY \"ID\" ASC");
+            query.append(") AS rownum, * FROM \"PEOPLE\"");
+
+            if (!filters.isEmpty()) {
+                query.append(QueryBuilder.getWhereStringForFilters(
+                        filters, sh));
+            }
+            query.append(") AS a WHERE a.rownum BETWEEN ").append(offset)
+                    .append(" AND ").append(Integer.toString(offset + limit));
+            sh.setQueryString(query.toString());
+            return sh;
+        } else if (AllTests.db == DB.ORACLE) {
+            if (limit > 1) {
+                offset++;
+                limit--;
+            }
+            StringBuilder query = new StringBuilder();
+            query.append("SELECT * FROM (SELECT x.*, ROWNUM AS "
+                    + "\"rownum\" FROM (SELECT * FROM \"PEOPLE\"");
+            if (!filters.isEmpty()) {
+                query.append(QueryBuilder.getWhereStringForFilters(
+                        filters, sh));
+            }
+            query.append(") x) WHERE \"rownum\" BETWEEN ? AND ?");
+            sh.addParameterValue(offset);
+            sh.addParameterValue(offset + limit);
+            sh.setQueryString(query.toString());
+            return sh;
+        } else {
+            StringBuilder query = new StringBuilder("SELECT * FROM people");
+            if (!filters.isEmpty()) {
+                query.append(QueryBuilder.getWhereStringForFilters(
+                        filters, sh));
+            }
+            if (limit != 0 || offset != 0) {
+                query.append(" LIMIT ? OFFSET ?");
+                sh.addParameterValue(limit);
+                sh.addParameterValue(offset);
+            }
+            sh.setQueryString(query.toString());
+            return sh;
+        }
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/ReadOnlyRowIdTest.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/ReadOnlyRowIdTest.java
new file mode 100644
index 0000000000..d2b6ee2555
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/ReadOnlyRowIdTest.java
@@ -0,0 +1,50 @@
+package com.vaadin.data.util.sqlcontainer;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import com.vaadin.data.util.sqlcontainer.ReadOnlyRowId;
+
+public class ReadOnlyRowIdTest {
+
+    @Test
+    public void getRowNum_shouldReturnRowNumGivenInConstructor() {
+        int rowNum = 1337;
+        ReadOnlyRowId rid = new ReadOnlyRowId(rowNum);
+        Assert.assertEquals(rowNum, rid.getRowNum());
+    }
+
+    @Test
+    public void hashCode_shouldBeEqualToHashCodeOfRowNum() {
+        int rowNum = 1337;
+        ReadOnlyRowId rid = new ReadOnlyRowId(rowNum);
+        Assert.assertEquals(Integer.valueOf(rowNum).hashCode(), rid.hashCode());
+    }
+
+    @Test
+    public void equals_compareWithNull_shouldBeFalse() {
+        ReadOnlyRowId rid = new ReadOnlyRowId(1337);
+        Assert.assertFalse(rid.equals(null));
+    }
+
+    @Test
+    public void equals_compareWithSameInstance_shouldBeTrue() {
+        ReadOnlyRowId rid = new ReadOnlyRowId(1337);
+        ReadOnlyRowId rid2 = rid;
+        Assert.assertTrue(rid.equals(rid2));
+    }
+
+    @Test
+    public void equals_compareWithOtherType_shouldBeFalse() {
+        ReadOnlyRowId rid = new ReadOnlyRowId(1337);
+        Assert.assertFalse(rid.equals(new Object()));
+    }
+
+    @Test
+    public void equals_compareWithOtherRowId_shouldBeFalse() {
+        ReadOnlyRowId rid = new ReadOnlyRowId(1337);
+        ReadOnlyRowId rid2 = new ReadOnlyRowId(42);
+        Assert.assertFalse(rid.equals(rid2));
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/RowIdTest.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/RowIdTest.java
new file mode 100644
index 0000000000..399db06869
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/RowIdTest.java
@@ -0,0 +1,55 @@
+package com.vaadin.data.util.sqlcontainer;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.data.util.sqlcontainer.RowId;
+
+public class RowIdTest {
+
+    @Test
+    public void constructor_withArrayOfPrimaryKeyColumns_shouldSucceed() {
+        RowId id = new RowId(new Object[] { "id", "name" });
+        Assert.assertArrayEquals(new Object[] { "id", "name" }, id.getId());
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void constructor_withNullParameter_shouldFail() {
+        new RowId(null);
+    }
+
+    @Test
+    public void hashCode_samePrimaryKeys_sameResult() {
+        RowId id = new RowId(new Object[] { "id", "name" });
+        RowId id2 = new RowId(new Object[] { "id", "name" });
+        Assert.assertEquals(id.hashCode(), id2.hashCode());
+    }
+
+    @Test
+    public void hashCode_differentPrimaryKeys_differentResult() {
+        RowId id = new RowId(new Object[] { "id", "name" });
+        RowId id2 = new RowId(new Object[] { "id" });
+        Assert.assertFalse(id.hashCode() == id2.hashCode());
+    }
+
+    @Test
+    public void equals_samePrimaryKeys_returnsTrue() {
+        RowId id = new RowId(new Object[] { "id", "name" });
+        RowId id2 = new RowId(new Object[] { "id", "name" });
+        Assert.assertEquals(id, id2);
+    }
+
+    @Test
+    public void equals_differentPrimaryKeys_returnsFalse() {
+        RowId id = new RowId(new Object[] { "id", "name" });
+        RowId id2 = new RowId(new Object[] { "id" });
+        Assert.assertFalse(id.equals(id2.hashCode()));
+    }
+
+    @Test
+    public void equals_differentDataType_returnsFalse() {
+        RowId id = new RowId(new Object[] { "id", "name" });
+        Assert.assertFalse(id.equals("Tudiluu"));
+        Assert.assertFalse(id.equals(new Integer(1337)));
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/SQLContainerTableQueryTest.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/SQLContainerTableQueryTest.java
new file mode 100644
index 0000000000..58ac123c14
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/SQLContainerTableQueryTest.java
@@ -0,0 +1,1519 @@
+package com.vaadin.data.util.sqlcontainer;
+
+import java.math.BigDecimal;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.easymock.EasyMock;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.vaadin.data.Container.ItemSetChangeEvent;
+import com.vaadin.data.Container.ItemSetChangeListener;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.filter.Like;
+import com.vaadin.data.util.sqlcontainer.AllTests.DB;
+import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.query.OrderBy;
+import com.vaadin.data.util.sqlcontainer.query.TableQuery;
+
+public class SQLContainerTableQueryTest {
+
+    private static final int offset = AllTests.offset;
+    private static final String createGarbage = AllTests.createGarbage;
+    private JDBCConnectionPool connectionPool;
+
+    @Before
+    public void setUp() throws SQLException {
+
+        try {
+            connectionPool = new SimpleJDBCConnectionPool(AllTests.dbDriver,
+                    AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 2, 2);
+        } catch (SQLException e) {
+            e.printStackTrace();
+            Assert.fail(e.getMessage());
+        }
+
+        DataGenerator.addPeopleToDatabase(connectionPool);
+    }
+
+    @After
+    public void tearDown() {
+        if (connectionPool != null) {
+            connectionPool.destroy();
+        }
+    }
+
+    @Test
+    public void constructor_withTableQuery_shouldSucceed() throws SQLException {
+        new SQLContainer(new TableQuery("people", connectionPool,
+                AllTests.sqlGen));
+    }
+
+    @Test
+    public void containsId_withTableQueryAndExistingId_returnsTrue()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Assert.assertTrue(container.containsId(new RowId(
+                new Object[] { 1 + offset })));
+    }
+
+    @Test
+    public void containsId_withTableQueryAndNonexistingId_returnsFalse()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Assert.assertFalse(container.containsId(new RowId(
+                new Object[] { 1337 + offset })));
+    }
+
+    @Test
+    public void getContainerProperty_tableExistingItemIdAndPropertyId_returnsProperty()
+            throws SQLException {
+        TableQuery t = new TableQuery("people", connectionPool, AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(t);
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(
+                    "Ville",
+                    container
+                            .getContainerProperty(
+                                    new RowId(new Object[] { new BigDecimal(
+                                            0 + offset) }), "NAME").getValue());
+        } else {
+            Assert.assertEquals(
+                    "Ville",
+                    container.getContainerProperty(
+                            new RowId(new Object[] { 0 + offset }), "NAME")
+                            .getValue());
+        }
+    }
+
+    @Test
+    public void getContainerProperty_tableExistingItemIdAndNonexistingPropertyId_returnsNull()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Assert.assertNull(container.getContainerProperty(new RowId(
+                new Object[] { 1 + offset }), "asdf"));
+    }
+
+    @Test
+    public void getContainerProperty_tableNonexistingItemId_returnsNull()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Assert.assertNull(container.getContainerProperty(new RowId(
+                new Object[] { 1337 + offset }), "NAME"));
+    }
+
+    @Test
+    public void getContainerPropertyIds_table_returnsIDAndNAME()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Collection<?> propertyIds = container.getContainerPropertyIds();
+        Assert.assertEquals(3, propertyIds.size());
+        Assert.assertArrayEquals(new String[] { "ID", "NAME", "AGE" },
+                propertyIds.toArray());
+    }
+
+    @Test
+    public void getItem_tableExistingItemId_returnsItem() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Item item;
+        if (AllTests.db == DB.ORACLE) {
+            item = container.getItem(new RowId(new Object[] { new BigDecimal(
+                    0 + offset) }));
+        } else {
+            item = container.getItem(new RowId(new Object[] { 0 + offset }));
+        }
+        Assert.assertNotNull(item);
+        Assert.assertEquals("Ville", item.getItemProperty("NAME").getValue());
+    }
+
+    @Test
+    public void getItem_commitedModifiedAndRefreshed() throws SQLException {
+        String OLD_VALUE = "SomeValue"; //$NON-NLS-1$
+        String NEW_VALUE = "OtherValue"; //$NON-NLS-1$
+
+        SQLContainer container = new SQLContainer(new TableQuery("people", //$NON-NLS-1$
+                connectionPool, AllTests.sqlGen));
+        Object itemID = container.addItem();
+        Item item = container.getItem(itemID);
+        item.getItemProperty("NAME").setValue(OLD_VALUE); //$NON-NLS-1$
+        container.commit();
+
+        itemID = container.getIdByIndex(container.size() - 1);
+        item = container.getItem(itemID);
+        Assert.assertEquals(OLD_VALUE, item.getItemProperty("NAME") //$NON-NLS-1$
+                .getValue());
+        item.getItemProperty("NAME").setValue(NEW_VALUE); //$NON-NLS-1$
+
+        // refresh the container which free's the caches
+        // and the modified cache keeps untouched which is a really powerful
+        // feature
+        container.refresh();
+
+        // access the item again will use the item from the modified cache.
+        item = container.getItem(itemID);
+        Assert.assertEquals(NEW_VALUE, item.getItemProperty("NAME") //$NON-NLS-1$
+                .getValue());
+    }
+
+    @Test
+    public void getItem_table5000RowsWithParameter1337_returnsItemWithId1337()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+
+        Item item;
+        if (AllTests.db == DB.ORACLE) {
+            item = container.getItem(new RowId(new Object[] { new BigDecimal(
+                    1337 + offset) }));
+            Assert.assertNotNull(item);
+            Assert.assertEquals(new BigDecimal(1337 + offset), item
+                    .getItemProperty("ID").getValue());
+        } else {
+            item = container.getItem(new RowId(new Object[] { 1337 + offset }));
+            Assert.assertNotNull(item);
+            Assert.assertEquals(1337 + offset, item.getItemProperty("ID")
+                    .getValue());
+        }
+        Assert.assertEquals("Person 1337", item.getItemProperty("NAME")
+                .getValue());
+    }
+
+    @Test
+    public void getItemIds_table_returnsItemIdsWithKeys0through3()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Collection<?> itemIds = container.getItemIds();
+        Assert.assertEquals(4, itemIds.size());
+        RowId zero = new RowId(new Object[] { 0 + offset });
+        RowId one = new RowId(new Object[] { 1 + offset });
+        RowId two = new RowId(new Object[] { 2 + offset });
+        RowId three = new RowId(new Object[] { 3 + offset });
+        if (AllTests.db == DB.ORACLE) {
+            String[] correct = new String[] { "1", "2", "3", "4" };
+            List<String> oracle = new ArrayList<String>();
+            for (Object o : itemIds) {
+                oracle.add(o.toString());
+            }
+            Assert.assertArrayEquals(correct, oracle.toArray());
+        } else {
+            Assert.assertArrayEquals(new Object[] { zero, one, two, three },
+                    itemIds.toArray());
+        }
+    }
+
+    @Test
+    public void getType_tableNAMEPropertyId_returnsString() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Assert.assertEquals(String.class, container.getType("NAME"));
+    }
+
+    @Test
+    public void getType_tableIDPropertyId_returnsInteger() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(BigDecimal.class, container.getType("ID"));
+        } else {
+            Assert.assertEquals(Integer.class, container.getType("ID"));
+        }
+    }
+
+    @Test
+    public void getType_tableNonexistingPropertyId_returnsNull()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Assert.assertNull(container.getType("asdf"));
+    }
+
+    @Test
+    public void size_table_returnsFour() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Assert.assertEquals(4, container.size());
+    }
+
+    @Test
+    public void size_tableOneAddedItem_returnsFive() throws SQLException {
+        Connection conn = connectionPool.reserveConnection();
+        Statement statement = conn.createStatement();
+        if (AllTests.db == DB.MSSQL) {
+            statement.executeUpdate("insert into people values('Bengt', 30)");
+        } else {
+            statement
+                    .executeUpdate("insert into people values(default, 'Bengt', 30)");
+        }
+        statement.close();
+        conn.commit();
+        connectionPool.releaseConnection(conn);
+
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Assert.assertEquals(5, container.size());
+    }
+
+    @Test
+    public void indexOfId_tableWithParameterThree_returnsThree()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(3, container.indexOfId(new RowId(
+                    new Object[] { new BigDecimal(3 + offset) })));
+        } else {
+            Assert.assertEquals(3,
+                    container.indexOfId(new RowId(new Object[] { 3 + offset })));
+        }
+    }
+
+    @Test
+    public void indexOfId_table5000RowsWithParameter1337_returns1337()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        TableQuery q = new TableQuery("people", connectionPool, AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(q);
+        if (AllTests.db == DB.ORACLE) {
+            container.getItem(new RowId(new Object[] { new BigDecimal(
+                    1337 + offset) }));
+            Assert.assertEquals(1337, container.indexOfId(new RowId(
+                    new Object[] { new BigDecimal(1337 + offset) })));
+        } else {
+            container.getItem(new RowId(new Object[] { 1337 + offset }));
+            Assert.assertEquals(1337, container.indexOfId(new RowId(
+                    new Object[] { 1337 + offset })));
+        }
+    }
+
+    @Test
+    public void getIdByIndex_table5000rowsIndex1337_returnsRowId1337()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object itemId = container.getIdByIndex(1337);
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(
+                    new RowId(new Object[] { 1337 + offset }).toString(),
+                    itemId.toString());
+        } else {
+            Assert.assertEquals(new RowId(new Object[] { 1337 + offset }),
+                    itemId);
+        }
+    }
+
+    @Test
+    public void getIdByIndex_tableWithPaging5000rowsIndex1337_returnsRowId1337()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        Object itemId = container.getIdByIndex(1337);
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(
+                    new RowId(new Object[] { 1337 + offset }).toString(),
+                    itemId.toString());
+        } else {
+            Assert.assertEquals(new RowId(new Object[] { 1337 + offset }),
+                    itemId);
+        }
+    }
+
+    @Test
+    public void nextItemId_tableCurrentItem1337_returnsItem1338()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object itemId = container.getIdByIndex(1337);
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(
+                    new RowId(new Object[] { 1338 + offset }).toString(),
+                    container.nextItemId(itemId).toString());
+        } else {
+            Assert.assertEquals(new RowId(new Object[] { 1338 + offset }),
+                    container.nextItemId(itemId));
+        }
+    }
+
+    @Test
+    public void prevItemId_tableCurrentItem1337_returns1336()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object itemId = container.getIdByIndex(1337);
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(
+                    new RowId(new Object[] { 1336 + offset }).toString(),
+                    container.prevItemId(itemId).toString());
+        } else {
+            Assert.assertEquals(new RowId(new Object[] { 1336 + offset }),
+                    container.prevItemId(itemId));
+        }
+    }
+
+    @Test
+    public void firstItemId_table_returnsItemId0() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(
+                    new RowId(new Object[] { 0 + offset }).toString(),
+                    container.firstItemId().toString());
+        } else {
+            Assert.assertEquals(new RowId(new Object[] { 0 + offset }),
+                    container.firstItemId());
+        }
+    }
+
+    @Test
+    public void lastItemId_table5000Rows_returnsItemId4999()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(
+                    new RowId(new Object[] { 4999 + offset }).toString(),
+                    container.lastItemId().toString());
+        } else {
+            Assert.assertEquals(new RowId(new Object[] { 4999 + offset }),
+                    container.lastItemId());
+        }
+    }
+
+    @Test
+    public void isFirstId_tableActualFirstId_returnsTrue() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertTrue(container.isFirstId(new RowId(
+                    new Object[] { new BigDecimal(0 + offset) })));
+        } else {
+            Assert.assertTrue(container.isFirstId(new RowId(
+                    new Object[] { 0 + offset })));
+        }
+    }
+
+    @Test
+    public void isFirstId_tableSecondId_returnsFalse() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertFalse(container.isFirstId(new RowId(
+                    new Object[] { new BigDecimal(1 + offset) })));
+        } else {
+            Assert.assertFalse(container.isFirstId(new RowId(
+                    new Object[] { 1 + offset })));
+        }
+    }
+
+    @Test
+    public void isLastId_tableSecondId_returnsFalse() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertFalse(container.isLastId(new RowId(
+                    new Object[] { new BigDecimal(1 + offset) })));
+        } else {
+            Assert.assertFalse(container.isLastId(new RowId(
+                    new Object[] { 1 + offset })));
+        }
+    }
+
+    @Test
+    public void isLastId_tableLastId_returnsTrue() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertTrue(container.isLastId(new RowId(
+                    new Object[] { new BigDecimal(3 + offset) })));
+        } else {
+            Assert.assertTrue(container.isLastId(new RowId(
+                    new Object[] { 3 + offset })));
+        }
+    }
+
+    @Test
+    public void isLastId_table5000RowsLastId_returnsTrue() throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertTrue(container.isLastId(new RowId(
+                    new Object[] { new BigDecimal(4999 + offset) })));
+        } else {
+            Assert.assertTrue(container.isLastId(new RowId(
+                    new Object[] { 4999 + offset })));
+        }
+    }
+
+    @Test
+    public void allIdsFound_table5000RowsLastId_shouldSucceed()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        for (int i = 0; i < 5000; i++) {
+            Assert.assertTrue(container.containsId(container.getIdByIndex(i)));
+        }
+    }
+
+    @Test
+    public void allIdsFound_table5000RowsLastId_autoCommit_shouldSucceed()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        container.setAutoCommit(true);
+        for (int i = 0; i < 5000; i++) {
+            Assert.assertTrue(container.containsId(container.getIdByIndex(i)));
+        }
+    }
+
+    @Test
+    public void refresh_table_sizeShouldUpdate() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Assert.assertEquals(4, container.size());
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        container.refresh();
+        Assert.assertEquals(5000, container.size());
+    }
+
+    @Test
+    public void refresh_tableWithoutCallingRefresh_sizeShouldNotUpdate()
+            throws SQLException {
+        // Yeah, this is a weird one. We're testing that the size doesn't update
+        // after adding lots of items unless we call refresh inbetween. This to
+        // make sure that the refresh method actually refreshes stuff and isn't
+        // a NOP.
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Assert.assertEquals(4, container.size());
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        Assert.assertEquals(4, container.size());
+    }
+
+    @Test
+    public void setAutoCommit_table_shouldSucceed() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        container.setAutoCommit(true);
+        Assert.assertTrue(container.isAutoCommit());
+        container.setAutoCommit(false);
+        Assert.assertFalse(container.isAutoCommit());
+    }
+
+    @Test
+    public void getPageLength_table_returnsDefault100() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Assert.assertEquals(100, container.getPageLength());
+    }
+
+    @Test
+    public void setPageLength_table_shouldSucceed() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        container.setPageLength(20);
+        Assert.assertEquals(20, container.getPageLength());
+        container.setPageLength(200);
+        Assert.assertEquals(200, container.getPageLength());
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void addContainerProperty_normal_isUnsupported() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        container.addContainerProperty("asdf", String.class, "");
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void removeContainerProperty_normal_isUnsupported()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        container.removeContainerProperty("asdf");
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void addItemObject_normal_isUnsupported() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        container.addItem("asdf");
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void addItemAfterObjectObject_normal_isUnsupported()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        container.addItemAfter("asdf", "foo");
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void addItemAtIntObject_normal_isUnsupported() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        container.addItemAt(2, "asdf");
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void addItemAtInt_normal_isUnsupported() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        container.addItemAt(2);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void addItemAfterObject_normal_isUnsupported() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        container.addItemAfter("asdf");
+    }
+
+    @Test
+    public void addItem_tableAddOneNewItem_returnsItemId() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object itemId = container.addItem();
+        Assert.assertNotNull(itemId);
+    }
+
+    @Test
+    public void addItem_tableAddOneNewItem_autoCommit_returnsFinalItemId()
+            throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        container.setAutoCommit(true);
+        Object itemId = container.addItem();
+        Assert.assertNotNull(itemId);
+        Assert.assertTrue(itemId instanceof RowId);
+        Assert.assertFalse(itemId instanceof TemporaryRowId);
+    }
+
+    @Test
+    public void addItem_tableAddOneNewItem_autoCommit_sizeIsIncreased()
+            throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        container.setAutoCommit(true);
+        int originalSize = container.size();
+        container.addItem();
+        Assert.assertEquals(originalSize + 1, container.size());
+    }
+
+    @Test
+    public void addItem_tableAddOneNewItem_shouldChangeSize()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        int size = container.size();
+        container.addItem();
+        Assert.assertEquals(size + 1, container.size());
+    }
+
+    @Test
+    public void addItem_tableAddTwoNewItems_shouldChangeSize()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        int size = container.size();
+        Object id1 = container.addItem();
+        Object id2 = container.addItem();
+        Assert.assertEquals(size + 2, container.size());
+        Assert.assertNotSame(id1, id2);
+        Assert.assertFalse(id1.equals(id2));
+    }
+
+    @Test
+    public void nextItemId_tableNewlyAddedItem_returnsNewlyAdded()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object lastId = container.lastItemId();
+        Object id = container.addItem();
+        Assert.assertEquals(id, container.nextItemId(lastId));
+    }
+
+    @Test
+    public void lastItemId_tableNewlyAddedItem_returnsNewlyAdded()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object lastId = container.lastItemId();
+        Object id = container.addItem();
+        Assert.assertEquals(id, container.lastItemId());
+        Assert.assertNotSame(lastId, container.lastItemId());
+    }
+
+    @Test
+    public void indexOfId_tableNewlyAddedItem_returnsFour() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.addItem();
+        Assert.assertEquals(4, container.indexOfId(id));
+    }
+
+    @Test
+    public void getItem_tableNewlyAddedItem_returnsNewlyAdded()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.addItem();
+        Assert.assertNotNull(container.getItem(id));
+    }
+
+    @Test
+    public void getItemIds_tableNewlyAddedItem_containsNewlyAdded()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.addItem();
+        Assert.assertTrue(container.getItemIds().contains(id));
+    }
+
+    @Test
+    public void getContainerProperty_tableNewlyAddedItem_returnsPropertyOfNewlyAddedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.addItem();
+        Item item = container.getItem(id);
+        item.getItemProperty("NAME").setValue("asdf");
+        Assert.assertEquals("asdf", container.getContainerProperty(id, "NAME")
+                .getValue());
+    }
+
+    @Test
+    public void containsId_tableNewlyAddedItem_returnsTrue()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.addItem();
+        Assert.assertTrue(container.containsId(id));
+    }
+
+    @Test
+    public void prevItemId_tableTwoNewlyAddedItems_returnsFirstAddedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id1 = container.addItem();
+        Object id2 = container.addItem();
+        Assert.assertEquals(id1, container.prevItemId(id2));
+    }
+
+    @Test
+    public void firstItemId_tableEmptyResultSet_returnsFirstAddedItem()
+            throws SQLException {
+        DataGenerator.createGarbage(connectionPool);
+        SQLContainer container = new SQLContainer(new TableQuery("garbage",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.addItem();
+        Assert.assertSame(id, container.firstItemId());
+    }
+
+    @Test
+    public void isFirstId_tableEmptyResultSet_returnsFirstAddedItem()
+            throws SQLException {
+        DataGenerator.createGarbage(connectionPool);
+        SQLContainer container = new SQLContainer(new TableQuery("garbage",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.addItem();
+        Assert.assertTrue(container.isFirstId(id));
+    }
+
+    @Test
+    public void isLastId_tableOneItemAdded_returnsTrueForAddedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.addItem();
+        Assert.assertTrue(container.isLastId(id));
+    }
+
+    @Test
+    public void isLastId_tableTwoItemsAdded_returnsTrueForLastAddedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        container.addItem();
+        Object id2 = container.addItem();
+        Assert.assertTrue(container.isLastId(id2));
+    }
+
+    @Test
+    public void getIdByIndex_tableOneItemAddedLastIndexInContainer_returnsAddedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.addItem();
+        Assert.assertEquals(id, container.getIdByIndex(container.size() - 1));
+    }
+
+    @Test
+    public void removeItem_tableNoAddedItems_removesItemFromContainer()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        int size = container.size();
+        Object id = container.firstItemId();
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertNotSame(id, container.firstItemId());
+        Assert.assertEquals(size - 1, container.size());
+    }
+
+    @Test
+    public void containsId_tableRemovedItem_returnsFalse() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.firstItemId();
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertFalse(container.containsId(id));
+    }
+
+    @Test
+    public void removeItem_tableOneAddedItem_removesTheAddedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.addItem();
+        int size = container.size();
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertFalse(container.containsId(id));
+        Assert.assertEquals(size - 1, container.size());
+    }
+
+    @Test
+    public void getItem_tableItemRemoved_returnsNull() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.firstItemId();
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertNull(container.getItem(id));
+    }
+
+    @Test
+    public void getItem_tableAddedItemRemoved_returnsNull() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.addItem();
+        Assert.assertNotNull(container.getItem(id));
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertNull(container.getItem(id));
+    }
+
+    @Test
+    public void getItemIds_tableItemRemoved_shouldNotContainRemovedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.firstItemId();
+        Assert.assertTrue(container.getItemIds().contains(id));
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertFalse(container.getItemIds().contains(id));
+    }
+
+    @Test
+    public void getItemIds_tableAddedItemRemoved_shouldNotContainRemovedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.addItem();
+        Assert.assertTrue(container.getItemIds().contains(id));
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertFalse(container.getItemIds().contains(id));
+    }
+
+    @Test
+    public void containsId_tableItemRemoved_returnsFalse() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.firstItemId();
+        Assert.assertTrue(container.containsId(id));
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertFalse(container.containsId(id));
+    }
+
+    @Test
+    public void containsId_tableAddedItemRemoved_returnsFalse()
+            throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        Object id = container.addItem();
+        Assert.assertTrue(container.containsId(id));
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertFalse(container.containsId(id));
+    }
+
+    @Test
+    public void nextItemId_tableItemRemoved_skipsRemovedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object first = container.getIdByIndex(0);
+        Object second = container.getIdByIndex(1);
+        Object third = container.getIdByIndex(2);
+        Assert.assertTrue(container.removeItem(second));
+        Assert.assertEquals(third, container.nextItemId(first));
+    }
+
+    @Test
+    public void nextItemId_tableAddedItemRemoved_skipsRemovedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object first = container.lastItemId();
+        Object second = container.addItem();
+        Object third = container.addItem();
+        Assert.assertTrue(container.removeItem(second));
+        Assert.assertEquals(third, container.nextItemId(first));
+    }
+
+    @Test
+    public void prevItemId_tableItemRemoved_skipsRemovedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object first = container.getIdByIndex(0);
+        Object second = container.getIdByIndex(1);
+        Object third = container.getIdByIndex(2);
+        Assert.assertTrue(container.removeItem(second));
+        Assert.assertEquals(first, container.prevItemId(third));
+    }
+
+    @Test
+    public void prevItemId_tableAddedItemRemoved_skipsRemovedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object first = container.lastItemId();
+        Object second = container.addItem();
+        Object third = container.addItem();
+        Assert.assertTrue(container.removeItem(second));
+        Assert.assertEquals(first, container.prevItemId(third));
+    }
+
+    @Test
+    public void firstItemId_tableFirstItemRemoved_resultChanges()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object first = container.firstItemId();
+        Assert.assertTrue(container.removeItem(first));
+        Assert.assertNotSame(first, container.firstItemId());
+    }
+
+    @Test
+    public void firstItemId_tableNewlyAddedFirstItemRemoved_resultChanges()
+            throws SQLException {
+        DataGenerator.createGarbage(connectionPool);
+        SQLContainer container = new SQLContainer(new TableQuery("garbage",
+                connectionPool, AllTests.sqlGen));
+        Object first = container.addItem();
+        Object second = container.addItem();
+        Assert.assertSame(first, container.firstItemId());
+        Assert.assertTrue(container.removeItem(first));
+        Assert.assertSame(second, container.firstItemId());
+    }
+
+    @Test
+    public void lastItemId_tableLastItemRemoved_resultChanges()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object last = container.lastItemId();
+        Assert.assertTrue(container.removeItem(last));
+        Assert.assertNotSame(last, container.lastItemId());
+    }
+
+    @Test
+    public void lastItemId_tableAddedLastItemRemoved_resultChanges()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object last = container.addItem();
+        Assert.assertSame(last, container.lastItemId());
+        Assert.assertTrue(container.removeItem(last));
+        Assert.assertNotSame(last, container.lastItemId());
+    }
+
+    @Test
+    public void isFirstId_tableFirstItemRemoved_returnsFalse()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object first = container.firstItemId();
+        Assert.assertTrue(container.removeItem(first));
+        Assert.assertFalse(container.isFirstId(first));
+    }
+
+    @Test
+    public void isFirstId_tableAddedFirstItemRemoved_returnsFalse()
+            throws SQLException {
+        DataGenerator.createGarbage(connectionPool);
+        SQLContainer container = new SQLContainer(new TableQuery("garbage",
+                connectionPool, AllTests.sqlGen));
+        Object first = container.addItem();
+        container.addItem();
+        Assert.assertSame(first, container.firstItemId());
+        Assert.assertTrue(container.removeItem(first));
+        Assert.assertFalse(container.isFirstId(first));
+    }
+
+    @Test
+    public void isLastId_tableLastItemRemoved_returnsFalse()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object last = container.lastItemId();
+        Assert.assertTrue(container.removeItem(last));
+        Assert.assertFalse(container.isLastId(last));
+    }
+
+    @Test
+    public void isLastId_tableAddedLastItemRemoved_returnsFalse()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object last = container.addItem();
+        Assert.assertSame(last, container.lastItemId());
+        Assert.assertTrue(container.removeItem(last));
+        Assert.assertFalse(container.isLastId(last));
+    }
+
+    @Test
+    public void indexOfId_tableItemRemoved_returnsNegOne() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.getIdByIndex(2);
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertEquals(-1, container.indexOfId(id));
+    }
+
+    @Test
+    public void indexOfId_tableAddedItemRemoved_returnsNegOne()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.addItem();
+        Assert.assertTrue(container.indexOfId(id) != -1);
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertEquals(-1, container.indexOfId(id));
+    }
+
+    @Test
+    public void getIdByIndex_tableItemRemoved_resultChanges()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.getIdByIndex(2);
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertNotSame(id, container.getIdByIndex(2));
+    }
+
+    @Test
+    public void getIdByIndex_tableAddedItemRemoved_resultChanges()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object id = container.addItem();
+        container.addItem();
+        int index = container.indexOfId(id);
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertNotSame(id, container.getIdByIndex(index));
+    }
+
+    @Test
+    public void removeAllItems_table_shouldSucceed() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Assert.assertTrue(container.removeAllItems());
+        Assert.assertEquals(0, container.size());
+    }
+
+    @Test
+    public void removeAllItems_tableAddedItems_shouldSucceed()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        container.addItem();
+        container.addItem();
+        Assert.assertTrue(container.removeAllItems());
+        Assert.assertEquals(0, container.size());
+    }
+
+    @Test
+    public void commit_tableAddedItem_shouldBeWrittenToDB() throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        Object id = container.addItem();
+        container.getContainerProperty(id, "NAME").setValue("New Name");
+        Assert.assertTrue(id instanceof TemporaryRowId);
+        Assert.assertSame(id, container.lastItemId());
+        container.commit();
+        Assert.assertFalse(container.lastItemId() instanceof TemporaryRowId);
+        Assert.assertEquals("New Name",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+    }
+
+    @Test
+    public void commit_tableTwoAddedItems_shouldBeWrittenToDB()
+            throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        Object id = container.addItem();
+        Object id2 = container.addItem();
+        container.getContainerProperty(id, "NAME").setValue("Herbert");
+        container.getContainerProperty(id2, "NAME").setValue("Larry");
+        Assert.assertTrue(id2 instanceof TemporaryRowId);
+        Assert.assertSame(id2, container.lastItemId());
+        container.commit();
+        Object nextToLast = container.getIdByIndex(container.size() - 2);
+        Assert.assertFalse(nextToLast instanceof TemporaryRowId);
+        Assert.assertEquals("Herbert",
+                container.getContainerProperty(nextToLast, "NAME").getValue());
+        Assert.assertFalse(container.lastItemId() instanceof TemporaryRowId);
+        Assert.assertEquals("Larry",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+    }
+
+    @Test
+    public void commit_tableRemovedItem_shouldBeRemovedFromDB()
+            throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        Object last = container.lastItemId();
+        container.removeItem(last);
+        container.commit();
+        Assert.assertFalse(last.equals(container.lastItemId()));
+    }
+
+    @Test
+    public void commit_tableLastItemUpdated_shouldUpdateRowInDB()
+            throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        Object last = container.lastItemId();
+        container.getContainerProperty(last, "NAME").setValue("Donald");
+        container.commit();
+        Assert.assertEquals("Donald",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+    }
+
+    @Test
+    public void rollback_tableItemAdded_discardsAddedItem() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        int size = container.size();
+        Object id = container.addItem();
+        container.getContainerProperty(id, "NAME").setValue("foo");
+        Assert.assertEquals(size + 1, container.size());
+        container.rollback();
+        Assert.assertEquals(size, container.size());
+        Assert.assertFalse("foo".equals(container.getContainerProperty(
+                container.lastItemId(), "NAME").getValue()));
+    }
+
+    @Test
+    public void rollback_tableItemRemoved_restoresRemovedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        int size = container.size();
+        Object last = container.lastItemId();
+        container.removeItem(last);
+        Assert.assertEquals(size - 1, container.size());
+        container.rollback();
+        Assert.assertEquals(size, container.size());
+        Assert.assertEquals(last, container.lastItemId());
+    }
+
+    @Test
+    public void rollback_tableItemChanged_discardsChanges() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Object last = container.lastItemId();
+        container.getContainerProperty(last, "NAME").setValue("foo");
+        container.rollback();
+        Assert.assertFalse("foo".equals(container.getContainerProperty(
+                container.lastItemId(), "NAME").getValue()));
+    }
+
+    @Test
+    public void itemChangeNotification_table_isModifiedReturnsTrue()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Assert.assertFalse(container.isModified());
+        RowItem last = (RowItem) container.getItem(container.lastItemId());
+        container.itemChangeNotification(last);
+        Assert.assertTrue(container.isModified());
+    }
+
+    @Test
+    public void itemSetChangeListeners_table_shouldFire() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        ItemSetChangeListener listener = EasyMock
+                .createMock(ItemSetChangeListener.class);
+        listener.containerItemSetChange(EasyMock.isA(ItemSetChangeEvent.class));
+        EasyMock.replay(listener);
+
+        container.addListener(listener);
+        container.addItem();
+
+        EasyMock.verify(listener);
+    }
+
+    @Test
+    public void itemSetChangeListeners_tableItemRemoved_shouldFire()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        ItemSetChangeListener listener = EasyMock
+                .createMock(ItemSetChangeListener.class);
+        listener.containerItemSetChange(EasyMock.isA(ItemSetChangeEvent.class));
+        EasyMock.expectLastCall().anyTimes();
+        EasyMock.replay(listener);
+
+        container.addListener(listener);
+        container.removeItem(container.lastItemId());
+
+        EasyMock.verify(listener);
+    }
+
+    @Test
+    public void removeListener_table_shouldNotFire() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        ItemSetChangeListener listener = EasyMock
+                .createMock(ItemSetChangeListener.class);
+        EasyMock.replay(listener);
+
+        container.addListener(listener);
+        container.removeListener(listener);
+        container.addItem();
+
+        EasyMock.verify(listener);
+    }
+
+    @Test
+    public void isModified_tableRemovedItem_returnsTrue() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Assert.assertFalse(container.isModified());
+        container.removeItem(container.lastItemId());
+        Assert.assertTrue(container.isModified());
+    }
+
+    @Test
+    public void isModified_tableAddedItem_returnsTrue() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Assert.assertFalse(container.isModified());
+        container.addItem();
+        Assert.assertTrue(container.isModified());
+    }
+
+    @Test
+    public void isModified_tableChangedItem_returnsTrue() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Assert.assertFalse(container.isModified());
+        container.getContainerProperty(container.lastItemId(), "NAME")
+                .setValue("foo");
+        Assert.assertTrue(container.isModified());
+    }
+
+    @Test
+    public void getSortableContainerPropertyIds_table_returnsAllPropertyIds()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        Collection<?> sortableIds = container.getSortableContainerPropertyIds();
+        Assert.assertTrue(sortableIds.contains("ID"));
+        Assert.assertTrue(sortableIds.contains("NAME"));
+        Assert.assertTrue(sortableIds.contains("AGE"));
+        Assert.assertEquals(3, sortableIds.size());
+        if (AllTests.db == DB.MSSQL || AllTests.db == DB.ORACLE) {
+            Assert.assertFalse(sortableIds.contains("rownum"));
+        }
+    }
+
+    @Test
+    public void addOrderBy_table_shouldReorderResults() throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.firstItemId(), "NAME")
+                        .getValue());
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        container.addOrderBy(new OrderBy("NAME", true));
+        // Börje, Kalle, Pelle, Ville
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.firstItemId(), "NAME")
+                        .getValue());
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void addOrderBy_tableIllegalColumn_shouldFail() throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+        container.addOrderBy(new OrderBy("asdf", true));
+    }
+
+    @Test
+    public void sort_table_sortsByName() throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.firstItemId(), "NAME")
+                        .getValue());
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        container.sort(new Object[] { "NAME" }, new boolean[] { true });
+
+        // Börje, Kalle, Pelle, Ville
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.firstItemId(), "NAME")
+                        .getValue());
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+    }
+
+    @Test
+    public void addFilter_table_filtersResults() throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals(4, container.size());
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        container.addContainerFilter(new Like("NAME", "%lle"));
+        // Ville, Kalle, Pelle
+        Assert.assertEquals(3, container.size());
+        Assert.assertEquals("Pelle",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+    }
+
+    @Test
+    public void addContainerFilter_filtersResults() throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals(4, container.size());
+
+        container.addContainerFilter("NAME", "Vi", false, false);
+
+        // Ville
+        Assert.assertEquals(1, container.size());
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+    }
+
+    @Test
+    public void addContainerFilter_ignoreCase_filtersResults()
+            throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals(4, container.size());
+
+        container.addContainerFilter("NAME", "vi", true, false);
+
+        // Ville
+        Assert.assertEquals(1, container.size());
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+    }
+
+    @Test
+    public void removeAllContainerFilters_table_noFiltering()
+            throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals(4, container.size());
+
+        container.addContainerFilter("NAME", "Vi", false, false);
+
+        // Ville
+        Assert.assertEquals(1, container.size());
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        container.removeAllContainerFilters();
+
+        Assert.assertEquals(4, container.size());
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+    }
+
+    @Test
+    public void removeContainerFilters_table_noFiltering() throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals(4, container.size());
+
+        container.addContainerFilter("NAME", "Vi", false, false);
+
+        // Ville
+        Assert.assertEquals(1, container.size());
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        container.removeContainerFilters("NAME");
+
+        Assert.assertEquals(4, container.size());
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+    }
+
+    @Test
+    public void addFilter_tableBufferedItems_alsoFiltersBufferedItems()
+            throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals(4, container.size());
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        Object id1 = container.addItem();
+        container.getContainerProperty(id1, "NAME").setValue("Palle");
+        Object id2 = container.addItem();
+        container.getContainerProperty(id2, "NAME").setValue("Bengt");
+
+        container.addContainerFilter(new Like("NAME", "%lle"));
+
+        // Ville, Kalle, Pelle, Palle
+        Assert.assertEquals(4, container.size());
+        Assert.assertEquals(
+                "Ville",
+                container.getContainerProperty(container.getIdByIndex(0),
+                        "NAME").getValue());
+        Assert.assertEquals(
+                "Kalle",
+                container.getContainerProperty(container.getIdByIndex(1),
+                        "NAME").getValue());
+        Assert.assertEquals(
+                "Pelle",
+                container.getContainerProperty(container.getIdByIndex(2),
+                        "NAME").getValue());
+        Assert.assertEquals(
+                "Palle",
+                container.getContainerProperty(container.getIdByIndex(3),
+                        "NAME").getValue());
+
+        Assert.assertNull(container.getIdByIndex(4));
+        Assert.assertNull(container.nextItemId(container.getIdByIndex(3)));
+
+        Assert.assertFalse(container.containsId(id2));
+        Assert.assertFalse(container.getItemIds().contains(id2));
+
+        Assert.assertNull(container.getItem(id2));
+        Assert.assertEquals(-1, container.indexOfId(id2));
+
+        Assert.assertNotSame(id2, container.lastItemId());
+        Assert.assertSame(id1, container.lastItemId());
+    }
+
+    @Test
+    public void sort_tableBufferedItems_sortsBufferedItemsLastInOrderAdded()
+            throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.firstItemId(), "NAME")
+                        .getValue());
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        Object id1 = container.addItem();
+        container.getContainerProperty(id1, "NAME").setValue("Wilbert");
+        Object id2 = container.addItem();
+        container.getContainerProperty(id2, "NAME").setValue("Albert");
+
+        container.sort(new Object[] { "NAME" }, new boolean[] { true });
+
+        // Börje, Kalle, Pelle, Ville, Wilbert, Albert
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.firstItemId(), "NAME")
+                        .getValue());
+        Assert.assertEquals(
+                "Wilbert",
+                container.getContainerProperty(
+                        container.getIdByIndex(container.size() - 2), "NAME")
+                        .getValue());
+        Assert.assertEquals("Albert",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/SQLContainerTest.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/SQLContainerTest.java
new file mode 100644
index 0000000000..d82909041f
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/SQLContainerTest.java
@@ -0,0 +1,2390 @@
+package com.vaadin.data.util.sqlcontainer;
+
+import java.math.BigDecimal;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.easymock.EasyMock;
+import org.easymock.IAnswer;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.Container.ItemSetChangeEvent;
+import com.vaadin.data.Container.ItemSetChangeListener;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.filter.Compare.Equal;
+import com.vaadin.data.util.filter.Like;
+import com.vaadin.data.util.sqlcontainer.AllTests.DB;
+import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.query.FreeformQuery;
+import com.vaadin.data.util.sqlcontainer.query.FreeformQueryDelegate;
+import com.vaadin.data.util.sqlcontainer.query.FreeformStatementDelegate;
+import com.vaadin.data.util.sqlcontainer.query.OrderBy;
+import com.vaadin.data.util.sqlcontainer.query.generator.MSSQLGenerator;
+import com.vaadin.data.util.sqlcontainer.query.generator.OracleGenerator;
+import com.vaadin.data.util.sqlcontainer.query.generator.SQLGenerator;
+import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
+import com.vaadin.data.util.sqlcontainer.query.generator.filter.QueryBuilder;
+
+public class SQLContainerTest {
+    private static final int offset = AllTests.offset;
+    private JDBCConnectionPool connectionPool;
+
+    @Before
+    public void setUp() throws SQLException {
+
+        try {
+            connectionPool = new SimpleJDBCConnectionPool(AllTests.dbDriver,
+                    AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 2, 2);
+        } catch (SQLException e) {
+            e.printStackTrace();
+            Assert.fail(e.getMessage());
+        }
+
+        DataGenerator.addPeopleToDatabase(connectionPool);
+    }
+
+    @After
+    public void tearDown() {
+        if (connectionPool != null) {
+            connectionPool.destroy();
+        }
+    }
+
+    @Test
+    public void constructor_withFreeformQuery_shouldSucceed()
+            throws SQLException {
+        new SQLContainer(new FreeformQuery("SELECT * FROM people",
+                connectionPool, "ID"));
+    }
+
+    @Test(expected = SQLException.class)
+    public void constructor_withIllegalFreeformQuery_shouldFail()
+            throws SQLException {
+        SQLContainer c = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM asdf", connectionPool, "ID"));
+        c.getItem(c.firstItemId());
+    }
+
+    @Test
+    public void containsId_withFreeformQueryAndExistingId_returnsTrue()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Assert.assertTrue(container.containsId(new RowId(new Object[] { 1 })));
+    }
+
+    @Test
+    public void containsId_withFreeformQueryAndNonexistingId_returnsFalse()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Assert.assertFalse(container
+                .containsId(new RowId(new Object[] { 1337 })));
+    }
+
+    @Test
+    public void getContainerProperty_freeformExistingItemIdAndPropertyId_returnsProperty()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(
+                    "Ville",
+                    container
+                            .getContainerProperty(
+                                    new RowId(new Object[] { new BigDecimal(
+                                            0 + offset) }), "NAME").getValue());
+        } else {
+            Assert.assertEquals(
+                    "Ville",
+                    container.getContainerProperty(
+                            new RowId(new Object[] { 0 + offset }), "NAME")
+                            .getValue());
+        }
+    }
+
+    @Test
+    public void getContainerProperty_freeformExistingItemIdAndNonexistingPropertyId_returnsNull()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Assert.assertNull(container.getContainerProperty(new RowId(
+                new Object[] { 1 + offset }), "asdf"));
+    }
+
+    @Test
+    public void getContainerProperty_freeformNonexistingItemId_returnsNull()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Assert.assertNull(container.getContainerProperty(new RowId(
+                new Object[] { 1337 + offset }), "NAME"));
+    }
+
+    @Test
+    public void getContainerPropertyIds_freeform_returnsIDAndNAME()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Collection<?> propertyIds = container.getContainerPropertyIds();
+        Assert.assertEquals(3, propertyIds.size());
+        Assert.assertArrayEquals(new String[] { "ID", "NAME", "AGE" },
+                propertyIds.toArray());
+    }
+
+    @Test
+    public void getItem_freeformExistingItemId_returnsItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Item item;
+        if (AllTests.db == DB.ORACLE) {
+            item = container.getItem(new RowId(new Object[] { new BigDecimal(
+                    0 + offset) }));
+        } else {
+            item = container.getItem(new RowId(new Object[] { 0 + offset }));
+        }
+        Assert.assertNotNull(item);
+        Assert.assertEquals("Ville", item.getItemProperty("NAME").getValue());
+    }
+
+    @Test
+    public void getItem_freeform5000RowsWithParameter1337_returnsItemWithId1337()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Item item;
+        if (AllTests.db == DB.ORACLE) {
+            item = container.getItem(new RowId(new Object[] { new BigDecimal(
+                    1337 + offset) }));
+            Assert.assertNotNull(item);
+            Assert.assertEquals(new BigDecimal(1337 + offset), item
+                    .getItemProperty("ID").getValue());
+        } else {
+            item = container.getItem(new RowId(new Object[] { 1337 + offset }));
+            Assert.assertNotNull(item);
+            Assert.assertEquals(1337 + offset, item.getItemProperty("ID")
+                    .getValue());
+        }
+        Assert.assertEquals("Person 1337", item.getItemProperty("NAME")
+                .getValue());
+    }
+
+    @Test
+    public void getItemIds_freeform_returnsItemIdsWithKeys0through3()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Collection<?> itemIds = container.getItemIds();
+        Assert.assertEquals(4, itemIds.size());
+        RowId zero = new RowId(new Object[] { 0 + offset });
+        RowId one = new RowId(new Object[] { 1 + offset });
+        RowId two = new RowId(new Object[] { 2 + offset });
+        RowId three = new RowId(new Object[] { 3 + offset });
+        if (AllTests.db == DB.ORACLE) {
+            String[] correct = new String[] { "1", "2", "3", "4" };
+            List<String> oracle = new ArrayList<String>();
+            for (Object o : itemIds) {
+                oracle.add(o.toString());
+            }
+            Assert.assertArrayEquals(correct, oracle.toArray());
+        } else {
+            Assert.assertArrayEquals(new Object[] { zero, one, two, three },
+                    itemIds.toArray());
+        }
+    }
+
+    @Test
+    public void getType_freeformNAMEPropertyId_returnsString()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Assert.assertEquals(String.class, container.getType("NAME"));
+    }
+
+    @Test
+    public void getType_freeformIDPropertyId_returnsInteger()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(BigDecimal.class, container.getType("ID"));
+        } else {
+            Assert.assertEquals(Integer.class, container.getType("ID"));
+        }
+    }
+
+    @Test
+    public void getType_freeformNonexistingPropertyId_returnsNull()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Assert.assertNull(container.getType("asdf"));
+    }
+
+    @Test
+    public void size_freeform_returnsFour() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Assert.assertEquals(4, container.size());
+    }
+
+    @Test
+    public void size_freeformOneAddedItem_returnsFive() throws SQLException {
+        Connection conn = connectionPool.reserveConnection();
+        Statement statement = conn.createStatement();
+        if (AllTests.db == DB.MSSQL) {
+            statement.executeUpdate("insert into people values('Bengt', '42')");
+        } else {
+            statement
+                    .executeUpdate("insert into people values(default, 'Bengt', '42')");
+        }
+        statement.close();
+        conn.commit();
+        connectionPool.releaseConnection(conn);
+
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Assert.assertEquals(5, container.size());
+    }
+
+    @Test
+    public void indexOfId_freeformWithParameterThree_returnsThree()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(3, container.indexOfId(new RowId(
+                    new Object[] { new BigDecimal(3 + offset) })));
+        } else {
+            Assert.assertEquals(3,
+                    container.indexOfId(new RowId(new Object[] { 3 + offset })));
+        }
+    }
+
+    @Test
+    public void indexOfId_freeform5000RowsWithParameter1337_returns1337()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people ORDER BY \"ID\" ASC", connectionPool,
+                "ID"));
+        if (AllTests.db == DB.ORACLE) {
+            container.getItem(new RowId(new Object[] { new BigDecimal(
+                    1337 + offset) }));
+            Assert.assertEquals(1337, container.indexOfId(new RowId(
+                    new Object[] { new BigDecimal(1337 + offset) })));
+        } else {
+            container.getItem(new RowId(new Object[] { 1337 + offset }));
+            Assert.assertEquals(1337, container.indexOfId(new RowId(
+                    new Object[] { 1337 + offset })));
+        }
+    }
+
+    @Test
+    public void getIdByIndex_freeform5000rowsIndex1337_returnsRowId1337()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people ORDER BY \"ID\" ASC", connectionPool,
+                "ID"));
+        Object itemId = container.getIdByIndex(1337);
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(new RowId(new Object[] { new BigDecimal(
+                    1337 + offset) }), itemId);
+        } else {
+            Assert.assertEquals(new RowId(new Object[] { 1337 + offset }),
+                    itemId);
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void getIdByIndex_freeformWithPaging5000rowsIndex1337_returnsRowId1337()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                connectionPool, "ID");
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.expect(
+                delegate.getQueryString(EasyMock.anyInt(), EasyMock.anyInt()))
+                .andAnswer(new IAnswer<String>() {
+                    public String answer() throws Throwable {
+                        Object[] args = EasyMock.getCurrentArguments();
+                        int offset = (Integer) (args[0]);
+                        int limit = (Integer) (args[1]);
+                        if (AllTests.db == DB.MSSQL) {
+                            int start = offset + 1;
+                            int end = offset + limit + 1;
+                            String q = "SELECT * FROM (SELECT row_number() OVER"
+                                    + " ( ORDER BY \"ID\" ASC) AS rownum, * FROM people)"
+                                    + " AS a WHERE a.rownum BETWEEN "
+                                    + start
+                                    + " AND " + end;
+                            return q;
+                        } else if (AllTests.db == DB.ORACLE) {
+                            int start = offset + 1;
+                            int end = offset + limit + 1;
+                            String q = "SELECT * FROM (SELECT x.*, ROWNUM AS r FROM"
+                                    + " (SELECT * FROM people ORDER BY \"ID\" ASC) x) "
+                                    + " WHERE r BETWEEN "
+                                    + start
+                                    + " AND "
+                                    + end;
+                            return q;
+                        } else {
+                            return "SELECT * FROM people LIMIT " + limit
+                                    + " OFFSET " + offset;
+                        }
+                    }
+                }).anyTimes();
+        delegate.setFilters(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setFilters(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        EasyMock.expect(delegate.getCountQuery())
+                .andThrow(new UnsupportedOperationException()).anyTimes();
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+        SQLContainer container = new SQLContainer(query);
+        Object itemId = container.getIdByIndex(1337);
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(
+                    new RowId(new Object[] { 1337 + offset }).toString(),
+                    itemId.toString());
+        } else {
+            Assert.assertEquals(new RowId(new Object[] { 1337 + offset }),
+                    itemId);
+        }
+    }
+
+    @Test
+    public void nextItemId_freeformCurrentItem1337_returnsItem1338()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people ORDER BY \"ID\" ASC", connectionPool,
+                "ID"));
+        Object itemId = container.getIdByIndex(1337);
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(
+                    new RowId(new Object[] { 1338 + offset }).toString(),
+                    container.nextItemId(itemId).toString());
+        } else {
+            Assert.assertEquals(new RowId(new Object[] { 1338 + offset }),
+                    container.nextItemId(itemId));
+        }
+    }
+
+    @Test
+    public void prevItemId_freeformCurrentItem1337_returns1336()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people ORDER BY \"ID\" ASC", connectionPool,
+                "ID"));
+        Object itemId = container.getIdByIndex(1337);
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(
+                    new RowId(new Object[] { 1336 + offset }).toString(),
+                    container.prevItemId(itemId).toString());
+        } else {
+            Assert.assertEquals(new RowId(new Object[] { 1336 + offset }),
+                    container.prevItemId(itemId));
+        }
+    }
+
+    @Test
+    public void firstItemId_freeform_returnsItemId0() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(
+                    new RowId(new Object[] { 0 + offset }).toString(),
+                    container.firstItemId().toString());
+        } else {
+            Assert.assertEquals(new RowId(new Object[] { 0 + offset }),
+                    container.firstItemId());
+        }
+    }
+
+    @Test
+    public void lastItemId_freeform5000Rows_returnsItemId4999()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people ORDER BY \"ID\" ASC", connectionPool,
+                "ID"));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(
+                    new RowId(new Object[] { 4999 + offset }).toString(),
+                    container.lastItemId().toString());
+        } else {
+            Assert.assertEquals(new RowId(new Object[] { 4999 + offset }),
+                    container.lastItemId());
+        }
+    }
+
+    @Test
+    public void isFirstId_freeformActualFirstId_returnsTrue()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertTrue(container.isFirstId(new RowId(
+                    new Object[] { new BigDecimal(0 + offset) })));
+        } else {
+            Assert.assertTrue(container.isFirstId(new RowId(
+                    new Object[] { 0 + offset })));
+        }
+    }
+
+    @Test
+    public void isFirstId_freeformSecondId_returnsFalse() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertFalse(container.isFirstId(new RowId(
+                    new Object[] { new BigDecimal(1 + offset) })));
+        } else {
+            Assert.assertFalse(container.isFirstId(new RowId(
+                    new Object[] { 1 + offset })));
+        }
+    }
+
+    @Test
+    public void isLastId_freeformSecondId_returnsFalse() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertFalse(container.isLastId(new RowId(
+                    new Object[] { new BigDecimal(1 + offset) })));
+        } else {
+            Assert.assertFalse(container.isLastId(new RowId(
+                    new Object[] { 1 + offset })));
+        }
+    }
+
+    @Test
+    public void isLastId_freeformLastId_returnsTrue() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertTrue(container.isLastId(new RowId(
+                    new Object[] { new BigDecimal(3 + offset) })));
+        } else {
+            Assert.assertTrue(container.isLastId(new RowId(
+                    new Object[] { 3 + offset })));
+        }
+    }
+
+    @Test
+    public void isLastId_freeform5000RowsLastId_returnsTrue()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people ORDER BY \"ID\" ASC", connectionPool,
+                "ID"));
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertTrue(container.isLastId(new RowId(
+                    new Object[] { new BigDecimal(4999 + offset) })));
+        } else {
+            Assert.assertTrue(container.isLastId(new RowId(
+                    new Object[] { 4999 + offset })));
+        }
+    }
+
+    @Test
+    public void refresh_freeform_sizeShouldUpdate() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Assert.assertEquals(4, container.size());
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        container.refresh();
+        Assert.assertEquals(5000, container.size());
+    }
+
+    @Test
+    public void refresh_freeformWithoutCallingRefresh_sizeShouldNotUpdate()
+            throws SQLException {
+        // Yeah, this is a weird one. We're testing that the size doesn't update
+        // after adding lots of items unless we call refresh inbetween. This to
+        // make sure that the refresh method actually refreshes stuff and isn't
+        // a NOP.
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Assert.assertEquals(4, container.size());
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        Assert.assertEquals(4, container.size());
+    }
+
+    @Test
+    public void setAutoCommit_freeform_shouldSucceed() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        container.setAutoCommit(true);
+        Assert.assertTrue(container.isAutoCommit());
+        container.setAutoCommit(false);
+        Assert.assertFalse(container.isAutoCommit());
+    }
+
+    @Test
+    public void getPageLength_freeform_returnsDefault100() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Assert.assertEquals(100, container.getPageLength());
+    }
+
+    @Test
+    public void setPageLength_freeform_shouldSucceed() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        container.setPageLength(20);
+        Assert.assertEquals(20, container.getPageLength());
+        container.setPageLength(200);
+        Assert.assertEquals(200, container.getPageLength());
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void addContainerProperty_normal_isUnsupported() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        container.addContainerProperty("asdf", String.class, "");
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void removeContainerProperty_normal_isUnsupported()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        container.removeContainerProperty("asdf");
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void addItemObject_normal_isUnsupported() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        container.addItem("asdf");
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void addItemAfterObjectObject_normal_isUnsupported()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        container.addItemAfter("asdf", "foo");
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void addItemAtIntObject_normal_isUnsupported() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        container.addItemAt(2, "asdf");
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void addItemAtInt_normal_isUnsupported() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        container.addItemAt(2);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void addItemAfterObject_normal_isUnsupported() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        container.addItemAfter("asdf");
+    }
+
+    @Test
+    public void addItem_freeformAddOneNewItem_returnsItemId()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object itemId = container.addItem();
+        Assert.assertNotNull(itemId);
+    }
+
+    @Test
+    public void addItem_freeformAddOneNewItem_shouldChangeSize()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        int size = container.size();
+        container.addItem();
+        Assert.assertEquals(size + 1, container.size());
+    }
+
+    @Test
+    public void addItem_freeformAddTwoNewItems_shouldChangeSize()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        int size = container.size();
+        Object id1 = container.addItem();
+        Object id2 = container.addItem();
+        Assert.assertEquals(size + 2, container.size());
+        Assert.assertNotSame(id1, id2);
+        Assert.assertFalse(id1.equals(id2));
+    }
+
+    @Test
+    public void nextItemId_freeformNewlyAddedItem_returnsNewlyAdded()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object lastId = container.lastItemId();
+        Object id = container.addItem();
+        Assert.assertEquals(id, container.nextItemId(lastId));
+    }
+
+    @Test
+    public void lastItemId_freeformNewlyAddedItem_returnsNewlyAdded()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object lastId = container.lastItemId();
+        Object id = container.addItem();
+        Assert.assertEquals(id, container.lastItemId());
+        Assert.assertNotSame(lastId, container.lastItemId());
+    }
+
+    @Test
+    public void indexOfId_freeformNewlyAddedItem_returnsFour()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.addItem();
+        Assert.assertEquals(4, container.indexOfId(id));
+    }
+
+    @Test
+    public void getItem_freeformNewlyAddedItem_returnsNewlyAdded()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.addItem();
+        Assert.assertNotNull(container.getItem(id));
+    }
+
+    @Test
+    public void getItem_freeformNewlyAddedItemAndFiltered_returnsNull()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        container.addContainerFilter(new Equal("NAME", "asdf"));
+        Object id = container.addItem();
+        Assert.assertNull(container.getItem(id));
+    }
+
+    @Test
+    public void getItemUnfiltered_freeformNewlyAddedItemAndFiltered_returnsNewlyAdded()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        container.addContainerFilter(new Equal("NAME", "asdf"));
+        Object id = container.addItem();
+        Assert.assertNotNull(container.getItemUnfiltered(id));
+    }
+
+    @Test
+    public void getItemIds_freeformNewlyAddedItem_containsNewlyAdded()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.addItem();
+        Assert.assertTrue(container.getItemIds().contains(id));
+    }
+
+    @Test
+    public void getContainerProperty_freeformNewlyAddedItem_returnsPropertyOfNewlyAddedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.addItem();
+        Item item = container.getItem(id);
+        item.getItemProperty("NAME").setValue("asdf");
+        Assert.assertEquals("asdf", container.getContainerProperty(id, "NAME")
+                .getValue());
+    }
+
+    @Test
+    public void containsId_freeformNewlyAddedItem_returnsTrue()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.addItem();
+        Assert.assertTrue(container.containsId(id));
+    }
+
+    @Test
+    public void prevItemId_freeformTwoNewlyAddedItems_returnsFirstAddedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id1 = container.addItem();
+        Object id2 = container.addItem();
+        Assert.assertEquals(id1, container.prevItemId(id2));
+    }
+
+    @Test
+    public void firstItemId_freeformEmptyResultSet_returnsFirstAddedItem()
+            throws SQLException {
+        DataGenerator.createGarbage(connectionPool);
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM GARBAGE", connectionPool, "ID"));
+        Object id = container.addItem();
+        Assert.assertSame(id, container.firstItemId());
+    }
+
+    @Test
+    public void isFirstId_freeformEmptyResultSet_returnsFirstAddedItem()
+            throws SQLException {
+        DataGenerator.createGarbage(connectionPool);
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM GARBAGE", connectionPool, "ID"));
+        Object id = container.addItem();
+        Assert.assertTrue(container.isFirstId(id));
+    }
+
+    @Test
+    public void isLastId_freeformOneItemAdded_returnsTrueForAddedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.addItem();
+        Assert.assertTrue(container.isLastId(id));
+    }
+
+    @Test
+    public void isLastId_freeformTwoItemsAdded_returnsTrueForLastAddedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        container.addItem();
+        Object id2 = container.addItem();
+        Assert.assertTrue(container.isLastId(id2));
+    }
+
+    @Test
+    public void getIdByIndex_freeformOneItemAddedLastIndexInContainer_returnsAddedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.addItem();
+        Assert.assertEquals(id, container.getIdByIndex(container.size() - 1));
+    }
+
+    @Test
+    public void removeItem_freeformNoAddedItems_removesItemFromContainer()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        int size = container.size();
+        Object id = container.firstItemId();
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertNotSame(id, container.firstItemId());
+        Assert.assertEquals(size - 1, container.size());
+    }
+
+    @Test
+    public void containsId_freeformRemovedItem_returnsFalse()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.firstItemId();
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertFalse(container.containsId(id));
+    }
+
+    @Test
+    public void removeItem_freeformOneAddedItem_removesTheAddedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.addItem();
+        int size = container.size();
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertFalse(container.containsId(id));
+        Assert.assertEquals(size - 1, container.size());
+    }
+
+    @Test
+    public void getItem_freeformItemRemoved_returnsNull() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.firstItemId();
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertNull(container.getItem(id));
+    }
+
+    @Test
+    public void getItem_freeformAddedItemRemoved_returnsNull()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.addItem();
+        Assert.assertNotNull(container.getItem(id));
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertNull(container.getItem(id));
+    }
+
+    @Test
+    public void getItemIds_freeformItemRemoved_shouldNotContainRemovedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.firstItemId();
+        Assert.assertTrue(container.getItemIds().contains(id));
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertFalse(container.getItemIds().contains(id));
+    }
+
+    @Test
+    public void getItemIds_freeformAddedItemRemoved_shouldNotContainRemovedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.addItem();
+        Assert.assertTrue(container.getItemIds().contains(id));
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertFalse(container.getItemIds().contains(id));
+    }
+
+    @Test
+    public void containsId_freeformItemRemoved_returnsFalse()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.firstItemId();
+        Assert.assertTrue(container.containsId(id));
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertFalse(container.containsId(id));
+    }
+
+    @Test
+    public void containsId_freeformAddedItemRemoved_returnsFalse()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.addItem();
+        Assert.assertTrue(container.containsId(id));
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertFalse(container.containsId(id));
+    }
+
+    @Test
+    public void nextItemId_freeformItemRemoved_skipsRemovedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object first = container.getIdByIndex(0);
+        Object second = container.getIdByIndex(1);
+        Object third = container.getIdByIndex(2);
+        Assert.assertTrue(container.removeItem(second));
+        Assert.assertEquals(third, container.nextItemId(first));
+    }
+
+    @Test
+    public void nextItemId_freeformAddedItemRemoved_skipsRemovedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object first = container.lastItemId();
+        Object second = container.addItem();
+        Object third = container.addItem();
+        Assert.assertTrue(container.removeItem(second));
+        Assert.assertEquals(third, container.nextItemId(first));
+    }
+
+    @Test
+    public void prevItemId_freeformItemRemoved_skipsRemovedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object first = container.getIdByIndex(0);
+        Object second = container.getIdByIndex(1);
+        Object third = container.getIdByIndex(2);
+        Assert.assertTrue(container.removeItem(second));
+        Assert.assertEquals(first, container.prevItemId(third));
+    }
+
+    @Test
+    public void prevItemId_freeformAddedItemRemoved_skipsRemovedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object first = container.lastItemId();
+        Object second = container.addItem();
+        Object third = container.addItem();
+        Assert.assertTrue(container.removeItem(second));
+        Assert.assertEquals(first, container.prevItemId(third));
+    }
+
+    @Test
+    public void firstItemId_freeformFirstItemRemoved_resultChanges()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object first = container.firstItemId();
+        Assert.assertTrue(container.removeItem(first));
+        Assert.assertNotSame(first, container.firstItemId());
+    }
+
+    @Test
+    public void firstItemId_freeformNewlyAddedFirstItemRemoved_resultChanges()
+            throws SQLException {
+        DataGenerator.createGarbage(connectionPool);
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM GARBAGE", connectionPool, "ID"));
+        Object first = container.addItem();
+        Object second = container.addItem();
+        Assert.assertSame(first, container.firstItemId());
+        Assert.assertTrue(container.removeItem(first));
+        Assert.assertSame(second, container.firstItemId());
+    }
+
+    @Test
+    public void lastItemId_freeformLastItemRemoved_resultChanges()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object last = container.lastItemId();
+        Assert.assertTrue(container.removeItem(last));
+        Assert.assertNotSame(last, container.lastItemId());
+    }
+
+    @Test
+    public void lastItemId_freeformAddedLastItemRemoved_resultChanges()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object last = container.addItem();
+        Assert.assertSame(last, container.lastItemId());
+        Assert.assertTrue(container.removeItem(last));
+        Assert.assertNotSame(last, container.lastItemId());
+    }
+
+    @Test
+    public void isFirstId_freeformFirstItemRemoved_returnsFalse()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object first = container.firstItemId();
+        Assert.assertTrue(container.removeItem(first));
+        Assert.assertFalse(container.isFirstId(first));
+    }
+
+    @Test
+    public void isFirstId_freeformAddedFirstItemRemoved_returnsFalse()
+            throws SQLException {
+        DataGenerator.createGarbage(connectionPool);
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM GARBAGE", connectionPool, "ID"));
+        Object first = container.addItem();
+        container.addItem();
+        Assert.assertSame(first, container.firstItemId());
+        Assert.assertTrue(container.removeItem(first));
+        Assert.assertFalse(container.isFirstId(first));
+    }
+
+    @Test
+    public void isLastId_freeformLastItemRemoved_returnsFalse()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object last = container.lastItemId();
+        Assert.assertTrue(container.removeItem(last));
+        Assert.assertFalse(container.isLastId(last));
+    }
+
+    @Test
+    public void isLastId_freeformAddedLastItemRemoved_returnsFalse()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object last = container.addItem();
+        Assert.assertSame(last, container.lastItemId());
+        Assert.assertTrue(container.removeItem(last));
+        Assert.assertFalse(container.isLastId(last));
+    }
+
+    @Test
+    public void indexOfId_freeformItemRemoved_returnsNegOne()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.getIdByIndex(2);
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertEquals(-1, container.indexOfId(id));
+    }
+
+    @Test
+    public void indexOfId_freeformAddedItemRemoved_returnsNegOne()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.addItem();
+        Assert.assertTrue(container.indexOfId(id) != -1);
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertEquals(-1, container.indexOfId(id));
+    }
+
+    @Test
+    public void getIdByIndex_freeformItemRemoved_resultChanges()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.getIdByIndex(2);
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertNotSame(id, container.getIdByIndex(2));
+    }
+
+    @Test
+    public void getIdByIndex_freeformAddedItemRemoved_resultChanges()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object id = container.addItem();
+        container.addItem();
+        int index = container.indexOfId(id);
+        Assert.assertTrue(container.removeItem(id));
+        Assert.assertNotSame(id, container.getIdByIndex(index));
+    }
+
+    @Test
+    public void removeAllItems_freeform_shouldSucceed() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Assert.assertTrue(container.removeAllItems());
+        Assert.assertEquals(0, container.size());
+    }
+
+    @Test
+    public void removeAllItems_freeformAddedItems_shouldSucceed()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        container.addItem();
+        container.addItem();
+        Assert.assertTrue(container.removeAllItems());
+        Assert.assertEquals(0, container.size());
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void commit_freeformAddedItem_shouldBeWrittenToDB()
+            throws SQLException {
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.expect(
+                delegate.storeRow(EasyMock.isA(Connection.class),
+                        EasyMock.isA(RowItem.class)))
+                .andAnswer(new IAnswer<Integer>() {
+                    public Integer answer() throws Throwable {
+                        Connection conn = (Connection) EasyMock
+                                .getCurrentArguments()[0];
+                        RowItem item = (RowItem) EasyMock.getCurrentArguments()[1];
+                        Statement statement = conn.createStatement();
+                        if (AllTests.db == DB.MSSQL) {
+                            statement
+                                    .executeUpdate("insert into people values('"
+                                            + item.getItemProperty("NAME")
+                                                    .getValue()
+                                            + "', '"
+                                            + item.getItemProperty("AGE")
+                                                    .getValue() + "')");
+                        } else {
+                            statement
+                                    .executeUpdate("insert into people values(default, '"
+                                            + item.getItemProperty("NAME")
+                                                    .getValue()
+                                            + "', '"
+                                            + item.getItemProperty("AGE")
+                                                    .getValue() + "')");
+                        }
+                        statement.close();
+                        conn.commit();
+                        connectionPool.releaseConnection(conn);
+                        return 1;
+                    }
+                }).anyTimes();
+        EasyMock.expect(
+                delegate.getQueryString(EasyMock.anyInt(), EasyMock.anyInt()))
+                .andAnswer(new IAnswer<String>() {
+                    public String answer() throws Throwable {
+                        Object[] args = EasyMock.getCurrentArguments();
+                        int offset = (Integer) (args[0]);
+                        int limit = (Integer) (args[1]);
+                        if (AllTests.db == DB.MSSQL) {
+                            int start = offset + 1;
+                            int end = offset + limit + 1;
+                            String q = "SELECT * FROM (SELECT row_number() OVER"
+                                    + " ( ORDER BY \"ID\" ASC) AS rownum, * FROM people)"
+                                    + " AS a WHERE a.rownum BETWEEN "
+                                    + start
+                                    + " AND " + end;
+                            return q;
+                        } else if (AllTests.db == DB.ORACLE) {
+                            int start = offset + 1;
+                            int end = offset + limit + 1;
+                            String q = "SELECT * FROM (SELECT x.*, ROWNUM AS r FROM"
+                                    + " (SELECT * FROM people ORDER BY \"ID\" ASC) x) "
+                                    + " WHERE r BETWEEN "
+                                    + start
+                                    + " AND "
+                                    + end;
+                            return q;
+                        } else {
+                            return "SELECT * FROM people LIMIT " + limit
+                                    + " OFFSET " + offset;
+                        }
+                    }
+                }).anyTimes();
+        delegate.setFilters(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setFilters(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        EasyMock.expect(delegate.getCountQuery())
+                .andThrow(new UnsupportedOperationException()).anyTimes();
+
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                connectionPool, "ID");
+        query.setDelegate(delegate);
+        EasyMock.replay(delegate);
+        SQLContainer container = new SQLContainer(query);
+        Object id = container.addItem();
+        container.getContainerProperty(id, "NAME").setValue("New Name");
+        container.getContainerProperty(id, "AGE").setValue(30);
+        Assert.assertTrue(id instanceof TemporaryRowId);
+        Assert.assertSame(id, container.lastItemId());
+        container.commit();
+        Assert.assertFalse(container.lastItemId() instanceof TemporaryRowId);
+        Assert.assertEquals("New Name",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+        EasyMock.verify(delegate);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void commit_freeformTwoAddedItems_shouldBeWrittenToDB()
+            throws SQLException {
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.expect(
+                delegate.storeRow(EasyMock.isA(Connection.class),
+                        EasyMock.isA(RowItem.class)))
+                .andAnswer(new IAnswer<Integer>() {
+                    public Integer answer() throws Throwable {
+                        Connection conn = (Connection) EasyMock
+                                .getCurrentArguments()[0];
+                        RowItem item = (RowItem) EasyMock.getCurrentArguments()[1];
+                        Statement statement = conn.createStatement();
+                        if (AllTests.db == DB.MSSQL) {
+                            statement
+                                    .executeUpdate("insert into people values('"
+                                            + item.getItemProperty("NAME")
+                                                    .getValue()
+                                            + "', '"
+                                            + item.getItemProperty("AGE")
+                                                    .getValue() + "')");
+                        } else {
+                            statement
+                                    .executeUpdate("insert into people values(default, '"
+                                            + item.getItemProperty("NAME")
+                                                    .getValue()
+                                            + "', '"
+                                            + item.getItemProperty("AGE")
+                                                    .getValue() + "')");
+                        }
+                        statement.close();
+                        conn.commit();
+                        connectionPool.releaseConnection(conn);
+                        return 1;
+                    }
+                }).anyTimes();
+        EasyMock.expect(
+                delegate.getQueryString(EasyMock.anyInt(), EasyMock.anyInt()))
+                .andAnswer(new IAnswer<String>() {
+                    public String answer() throws Throwable {
+                        Object[] args = EasyMock.getCurrentArguments();
+                        int offset = (Integer) (args[0]);
+                        int limit = (Integer) (args[1]);
+                        if (AllTests.db == DB.MSSQL) {
+                            int start = offset + 1;
+                            int end = offset + limit + 1;
+                            String q = "SELECT * FROM (SELECT row_number() OVER"
+                                    + " ( ORDER BY \"ID\" ASC) AS rownum, * FROM people)"
+                                    + " AS a WHERE a.rownum BETWEEN "
+                                    + start
+                                    + " AND " + end;
+                            return q;
+                        } else if (AllTests.db == DB.ORACLE) {
+                            int start = offset + 1;
+                            int end = offset + limit + 1;
+                            String q = "SELECT * FROM (SELECT x.*, ROWNUM AS r FROM"
+                                    + " (SELECT * FROM people ORDER BY \"ID\" ASC) x) "
+                                    + " WHERE r BETWEEN "
+                                    + start
+                                    + " AND "
+                                    + end;
+                            return q;
+                        } else {
+                            return "SELECT * FROM people LIMIT " + limit
+                                    + " OFFSET " + offset;
+                        }
+                    }
+                }).anyTimes();
+        delegate.setFilters(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setFilters(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        EasyMock.expect(delegate.getCountQuery())
+                .andThrow(new UnsupportedOperationException()).anyTimes();
+
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                connectionPool, "ID");
+        query.setDelegate(delegate);
+        EasyMock.replay(delegate);
+        SQLContainer container = new SQLContainer(query);
+        Object id = container.addItem();
+        Object id2 = container.addItem();
+        container.getContainerProperty(id, "NAME").setValue("Herbert");
+        container.getContainerProperty(id, "AGE").setValue(30);
+        container.getContainerProperty(id2, "NAME").setValue("Larry");
+        container.getContainerProperty(id2, "AGE").setValue(50);
+        Assert.assertTrue(id2 instanceof TemporaryRowId);
+        Assert.assertSame(id2, container.lastItemId());
+        container.commit();
+        Object nextToLast = container.getIdByIndex(container.size() - 2);
+        Assert.assertFalse(nextToLast instanceof TemporaryRowId);
+        Assert.assertEquals("Herbert",
+                container.getContainerProperty(nextToLast, "NAME").getValue());
+        Assert.assertFalse(container.lastItemId() instanceof TemporaryRowId);
+        Assert.assertEquals("Larry",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+        EasyMock.verify(delegate);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void commit_freeformRemovedItem_shouldBeRemovedFromDB()
+            throws SQLException {
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.expect(
+                delegate.removeRow(EasyMock.isA(Connection.class),
+                        EasyMock.isA(RowItem.class)))
+                .andAnswer(new IAnswer<Boolean>() {
+                    public Boolean answer() throws Throwable {
+                        Connection conn = (Connection) EasyMock
+                                .getCurrentArguments()[0];
+                        RowItem item = (RowItem) EasyMock.getCurrentArguments()[1];
+                        Statement statement = conn.createStatement();
+                        statement
+                                .executeUpdate("DELETE FROM people WHERE \"ID\"="
+                                        + item.getItemProperty("ID"));
+                        statement.close();
+                        return true;
+                    }
+                }).anyTimes();
+        EasyMock.expect(
+                delegate.getQueryString(EasyMock.anyInt(), EasyMock.anyInt()))
+                .andAnswer(new IAnswer<String>() {
+                    public String answer() throws Throwable {
+                        Object[] args = EasyMock.getCurrentArguments();
+                        int offset = (Integer) (args[0]);
+                        int limit = (Integer) (args[1]);
+                        if (AllTests.db == DB.MSSQL) {
+                            int start = offset + 1;
+                            int end = offset + limit + 1;
+                            String q = "SELECT * FROM (SELECT row_number() OVER"
+                                    + " ( ORDER BY \"ID\" ASC) AS rownum, * FROM people)"
+                                    + " AS a WHERE a.rownum BETWEEN "
+                                    + start
+                                    + " AND " + end;
+                            return q;
+                        } else if (AllTests.db == DB.ORACLE) {
+                            int start = offset + 1;
+                            int end = offset + limit + 1;
+                            String q = "SELECT * FROM (SELECT x.*, ROWNUM AS r FROM"
+                                    + " (SELECT * FROM people ORDER BY \"ID\" ASC) x) "
+                                    + " WHERE r BETWEEN "
+                                    + start
+                                    + " AND "
+                                    + end;
+                            return q;
+                        } else {
+                            return "SELECT * FROM people LIMIT " + limit
+                                    + " OFFSET " + offset;
+                        }
+                    }
+                }).anyTimes();
+        delegate.setFilters(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setFilters(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        EasyMock.expect(delegate.getCountQuery())
+                .andThrow(new UnsupportedOperationException()).anyTimes();
+
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                connectionPool, "ID");
+        query.setDelegate(delegate);
+        EasyMock.replay(delegate);
+        SQLContainer container = new SQLContainer(query);
+        Object last = container.lastItemId();
+        container.removeItem(last);
+        container.commit();
+        Assert.assertFalse(last.equals(container.lastItemId()));
+        EasyMock.verify(delegate);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void commit_freeformLastItemUpdated_shouldUpdateRowInDB()
+            throws SQLException {
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.expect(
+                delegate.storeRow(EasyMock.isA(Connection.class),
+                        EasyMock.isA(RowItem.class)))
+                .andAnswer(new IAnswer<Integer>() {
+                    public Integer answer() throws Throwable {
+                        Connection conn = (Connection) EasyMock
+                                .getCurrentArguments()[0];
+                        RowItem item = (RowItem) EasyMock.getCurrentArguments()[1];
+                        Statement statement = conn.createStatement();
+                        statement.executeUpdate("UPDATE people SET \"NAME\"='"
+                                + item.getItemProperty("NAME").getValue()
+                                + "' WHERE \"ID\"="
+                                + item.getItemProperty("ID").getValue());
+                        statement.close();
+                        conn.commit();
+                        connectionPool.releaseConnection(conn);
+                        return 1;
+                    }
+                }).anyTimes();
+        EasyMock.expect(
+                delegate.getQueryString(EasyMock.anyInt(), EasyMock.anyInt()))
+                .andAnswer(new IAnswer<String>() {
+                    public String answer() throws Throwable {
+                        Object[] args = EasyMock.getCurrentArguments();
+                        int offset = (Integer) (args[0]);
+                        int limit = (Integer) (args[1]);
+                        if (AllTests.db == DB.MSSQL) {
+                            int start = offset + 1;
+                            int end = offset + limit + 1;
+                            String q = "SELECT * FROM (SELECT row_number() OVER"
+                                    + " ( ORDER BY \"ID\" ASC) AS rownum, * FROM people)"
+                                    + " AS a WHERE a.rownum BETWEEN "
+                                    + start
+                                    + " AND " + end;
+                            return q;
+                        } else if (AllTests.db == DB.ORACLE) {
+                            int start = offset + 1;
+                            int end = offset + limit + 1;
+                            String q = "SELECT * FROM (SELECT x.*, ROWNUM AS r FROM"
+                                    + " (SELECT * FROM people ORDER BY \"ID\" ASC) x) "
+                                    + " WHERE r BETWEEN "
+                                    + start
+                                    + " AND "
+                                    + end;
+                            return q;
+                        } else {
+                            return "SELECT * FROM people LIMIT " + limit
+                                    + " OFFSET " + offset;
+                        }
+                    }
+                }).anyTimes();
+        delegate.setFilters(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setFilters(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        EasyMock.expect(delegate.getCountQuery())
+                .andThrow(new UnsupportedOperationException()).anyTimes();
+
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                connectionPool, "ID");
+        query.setDelegate(delegate);
+        EasyMock.replay(delegate);
+        SQLContainer container = new SQLContainer(query);
+        Object last = container.lastItemId();
+        container.getContainerProperty(last, "NAME").setValue("Donald");
+        container.commit();
+        Assert.assertEquals("Donald",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+        EasyMock.verify(delegate);
+    }
+
+    @Test
+    public void rollback_freeformItemAdded_discardsAddedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        int size = container.size();
+        Object id = container.addItem();
+        container.getContainerProperty(id, "NAME").setValue("foo");
+        Assert.assertEquals(size + 1, container.size());
+        container.rollback();
+        Assert.assertEquals(size, container.size());
+        Assert.assertFalse("foo".equals(container.getContainerProperty(
+                container.lastItemId(), "NAME").getValue()));
+    }
+
+    @Test
+    public void rollback_freeformItemRemoved_restoresRemovedItem()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        int size = container.size();
+        Object last = container.lastItemId();
+        container.removeItem(last);
+        Assert.assertEquals(size - 1, container.size());
+        container.rollback();
+        Assert.assertEquals(size, container.size());
+        Assert.assertEquals(last, container.lastItemId());
+    }
+
+    @Test
+    public void rollback_freeformItemChanged_discardsChanges()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Object last = container.lastItemId();
+        container.getContainerProperty(last, "NAME").setValue("foo");
+        container.rollback();
+        Assert.assertFalse("foo".equals(container.getContainerProperty(
+                container.lastItemId(), "NAME").getValue()));
+    }
+
+    @Test
+    public void itemChangeNotification_freeform_isModifiedReturnsTrue()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Assert.assertFalse(container.isModified());
+        RowItem last = (RowItem) container.getItem(container.lastItemId());
+        container.itemChangeNotification(last);
+        Assert.assertTrue(container.isModified());
+    }
+
+    @Test
+    public void itemSetChangeListeners_freeform_shouldFire()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        ItemSetChangeListener listener = EasyMock
+                .createMock(ItemSetChangeListener.class);
+        listener.containerItemSetChange(EasyMock.isA(ItemSetChangeEvent.class));
+        EasyMock.replay(listener);
+
+        container.addListener(listener);
+        container.addItem();
+
+        EasyMock.verify(listener);
+    }
+
+    @Test
+    public void itemSetChangeListeners_freeformItemRemoved_shouldFire()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        ItemSetChangeListener listener = EasyMock
+                .createMock(ItemSetChangeListener.class);
+        listener.containerItemSetChange(EasyMock.isA(ItemSetChangeEvent.class));
+        EasyMock.expectLastCall().anyTimes();
+        EasyMock.replay(listener);
+
+        container.addListener(listener);
+        container.removeItem(container.lastItemId());
+
+        EasyMock.verify(listener);
+    }
+
+    @Test
+    public void removeListener_freeform_shouldNotFire() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        ItemSetChangeListener listener = EasyMock
+                .createMock(ItemSetChangeListener.class);
+        EasyMock.replay(listener);
+
+        container.addListener(listener);
+        container.removeListener(listener);
+        container.addItem();
+
+        EasyMock.verify(listener);
+    }
+
+    @Test
+    public void isModified_freeformRemovedItem_returnsTrue()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Assert.assertFalse(container.isModified());
+        container.removeItem(container.lastItemId());
+        Assert.assertTrue(container.isModified());
+    }
+
+    @Test
+    public void isModified_freeformAddedItem_returnsTrue() throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Assert.assertFalse(container.isModified());
+        container.addItem();
+        Assert.assertTrue(container.isModified());
+    }
+
+    @Test
+    public void isModified_freeformChangedItem_returnsTrue()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Assert.assertFalse(container.isModified());
+        container.getContainerProperty(container.lastItemId(), "NAME")
+                .setValue("foo");
+        Assert.assertTrue(container.isModified());
+    }
+
+    @Test
+    public void getSortableContainerPropertyIds_freeform_returnsAllPropertyIds()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        Collection<?> sortableIds = container.getSortableContainerPropertyIds();
+        Assert.assertTrue(sortableIds.contains("ID"));
+        Assert.assertTrue(sortableIds.contains("NAME"));
+        Assert.assertTrue(sortableIds.contains("AGE"));
+        Assert.assertEquals(3, sortableIds.size());
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void addOrderBy_freeform_shouldReorderResults() throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                connectionPool, "ID");
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        final ArrayList<OrderBy> orderBys = new ArrayList<OrderBy>();
+        delegate.setFilters(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setFilters(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+            public Object answer() throws Throwable {
+                List<OrderBy> orders = (List<OrderBy>) EasyMock
+                        .getCurrentArguments()[0];
+                orderBys.clear();
+                orderBys.addAll(orders);
+                return null;
+            }
+        }).anyTimes();
+        EasyMock.expect(
+                delegate.getQueryString(EasyMock.anyInt(), EasyMock.anyInt()))
+                .andAnswer(new IAnswer<String>() {
+                    public String answer() throws Throwable {
+                        Object[] args = EasyMock.getCurrentArguments();
+                        int offset = (Integer) (args[0]);
+                        int limit = (Integer) (args[1]);
+                        if (AllTests.db == DB.MSSQL) {
+                            SQLGenerator gen = new MSSQLGenerator();
+                            if (orderBys == null || orderBys.isEmpty()) {
+                                List<OrderBy> ob = new ArrayList<OrderBy>();
+                                ob.add(new OrderBy("ID", true));
+                                return gen.generateSelectQuery("people", null,
+                                        ob, offset, limit, null)
+                                        .getQueryString();
+                            } else {
+                                return gen.generateSelectQuery("people", null,
+                                        orderBys, offset, limit, null)
+                                        .getQueryString();
+                            }
+                        } else if (AllTests.db == DB.ORACLE) {
+                            SQLGenerator gen = new OracleGenerator();
+                            if (orderBys == null || orderBys.isEmpty()) {
+                                List<OrderBy> ob = new ArrayList<OrderBy>();
+                                ob.add(new OrderBy("ID", true));
+                                return gen.generateSelectQuery("people", null,
+                                        ob, offset, limit, null)
+                                        .getQueryString();
+                            } else {
+                                return gen.generateSelectQuery("people", null,
+                                        orderBys, offset, limit, null)
+                                        .getQueryString();
+                            }
+                        } else {
+                            StringBuffer query = new StringBuffer(
+                                    "SELECT * FROM people");
+                            if (!orderBys.isEmpty()) {
+                                query.append(" ORDER BY ");
+                                for (OrderBy orderBy : orderBys) {
+                                    query.append("\"" + orderBy.getColumn()
+                                            + "\"");
+                                    if (orderBy.isAscending()) {
+                                        query.append(" ASC");
+                                    } else {
+                                        query.append(" DESC");
+                                    }
+                                }
+                            }
+                            query.append(" LIMIT ").append(limit)
+                                    .append(" OFFSET ").append(offset);
+                            return query.toString();
+                        }
+                    }
+                }).anyTimes();
+        EasyMock.expect(delegate.getCountQuery())
+                .andThrow(new UnsupportedOperationException()).anyTimes();
+
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.firstItemId(), "NAME")
+                        .getValue());
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        container.addOrderBy(new OrderBy("NAME", true));
+        // Börje, Kalle, Pelle, Ville
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.firstItemId(), "NAME")
+                        .getValue());
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        EasyMock.verify(delegate);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void addOrderBy_freeformIllegalColumn_shouldFail()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", connectionPool, "ID"));
+        container.addOrderBy(new OrderBy("asdf", true));
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void sort_freeform_sortsByName() throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                connectionPool, "ID");
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        final ArrayList<OrderBy> orderBys = new ArrayList<OrderBy>();
+        delegate.setFilters(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setFilters(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+            public Object answer() throws Throwable {
+                List<OrderBy> orders = (List<OrderBy>) EasyMock
+                        .getCurrentArguments()[0];
+                orderBys.clear();
+                orderBys.addAll(orders);
+                return null;
+            }
+        }).anyTimes();
+        EasyMock.expect(
+                delegate.getQueryString(EasyMock.anyInt(), EasyMock.anyInt()))
+                .andAnswer(new IAnswer<String>() {
+                    public String answer() throws Throwable {
+                        Object[] args = EasyMock.getCurrentArguments();
+                        int offset = (Integer) (args[0]);
+                        int limit = (Integer) (args[1]);
+                        if (AllTests.db == DB.MSSQL) {
+                            SQLGenerator gen = new MSSQLGenerator();
+                            if (orderBys == null || orderBys.isEmpty()) {
+                                List<OrderBy> ob = new ArrayList<OrderBy>();
+                                ob.add(new OrderBy("ID", true));
+                                return gen.generateSelectQuery("people", null,
+                                        ob, offset, limit, null)
+                                        .getQueryString();
+                            } else {
+                                return gen.generateSelectQuery("people", null,
+                                        orderBys, offset, limit, null)
+                                        .getQueryString();
+                            }
+                        } else if (AllTests.db == DB.ORACLE) {
+                            SQLGenerator gen = new OracleGenerator();
+                            if (orderBys == null || orderBys.isEmpty()) {
+                                List<OrderBy> ob = new ArrayList<OrderBy>();
+                                ob.add(new OrderBy("ID", true));
+                                return gen.generateSelectQuery("people", null,
+                                        ob, offset, limit, null)
+                                        .getQueryString();
+                            } else {
+                                return gen.generateSelectQuery("people", null,
+                                        orderBys, offset, limit, null)
+                                        .getQueryString();
+                            }
+                        } else {
+                            StringBuffer query = new StringBuffer(
+                                    "SELECT * FROM people");
+                            if (!orderBys.isEmpty()) {
+                                query.append(" ORDER BY ");
+                                for (OrderBy orderBy : orderBys) {
+                                    query.append("\"" + orderBy.getColumn()
+                                            + "\"");
+                                    if (orderBy.isAscending()) {
+                                        query.append(" ASC");
+                                    } else {
+                                        query.append(" DESC");
+                                    }
+                                }
+                            }
+                            query.append(" LIMIT ").append(limit)
+                                    .append(" OFFSET ").append(offset);
+                            return query.toString();
+                        }
+                    }
+                }).anyTimes();
+        EasyMock.expect(delegate.getCountQuery())
+                .andThrow(new UnsupportedOperationException()).anyTimes();
+        EasyMock.replay(delegate);
+
+        query.setDelegate(delegate);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.firstItemId(), "NAME")
+                        .getValue());
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        container.sort(new Object[] { "NAME" }, new boolean[] { true });
+
+        // Börje, Kalle, Pelle, Ville
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.firstItemId(), "NAME")
+                        .getValue());
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        EasyMock.verify(delegate);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void addFilter_freeform_filtersResults() throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                connectionPool, "ID");
+        FreeformStatementDelegate delegate = EasyMock
+                .createMock(FreeformStatementDelegate.class);
+        final ArrayList<Filter> filters = new ArrayList<Filter>();
+        delegate.setFilters(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setFilters(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+            public Object answer() throws Throwable {
+                List<Filter> orders = (List<Filter>) EasyMock
+                        .getCurrentArguments()[0];
+                filters.clear();
+                filters.addAll(orders);
+                return null;
+            }
+        }).anyTimes();
+        EasyMock.expect(
+                delegate.getQueryStatement(EasyMock.anyInt(), EasyMock.anyInt()))
+                .andAnswer(new IAnswer<StatementHelper>() {
+                    public StatementHelper answer() throws Throwable {
+                        Object[] args = EasyMock.getCurrentArguments();
+                        int offset = (Integer) (args[0]);
+                        int limit = (Integer) (args[1]);
+                        return FreeformQueryUtil.getQueryWithFilters(filters,
+                                offset, limit);
+                    }
+                }).anyTimes();
+        EasyMock.expect(delegate.getCountStatement())
+                .andAnswer(new IAnswer<StatementHelper>() {
+                    @SuppressWarnings("deprecation")
+                    public StatementHelper answer() throws Throwable {
+                        StatementHelper sh = new StatementHelper();
+                        StringBuffer query = new StringBuffer(
+                                "SELECT COUNT(*) FROM people");
+                        if (!filters.isEmpty()) {
+                            query.append(QueryBuilder.getWhereStringForFilters(
+                                    filters, sh));
+                        }
+                        sh.setQueryString(query.toString());
+                        return sh;
+                    }
+                }).anyTimes();
+
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals(4, container.size());
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        container.addContainerFilter(new Like("NAME", "%lle"));
+        // Ville, Kalle, Pelle
+        Assert.assertEquals(3, container.size());
+        Assert.assertEquals("Pelle",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        EasyMock.verify(delegate);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void addContainerFilter_filtersResults() throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                connectionPool, "ID");
+        FreeformStatementDelegate delegate = EasyMock
+                .createMock(FreeformStatementDelegate.class);
+        final ArrayList<Filter> filters = new ArrayList<Filter>();
+        delegate.setFilters(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setFilters(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+            public Object answer() throws Throwable {
+                List<Filter> orders = (List<Filter>) EasyMock
+                        .getCurrentArguments()[0];
+                filters.clear();
+                filters.addAll(orders);
+                return null;
+            }
+        }).anyTimes();
+        EasyMock.expect(
+                delegate.getQueryStatement(EasyMock.anyInt(), EasyMock.anyInt()))
+                .andAnswer(new IAnswer<StatementHelper>() {
+                    public StatementHelper answer() throws Throwable {
+                        Object[] args = EasyMock.getCurrentArguments();
+                        int offset = (Integer) (args[0]);
+                        int limit = (Integer) (args[1]);
+                        return FreeformQueryUtil.getQueryWithFilters(filters,
+                                offset, limit);
+                    }
+                }).anyTimes();
+        EasyMock.expect(delegate.getCountStatement())
+                .andAnswer(new IAnswer<StatementHelper>() {
+                    @SuppressWarnings("deprecation")
+                    public StatementHelper answer() throws Throwable {
+                        StatementHelper sh = new StatementHelper();
+                        StringBuffer query = new StringBuffer(
+                                "SELECT COUNT(*) FROM people");
+                        if (!filters.isEmpty()) {
+                            query.append(QueryBuilder.getWhereStringForFilters(
+                                    filters, sh));
+                        }
+                        sh.setQueryString(query.toString());
+                        return sh;
+                    }
+                }).anyTimes();
+
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals(4, container.size());
+
+        container.addContainerFilter("NAME", "Vi", false, false);
+
+        // Ville
+        Assert.assertEquals(1, container.size());
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        EasyMock.verify(delegate);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void addContainerFilter_ignoreCase_filtersResults()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                connectionPool, "ID");
+        FreeformStatementDelegate delegate = EasyMock
+                .createMock(FreeformStatementDelegate.class);
+        final ArrayList<Filter> filters = new ArrayList<Filter>();
+        delegate.setFilters(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setFilters(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+            public Object answer() throws Throwable {
+                List<Filter> orders = (List<Filter>) EasyMock
+                        .getCurrentArguments()[0];
+                filters.clear();
+                filters.addAll(orders);
+                return null;
+            }
+        }).anyTimes();
+        EasyMock.expect(
+                delegate.getQueryStatement(EasyMock.anyInt(), EasyMock.anyInt()))
+                .andAnswer(new IAnswer<StatementHelper>() {
+                    public StatementHelper answer() throws Throwable {
+                        Object[] args = EasyMock.getCurrentArguments();
+                        int offset = (Integer) (args[0]);
+                        int limit = (Integer) (args[1]);
+                        return FreeformQueryUtil.getQueryWithFilters(filters,
+                                offset, limit);
+                    }
+                }).anyTimes();
+        EasyMock.expect(delegate.getCountStatement())
+                .andAnswer(new IAnswer<StatementHelper>() {
+                    public StatementHelper answer() throws Throwable {
+                        StatementHelper sh = new StatementHelper();
+                        StringBuffer query = new StringBuffer(
+                                "SELECT COUNT(*) FROM people");
+                        if (!filters.isEmpty()) {
+                            query.append(QueryBuilder.getWhereStringForFilters(
+                                    filters, sh));
+                        }
+                        sh.setQueryString(query.toString());
+                        return sh;
+                    }
+                }).anyTimes();
+
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals(4, container.size());
+
+        // FIXME LIKE %asdf% doesn't match a string that begins with asdf
+        container.addContainerFilter("NAME", "vi", true, true);
+
+        // Ville
+        Assert.assertEquals(1, container.size());
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        EasyMock.verify(delegate);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void removeAllContainerFilters_freeform_noFiltering()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                connectionPool, "ID");
+        FreeformStatementDelegate delegate = EasyMock
+                .createMock(FreeformStatementDelegate.class);
+        final ArrayList<Filter> filters = new ArrayList<Filter>();
+        delegate.setFilters(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setFilters(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+            public Object answer() throws Throwable {
+                List<Filter> orders = (List<Filter>) EasyMock
+                        .getCurrentArguments()[0];
+                filters.clear();
+                filters.addAll(orders);
+                return null;
+            }
+        }).anyTimes();
+        EasyMock.expect(
+                delegate.getQueryStatement(EasyMock.anyInt(), EasyMock.anyInt()))
+                .andAnswer(new IAnswer<StatementHelper>() {
+                    public StatementHelper answer() throws Throwable {
+                        Object[] args = EasyMock.getCurrentArguments();
+                        int offset = (Integer) (args[0]);
+                        int limit = (Integer) (args[1]);
+                        return FreeformQueryUtil.getQueryWithFilters(filters,
+                                offset, limit);
+                    }
+                }).anyTimes();
+        EasyMock.expect(delegate.getCountStatement())
+                .andAnswer(new IAnswer<StatementHelper>() {
+                    @SuppressWarnings("deprecation")
+                    public StatementHelper answer() throws Throwable {
+                        StatementHelper sh = new StatementHelper();
+                        StringBuffer query = new StringBuffer(
+                                "SELECT COUNT(*) FROM people");
+                        if (!filters.isEmpty()) {
+                            query.append(QueryBuilder.getWhereStringForFilters(
+                                    filters, sh));
+                        }
+                        sh.setQueryString(query.toString());
+                        return sh;
+                    }
+                }).anyTimes();
+
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals(4, container.size());
+
+        container.addContainerFilter("NAME", "Vi", false, false);
+
+        // Ville
+        Assert.assertEquals(1, container.size());
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        container.removeAllContainerFilters();
+
+        Assert.assertEquals(4, container.size());
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        EasyMock.verify(delegate);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void removeContainerFilters_freeform_noFiltering()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                connectionPool, "ID");
+        FreeformStatementDelegate delegate = EasyMock
+                .createMock(FreeformStatementDelegate.class);
+        final ArrayList<Filter> filters = new ArrayList<Filter>();
+        delegate.setFilters(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setFilters(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+            public Object answer() throws Throwable {
+                List<Filter> orders = (List<Filter>) EasyMock
+                        .getCurrentArguments()[0];
+                filters.clear();
+                filters.addAll(orders);
+                return null;
+            }
+        }).anyTimes();
+        EasyMock.expect(
+                delegate.getQueryStatement(EasyMock.anyInt(), EasyMock.anyInt()))
+                .andAnswer(new IAnswer<StatementHelper>() {
+                    public StatementHelper answer() throws Throwable {
+                        Object[] args = EasyMock.getCurrentArguments();
+                        int offset = (Integer) (args[0]);
+                        int limit = (Integer) (args[1]);
+                        return FreeformQueryUtil.getQueryWithFilters(filters,
+                                offset, limit);
+                    }
+                }).anyTimes();
+        EasyMock.expect(delegate.getCountStatement())
+                .andAnswer(new IAnswer<StatementHelper>() {
+                    @SuppressWarnings("deprecation")
+                    public StatementHelper answer() throws Throwable {
+                        StatementHelper sh = new StatementHelper();
+                        StringBuffer query = new StringBuffer(
+                                "SELECT COUNT(*) FROM people");
+                        if (!filters.isEmpty()) {
+                            query.append(QueryBuilder.getWhereStringForFilters(
+                                    filters, sh));
+                        }
+                        sh.setQueryString(query.toString());
+                        return sh;
+                    }
+                }).anyTimes();
+
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals(4, container.size());
+
+        container.addContainerFilter("NAME", "Vi", false, true);
+
+        // Ville
+        Assert.assertEquals(1, container.size());
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        container.removeContainerFilters("NAME");
+
+        Assert.assertEquals(4, container.size());
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        EasyMock.verify(delegate);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void addFilter_freeformBufferedItems_alsoFiltersBufferedItems()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                connectionPool, "ID");
+        FreeformStatementDelegate delegate = EasyMock
+                .createMock(FreeformStatementDelegate.class);
+        final ArrayList<Filter> filters = new ArrayList<Filter>();
+        delegate.setFilters(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setFilters(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+            public Object answer() throws Throwable {
+                List<Filter> orders = (List<Filter>) EasyMock
+                        .getCurrentArguments()[0];
+                filters.clear();
+                filters.addAll(orders);
+                return null;
+            }
+        }).anyTimes();
+        EasyMock.expect(
+                delegate.getQueryStatement(EasyMock.anyInt(), EasyMock.anyInt()))
+                .andAnswer(new IAnswer<StatementHelper>() {
+                    public StatementHelper answer() throws Throwable {
+                        Object[] args = EasyMock.getCurrentArguments();
+                        int offset = (Integer) (args[0]);
+                        int limit = (Integer) (args[1]);
+                        return FreeformQueryUtil.getQueryWithFilters(filters,
+                                offset, limit);
+                    }
+                }).anyTimes();
+        EasyMock.expect(delegate.getCountStatement())
+                .andAnswer(new IAnswer<StatementHelper>() {
+                    @SuppressWarnings("deprecation")
+                    public StatementHelper answer() throws Throwable {
+                        StatementHelper sh = new StatementHelper();
+                        StringBuffer query = new StringBuffer(
+                                "SELECT COUNT(*) FROM people");
+                        if (!filters.isEmpty()) {
+                            query.append(QueryBuilder.getWhereStringForFilters(
+                                    filters, sh));
+                        }
+                        sh.setQueryString(query.toString());
+                        return sh;
+                    }
+                }).anyTimes();
+
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals(4, container.size());
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        Object id1 = container.addItem();
+        container.getContainerProperty(id1, "NAME").setValue("Palle");
+        Object id2 = container.addItem();
+        container.getContainerProperty(id2, "NAME").setValue("Bengt");
+
+        container.addContainerFilter(new Like("NAME", "%lle"));
+
+        // Ville, Kalle, Pelle, Palle
+        Assert.assertEquals(4, container.size());
+        Assert.assertEquals(
+                "Ville",
+                container.getContainerProperty(container.getIdByIndex(0),
+                        "NAME").getValue());
+        Assert.assertEquals(
+                "Kalle",
+                container.getContainerProperty(container.getIdByIndex(1),
+                        "NAME").getValue());
+        Assert.assertEquals(
+                "Pelle",
+                container.getContainerProperty(container.getIdByIndex(2),
+                        "NAME").getValue());
+        Assert.assertEquals(
+                "Palle",
+                container.getContainerProperty(container.getIdByIndex(3),
+                        "NAME").getValue());
+
+        Assert.assertNull(container.getIdByIndex(4));
+        Assert.assertNull(container.nextItemId(container.getIdByIndex(3)));
+
+        Assert.assertFalse(container.containsId(id2));
+        Assert.assertFalse(container.getItemIds().contains(id2));
+
+        Assert.assertNull(container.getItem(id2));
+        Assert.assertEquals(-1, container.indexOfId(id2));
+
+        Assert.assertNotSame(id2, container.lastItemId());
+        Assert.assertSame(id1, container.lastItemId());
+
+        EasyMock.verify(delegate);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void sort_freeformBufferedItems_sortsBufferedItemsLastInOrderAdded()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                connectionPool, "ID");
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        final ArrayList<OrderBy> orderBys = new ArrayList<OrderBy>();
+        delegate.setFilters(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setFilters(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+            public Object answer() throws Throwable {
+                List<OrderBy> orders = (List<OrderBy>) EasyMock
+                        .getCurrentArguments()[0];
+                orderBys.clear();
+                orderBys.addAll(orders);
+                return null;
+            }
+        }).anyTimes();
+        EasyMock.expect(
+                delegate.getQueryString(EasyMock.anyInt(), EasyMock.anyInt()))
+                .andAnswer(new IAnswer<String>() {
+                    public String answer() throws Throwable {
+                        Object[] args = EasyMock.getCurrentArguments();
+                        int offset = (Integer) (args[0]);
+                        int limit = (Integer) (args[1]);
+                        if (AllTests.db == DB.MSSQL) {
+                            SQLGenerator gen = new MSSQLGenerator();
+                            if (orderBys == null || orderBys.isEmpty()) {
+                                List<OrderBy> ob = new ArrayList<OrderBy>();
+                                ob.add(new OrderBy("ID", true));
+                                return gen.generateSelectQuery("people", null,
+                                        ob, offset, limit, null)
+                                        .getQueryString();
+                            } else {
+                                return gen.generateSelectQuery("people", null,
+                                        orderBys, offset, limit, null)
+                                        .getQueryString();
+                            }
+                        } else if (AllTests.db == DB.ORACLE) {
+                            SQLGenerator gen = new OracleGenerator();
+                            if (orderBys == null || orderBys.isEmpty()) {
+                                List<OrderBy> ob = new ArrayList<OrderBy>();
+                                ob.add(new OrderBy("ID", true));
+                                return gen.generateSelectQuery("people", null,
+                                        ob, offset, limit, null)
+                                        .getQueryString();
+                            } else {
+                                return gen.generateSelectQuery("people", null,
+                                        orderBys, offset, limit, null)
+                                        .getQueryString();
+                            }
+                        } else {
+                            StringBuffer query = new StringBuffer(
+                                    "SELECT * FROM people");
+                            if (!orderBys.isEmpty()) {
+                                query.append(" ORDER BY ");
+                                for (OrderBy orderBy : orderBys) {
+                                    query.append("\"" + orderBy.getColumn()
+                                            + "\"");
+                                    if (orderBy.isAscending()) {
+                                        query.append(" ASC");
+                                    } else {
+                                        query.append(" DESC");
+                                    }
+                                }
+                            }
+                            query.append(" LIMIT ").append(limit)
+                                    .append(" OFFSET ").append(offset);
+                            return query.toString();
+                        }
+                    }
+                }).anyTimes();
+        EasyMock.expect(delegate.getCountQuery())
+                .andThrow(new UnsupportedOperationException()).anyTimes();
+        EasyMock.replay(delegate);
+
+        query.setDelegate(delegate);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals("Ville",
+                container.getContainerProperty(container.firstItemId(), "NAME")
+                        .getValue());
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        Object id1 = container.addItem();
+        container.getContainerProperty(id1, "NAME").setValue("Wilbert");
+        Object id2 = container.addItem();
+        container.getContainerProperty(id2, "NAME").setValue("Albert");
+
+        container.sort(new Object[] { "NAME" }, new boolean[] { true });
+
+        // Börje, Kalle, Pelle, Ville, Wilbert, Albert
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.firstItemId(), "NAME")
+                        .getValue());
+        Assert.assertEquals(
+                "Wilbert",
+                container.getContainerProperty(
+                        container.getIdByIndex(container.size() - 2), "NAME")
+                        .getValue());
+        Assert.assertEquals("Albert",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        EasyMock.verify(delegate);
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/TicketTests.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/TicketTests.java
new file mode 100644
index 0000000000..75ab455678
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/TicketTests.java
@@ -0,0 +1,183 @@
+package com.vaadin.data.util.sqlcontainer;
+
+import java.math.BigDecimal;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.easymock.EasyMock;
+import org.easymock.IAnswer;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.filter.Compare.Equal;
+import com.vaadin.data.util.sqlcontainer.SQLContainer;
+import com.vaadin.data.util.sqlcontainer.AllTests.DB;
+import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.query.FreeformQuery;
+import com.vaadin.data.util.sqlcontainer.query.FreeformStatementDelegate;
+import com.vaadin.data.util.sqlcontainer.query.TableQuery;
+import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
+import com.vaadin.data.util.sqlcontainer.query.generator.filter.QueryBuilder;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+public class TicketTests {
+
+    private SimpleJDBCConnectionPool connectionPool;
+
+    @Before
+    public void setUp() throws SQLException {
+        connectionPool = new SimpleJDBCConnectionPool(AllTests.dbDriver,
+                AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 2, 2);
+        DataGenerator.addPeopleToDatabase(connectionPool);
+    }
+
+    @Test
+    public void ticket5867_throwsIllegalState_transactionAlreadyActive()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new FreeformQuery(
+                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
+        Table table = new Table();
+        Window w = new Window();
+        w.addComponent(table);
+        table.setContainerDataSource(container);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void ticket6136_freeform_ageIs18() throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformStatementDelegate delegate = EasyMock
+                .createMock(FreeformStatementDelegate.class);
+        final ArrayList<Filter> filters = new ArrayList<Filter>();
+        delegate.setFilters(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setOrderBy(null);
+        EasyMock.expectLastCall().anyTimes();
+        delegate.setFilters(EasyMock.isA(List.class));
+        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+            public Object answer() throws Throwable {
+                List<Filter> orders = (List<Filter>) EasyMock
+                        .getCurrentArguments()[0];
+                filters.clear();
+                filters.addAll(orders);
+                return null;
+            }
+        }).anyTimes();
+        EasyMock.expect(
+                delegate.getQueryStatement(EasyMock.anyInt(), EasyMock.anyInt()))
+                .andAnswer(new IAnswer<StatementHelper>() {
+                    public StatementHelper answer() throws Throwable {
+                        Object[] args = EasyMock.getCurrentArguments();
+                        int offset = (Integer) (args[0]);
+                        int limit = (Integer) (args[1]);
+                        return FreeformQueryUtil.getQueryWithFilters(filters,
+                                offset, limit);
+                    }
+                }).anyTimes();
+        EasyMock.expect(delegate.getCountStatement())
+                .andAnswer(new IAnswer<StatementHelper>() {
+                    @SuppressWarnings("deprecation")
+                    public StatementHelper answer() throws Throwable {
+                        StatementHelper sh = new StatementHelper();
+                        StringBuffer query = new StringBuffer(
+                                "SELECT COUNT(*) FROM people");
+                        if (!filters.isEmpty()) {
+                            query.append(QueryBuilder.getWhereStringForFilters(
+                                    filters, sh));
+                        }
+                        sh.setQueryString(query.toString());
+                        return sh;
+                    }
+                }).anyTimes();
+
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals(4, container.size());
+        Assert.assertEquals("Börje",
+                container.getContainerProperty(container.lastItemId(), "NAME")
+                        .getValue());
+
+        container.addContainerFilter(new Equal("AGE", 18));
+        // Pelle
+        Assert.assertEquals(1, container.size());
+        Assert.assertEquals("Pelle",
+                container.getContainerProperty(container.firstItemId(), "NAME")
+                        .getValue());
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(new BigDecimal(18), container
+                    .getContainerProperty(container.firstItemId(), "AGE")
+                    .getValue());
+        } else {
+            Assert.assertEquals(
+                    18,
+                    container.getContainerProperty(container.firstItemId(),
+                            "AGE").getValue());
+        }
+
+        EasyMock.verify(delegate);
+    }
+
+    @Test
+    public void ticket6136_table_ageIs18() throws SQLException {
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+        // Ville, Kalle, Pelle, Börje
+        Assert.assertEquals(4, container.size());
+
+        container.addContainerFilter(new Equal("AGE", 18));
+
+        // Pelle
+        Assert.assertEquals(1, container.size());
+        Assert.assertEquals("Pelle",
+                container.getContainerProperty(container.firstItemId(), "NAME")
+                        .getValue());
+        if (AllTests.db == DB.ORACLE) {
+            Assert.assertEquals(new BigDecimal(18), container
+                    .getContainerProperty(container.firstItemId(), "AGE")
+                    .getValue());
+        } else {
+            Assert.assertEquals(
+                    18,
+                    container.getContainerProperty(container.firstItemId(),
+                            "AGE").getValue());
+        }
+    }
+
+    @Test
+    public void ticket7434_getItem_Modified_Changed_Unchanged()
+            throws SQLException {
+        SQLContainer container = new SQLContainer(new TableQuery("people",
+                connectionPool, AllTests.sqlGen));
+
+        Object id = container.firstItemId();
+        Item item = container.getItem(id);
+        String name = (String) item.getItemProperty("NAME").getValue();
+
+        // set a different name
+        item.getItemProperty("NAME").setValue("otherName");
+        Assert.assertEquals("otherName", item.getItemProperty("NAME")
+                .getValue());
+
+        // access the item and reset the name to its old value
+        Item item2 = container.getItem(id);
+        item2.getItemProperty("NAME").setValue(name);
+        Assert.assertEquals(name, item2.getItemProperty("NAME").getValue());
+
+        Item item3 = container.getItem(id);
+        String name3 = (String) item3.getItemProperty("NAME").getValue();
+
+        Assert.assertEquals(name, name3);
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/UtilTest.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/UtilTest.java
new file mode 100644
index 0000000000..d6a6a72300
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/UtilTest.java
@@ -0,0 +1,52 @@
+package com.vaadin.data.util.sqlcontainer;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import com.vaadin.data.util.sqlcontainer.SQLUtil;
+
+public class UtilTest {
+
+    @Test
+    public void escapeSQL_noQuotes_returnsSameString() {
+        Assert.assertEquals("asdf", SQLUtil.escapeSQL("asdf"));
+    }
+
+    @Test
+    public void escapeSQL_singleQuotes_returnsEscapedString() {
+        Assert.assertEquals("O''Brien", SQLUtil.escapeSQL("O'Brien"));
+    }
+
+    @Test
+    public void escapeSQL_severalQuotes_returnsEscapedString() {
+        Assert.assertEquals("asdf''ghjk''qwerty",
+        		SQLUtil.escapeSQL("asdf'ghjk'qwerty"));
+    }
+
+    @Test
+    public void escapeSQL_doubleQuotes_returnsEscapedString() {
+        Assert.assertEquals("asdf\\\"foo", SQLUtil.escapeSQL("asdf\"foo"));
+    }
+
+    @Test
+    public void escapeSQL_multipleDoubleQuotes_returnsEscapedString() {
+        Assert.assertEquals("asdf\\\"foo\\\"bar",
+        		SQLUtil.escapeSQL("asdf\"foo\"bar"));
+    }
+
+    @Test
+    public void escapeSQL_backslashes_returnsEscapedString() {
+        Assert.assertEquals("foo\\\\nbar\\\\r", SQLUtil.escapeSQL("foo\\nbar\\r"));
+    }
+
+    @Test
+    public void escapeSQL_x00_removesX00() {
+        Assert.assertEquals("foobar", SQLUtil.escapeSQL("foo\\x00bar"));
+    }
+
+    @Test
+    public void escapeSQL_x1a_removesX1a() {
+        Assert.assertEquals("foobar", SQLUtil.escapeSQL("foo\\x1abar"));
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/connection/J2EEConnectionPoolTest.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/connection/J2EEConnectionPoolTest.java
new file mode 100644
index 0000000000..7855d2a166
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/connection/J2EEConnectionPoolTest.java
@@ -0,0 +1,111 @@
+package com.vaadin.data.util.sqlcontainer.connection;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.sql.DataSource;
+
+import junit.framework.Assert;
+
+import org.easymock.EasyMock;
+import org.junit.Test;
+
+import com.vaadin.data.util.sqlcontainer.connection.J2EEConnectionPool;
+
+public class J2EEConnectionPoolTest {
+
+    @Test
+    public void reserveConnection_dataSourceSpecified_shouldReturnValidConnection()
+            throws SQLException {
+        Connection connection = EasyMock.createMock(Connection.class);
+        connection.setAutoCommit(false);
+        EasyMock.expectLastCall();
+        DataSource ds = EasyMock.createMock(DataSource.class);
+        ds.getConnection();
+        EasyMock.expectLastCall().andReturn(connection);
+        EasyMock.replay(connection, ds);
+
+        J2EEConnectionPool pool = new J2EEConnectionPool(ds);
+        Connection c = pool.reserveConnection();
+        Assert.assertEquals(connection, c);
+        EasyMock.verify(connection, ds);
+    }
+
+    @Test
+    public void releaseConnection_shouldCloseConnection() throws SQLException {
+        Connection connection = EasyMock.createMock(Connection.class);
+        connection.setAutoCommit(false);
+        EasyMock.expectLastCall();
+        connection.close();
+        EasyMock.expectLastCall();
+        DataSource ds = EasyMock.createMock(DataSource.class);
+        ds.getConnection();
+        EasyMock.expectLastCall().andReturn(connection);
+        EasyMock.replay(connection, ds);
+
+        J2EEConnectionPool pool = new J2EEConnectionPool(ds);
+        Connection c = pool.reserveConnection();
+        Assert.assertEquals(connection, c);
+        pool.releaseConnection(c);
+        EasyMock.verify(connection, ds);
+    }
+
+    @Test
+    public void reserveConnection_dataSourceLookedUp_shouldReturnValidConnection()
+            throws SQLException, NamingException {
+        Connection connection = EasyMock.createMock(Connection.class);
+        connection.setAutoCommit(false);
+        EasyMock.expectLastCall();
+        connection.close();
+        EasyMock.expectLastCall();
+
+        DataSource ds = EasyMock.createMock(DataSource.class);
+        ds.getConnection();
+        EasyMock.expectLastCall().andReturn(connection);
+
+        System.setProperty(
+                "java.naming.factory.initial",
+                "com.vaadin.tests.server.container.sqlcontainer.connection.MockInitialContextFactory");
+        Context context = EasyMock.createMock(Context.class);
+        context.lookup("testDataSource");
+        EasyMock.expectLastCall().andReturn(ds);
+        MockInitialContextFactory.setMockContext(context);
+
+        EasyMock.replay(context, connection, ds);
+
+        J2EEConnectionPool pool = new J2EEConnectionPool("testDataSource");
+        Connection c = pool.reserveConnection();
+        Assert.assertEquals(connection, c);
+        pool.releaseConnection(c);
+        EasyMock.verify(context, connection, ds);
+    }
+
+    @Test(expected = SQLException.class)
+    public void reserveConnection_nonExistantDataSourceLookedUp_shouldFail()
+            throws SQLException, NamingException {
+        System.setProperty("java.naming.factory.initial",
+                "com.vaadin.addon.sqlcontainer.connection.MockInitialContextFactory");
+        Context context = EasyMock.createMock(Context.class);
+        context.lookup("foo");
+        EasyMock.expectLastCall().andThrow(new NamingException("fail"));
+        MockInitialContextFactory.setMockContext(context);
+
+        EasyMock.replay(context);
+
+        J2EEConnectionPool pool = new J2EEConnectionPool("foo");
+        pool.reserveConnection();
+        EasyMock.verify(context);
+    }
+
+    @Test
+    public void releaseConnection_null_shouldSucceed() throws SQLException {
+        DataSource ds = EasyMock.createMock(DataSource.class);
+        EasyMock.replay(ds);
+
+        J2EEConnectionPool pool = new J2EEConnectionPool(ds);
+        pool.releaseConnection(null);
+        EasyMock.verify(ds);
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/connection/MockInitialContextFactory.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/connection/MockInitialContextFactory.java
new file mode 100644
index 0000000000..19019eed0b
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/connection/MockInitialContextFactory.java
@@ -0,0 +1,31 @@
+package com.vaadin.data.util.sqlcontainer.connection;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.spi.InitialContextFactory;
+
+import org.junit.Test;
+
+/**
+ * Provides a JNDI initial context factory for the MockContext.
+ */
+public class MockInitialContextFactory implements InitialContextFactory {
+    private static Context mockCtx = null;
+    
+    @Test
+	public void testDummy(){
+		// Added dummy test so JUnit will not complain about "No runnable methods".
+	}
+
+    public static void setMockContext(Context ctx) {
+        mockCtx = ctx;
+    }
+
+    public Context getInitialContext(java.util.Hashtable<?, ?> environment)
+            throws NamingException {
+        if (mockCtx == null) {
+            throw new IllegalStateException("mock context was not set.");
+        }
+        return mockCtx;
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/connection/SimpleJDBCConnectionPoolTest.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/connection/SimpleJDBCConnectionPoolTest.java
new file mode 100644
index 0000000000..147319643d
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/connection/SimpleJDBCConnectionPoolTest.java
@@ -0,0 +1,172 @@
+package com.vaadin.data.util.sqlcontainer.connection;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import junit.framework.Assert;
+
+import org.easymock.EasyMock;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.vaadin.data.util.sqlcontainer.AllTests;
+import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
+
+public class SimpleJDBCConnectionPoolTest {
+    private JDBCConnectionPool connectionPool;
+
+    @Before
+    public void setUp() throws SQLException {
+        connectionPool = new SimpleJDBCConnectionPool(AllTests.dbDriver,
+                AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 2, 2);
+    }
+
+    @Test
+    public void reserveConnection_reserveNewConnection_returnsConnection()
+            throws SQLException {
+        Connection conn = connectionPool.reserveConnection();
+        Assert.assertNotNull(conn);
+    }
+
+    @Test
+    public void releaseConnection_releaseUnused_shouldNotThrowException()
+            throws SQLException {
+        Connection conn = connectionPool.reserveConnection();
+        connectionPool.releaseConnection(conn);
+        Assert.assertFalse(conn.isClosed());
+    }
+
+    @Test(expected = SQLException.class)
+    public void reserveConnection_noConnectionsLeft_shouldFail()
+            throws SQLException {
+        try {
+            connectionPool.reserveConnection();
+            connectionPool.reserveConnection();
+        } catch (SQLException e) {
+            e.printStackTrace();
+            Assert.fail("Exception before all connections used! "
+                    + e.getMessage());
+        }
+
+        connectionPool.reserveConnection();
+        Assert.fail("Reserving connection didn't fail even though no connections are available!");
+    }
+
+    @Test
+    public void reserveConnection_oneConnectionLeft_returnsConnection()
+            throws SQLException {
+        try {
+            connectionPool.reserveConnection();
+        } catch (SQLException e) {
+            e.printStackTrace();
+            Assert.fail("Exception before all connections used! "
+                    + e.getMessage());
+        }
+
+        Connection conn = connectionPool.reserveConnection();
+        Assert.assertNotNull(conn);
+    }
+
+    @Test
+    public void reserveConnection_oneConnectionJustReleased_returnsConnection()
+            throws SQLException {
+        Connection conn2 = null;
+        try {
+            connectionPool.reserveConnection();
+            conn2 = connectionPool.reserveConnection();
+        } catch (SQLException e) {
+            e.printStackTrace();
+            Assert.fail("Exception before all connections used! "
+                    + e.getMessage());
+        }
+
+        connectionPool.releaseConnection(conn2);
+
+        connectionPool.reserveConnection();
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void construct_allParametersNull_shouldFail() throws SQLException {
+        SimpleJDBCConnectionPool cp = new SimpleJDBCConnectionPool(null, null,
+                null, null);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void construct_onlyDriverNameGiven_shouldFail() throws SQLException {
+        SimpleJDBCConnectionPool cp = new SimpleJDBCConnectionPool(
+                AllTests.dbDriver, null, null, null);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void construct_onlyDriverNameAndUrlGiven_shouldFail()
+            throws SQLException {
+        SimpleJDBCConnectionPool cp = new SimpleJDBCConnectionPool(
+                AllTests.dbDriver, AllTests.dbURL, null, null);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void construct_onlyDriverNameAndUrlAndUserGiven_shouldFail()
+            throws SQLException {
+        SimpleJDBCConnectionPool cp = new SimpleJDBCConnectionPool(
+                AllTests.dbDriver, AllTests.dbURL, AllTests.dbUser, null);
+    }
+
+    @Test(expected = RuntimeException.class)
+    public void construct_nonExistingDriver_shouldFail() throws SQLException {
+        SimpleJDBCConnectionPool cp = new SimpleJDBCConnectionPool("foo",
+                AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd);
+    }
+
+    @Test
+    public void reserveConnection_newConnectionOpened_shouldSucceed()
+            throws SQLException {
+        connectionPool = new SimpleJDBCConnectionPool(AllTests.dbDriver,
+                AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 0, 2);
+        Connection c = connectionPool.reserveConnection();
+        Assert.assertNotNull(c);
+    }
+
+    @Test
+    public void releaseConnection_nullConnection_shouldDoNothing() {
+        connectionPool.releaseConnection(null);
+    }
+
+    @Test
+    public void releaseConnection_failingRollback_shouldCallClose()
+            throws SQLException {
+        Connection c = EasyMock.createMock(Connection.class);
+        c.getAutoCommit();
+        EasyMock.expectLastCall().andReturn(false);
+        c.rollback();
+        EasyMock.expectLastCall().andThrow(new SQLException("Rollback failed"));
+        c.close();
+        EasyMock.expectLastCall().atLeastOnce();
+        EasyMock.replay(c);
+        // make sure the connection pool is initialized
+        connectionPool.reserveConnection();
+        connectionPool.releaseConnection(c);
+        EasyMock.verify(c);
+    }
+
+    @Test
+    public void destroy_shouldCloseAllConnections() throws SQLException {
+        Connection c1 = connectionPool.reserveConnection();
+        Connection c2 = connectionPool.reserveConnection();
+        connectionPool.destroy();
+        Assert.assertTrue(c1.isClosed());
+        Assert.assertTrue(c2.isClosed());
+    }
+
+    @Test
+    public void destroy_shouldCloseAllConnections2() throws SQLException {
+        Connection c1 = connectionPool.reserveConnection();
+        Connection c2 = connectionPool.reserveConnection();
+        connectionPool.releaseConnection(c1);
+        connectionPool.releaseConnection(c2);
+        connectionPool.destroy();
+        Assert.assertTrue(c1.isClosed());
+        Assert.assertTrue(c2.isClosed());
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/filters/BetweenTest.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/filters/BetweenTest.java
new file mode 100644
index 0000000000..5faa859b67
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/filters/BetweenTest.java
@@ -0,0 +1,122 @@
+package com.vaadin.data.util.sqlcontainer.filters;
+
+import junit.framework.Assert;
+
+import org.easymock.EasyMock;
+import org.junit.Test;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.util.filter.Between;
+
+public class BetweenTest {
+
+    private Item itemWithPropertyValue(Object propertyId, Object value) {
+        Property property = EasyMock.createMock(Property.class);
+        property.getValue();
+        EasyMock.expectLastCall().andReturn(value).anyTimes();
+        EasyMock.replay(property);
+
+        Item item = EasyMock.createMock(Item.class);
+        item.getItemProperty(propertyId);
+        EasyMock.expectLastCall().andReturn(property).anyTimes();
+        EasyMock.replay(item);
+        return item;
+    }
+
+    @Test
+    public void passesFilter_valueIsInRange_shouldBeTrue() {
+        Item item = itemWithPropertyValue("foo", 15);
+        Between between = new Between("foo", 1, 30);
+        Assert.assertTrue(between.passesFilter("foo", item));
+    }
+
+    @Test
+    public void passesFilter_valueIsOutOfRange_shouldBeFalse() {
+        Item item = itemWithPropertyValue("foo", 15);
+        Between between = new Between("foo", 0, 2);
+        Assert.assertFalse(between.passesFilter("foo", item));
+    }
+
+    @Test
+    public void passesFilter_valueNotComparable_shouldBeFalse() {
+        Item item = itemWithPropertyValue("foo", new Object());
+        Between between = new Between("foo", 0, 2);
+        Assert.assertFalse(between.passesFilter("foo", item));
+    }
+
+    @Test
+    public void appliesToProperty_differentProperties_shoudlBeFalse() {
+        Between between = new Between("foo", 0, 2);
+        Assert.assertFalse(between.appliesToProperty("bar"));
+    }
+
+    @Test
+    public void appliesToProperty_sameProperties_shouldBeTrue() {
+        Between between = new Between("foo", 0, 2);
+        Assert.assertTrue(between.appliesToProperty("foo"));
+    }
+
+    @Test
+    public void hashCode_equalInstances_shouldBeEqual() {
+        Between b1 = new Between("foo", 0, 2);
+        Between b2 = new Between("foo", 0, 2);
+        Assert.assertEquals(b1.hashCode(), b2.hashCode());
+    }
+
+    @Test
+    public void equals_differentObjects_shouldBeFalse() {
+        Between b1 = new Between("foo", 0, 2);
+        Object obj = new Object();
+        Assert.assertFalse(b1.equals(obj));
+    }
+
+    @Test
+    public void equals_sameInstance_shouldBeTrue() {
+        Between b1 = new Between("foo", 0, 2);
+        Between b2 = b1;
+        Assert.assertTrue(b1.equals(b2));
+    }
+
+    @Test
+    public void equals_equalInstances_shouldBeTrue() {
+        Between b1 = new Between("foo", 0, 2);
+        Between b2 = new Between("foo", 0, 2);
+        Assert.assertTrue(b1.equals(b2));
+    }
+
+    @Test
+    public void equals_equalInstances2_shouldBeTrue() {
+        Between b1 = new Between(null, null, null);
+        Between b2 = new Between(null, null, null);
+        Assert.assertTrue(b1.equals(b2));
+    }
+
+    @Test
+    public void equals_secondValueDiffers_shouldBeFalse() {
+        Between b1 = new Between("foo", 0, 1);
+        Between b2 = new Between("foo", 0, 2);
+        Assert.assertFalse(b1.equals(b2));
+    }
+
+    @Test
+    public void equals_firstAndSecondValueDiffers_shouldBeFalse() {
+        Between b1 = new Between("foo", 0, null);
+        Between b2 = new Between("foo", 1, 2);
+        Assert.assertFalse(b1.equals(b2));
+    }
+
+    @Test
+    public void equals_propertyAndFirstAndSecondValueDiffers_shouldBeFalse() {
+        Between b1 = new Between("foo", null, 1);
+        Between b2 = new Between("bar", 1, 2);
+        Assert.assertFalse(b1.equals(b2));
+    }
+
+    @Test
+    public void equals_propertiesDiffer_shouldBeFalse() {
+        Between b1 = new Between(null, 0, 1);
+        Between b2 = new Between("bar", 0, 1);
+        Assert.assertFalse(b1.equals(b2));
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/filters/LikeTest.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/filters/LikeTest.java
new file mode 100644
index 0000000000..f1130aad80
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/filters/LikeTest.java
@@ -0,0 +1,229 @@
+package com.vaadin.data.util.sqlcontainer.filters;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.data.util.PropertysetItem;
+import com.vaadin.data.util.filter.Like;
+
+public class LikeTest {
+
+    @Test
+    public void passesFilter_valueIsNotStringType_shouldFail() {
+        Like like = new Like("test", "%foo%");
+
+        Item item = new PropertysetItem();
+        item.addItemProperty("test", new ObjectProperty<Integer>(5));
+
+        Assert.assertFalse(like.passesFilter("id", item));
+    }
+
+    @Test
+    public void passesFilter_containsLikeQueryOnStringContainingValue_shouldSucceed() {
+        Like like = new Like("test", "%foo%");
+
+        Item item = new PropertysetItem();
+        item.addItemProperty("test", new ObjectProperty<String>("asdfooghij"));
+
+        Assert.assertTrue(like.passesFilter("id", item));
+    }
+
+    @Test
+    public void passesFilter_containsLikeQueryOnStringContainingValueCaseInsensitive_shouldSucceed() {
+        Like like = new Like("test", "%foo%");
+        like.setCaseSensitive(false);
+
+        Item item = new PropertysetItem();
+        item.addItemProperty("test", new ObjectProperty<String>("asdfOOghij"));
+
+        Assert.assertTrue(like.passesFilter("id", item));
+    }
+
+    @Test
+    public void passesFilter_containsLikeQueryOnStringContainingValueConstructedCaseInsensitive_shouldSucceed() {
+        Like like = new Like("test", "%foo%", false);
+
+        Item item = new PropertysetItem();
+        item.addItemProperty("test", new ObjectProperty<String>("asdfOOghij"));
+
+        Assert.assertTrue(like.passesFilter("id", item));
+    }
+
+    @Test
+    public void passesFilter_containsLikeQueryOnStringNotContainingValue_shouldFail() {
+        Like like = new Like("test", "%foo%");
+
+        Item item = new PropertysetItem();
+        item.addItemProperty("test", new ObjectProperty<String>("asdbarghij"));
+
+        Assert.assertFalse(like.passesFilter("id", item));
+    }
+
+    @Test
+    public void passesFilter_containsLikeQueryOnStringExactlyEqualToValue_shouldSucceed() {
+        Like like = new Like("test", "%foo%");
+
+        Item item = new PropertysetItem();
+        item.addItemProperty("test", new ObjectProperty<String>("foo"));
+
+        Assert.assertTrue(like.passesFilter("id", item));
+    }
+
+    @Test
+    public void passesFilter_containsLikeQueryOnStringEqualToValueMinusOneCharAtTheEnd_shouldFail() {
+        Like like = new Like("test", "%foo%");
+
+        Item item = new PropertysetItem();
+        item.addItemProperty("test", new ObjectProperty<String>("fo"));
+
+        Assert.assertFalse(like.passesFilter("id", item));
+    }
+
+    @Test
+    public void passesFilter_beginsWithLikeQueryOnStringBeginningWithValue_shouldSucceed() {
+        Like like = new Like("test", "foo%");
+
+        Item item = new PropertysetItem();
+        item.addItemProperty("test", new ObjectProperty<String>("foobar"));
+
+        Assert.assertTrue(like.passesFilter("id", item));
+    }
+
+    @Test
+    public void passesFilter_beginsWithLikeQueryOnStringNotBeginningWithValue_shouldFail() {
+        Like like = new Like("test", "foo%");
+
+        Item item = new PropertysetItem();
+        item.addItemProperty("test", new ObjectProperty<String>("barfoo"));
+
+        Assert.assertFalse(like.passesFilter("id", item));
+    }
+
+    @Test
+    public void passesFilter_endsWithLikeQueryOnStringEndingWithValue_shouldSucceed() {
+        Like like = new Like("test", "%foo");
+
+        Item item = new PropertysetItem();
+        item.addItemProperty("test", new ObjectProperty<String>("barfoo"));
+
+        Assert.assertTrue(like.passesFilter("id", item));
+    }
+
+    @Test
+    public void passesFilter_endsWithLikeQueryOnStringNotEndingWithValue_shouldFail() {
+        Like like = new Like("test", "%foo");
+
+        Item item = new PropertysetItem();
+        item.addItemProperty("test", new ObjectProperty<String>("foobar"));
+
+        Assert.assertFalse(like.passesFilter("id", item));
+    }
+
+    @Test
+    public void passesFilter_startsWithAndEndsWithOnMatchingValue_shouldSucceed() {
+        Like like = new Like("test", "foo%bar");
+
+        Item item = new PropertysetItem();
+        item.addItemProperty("test", new ObjectProperty<String>("fooASDFbar"));
+
+        Assert.assertTrue(like.passesFilter("id", item));
+    }
+
+    @Test
+    public void appliesToProperty_valueIsProperty_shouldBeTrue() {
+        Like like = new Like("test", "%foo");
+        Assert.assertTrue(like.appliesToProperty("test"));
+    }
+
+    @Test
+    public void appliesToProperty_valueIsNotProperty_shouldBeFalse() {
+        Like like = new Like("test", "%foo");
+        Assert.assertFalse(like.appliesToProperty("bar"));
+    }
+
+    @Test
+    public void equals_sameInstances_shouldBeTrue() {
+        Like like1 = new Like("test", "%foo");
+        Like like2 = like1;
+        Assert.assertTrue(like1.equals(like2));
+    }
+
+    @Test
+    public void equals_twoEqualInstances_shouldBeTrue() {
+        Like like1 = new Like("test", "foo");
+        Like like2 = new Like("test", "foo");
+        Assert.assertTrue(like1.equals(like2));
+    }
+
+    @Test
+    public void equals_differentValues_shouldBeFalse() {
+        Like like1 = new Like("test", "foo");
+        Like like2 = new Like("test", "bar");
+        Assert.assertFalse(like1.equals(like2));
+    }
+
+    @Test
+    public void equals_differentProperties_shouldBeFalse() {
+        Like like1 = new Like("foo", "test");
+        Like like2 = new Like("bar", "test");
+        Assert.assertFalse(like1.equals(like2));
+    }
+
+    @Test
+    public void equals_differentPropertiesAndValues_shouldBeFalse() {
+        Like like1 = new Like("foo", "bar");
+        Like like2 = new Like("baz", "zomg");
+        Assert.assertFalse(like1.equals(like2));
+    }
+
+    @Test
+    public void equals_differentClasses_shouldBeFalse() {
+        Like like1 = new Like("foo", "bar");
+        Object obj = new Object();
+        Assert.assertFalse(like1.equals(obj));
+    }
+
+    @Test
+    public void equals_bothHaveNullProperties_shouldBeTrue() {
+        Like like1 = new Like(null, "foo");
+        Like like2 = new Like(null, "foo");
+        Assert.assertTrue(like1.equals(like2));
+    }
+
+    @Test
+    public void equals_bothHaveNullValues_shouldBeTrue() {
+        Like like1 = new Like("foo", null);
+        Like like2 = new Like("foo", null);
+        Assert.assertTrue(like1.equals(like2));
+    }
+
+    @Test
+    public void equals_onePropertyIsNull_shouldBeFalse() {
+        Like like1 = new Like(null, "bar");
+        Like like2 = new Like("foo", "baz");
+        Assert.assertFalse(like1.equals(like2));
+    }
+
+    @Test
+    public void equals_oneValueIsNull_shouldBeFalse() {
+        Like like1 = new Like("foo", null);
+        Like like2 = new Like("baz", "bar");
+        Assert.assertFalse(like1.equals(like2));
+    }
+
+    @Test
+    public void hashCode_equalInstances_shouldBeEqual() {
+        Like like1 = new Like("test", "foo");
+        Like like2 = new Like("test", "foo");
+        Assert.assertEquals(like1.hashCode(), like2.hashCode());
+    }
+
+    @Test
+    public void hashCode_differentPropertiesAndValues_shouldNotEqual() {
+        Like like1 = new Like("foo", "bar");
+        Like like2 = new Like("baz", "zomg");
+        Assert.assertTrue(like1.hashCode() != like2.hashCode());
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/generator/SQLGeneratorsTest.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/generator/SQLGeneratorsTest.java
new file mode 100644
index 0000000000..58dcdb3227
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/generator/SQLGeneratorsTest.java
@@ -0,0 +1,241 @@
+package com.vaadin.data.util.sqlcontainer.generator;
+
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.util.filter.Like;
+import com.vaadin.data.util.filter.Or;
+import com.vaadin.data.util.sqlcontainer.AllTests;
+import com.vaadin.data.util.sqlcontainer.DataGenerator;
+import com.vaadin.data.util.sqlcontainer.RowItem;
+import com.vaadin.data.util.sqlcontainer.SQLContainer;
+import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.query.OrderBy;
+import com.vaadin.data.util.sqlcontainer.query.TableQuery;
+import com.vaadin.data.util.sqlcontainer.query.generator.DefaultSQLGenerator;
+import com.vaadin.data.util.sqlcontainer.query.generator.MSSQLGenerator;
+import com.vaadin.data.util.sqlcontainer.query.generator.OracleGenerator;
+import com.vaadin.data.util.sqlcontainer.query.generator.SQLGenerator;
+import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
+
+public class SQLGeneratorsTest {
+    private JDBCConnectionPool connectionPool;
+
+    @Before
+    public void setUp() throws SQLException {
+
+        try {
+            connectionPool = new SimpleJDBCConnectionPool(AllTests.dbDriver,
+                    AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 2, 2);
+        } catch (SQLException e) {
+            e.printStackTrace();
+            Assert.fail(e.getMessage());
+        }
+
+        DataGenerator.addPeopleToDatabase(connectionPool);
+    }
+
+    @After
+    public void tearDown() {
+        if (connectionPool != null) {
+            connectionPool.destroy();
+        }
+    }
+
+    @Test
+    public void generateSelectQuery_basicQuery_shouldSucceed() {
+        SQLGenerator sg = new DefaultSQLGenerator();
+        StatementHelper sh = sg.generateSelectQuery("TABLE", null, null, 0, 0,
+                null);
+        Assert.assertEquals(sh.getQueryString(), "SELECT * FROM TABLE");
+    }
+
+    @Test
+    public void generateSelectQuery_pagingAndColumnsSet_shouldSucceed() {
+        SQLGenerator sg = new DefaultSQLGenerator();
+        StatementHelper sh = sg.generateSelectQuery("TABLE", null, null, 4, 8,
+                "COL1, COL2, COL3");
+        Assert.assertEquals(sh.getQueryString(),
+                "SELECT COL1, COL2, COL3 FROM TABLE LIMIT 8 OFFSET 4");
+    }
+
+    /**
+     * Note: Only tests one kind of filter and ordering.
+     */
+    @Test
+    public void generateSelectQuery_filtersAndOrderingSet_shouldSucceed() {
+        SQLGenerator sg = new DefaultSQLGenerator();
+        List<com.vaadin.data.Container.Filter> f = new ArrayList<Filter>();
+        f.add(new Like("name", "%lle"));
+        List<OrderBy> ob = Arrays.asList(new OrderBy("name", true));
+        StatementHelper sh = sg.generateSelectQuery("TABLE", f, ob, 0, 0, null);
+        Assert.assertEquals(sh.getQueryString(),
+                "SELECT * FROM TABLE WHERE \"name\" LIKE ? ORDER BY \"name\" ASC");
+    }
+
+    @Test
+    public void generateSelectQuery_filtersAndOrderingSet_exclusiveFilteringMode_shouldSucceed() {
+        SQLGenerator sg = new DefaultSQLGenerator();
+        List<Filter> f = new ArrayList<Filter>();
+        f.add(new Or(new Like("name", "%lle"), new Like("name", "vi%")));
+        List<OrderBy> ob = Arrays.asList(new OrderBy("name", true));
+        StatementHelper sh = sg.generateSelectQuery("TABLE", f, ob, 0, 0, null);
+        // TODO
+        Assert.assertEquals(sh.getQueryString(),
+                "SELECT * FROM TABLE WHERE (\"name\" LIKE ? "
+                        + "OR \"name\" LIKE ?) ORDER BY \"name\" ASC");
+    }
+
+    @Test
+    public void generateDeleteQuery_basicQuery_shouldSucceed()
+            throws SQLException {
+        /*
+         * No need to run this for Oracle/MSSQL generators since the
+         * DefaultSQLGenerator method would be called anyway.
+         */
+        if (AllTests.sqlGen instanceof MSSQLGenerator
+                || AllTests.sqlGen instanceof OracleGenerator) {
+            return;
+        }
+        SQLGenerator sg = AllTests.sqlGen;
+        TableQuery query = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(query);
+
+        StatementHelper sh = sg.generateDeleteQuery(
+                "people",
+                query.getPrimaryKeyColumns(),
+                null,
+                (RowItem) container.getItem(container.getItemIds().iterator()
+                        .next()));
+        Assert.assertEquals("DELETE FROM people WHERE \"ID\" = ?",
+                sh.getQueryString());
+    }
+
+    @Test
+    public void generateUpdateQuery_basicQuery_shouldSucceed()
+            throws SQLException {
+        /*
+         * No need to run this for Oracle/MSSQL generators since the
+         * DefaultSQLGenerator method would be called anyway.
+         */
+        if (AllTests.sqlGen instanceof MSSQLGenerator
+                || AllTests.sqlGen instanceof OracleGenerator) {
+            return;
+        }
+        SQLGenerator sg = new DefaultSQLGenerator();
+        TableQuery query = new TableQuery("people", connectionPool);
+        SQLContainer container = new SQLContainer(query);
+
+        RowItem ri = (RowItem) container.getItem(container.getItemIds()
+                .iterator().next());
+        ri.getItemProperty("NAME").setValue("Viljami");
+
+        StatementHelper sh = sg.generateUpdateQuery("people", ri);
+        Assert.assertTrue("UPDATE people SET \"NAME\" = ?, \"AGE\" = ? WHERE \"ID\" = ?"
+                .equals(sh.getQueryString())
+                || "UPDATE people SET \"AGE\" = ?, \"NAME\" = ? WHERE \"ID\" = ?"
+                        .equals(sh.getQueryString()));
+    }
+
+    @Test
+    public void generateInsertQuery_basicQuery_shouldSucceed()
+            throws SQLException {
+        /*
+         * No need to run this for Oracle/MSSQL generators since the
+         * DefaultSQLGenerator method would be called anyway.
+         */
+        if (AllTests.sqlGen instanceof MSSQLGenerator
+                || AllTests.sqlGen instanceof OracleGenerator) {
+            return;
+        }
+        SQLGenerator sg = new DefaultSQLGenerator();
+        TableQuery query = new TableQuery("people", connectionPool);
+        SQLContainer container = new SQLContainer(query);
+
+        RowItem ri = (RowItem) container.getItem(container.addItem());
+        ri.getItemProperty("NAME").setValue("Viljami");
+
+        StatementHelper sh = sg.generateInsertQuery("people", ri);
+
+        Assert.assertTrue("INSERT INTO people (\"NAME\", \"AGE\") VALUES (?, ?)"
+                .equals(sh.getQueryString())
+                || "INSERT INTO people (\"AGE\", \"NAME\") VALUES (?, ?)"
+                        .equals(sh.getQueryString()));
+    }
+
+    @Test
+    public void generateComplexSelectQuery_forOracle_shouldSucceed()
+            throws SQLException {
+        SQLGenerator sg = new OracleGenerator();
+        List<Filter> f = new ArrayList<Filter>();
+        f.add(new Like("name", "%lle"));
+        List<OrderBy> ob = Arrays.asList(new OrderBy("name", true));
+        StatementHelper sh = sg.generateSelectQuery("TABLE", f, ob, 4, 8,
+                "NAME, ID");
+        Assert.assertEquals(
+                "SELECT * FROM (SELECT x.*, ROWNUM AS \"rownum\" FROM"
+                        + " (SELECT NAME, ID FROM TABLE WHERE \"name\" LIKE ?"
+                        + " ORDER BY \"name\" ASC) x) WHERE \"rownum\" BETWEEN 5 AND 12",
+                sh.getQueryString());
+    }
+
+    @Test
+    public void generateComplexSelectQuery_forMSSQL_shouldSucceed()
+            throws SQLException {
+        SQLGenerator sg = new MSSQLGenerator();
+        List<Filter> f = new ArrayList<Filter>();
+        f.add(new Like("name", "%lle"));
+        List<OrderBy> ob = Arrays.asList(new OrderBy("name", true));
+        StatementHelper sh = sg.generateSelectQuery("TABLE", f, ob, 4, 8,
+                "NAME, ID");
+        Assert.assertEquals(sh.getQueryString(),
+                "SELECT * FROM (SELECT row_number() OVER "
+                        + "( ORDER BY \"name\" ASC) AS rownum, NAME, ID "
+                        + "FROM TABLE WHERE \"name\" LIKE ?) "
+                        + "AS a WHERE a.rownum BETWEEN 5 AND 12");
+    }
+
+    @Test
+    public void generateComplexSelectQuery_forOracle_exclusiveFilteringMode_shouldSucceed()
+            throws SQLException {
+        SQLGenerator sg = new OracleGenerator();
+        List<Filter> f = new ArrayList<Filter>();
+        f.add(new Or(new Like("name", "%lle"), new Like("name", "vi%")));
+        List<OrderBy> ob = Arrays.asList(new OrderBy("name", true));
+        StatementHelper sh = sg.generateSelectQuery("TABLE", f, ob, 4, 8,
+                "NAME, ID");
+        Assert.assertEquals(
+                sh.getQueryString(),
+                "SELECT * FROM (SELECT x.*, ROWNUM AS \"rownum\" FROM"
+                        + " (SELECT NAME, ID FROM TABLE WHERE (\"name\" LIKE ?"
+                        + " OR \"name\" LIKE ?) "
+                        + "ORDER BY \"name\" ASC) x) WHERE \"rownum\" BETWEEN 5 AND 12");
+    }
+
+    @Test
+    public void generateComplexSelectQuery_forMSSQL_exclusiveFilteringMode_shouldSucceed()
+            throws SQLException {
+        SQLGenerator sg = new MSSQLGenerator();
+        List<Filter> f = new ArrayList<Filter>();
+        f.add(new Or(new Like("name", "%lle"), new Like("name", "vi%")));
+        List<OrderBy> ob = Arrays.asList(new OrderBy("name", true));
+        StatementHelper sh = sg.generateSelectQuery("TABLE", f, ob, 4, 8,
+                "NAME, ID");
+        Assert.assertEquals(sh.getQueryString(),
+                "SELECT * FROM (SELECT row_number() OVER "
+                        + "( ORDER BY \"name\" ASC) AS rownum, NAME, ID "
+                        + "FROM TABLE WHERE (\"name\" LIKE ? "
+                        + "OR \"name\" LIKE ?)) "
+                        + "AS a WHERE a.rownum BETWEEN 5 AND 12");
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/query/FreeformQueryTest.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/query/FreeformQueryTest.java
new file mode 100644
index 0000000000..9b38655186
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/query/FreeformQueryTest.java
@@ -0,0 +1,897 @@
+package com.vaadin.data.util.sqlcontainer.query;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.easymock.EasyMock;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.util.filter.Like;
+import com.vaadin.data.util.sqlcontainer.AllTests;
+import com.vaadin.data.util.sqlcontainer.DataGenerator;
+import com.vaadin.data.util.sqlcontainer.RowId;
+import com.vaadin.data.util.sqlcontainer.RowItem;
+import com.vaadin.data.util.sqlcontainer.SQLContainer;
+import com.vaadin.data.util.sqlcontainer.AllTests.DB;
+import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.query.FreeformQuery;
+import com.vaadin.data.util.sqlcontainer.query.FreeformQueryDelegate;
+import com.vaadin.data.util.sqlcontainer.query.OrderBy;
+
+public class FreeformQueryTest {
+
+    private static final int offset = AllTests.offset;
+    private JDBCConnectionPool connectionPool;
+
+    @Before
+    public void setUp() throws SQLException {
+
+        try {
+            connectionPool = new SimpleJDBCConnectionPool(AllTests.dbDriver,
+                    AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 2, 2);
+        } catch (SQLException e) {
+            e.printStackTrace();
+            Assert.fail(e.getMessage());
+        }
+
+        DataGenerator.addPeopleToDatabase(connectionPool);
+    }
+
+    @After
+    public void tearDown() {
+        if (connectionPool != null) {
+            connectionPool.destroy();
+        }
+    }
+
+    @Test
+    public void construction_legalParameters_shouldSucceed() {
+        FreeformQuery ffQuery = new FreeformQuery("SELECT * FROM foo",
+                Arrays.asList("ID"), connectionPool);
+        Assert.assertArrayEquals(new Object[] { "ID" }, ffQuery
+                .getPrimaryKeyColumns().toArray());
+
+        Assert.assertEquals("SELECT * FROM foo", ffQuery.getQueryString());
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void construction_emptyQueryString_shouldFail() {
+        new FreeformQuery("", Arrays.asList("ID"), connectionPool);
+    }
+
+    @Test
+    public void construction_nullPrimaryKeys_shouldSucceed() {
+        new FreeformQuery("SELECT * FROM foo", null, connectionPool);
+    }
+
+    @Test
+    public void construction_nullPrimaryKeys2_shouldSucceed() {
+        new FreeformQuery("SELECT * FROM foo", connectionPool);
+    }
+
+    @Test
+    public void construction_emptyPrimaryKeys_shouldSucceed() {
+        new FreeformQuery("SELECT * FROM foo", connectionPool);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void construction_emptyStringsInPrimaryKeys_shouldFail() {
+        new FreeformQuery("SELECT * FROM foo", Arrays.asList(""),
+                connectionPool);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void construction_nullConnectionPool_shouldFail() {
+        new FreeformQuery("SELECT * FROM foo", Arrays.asList("ID"), null);
+    }
+
+    @Test
+    public void getCount_simpleQuery_returnsFour() throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        Assert.assertEquals(4, query.getCount());
+    }
+
+    @Test(expected = SQLException.class)
+    public void getCount_illegalQuery_shouldThrowSQLException()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM asdf",
+                Arrays.asList("ID"), connectionPool);
+        query.getResults(0, 50);
+    }
+
+    @Test
+    public void getCount_simpleQueryTwoMorePeopleAdded_returnsSix()
+            throws SQLException {
+        // Add some people
+        Connection conn = connectionPool.reserveConnection();
+        Statement statement = conn.createStatement();
+        if (AllTests.db == DB.MSSQL) {
+            statement.executeUpdate("insert into people values('Bengt', 30)");
+            statement.executeUpdate("insert into people values('Ingvar', 50)");
+        } else {
+            statement
+                    .executeUpdate("insert into people values(default, 'Bengt', 30)");
+            statement
+                    .executeUpdate("insert into people values(default, 'Ingvar', 50)");
+        }
+        statement.close();
+        conn.commit();
+        connectionPool.releaseConnection(conn);
+
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+
+        Assert.assertEquals(6, query.getCount());
+    }
+
+    @Test
+    public void getCount_moreComplexQuery_returnsThree() throws SQLException {
+        FreeformQuery query = new FreeformQuery(
+                "SELECT * FROM people WHERE \"NAME\" LIKE '%lle'",
+                connectionPool, new String[] { "ID" });
+        Assert.assertEquals(3, query.getCount());
+    }
+
+    @Test
+    public void getCount_normalState_releasesConnection() throws SQLException {
+        FreeformQuery query = new FreeformQuery(
+                "SELECT * FROM people WHERE \"NAME\" LIKE '%lle'",
+                connectionPool, "ID");
+        query.getCount();
+        query.getCount();
+        Assert.assertNotNull(connectionPool.reserveConnection());
+    }
+
+    @Test
+    public void getCount_delegateRegistered_shouldUseDelegate()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.expect(delegate.getCountQuery()).andReturn(
+                "SELECT COUNT(*) FROM people WHERE \"NAME\" LIKE '%lle'");
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+        Assert.assertEquals(3, query.getCount());
+        EasyMock.verify(delegate);
+    }
+
+    @Test
+    public void getCount_delegateRegisteredZeroRows_returnsZero()
+            throws SQLException {
+        DataGenerator.createGarbage(connectionPool);
+        FreeformQuery query = new FreeformQuery("SELECT * FROM GARBAGE",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.expect(delegate.getCountQuery()).andReturn(
+                "SELECT COUNT(*) FROM GARBAGE");
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+        Assert.assertEquals(0, query.getCount());
+        EasyMock.verify(delegate);
+    }
+
+    @Test
+    public void getResults_simpleQuery_returnsFourRecords() throws SQLException {
+        FreeformQuery query = new FreeformQuery(
+                "SELECT \"ID\",\"NAME\" FROM people", Arrays.asList("ID"),
+                connectionPool);
+        query.beginTransaction();
+        ResultSet rs = query.getResults(0, 0);
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(0 + offset, rs.getInt(1));
+        Assert.assertEquals("Ville", rs.getString(2));
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(1 + offset, rs.getInt(1));
+        Assert.assertEquals("Kalle", rs.getString(2));
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(2 + offset, rs.getInt(1));
+        Assert.assertEquals("Pelle", rs.getString(2));
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(3 + offset, rs.getInt(1));
+        Assert.assertEquals("Börje", rs.getString(2));
+
+        Assert.assertFalse(rs.next());
+        query.commit();
+    }
+
+    @Test
+    public void getResults_moreComplexQuery_returnsThreeRecords()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery(
+                "SELECT * FROM people WHERE \"NAME\" LIKE '%lle'",
+                Arrays.asList("ID"), connectionPool);
+        query.beginTransaction();
+        ResultSet rs = query.getResults(0, 0);
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(0 + offset, rs.getInt(1));
+        Assert.assertEquals("Ville", rs.getString(2));
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(1 + offset, rs.getInt(1));
+        Assert.assertEquals("Kalle", rs.getString(2));
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(2 + offset, rs.getInt(1));
+        Assert.assertEquals("Pelle", rs.getString(2));
+
+        Assert.assertFalse(rs.next());
+        query.commit();
+    }
+
+    @Test
+    public void getResults_noDelegate5000Rows_returns5000rows()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        query.beginTransaction();
+        ResultSet rs = query.getResults(0, 0);
+        for (int i = 0; i < 5000; i++) {
+            Assert.assertTrue(rs.next());
+        }
+        Assert.assertFalse(rs.next());
+        query.commit();
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void setFilters_noDelegate_shouldFail() {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        ArrayList<Filter> filters = new ArrayList<Filter>();
+        filters.add(new Like("name", "%lle"));
+        query.setFilters(filters);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void setOrderBy_noDelegate_shouldFail() {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        query.setOrderBy(Arrays.asList(new OrderBy("name", true)));
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void storeRow_noDelegateNoTransactionActive_shouldFail()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        query.storeRow(new RowItem(new SQLContainer(query), new RowId(
+                new Object[] { 1 }), null));
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void storeRow_noDelegate_shouldFail() throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        SQLContainer container = EasyMock.createNiceMock(SQLContainer.class);
+        EasyMock.replay(container);
+        query.beginTransaction();
+        query.storeRow(new RowItem(container, new RowId(new Object[] { 1 }),
+                null));
+        query.commit();
+        EasyMock.verify(container);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void removeRow_noDelegate_shouldFail() throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        SQLContainer container = EasyMock.createNiceMock(SQLContainer.class);
+        EasyMock.replay(container);
+        query.beginTransaction();
+        query.removeRow(new RowItem(container, new RowId(new Object[] { 1 }),
+                null));
+        query.commit();
+        EasyMock.verify(container);
+    }
+
+    @Test
+    public void beginTransaction_readOnly_shouldSucceed() throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        query.beginTransaction();
+    }
+
+    @Test
+    public void commit_readOnly_shouldSucceed() throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        query.beginTransaction();
+        query.commit();
+    }
+
+    @Test
+    public void rollback_readOnly_shouldSucceed() throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        query.beginTransaction();
+        query.rollback();
+    }
+
+    @Test(expected = SQLException.class)
+    public void commit_noActiveTransaction_shouldFail() throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        query.commit();
+    }
+
+    @Test(expected = SQLException.class)
+    public void rollback_noActiveTransaction_shouldFail() throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        query.rollback();
+    }
+
+    @Test
+    public void containsRowWithKeys_simpleQueryWithExistingKeys_returnsTrue()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        Assert.assertTrue(query.containsRowWithKey(1));
+    }
+
+    @Test
+    public void containsRowWithKeys_simpleQueryWithNonexistingKeys_returnsTrue()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        Assert.assertFalse(query.containsRowWithKey(1337));
+    }
+
+    // (expected = SQLException.class)
+    @Test
+    public void containsRowWithKeys_simpleQueryWithInvalidKeys_shouldFail()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        Assert.assertFalse(query.containsRowWithKey(38796));
+    }
+
+    @Test
+    public void containsRowWithKeys_queryContainingWhereClauseAndExistingKeys_returnsTrue()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery(
+                "SELECT * FROM people WHERE \"NAME\" LIKE '%lle'",
+                Arrays.asList("ID"), connectionPool);
+        Assert.assertTrue(query.containsRowWithKey(1));
+    }
+
+    @Test
+    public void containsRowWithKeys_queryContainingLowercaseWhereClauseAndExistingKeys_returnsTrue()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery(
+                "select * from people where \"NAME\" like '%lle'",
+                Arrays.asList("ID"), connectionPool);
+        Assert.assertTrue(query.containsRowWithKey(1));
+    }
+
+    @Test
+    public void containsRowWithKeys_nullKeys_shouldFailAndReleaseConnections()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery(
+                "select * from people where \"NAME\" like '%lle'",
+                Arrays.asList("ID"), connectionPool);
+        try {
+            query.containsRowWithKey(new Object[] { null });
+        } catch (SQLException e) {
+            // We should now be able to reserve two connections
+            connectionPool.reserveConnection();
+            connectionPool.reserveConnection();
+        }
+    }
+
+    /*
+     * -------- Tests with a delegate ---------
+     */
+
+    @Test
+    public void setDelegate_noExistingDelegate_shouldRegisterNewDelegate() {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        query.setDelegate(delegate);
+        Assert.assertEquals(delegate, query.getDelegate());
+    }
+
+    @Test
+    public void getResults_hasDelegate_shouldCallDelegate() throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        if (AllTests.db == DB.MSSQL) {
+            EasyMock.expect(delegate.getQueryString(0, 2))
+                    .andReturn(
+                            "SELECT * FROM (SELECT row_number()"
+                                    + "OVER (ORDER BY id ASC) AS rownum, * FROM people)"
+                                    + " AS a WHERE a.rownum BETWEEN 0 AND 2");
+        } else if (AllTests.db == DB.ORACLE) {
+            EasyMock.expect(delegate.getQueryString(0, 2))
+                    .andReturn(
+                            "SELECT * FROM (SELECT  x.*, ROWNUM AS r FROM"
+                                    + " (SELECT * FROM people) x) WHERE r BETWEEN 1 AND 2");
+        } else {
+            EasyMock.expect(delegate.getQueryString(0, 2)).andReturn(
+                    "SELECT * FROM people LIMIT 2 OFFSET 0");
+        }
+        EasyMock.replay(delegate);
+
+        query.setDelegate(delegate);
+        query.beginTransaction();
+        query.getResults(0, 2);
+        EasyMock.verify(delegate);
+        query.commit();
+    }
+
+    @Test
+    public void getResults_delegateImplementsGetQueryString_shouldHonorOffsetAndPagelength()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        if (AllTests.db == DB.MSSQL) {
+            EasyMock.expect(delegate.getQueryString(0, 2))
+                    .andReturn(
+                            "SELECT * FROM (SELECT row_number()"
+                                    + "OVER (ORDER BY id ASC) AS rownum, * FROM people)"
+                                    + " AS a WHERE a.rownum BETWEEN 0 AND 2");
+        } else if (AllTests.db == DB.ORACLE) {
+            EasyMock.expect(delegate.getQueryString(0, 2))
+                    .andReturn(
+                            "SELECT * FROM (SELECT  x.*, ROWNUM AS r FROM"
+                                    + " (SELECT * FROM people) x) WHERE r BETWEEN 1 AND 2");
+        } else {
+            EasyMock.expect(delegate.getQueryString(0, 2)).andReturn(
+                    "SELECT * FROM people LIMIT 2 OFFSET 0");
+        }
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        query.beginTransaction();
+        ResultSet rs = query.getResults(0, 2);
+        int rsoffset = 0;
+        if (AllTests.db == DB.MSSQL) {
+            rsoffset++;
+        }
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(0 + offset, rs.getInt(1 + rsoffset));
+        Assert.assertEquals("Ville", rs.getString(2 + rsoffset));
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(1 + offset, rs.getInt(1 + rsoffset));
+        Assert.assertEquals("Kalle", rs.getString(2 + rsoffset));
+
+        Assert.assertFalse(rs.next());
+
+        EasyMock.verify(delegate);
+        query.commit();
+    }
+
+    @Test
+    public void getResults_delegateRegistered5000Rows_returns100rows()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        if (AllTests.db == DB.MSSQL) {
+            EasyMock.expect(delegate.getQueryString(200, 100))
+                    .andReturn(
+                            "SELECT * FROM (SELECT row_number()"
+                                    + "OVER (ORDER BY id ASC) AS rownum, * FROM people)"
+                                    + " AS a WHERE a.rownum BETWEEN 201 AND 300");
+        } else if (AllTests.db == DB.ORACLE) {
+            EasyMock.expect(delegate.getQueryString(200, 100))
+                    .andReturn(
+                            "SELECT * FROM (SELECT  x.*, ROWNUM AS r FROM"
+                                    + " (SELECT * FROM people ORDER BY ID ASC) x) WHERE r BETWEEN 201 AND 300");
+        } else {
+            EasyMock.expect(delegate.getQueryString(200, 100)).andReturn(
+                    "SELECT * FROM people LIMIT 100 OFFSET 200");
+        }
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        query.beginTransaction();
+        ResultSet rs = query.getResults(200, 100);
+        for (int i = 0; i < 100; i++) {
+            Assert.assertTrue(rs.next());
+            Assert.assertEquals(200 + i + offset, rs.getInt("ID"));
+        }
+        Assert.assertFalse(rs.next());
+        query.commit();
+    }
+
+    @Test
+    public void setFilters_delegateImplementsSetFilters_shouldPassFiltersToDelegate() {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        List<Filter> filters = new ArrayList<Filter>();
+        filters.add(new Like("name", "%lle"));
+        delegate.setFilters(filters);
+
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        query.setFilters(filters);
+
+        EasyMock.verify(delegate);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void setFilters_delegateDoesNotImplementSetFilters_shouldFail() {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        List<Filter> filters = new ArrayList<Filter>();
+        filters.add(new Like("name", "%lle"));
+        delegate.setFilters(filters);
+        EasyMock.expectLastCall().andThrow(new UnsupportedOperationException());
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        query.setFilters(filters);
+
+        EasyMock.verify(delegate);
+    }
+
+    @Test
+    public void setOrderBy_delegateImplementsSetOrderBy_shouldPassArgumentsToDelegate() {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        List<OrderBy> orderBys = Arrays.asList(new OrderBy("name", false));
+        delegate.setOrderBy(orderBys);
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        query.setOrderBy(orderBys);
+
+        EasyMock.verify(delegate);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void setOrderBy_delegateDoesNotImplementSetOrderBy_shouldFail() {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        List<OrderBy> orderBys = Arrays.asList(new OrderBy("name", false));
+        delegate.setOrderBy(orderBys);
+        EasyMock.expectLastCall().andThrow(new UnsupportedOperationException());
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        query.setOrderBy(orderBys);
+
+        EasyMock.verify(delegate);
+    }
+
+    @Test
+    public void setFilters_noDelegateAndNullParameter_shouldSucceed() {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        query.setFilters(null);
+    }
+
+    @Test
+    public void setOrderBy_noDelegateAndNullParameter_shouldSucceed() {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        query.setOrderBy(null);
+    }
+
+    @Test
+    public void storeRow_delegateImplementsStoreRow_shouldPassToDelegate()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.expect(
+                delegate.storeRow(EasyMock.isA(Connection.class),
+                        EasyMock.isA(RowItem.class))).andReturn(1);
+        SQLContainer container = EasyMock.createNiceMock(SQLContainer.class);
+        EasyMock.replay(delegate, container);
+        query.setDelegate(delegate);
+
+        query.beginTransaction();
+        RowItem row = new RowItem(container, new RowId(new Object[] { 1 }),
+                null);
+        query.storeRow(row);
+        query.commit();
+
+        EasyMock.verify(delegate, container);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void storeRow_delegateDoesNotImplementStoreRow_shouldFail()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.expect(
+                delegate.storeRow(EasyMock.isA(Connection.class),
+                        EasyMock.isA(RowItem.class))).andThrow(
+                new UnsupportedOperationException());
+        SQLContainer container = EasyMock.createNiceMock(SQLContainer.class);
+        EasyMock.replay(delegate, container);
+        query.setDelegate(delegate);
+
+        query.beginTransaction();
+        RowItem row = new RowItem(container, new RowId(new Object[] { 1 }),
+                null);
+        query.storeRow(row);
+        query.commit();
+
+        EasyMock.verify(delegate, container);
+    }
+
+    @Test
+    public void removeRow_delegateImplementsRemoveRow_shouldPassToDelegate()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.expect(
+                delegate.removeRow(EasyMock.isA(Connection.class),
+                        EasyMock.isA(RowItem.class))).andReturn(true);
+        SQLContainer container = EasyMock.createNiceMock(SQLContainer.class);
+        EasyMock.replay(delegate, container);
+        query.setDelegate(delegate);
+
+        query.beginTransaction();
+        RowItem row = new RowItem(container, new RowId(new Object[] { 1 }),
+                null);
+        query.removeRow(row);
+        query.commit();
+
+        EasyMock.verify(delegate, container);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void removeRow_delegateDoesNotImplementRemoveRow_shouldFail()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.expect(
+                delegate.removeRow(EasyMock.isA(Connection.class),
+                        EasyMock.isA(RowItem.class))).andThrow(
+                new UnsupportedOperationException());
+        SQLContainer container = EasyMock.createNiceMock(SQLContainer.class);
+        EasyMock.replay(delegate, container);
+        query.setDelegate(delegate);
+
+        query.beginTransaction();
+        RowItem row = new RowItem(container, new RowId(new Object[] { 1 }),
+                null);
+        query.removeRow(row);
+        query.commit();
+
+        EasyMock.verify(delegate, container);
+    }
+
+    @Test
+    public void beginTransaction_delegateRegistered_shouldSucceed()
+            throws UnsupportedOperationException, SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        query.beginTransaction();
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void beginTransaction_transactionAlreadyActive_shouldFail()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+
+        query.beginTransaction();
+        query.beginTransaction();
+    }
+
+    @Test(expected = SQLException.class)
+    public void commit_delegateRegisteredNoActiveTransaction_shouldFail()
+            throws UnsupportedOperationException, SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        query.commit();
+    }
+
+    @Test
+    public void commit_delegateRegisteredActiveTransaction_shouldSucceed()
+            throws UnsupportedOperationException, SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        query.beginTransaction();
+        query.commit();
+    }
+
+    @Test(expected = SQLException.class)
+    public void commit_delegateRegisteredActiveTransactionDoubleCommit_shouldFail()
+            throws UnsupportedOperationException, SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        query.beginTransaction();
+        query.commit();
+        query.commit();
+    }
+
+    @Test(expected = SQLException.class)
+    public void rollback_delegateRegisteredNoActiveTransaction_shouldFail()
+            throws UnsupportedOperationException, SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        query.rollback();
+    }
+
+    @Test
+    public void rollback_delegateRegisteredActiveTransaction_shouldSucceed()
+            throws UnsupportedOperationException, SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        query.beginTransaction();
+        query.rollback();
+    }
+
+    @Test(expected = SQLException.class)
+    public void rollback_delegateRegisteredActiveTransactionDoubleRollback_shouldFail()
+            throws UnsupportedOperationException, SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        query.beginTransaction();
+        query.rollback();
+        query.rollback();
+    }
+
+    @Test(expected = SQLException.class)
+    public void rollback_delegateRegisteredCommittedTransaction_shouldFail()
+            throws UnsupportedOperationException, SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        query.beginTransaction();
+        query.commit();
+        query.rollback();
+    }
+
+    @Test(expected = SQLException.class)
+    public void commit_delegateRegisteredRollbackedTransaction_shouldFail()
+            throws UnsupportedOperationException, SQLException {
+        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        query.beginTransaction();
+        query.rollback();
+        query.commit();
+    }
+
+    @Test(expected = SQLException.class)
+    public void containsRowWithKeys_delegateRegistered_shouldCallGetContainsRowQueryString()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery(
+                "SELECT * FROM people WHERE name LIKE '%lle'",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.expect(delegate.getContainsRowQueryString(1)).andReturn("");
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        query.containsRowWithKey(1);
+
+        EasyMock.verify(delegate);
+    }
+
+    @Test
+    public void containsRowWithKeys_delegateRegistered_shouldUseResultFromGetContainsRowQueryString()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery(
+                "SELECT * FROM people WHERE \"NAME\" LIKE '%lle'",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        // In order to test that this is the query that is actually used, we use
+        // a non-existing id in place of the existing one.
+        EasyMock.expect(delegate.getContainsRowQueryString(1))
+                .andReturn(
+                        "SELECT * FROM people WHERE \"NAME\" LIKE '%lle' AND \"ID\" = 1337");
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        // The id (key) used should be 1337 as above, for the call with key = 1
+        Assert.assertFalse(query.containsRowWithKey(1));
+
+        EasyMock.verify(delegate);
+    }
+
+    @Test
+    public void containsRowWithKeys_delegateRegisteredGetContainsRowQueryStringNotImplemented_shouldBuildQueryString()
+            throws SQLException {
+        FreeformQuery query = new FreeformQuery(
+                "SELECT * FROM people WHERE \"NAME\" LIKE '%lle'",
+                Arrays.asList("ID"), connectionPool);
+        FreeformQueryDelegate delegate = EasyMock
+                .createMock(FreeformQueryDelegate.class);
+        EasyMock.expect(delegate.getContainsRowQueryString(1)).andThrow(
+                new UnsupportedOperationException());
+        EasyMock.replay(delegate);
+        query.setDelegate(delegate);
+
+        Assert.assertTrue(query.containsRowWithKey(1));
+
+        EasyMock.verify(delegate);
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/query/QueryBuilderTest.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/query/QueryBuilderTest.java
new file mode 100644
index 0000000000..f635b23ebd
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/query/QueryBuilderTest.java
@@ -0,0 +1,311 @@
+package com.vaadin.data.util.sqlcontainer.query;
+
+import java.util.ArrayList;
+
+import junit.framework.Assert;
+
+import org.easymock.EasyMock;
+import org.junit.Test;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.util.filter.And;
+import com.vaadin.data.util.filter.Between;
+import com.vaadin.data.util.filter.Compare.Equal;
+import com.vaadin.data.util.filter.Compare.Greater;
+import com.vaadin.data.util.filter.Compare.GreaterOrEqual;
+import com.vaadin.data.util.filter.Compare.Less;
+import com.vaadin.data.util.filter.Compare.LessOrEqual;
+import com.vaadin.data.util.filter.IsNull;
+import com.vaadin.data.util.filter.Like;
+import com.vaadin.data.util.filter.Not;
+import com.vaadin.data.util.filter.Or;
+import com.vaadin.data.util.filter.SimpleStringFilter;
+import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
+import com.vaadin.data.util.sqlcontainer.query.generator.filter.QueryBuilder;
+import com.vaadin.data.util.sqlcontainer.query.generator.filter.StringDecorator;
+
+public class QueryBuilderTest {
+
+    private StatementHelper mockedStatementHelper(Object... values) {
+        StatementHelper sh = EasyMock.createMock(StatementHelper.class);
+        for (Object val : values) {
+            sh.addParameterValue(val);
+            EasyMock.expectLastCall();
+        }
+        EasyMock.replay(sh);
+        return sh;
+    }
+
+    // escape bad characters and wildcards
+
+    @Test
+    public void getWhereStringForFilter_equals() {
+        StatementHelper sh = mockedStatementHelper("Fido");
+        Equal f = new Equal("NAME", "Fido");
+        Assert.assertEquals("\"NAME\" = ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilter_greater() {
+        StatementHelper sh = mockedStatementHelper(18);
+        Greater f = new Greater("AGE", 18);
+        Assert.assertEquals("\"AGE\" > ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilter_less() {
+        StatementHelper sh = mockedStatementHelper(65);
+        Less f = new Less("AGE", 65);
+        Assert.assertEquals("\"AGE\" < ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilter_greaterOrEqual() {
+        StatementHelper sh = mockedStatementHelper(18);
+        GreaterOrEqual f = new GreaterOrEqual("AGE", 18);
+        Assert.assertEquals("\"AGE\" >= ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilter_lessOrEqual() {
+        StatementHelper sh = mockedStatementHelper(65);
+        LessOrEqual f = new LessOrEqual("AGE", 65);
+        Assert.assertEquals("\"AGE\" <= ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilter_simpleStringFilter() {
+        StatementHelper sh = mockedStatementHelper("Vi%");
+        SimpleStringFilter f = new SimpleStringFilter("NAME", "Vi", false, true);
+        Assert.assertEquals("\"NAME\" LIKE ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilter_simpleStringFilterMatchAnywhere() {
+        StatementHelper sh = mockedStatementHelper("%Vi%");
+        SimpleStringFilter f = new SimpleStringFilter("NAME", "Vi", false,
+                false);
+        Assert.assertEquals("\"NAME\" LIKE ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilter_simpleStringFilterMatchAnywhereIgnoreCase() {
+        StatementHelper sh = mockedStatementHelper("%VI%");
+        SimpleStringFilter f = new SimpleStringFilter("NAME", "Vi", true, false);
+        Assert.assertEquals("UPPER(\"NAME\") LIKE ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilter_startsWith() {
+        StatementHelper sh = mockedStatementHelper("Vi%");
+        Like f = new Like("NAME", "Vi%");
+        Assert.assertEquals("\"NAME\" LIKE ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilter_startsWithNumber() {
+        StatementHelper sh = mockedStatementHelper("1%");
+        Like f = new Like("AGE", "1%");
+        Assert.assertEquals("\"AGE\" LIKE ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilter_endsWith() {
+        StatementHelper sh = mockedStatementHelper("%lle");
+        Like f = new Like("NAME", "%lle");
+        Assert.assertEquals("\"NAME\" LIKE ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilter_contains() {
+        StatementHelper sh = mockedStatementHelper("%ill%");
+        Like f = new Like("NAME", "%ill%");
+        Assert.assertEquals("\"NAME\" LIKE ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilter_between() {
+        StatementHelper sh = mockedStatementHelper(18, 65);
+        Between f = new Between("AGE", 18, 65);
+        Assert.assertEquals("\"AGE\" BETWEEN ? AND ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilter_caseInsensitive_equals() {
+        StatementHelper sh = mockedStatementHelper("FIDO");
+        Like f = new Like("NAME", "Fido");
+        f.setCaseSensitive(false);
+        Assert.assertEquals("UPPER(\"NAME\") LIKE ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilter_caseInsensitive_startsWith() {
+        StatementHelper sh = mockedStatementHelper("VI%");
+        Like f = new Like("NAME", "Vi%");
+        f.setCaseSensitive(false);
+        Assert.assertEquals("UPPER(\"NAME\") LIKE ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilter_caseInsensitive_endsWith() {
+        StatementHelper sh = mockedStatementHelper("%LLE");
+        Like f = new Like("NAME", "%lle");
+        f.setCaseSensitive(false);
+        Assert.assertEquals("UPPER(\"NAME\") LIKE ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilter_caseInsensitive_contains() {
+        StatementHelper sh = mockedStatementHelper("%ILL%");
+        Like f = new Like("NAME", "%ill%");
+        f.setCaseSensitive(false);
+        Assert.assertEquals("UPPER(\"NAME\") LIKE ?",
+                QueryBuilder.getWhereStringForFilter(f, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilters_listOfFilters() {
+        StatementHelper sh = mockedStatementHelper("%lle", 18);
+        ArrayList<Filter> filters = new ArrayList<Filter>();
+        filters.add(new Like("NAME", "%lle"));
+        filters.add(new Greater("AGE", 18));
+        Assert.assertEquals(" WHERE \"NAME\" LIKE ? AND \"AGE\" > ?",
+                QueryBuilder.getWhereStringForFilters(filters, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilters_oneAndFilter() {
+        StatementHelper sh = mockedStatementHelper("%lle", 18);
+        ArrayList<Filter> filters = new ArrayList<Filter>();
+        filters.add(new And(new Like("NAME", "%lle"), new Greater("AGE", 18)));
+        Assert.assertEquals(" WHERE (\"NAME\" LIKE ? AND \"AGE\" > ?)",
+                QueryBuilder.getWhereStringForFilters(filters, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilters_oneOrFilter() {
+        StatementHelper sh = mockedStatementHelper("%lle", 18);
+        ArrayList<Filter> filters = new ArrayList<Filter>();
+        filters.add(new Or(new Like("NAME", "%lle"), new Greater("AGE", 18)));
+        Assert.assertEquals(" WHERE (\"NAME\" LIKE ? OR \"AGE\" > ?)",
+                QueryBuilder.getWhereStringForFilters(filters, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilters_complexCompoundFilters() {
+        StatementHelper sh = mockedStatementHelper("%lle", 18, 65, "Pelle");
+        ArrayList<Filter> filters = new ArrayList<Filter>();
+        filters.add(new Or(new And(new Like("NAME", "%lle"), new Or(new Less(
+                "AGE", 18), new Greater("AGE", 65))),
+                new Equal("NAME", "Pelle")));
+        Assert.assertEquals(
+                " WHERE ((\"NAME\" LIKE ? AND (\"AGE\" < ? OR \"AGE\" > ?)) OR \"NAME\" = ?)",
+                QueryBuilder.getWhereStringForFilters(filters, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilters_complexCompoundFiltersAndSingleFilter() {
+        StatementHelper sh = mockedStatementHelper("%lle", 18, 65, "Pelle",
+                "Virtanen");
+        ArrayList<Filter> filters = new ArrayList<Filter>();
+        filters.add(new Or(new And(new Like("NAME", "%lle"), new Or(new Less(
+                "AGE", 18), new Greater("AGE", 65))),
+                new Equal("NAME", "Pelle")));
+        filters.add(new Equal("LASTNAME", "Virtanen"));
+        Assert.assertEquals(
+                " WHERE ((\"NAME\" LIKE ? AND (\"AGE\" < ? OR \"AGE\" > ?)) OR \"NAME\" = ?) AND \"LASTNAME\" = ?",
+                QueryBuilder.getWhereStringForFilters(filters, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilters_emptyList_shouldReturnEmptyString() {
+        ArrayList<Filter> filters = new ArrayList<Filter>();
+        Assert.assertEquals("", QueryBuilder.getWhereStringForFilters(filters,
+                new StatementHelper()));
+    }
+
+    @Test
+    public void getWhereStringForFilters_NotFilter() {
+        StatementHelper sh = mockedStatementHelper(18);
+        ArrayList<Filter> filters = new ArrayList<Filter>();
+        filters.add(new Not(new Equal("AGE", 18)));
+        Assert.assertEquals(" WHERE NOT \"AGE\" = ?",
+                QueryBuilder.getWhereStringForFilters(filters, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilters_complexNegatedFilter() {
+        StatementHelper sh = mockedStatementHelper(65, 18);
+        ArrayList<Filter> filters = new ArrayList<Filter>();
+        filters.add(new Not(new Or(new Equal("AGE", 65), new Equal("AGE", 18))));
+        Assert.assertEquals(" WHERE NOT (\"AGE\" = ? OR \"AGE\" = ?)",
+                QueryBuilder.getWhereStringForFilters(filters, sh));
+        EasyMock.verify(sh);
+    }
+
+    @Test
+    public void getWhereStringForFilters_isNull() {
+        ArrayList<Filter> filters = new ArrayList<Filter>();
+        filters.add(new IsNull("NAME"));
+        Assert.assertEquals(" WHERE \"NAME\" IS NULL", QueryBuilder
+                .getWhereStringForFilters(filters, new StatementHelper()));
+    }
+
+    @Test
+    public void getWhereStringForFilters_isNotNull() {
+        ArrayList<Filter> filters = new ArrayList<Filter>();
+        filters.add(new Not(new IsNull("NAME")));
+        Assert.assertEquals(" WHERE \"NAME\" IS NOT NULL", QueryBuilder
+                .getWhereStringForFilters(filters, new StatementHelper()));
+    }
+
+    @Test
+    public void getWhereStringForFilters_customStringDecorator() {
+        QueryBuilder.setStringDecorator(new StringDecorator("[", "]"));
+        ArrayList<Filter> filters = new ArrayList<Filter>();
+        filters.add(new Not(new IsNull("NAME")));
+        Assert.assertEquals(" WHERE [NAME] IS NOT NULL", QueryBuilder
+                .getWhereStringForFilters(filters, new StatementHelper()));
+        // Reset the default string decorator
+        QueryBuilder.setStringDecorator(new StringDecorator("\"", "\""));
+    }
+}
diff --git a/tests/server-side/com/vaadin/data/util/sqlcontainer/query/TableQueryTest.java b/tests/server-side/com/vaadin/data/util/sqlcontainer/query/TableQueryTest.java
new file mode 100644
index 0000000000..52f7e273c6
--- /dev/null
+++ b/tests/server-side/com/vaadin/data/util/sqlcontainer/query/TableQueryTest.java
@@ -0,0 +1,663 @@
+package com.vaadin.data.util.sqlcontainer.query;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.util.filter.Compare.Equal;
+import com.vaadin.data.util.filter.Like;
+import com.vaadin.data.util.sqlcontainer.AllTests;
+import com.vaadin.data.util.sqlcontainer.DataGenerator;
+import com.vaadin.data.util.sqlcontainer.OptimisticLockException;
+import com.vaadin.data.util.sqlcontainer.RowItem;
+import com.vaadin.data.util.sqlcontainer.SQLContainer;
+import com.vaadin.data.util.sqlcontainer.AllTests.DB;
+import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.query.OrderBy;
+import com.vaadin.data.util.sqlcontainer.query.TableQuery;
+import com.vaadin.data.util.sqlcontainer.query.generator.DefaultSQLGenerator;
+
+public class TableQueryTest {
+    private static final int offset = AllTests.offset;
+    private JDBCConnectionPool connectionPool;
+
+    @Before
+    public void setUp() throws SQLException {
+
+        try {
+            connectionPool = new SimpleJDBCConnectionPool(AllTests.dbDriver,
+                    AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 2, 2);
+        } catch (SQLException e) {
+            e.printStackTrace();
+            Assert.fail(e.getMessage());
+        }
+
+        DataGenerator.addPeopleToDatabase(connectionPool);
+    }
+
+    @After
+    public void tearDown() {
+        if (connectionPool != null) {
+            connectionPool.destroy();
+        }
+    }
+
+    /**********************************************************************
+     * TableQuery construction tests
+     **********************************************************************/
+    @Test
+    public void construction_legalParameters_shouldSucceed() {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                new DefaultSQLGenerator());
+        Assert.assertArrayEquals(new Object[] { "ID" }, tQuery
+                .getPrimaryKeyColumns().toArray());
+        boolean correctTableName = "people".equalsIgnoreCase(tQuery
+                .getTableName());
+        Assert.assertTrue(correctTableName);
+    }
+
+    @Test
+    public void construction_legalParameters_defaultGenerator_shouldSucceed() {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        Assert.assertArrayEquals(new Object[] { "ID" }, tQuery
+                .getPrimaryKeyColumns().toArray());
+        boolean correctTableName = "people".equalsIgnoreCase(tQuery
+                .getTableName());
+        Assert.assertTrue(correctTableName);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void construction_nonExistingTableName_shouldFail() {
+        new TableQuery("skgwaguhsd", connectionPool, new DefaultSQLGenerator());
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void construction_emptyTableName_shouldFail() {
+        new TableQuery("", connectionPool, new DefaultSQLGenerator());
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void construction_nullSqlGenerator_shouldFail() {
+        new TableQuery("people", connectionPool, null);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void construction_nullConnectionPool_shouldFail() {
+        new TableQuery("people", null, new DefaultSQLGenerator());
+    }
+
+    /**********************************************************************
+     * TableQuery row count tests
+     **********************************************************************/
+    @Test
+    public void getCount_simpleQuery_returnsFour() throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        Assert.assertEquals(4, tQuery.getCount());
+    }
+
+    @Test
+    public void getCount_simpleQueryTwoMorePeopleAdded_returnsSix()
+            throws SQLException {
+        // Add some people
+        Connection conn = connectionPool.reserveConnection();
+        Statement statement = conn.createStatement();
+        if (AllTests.db == DB.MSSQL) {
+            statement.executeUpdate("insert into people values('Bengt', 30)");
+            statement.executeUpdate("insert into people values('Ingvar', 50)");
+        } else {
+            statement
+                    .executeUpdate("insert into people values(default, 'Bengt', 30)");
+            statement
+                    .executeUpdate("insert into people values(default, 'Ingvar', 50)");
+        }
+        statement.close();
+        conn.commit();
+        connectionPool.releaseConnection(conn);
+
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+
+        Assert.assertEquals(6, tQuery.getCount());
+    }
+
+    @Test
+    public void getCount_normalState_releasesConnection() throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        tQuery.getCount();
+        tQuery.getCount();
+        Assert.assertNotNull(connectionPool.reserveConnection());
+    }
+
+    /**********************************************************************
+     * TableQuery get results tests
+     **********************************************************************/
+    @Test
+    public void getResults_simpleQuery_returnsFourRecords() throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        tQuery.beginTransaction();
+        ResultSet rs = tQuery.getResults(0, 0);
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(0 + offset, rs.getInt(1));
+        Assert.assertEquals("Ville", rs.getString(2));
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(1 + offset, rs.getInt(1));
+        Assert.assertEquals("Kalle", rs.getString(2));
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(2 + offset, rs.getInt(1));
+        Assert.assertEquals("Pelle", rs.getString(2));
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(3 + offset, rs.getInt(1));
+        Assert.assertEquals("Börje", rs.getString(2));
+
+        Assert.assertFalse(rs.next());
+        tQuery.commit();
+    }
+
+    @Test
+    public void getResults_noDelegate5000Rows_returns5000rows()
+            throws SQLException {
+        DataGenerator.addFiveThousandPeople(connectionPool);
+
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+
+        tQuery.beginTransaction();
+        ResultSet rs = tQuery.getResults(0, 0);
+        for (int i = 0; i < 5000; i++) {
+            Assert.assertTrue(rs.next());
+        }
+        Assert.assertFalse(rs.next());
+        tQuery.commit();
+    }
+
+    /**********************************************************************
+     * TableQuery transaction management tests
+     **********************************************************************/
+    @Test
+    public void beginTransaction_readOnly_shouldSucceed() throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        tQuery.beginTransaction();
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void beginTransaction_transactionAlreadyActive_shouldFail()
+            throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+
+        tQuery.beginTransaction();
+        tQuery.beginTransaction();
+    }
+
+    @Test
+    public void commit_readOnly_shouldSucceed() throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        tQuery.beginTransaction();
+        tQuery.commit();
+    }
+
+    @Test
+    public void rollback_readOnly_shouldSucceed() throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        tQuery.beginTransaction();
+        tQuery.rollback();
+    }
+
+    @Test(expected = SQLException.class)
+    public void commit_noActiveTransaction_shouldFail() throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        tQuery.commit();
+    }
+
+    @Test(expected = SQLException.class)
+    public void rollback_noActiveTransaction_shouldFail() throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        tQuery.rollback();
+    }
+
+    /**********************************************************************
+     * TableQuery row query with given keys tests
+     **********************************************************************/
+    @Test
+    public void containsRowWithKeys_existingKeys_returnsTrue()
+            throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        Assert.assertTrue(tQuery.containsRowWithKey(1));
+    }
+
+    @Test
+    public void containsRowWithKeys_nonexistingKeys_returnsTrue()
+            throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+
+        Assert.assertFalse(tQuery.containsRowWithKey(1337));
+    }
+
+    @Test
+    public void containsRowWithKeys_invalidKeys_shouldFail()
+            throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        boolean b = true;
+        try {
+            b = tQuery.containsRowWithKey("foo");
+        } catch (SQLException se) {
+            return;
+        }
+        Assert.assertFalse(b);
+    }
+
+    @Test
+    public void containsRowWithKeys_nullKeys_shouldFailAndReleaseConnections()
+            throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        try {
+            tQuery.containsRowWithKey(new Object[] { null });
+        } catch (SQLException e) {
+            // We should now be able to reserve two connections
+            connectionPool.reserveConnection();
+            connectionPool.reserveConnection();
+        }
+    }
+
+    /**********************************************************************
+     * TableQuery filtering and ordering tests
+     **********************************************************************/
+    @Test
+    public void setFilters_shouldReturnCorrectCount() throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        List<Filter> filters = new ArrayList<Filter>();
+        filters.add(new Like("NAME", "%lle"));
+        tQuery.setFilters(filters);
+        Assert.assertEquals(3, tQuery.getCount());
+    }
+
+    @Test
+    public void setOrderByNameAscending_shouldReturnCorrectOrder()
+            throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+
+        List<OrderBy> orderBys = Arrays.asList(new OrderBy("NAME", true));
+        tQuery.setOrderBy(orderBys);
+
+        tQuery.beginTransaction();
+        ResultSet rs;
+        rs = tQuery.getResults(0, 0);
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(3 + offset, rs.getInt(1));
+        Assert.assertEquals("Börje", rs.getString(2));
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(1 + offset, rs.getInt(1));
+        Assert.assertEquals("Kalle", rs.getString(2));
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(2 + offset, rs.getInt(1));
+        Assert.assertEquals("Pelle", rs.getString(2));
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(0 + offset, rs.getInt(1));
+        Assert.assertEquals("Ville", rs.getString(2));
+
+        Assert.assertFalse(rs.next());
+        tQuery.commit();
+    }
+
+    @Test
+    public void setOrderByNameDescending_shouldReturnCorrectOrder()
+            throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+
+        List<OrderBy> orderBys = Arrays.asList(new OrderBy("NAME", false));
+        tQuery.setOrderBy(orderBys);
+
+        tQuery.beginTransaction();
+        ResultSet rs;
+        rs = tQuery.getResults(0, 0);
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(0 + offset, rs.getInt(1));
+        Assert.assertEquals("Ville", rs.getString(2));
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(2 + offset, rs.getInt(1));
+        Assert.assertEquals("Pelle", rs.getString(2));
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(1 + offset, rs.getInt(1));
+        Assert.assertEquals("Kalle", rs.getString(2));
+
+        Assert.assertTrue(rs.next());
+        Assert.assertEquals(3 + offset, rs.getInt(1));
+        Assert.assertEquals("Börje", rs.getString(2));
+
+        Assert.assertFalse(rs.next());
+        tQuery.commit();
+    }
+
+    @Test
+    public void setFilters_nullParameter_shouldSucceed() {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        tQuery.setFilters(null);
+    }
+
+    @Test
+    public void setOrderBy_nullParameter_shouldSucceed() {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        tQuery.setOrderBy(null);
+    }
+
+    /**********************************************************************
+     * TableQuery row removal tests
+     **********************************************************************/
+    @Test
+    public void removeRowThroughContainer_legalRowItem_shouldSucceed()
+            throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(tQuery);
+        container.setAutoCommit(false);
+        Assert.assertTrue(container.removeItem(container.getItemIds()
+                .iterator().next()));
+
+        Assert.assertEquals(4, tQuery.getCount());
+        Assert.assertEquals(3, container.size());
+        container.commit();
+
+        Assert.assertEquals(3, tQuery.getCount());
+        Assert.assertEquals(3, container.size());
+    }
+
+    @Test
+    public void removeRowThroughContainer_nonexistingRowId_shouldFail()
+            throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+
+        SQLContainer container = new SQLContainer(tQuery);
+        container.setAutoCommit(true);
+        Assert.assertFalse(container.removeItem("foo"));
+    }
+
+    /**********************************************************************
+     * TableQuery row adding / modification tests
+     **********************************************************************/
+    @Test
+    public void insertRowThroughContainer_shouldSucceed() throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        tQuery.setVersionColumn("ID");
+
+        SQLContainer container = new SQLContainer(tQuery);
+        container.setAutoCommit(false);
+
+        Object item = container.addItem();
+        Assert.assertNotNull(item);
+
+        Assert.assertEquals(4, tQuery.getCount());
+        Assert.assertEquals(5, container.size());
+        container.commit();
+
+        Assert.assertEquals(5, tQuery.getCount());
+        Assert.assertEquals(5, container.size());
+    }
+
+    @Test
+    public void modifyRowThroughContainer_shouldSucceed() throws SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+
+        // In this test the primary key is used as a version column
+        tQuery.setVersionColumn("ID");
+        SQLContainer container = new SQLContainer(tQuery);
+        container.setAutoCommit(false);
+
+        /* Check that the container size is correct and there is no 'Viljami' */
+        Assert.assertEquals(4, container.size());
+        List<Filter> filters = new ArrayList<Filter>();
+        filters.add(new Equal("NAME", "Viljami"));
+        tQuery.setFilters(filters);
+        Assert.assertEquals(0, tQuery.getCount());
+        tQuery.setFilters(null);
+
+        /* Fetch first item, modify and commit */
+        Object item = container.getItem(container.getItemIds().iterator()
+                .next());
+        Assert.assertNotNull(item);
+
+        RowItem ri = (RowItem) item;
+        Assert.assertNotNull(ri.getItemProperty("NAME"));
+        ri.getItemProperty("NAME").setValue("Viljami");
+
+        container.commit();
+
+        // Check that the size is still correct and only 1 'Viljami' is found
+        Assert.assertEquals(4, tQuery.getCount());
+        Assert.assertEquals(4, container.size());
+        tQuery.setFilters(filters);
+        Assert.assertEquals(1, tQuery.getCount());
+    }
+
+    @Test
+    public void storeRow_noVersionColumn_shouldSucceed()
+            throws UnsupportedOperationException, SQLException {
+        TableQuery tQuery = new TableQuery("people", connectionPool,
+                AllTests.sqlGen);
+        SQLContainer container = new SQLContainer(tQuery);
+        Object id = container.addItem();
+        RowItem row = (RowItem) container.getItem(id);
+        row.getItemProperty("NAME").setValue("R2D2");
+        row.getItemProperty("AGE").setValue(123);
+        tQuery.beginTransaction();
+        tQuery.storeRow(row);
+        tQuery.commit();
+
+        Connection conn = connectionPool.reserveConnection();
+        PreparedStatement stmt = conn
+                .prepareStatement("SELECT * FROM PEOPLE WHERE \"NAME\" = ?");
+        stmt.setString(1, "R2D2");
+        ResultSet rs = stmt.executeQuery();
+        Assert.assertTrue(rs.next());
+        rs.close();
+        stmt.close();
+        connectionPool.releaseConnection(conn);
+    }
+
+    @Test
+    public void storeRow_versionSetAndEqualToDBValue_shouldSucceed()
+            throws SQLException {
+        DataGenerator.addVersionedData(connectionPool);
+
+        TableQuery tQuery = new TableQuery("versioned", connectionPool,
+                AllTests.sqlGen);
+        tQuery.setVersionColumn("VERSION");
+        SQLContainer container = new SQLContainer(tQuery);
+        RowItem row = (RowItem) container.getItem(container.firstItemId());
+        Assert.assertEquals("Junk", row.getItemProperty("TEXT").getValue());
+
+        row.getItemProperty("TEXT").setValue("asdf");
+        container.commit();
+
+        Connection conn = connectionPool.reserveConnection();
+        PreparedStatement stmt = conn
+                .prepareStatement("SELECT * FROM VERSIONED WHERE \"TEXT\" = ?");
+        stmt.setString(1, "asdf");
+        ResultSet rs = stmt.executeQuery();
+        Assert.assertTrue(rs.next());
+        rs.close();
+        stmt.close();
+        conn.commit();
+        connectionPool.releaseConnection(conn);
+    }
+
+    @Test(expected = OptimisticLockException.class)
+    public void storeRow_versionSetAndLessThanDBValue_shouldThrowException()
+            throws SQLException {
+        if (AllTests.db == DB.HSQLDB) {
+            throw new OptimisticLockException(
+                    "HSQLDB doesn't support row versioning for optimistic locking - don't run this test.",
+                    null);
+        }
+        DataGenerator.addVersionedData(connectionPool);
+
+        TableQuery tQuery = new TableQuery("versioned", connectionPool,
+                AllTests.sqlGen);
+        tQuery.setVersionColumn("VERSION");
+        SQLContainer container = new SQLContainer(tQuery);
+        RowItem row = (RowItem) container.getItem(container.firstItemId());
+        Assert.assertEquals("Junk", row.getItemProperty("TEXT").getValue());
+
+        row.getItemProperty("TEXT").setValue("asdf");
+
+        // Update the version using another connection.
+        Connection conn = connectionPool.reserveConnection();
+        PreparedStatement stmt = conn
+                .prepareStatement("UPDATE VERSIONED SET \"TEXT\" = ? WHERE \"ID\" = ?");
+        stmt.setString(1, "foo");
+        stmt.setObject(2, row.getItemProperty("ID").getValue());
+        stmt.executeUpdate();
+        stmt.close();
+        conn.commit();
+        connectionPool.releaseConnection(conn);
+
+        container.commit();
+    }
+
+    @Test
+    public void removeRow_versionSetAndEqualToDBValue_shouldSucceed()
+            throws SQLException {
+        DataGenerator.addVersionedData(connectionPool);
+
+        TableQuery tQuery = new TableQuery("versioned", connectionPool,
+                AllTests.sqlGen);
+        tQuery.setVersionColumn("VERSION");
+        SQLContainer container = new SQLContainer(tQuery);
+        RowItem row = (RowItem) container.getItem(container.firstItemId());
+        Assert.assertEquals("Junk", row.getItemProperty("TEXT").getValue());
+
+        container.removeItem(container.firstItemId());
+        container.commit();
+
+        Connection conn = connectionPool.reserveConnection();
+        PreparedStatement stmt = conn
+                .prepareStatement("SELECT * FROM VERSIONED WHERE \"TEXT\" = ?");
+        stmt.setString(1, "Junk");
+        ResultSet rs = stmt.executeQuery();
+        Assert.assertFalse(rs.next());
+        rs.close();
+        stmt.close();
+        conn.commit();
+        connectionPool.releaseConnection(conn);
+    }
+
+    @Test(expected = OptimisticLockException.class)
+    public void removeRow_versionSetAndLessThanDBValue_shouldThrowException()
+            throws SQLException {
+        if (AllTests.db == AllTests.DB.HSQLDB) {
+            // HSQLDB doesn't support versioning, so this is to make the test
+            // green.
+            throw new OptimisticLockException(null);
+        }
+        DataGenerator.addVersionedData(connectionPool);
+
+        TableQuery tQuery = new TableQuery("versioned", connectionPool,
+                AllTests.sqlGen);
+        tQuery.setVersionColumn("VERSION");
+        SQLContainer container = new SQLContainer(tQuery);
+        RowItem row = (RowItem) container.getItem(container.firstItemId());
+        Assert.assertEquals("Junk", row.getItemProperty("TEXT").getValue());
+
+        // Update the version using another connection.
+        Connection conn = connectionPool.reserveConnection();
+        PreparedStatement stmt = conn
+                .prepareStatement("UPDATE VERSIONED SET \"TEXT\" = ? WHERE \"ID\" = ?");
+        stmt.setString(1, "asdf");
+        stmt.setObject(2, row.getItemProperty("ID").getValue());
+        stmt.executeUpdate();
+        stmt.close();
+        conn.commit();
+        connectionPool.releaseConnection(conn);
+
+        container.removeItem(container.firstItemId());
+        container.commit();
+    }
+
+    @Test
+    public void removeRow_throwsOptimisticLockException_shouldStillWork()
+            throws SQLException {
+        if (AllTests.db == AllTests.DB.HSQLDB) {
+            // HSQLDB doesn't support versioning, so this is to make the test
+            // green.
+            return;
+        }
+        DataGenerator.addVersionedData(connectionPool);
+
+        TableQuery tQuery = new TableQuery("versioned", connectionPool,
+                AllTests.sqlGen);
+        tQuery.setVersionColumn("VERSION");
+        SQLContainer container = new SQLContainer(tQuery);
+        RowItem row = (RowItem) container.getItem(container.firstItemId());
+        Assert.assertEquals("Junk", row.getItemProperty("TEXT").getValue());
+
+        // Update the version using another connection.
+        Connection conn = connectionPool.reserveConnection();
+        PreparedStatement stmt = conn
+                .prepareStatement("UPDATE VERSIONED SET \"TEXT\" = ? WHERE \"ID\" = ?");
+        stmt.setString(1, "asdf");
+        stmt.setObject(2, row.getItemProperty("ID").getValue());
+        stmt.executeUpdate();
+        stmt.close();
+        conn.commit();
+        connectionPool.releaseConnection(conn);
+
+        Object itemToRemove = container.firstItemId();
+        try {
+            container.removeItem(itemToRemove);
+            container.commit();
+        } catch (OptimisticLockException e) {
+            // This is expected, refresh and try again.
+            container.rollback();
+            container.removeItem(itemToRemove);
+            container.commit();
+        }
+        Object id = container.addItem();
+        RowItem item = (RowItem) container.getItem(id);
+        item.getItemProperty("TEXT").setValue("foo");
+        container.commit();
+    }
+
+}
\ No newline at end of file
diff --git a/tests/server-side/com/vaadin/terminal/gwt/server/TestAbstractApplicationServletStaticFilesLocation.java b/tests/server-side/com/vaadin/terminal/gwt/server/TestAbstractApplicationServletStaticFilesLocation.java
new file mode 100644
index 0000000000..fcd9970717
--- /dev/null
+++ b/tests/server-side/com/vaadin/terminal/gwt/server/TestAbstractApplicationServletStaticFilesLocation.java
@@ -0,0 +1,205 @@
+package com.vaadin.terminal.gwt.server;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.Properties;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+
+import junit.framework.TestCase;
+
+import com.vaadin.terminal.gwt.server.AbstractApplicationServlet;
+import com.vaadin.terminal.gwt.server.ApplicationServlet;
+
+public class TestAbstractApplicationServletStaticFilesLocation extends TestCase {
+
+    ApplicationServlet servlet;
+
+    private Method getStaticFilesLocationMethod;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        servlet = new ApplicationServlet();
+
+        // Workaround to avoid calling init and creating servlet config
+        Field f = AbstractApplicationServlet.class
+                .getDeclaredField("applicationProperties");
+        f.setAccessible(true);
+        f.set(servlet, new Properties());
+
+        getStaticFilesLocationMethod = AbstractApplicationServlet.class
+                .getDeclaredMethod(
+                        "getStaticFilesLocation",
+                        new Class[] { javax.servlet.http.HttpServletRequest.class });
+        getStaticFilesLocationMethod.setAccessible(true);
+
+    }
+
+    public class DummyServletConfig implements ServletConfig {
+
+        // public DummyServletConfig(Map<String,String> initParameters, )
+        public String getInitParameter(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public Enumeration<Object> getInitParameterNames() {
+            return new Enumeration<Object>() {
+
+                public boolean hasMoreElements() {
+                    return false;
+                }
+
+                public Object nextElement() {
+                    return null;
+                }
+            };
+        }
+
+        public ServletContext getServletContext() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public String getServletName() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+    }
+
+    public void testWidgetSetLocation() throws Exception {
+        String location;
+
+        /* SERVLETS */
+        // http://dummy.host:8080/contextpath/servlet
+        // should return /contextpath
+        location = testLocation("http://dummy.host:8080", "/contextpath",
+                "/servlet", "");
+        assertEquals("/contextpath", location);
+
+        // http://dummy.host:8080/servlet
+        // should return ""
+        location = testLocation("http://dummy.host:8080", "", "/servlet", "");
+        assertEquals("", location);
+
+        // http://dummy.host/contextpath/servlet/extra/stuff
+        // should return /contextpath
+        location = testLocation("http://dummy.host", "/contextpath",
+                "/servlet", "/extra/stuff");
+        assertEquals("/contextpath", location);
+
+        // http://dummy.host/context/path/servlet/extra/stuff
+        // should return /context/path
+        location = testLocation("http://dummy.host", "/context/path",
+                "/servlet", "/extra/stuff");
+        assertEquals("/context/path", location);
+
+        /* Include requests */
+        location = testIncludedLocation("http://my.portlet.server", "/user",
+                "/tmpservletlocation1", "");
+        assertEquals("Wrong widgetset location", "/user", location);
+
+    }
+
+    private String testLocation(String base, String contextPath,
+            String servletPath, String pathInfo) throws Exception {
+
+        HttpServletRequest request = createNonIncludeRequest(base, contextPath,
+                servletPath, pathInfo);
+        // Set request into replay mode
+        replay(request);
+
+        String location = (String) getStaticFilesLocationMethod.invoke(servlet,
+                request);
+        return location;
+    }
+
+    private String testIncludedLocation(String base, String portletContextPath,
+            String servletPath, String pathInfo) throws Exception {
+
+        HttpServletRequest request = createIncludeRequest(base,
+                portletContextPath, servletPath, pathInfo);
+        // Set request into replay mode
+        replay(request);
+
+        String location = (String) getStaticFilesLocationMethod.invoke(servlet,
+                request);
+        return location;
+    }
+
+    private HttpServletRequest createIncludeRequest(String base,
+            String realContextPath, String realServletPath, String pathInfo)
+            throws Exception {
+        HttpServletRequest request = createRequest(base, "", "", pathInfo);
+        expect(request.getAttribute("javax.servlet.include.context_path"))
+                .andReturn(realContextPath).anyTimes();
+        expect(request.getAttribute("javax.servlet.include.servlet_path"))
+                .andReturn(realServletPath).anyTimes();
+        expect(
+                request.getAttribute(AbstractApplicationServlet.REQUEST_VAADIN_STATIC_FILE_PATH))
+                .andReturn(null).anyTimes();
+
+        return request;
+    }
+
+    private HttpServletRequest createNonIncludeRequest(String base,
+            String realContextPath, String realServletPath, String pathInfo)
+            throws Exception {
+        HttpServletRequest request = createRequest(base, realContextPath,
+                realServletPath, pathInfo);
+        expect(request.getAttribute("javax.servlet.include.context_path"))
+                .andReturn(null).anyTimes();
+        expect(request.getAttribute("javax.servlet.include.servlet_path"))
+                .andReturn(null).anyTimes();
+        expect(
+                request.getAttribute(ApplicationServlet.REQUEST_VAADIN_STATIC_FILE_PATH))
+                .andReturn(null).anyTimes();
+
+        return request;
+    }
+
+    /**
+     * Creates a HttpServletRequest mock using the supplied parameters.
+     * 
+     * @param base
+     *            The base url, e.g. http://localhost:8080
+     * @param contextPath
+     *            The context path where the application is deployed, e.g.
+     *            /mycontext
+     * @param servletPath
+     *            The servlet path to the servlet we are testing, e.g. /myapp
+     * @param pathInfo
+     *            Any text following the servlet path in the request, not
+     *            including query parameters, e.g. /UIDL/
+     * @return A mock HttpServletRequest object useful for testing
+     * @throws MalformedURLException
+     */
+    private HttpServletRequest createRequest(String base, String contextPath,
+            String servletPath, String pathInfo) throws MalformedURLException {
+        URL url = new URL(base + contextPath + pathInfo);
+        HttpServletRequest request = createMock(HttpServletRequest.class);
+        expect(request.isSecure()).andReturn(
+                url.getProtocol().equalsIgnoreCase("https")).anyTimes();
+        expect(request.getServerName()).andReturn(url.getHost()).anyTimes();
+        expect(request.getServerPort()).andReturn(url.getPort()).anyTimes();
+        expect(request.getRequestURI()).andReturn(url.getPath()).anyTimes();
+        expect(request.getContextPath()).andReturn(contextPath).anyTimes();
+        expect(request.getPathInfo()).andReturn(pathInfo).anyTimes();
+        expect(request.getServletPath()).andReturn(servletPath).anyTimes();
+
+        return request;
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/tests/server/IndexedContainerListeners.java b/tests/server-side/com/vaadin/tests/server/IndexedContainerListeners.java
new file mode 100644
index 0000000000..2dc0caade3
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/IndexedContainerListeners.java
@@ -0,0 +1,20 @@
+package com.vaadin.tests.server;
+
+import com.vaadin.data.Container.PropertySetChangeEvent;
+import com.vaadin.data.Container.PropertySetChangeListener;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+
+public class IndexedContainerListeners extends AbstractListenerMethodsTest {
+    public void testValueChangeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(IndexedContainer.class,
+                ValueChangeEvent.class, ValueChangeListener.class);
+    }
+
+    public void testPropertySetChangeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(IndexedContainer.class,
+                PropertySetChangeEvent.class, PropertySetChangeListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/LicenseInJavaFiles.java b/tests/server-side/com/vaadin/tests/server/LicenseInJavaFiles.java
new file mode 100644
index 0000000000..f6b53f682b
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/LicenseInJavaFiles.java
@@ -0,0 +1,54 @@
+package com.vaadin.tests.server;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.HashSet;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.commons.io.IOUtils;
+
+public class LicenseInJavaFiles extends TestCase {
+
+    /**
+     * The tests are run in the build directory.
+     */
+    public static String SRC_DIR = "../src";
+
+    public void testJavaFilesContainsLicense() throws IOException {
+        File srcDir = new File(SRC_DIR);
+        System.out.println(new File(".").getAbsolutePath());
+        HashSet<String> missing = new HashSet<String>();
+        checkForLicense(srcDir, missing);
+        if (!missing.isEmpty()) {
+            throw new RuntimeException(
+                    "The following files are missing license information:\n"
+                            + missing.toString());
+        }
+    }
+
+    private void checkForLicense(File srcDir, HashSet<String> missing)
+            throws IOException {
+        Assert.assertTrue("Source directory " + srcDir + " does not exist",
+                srcDir.exists());
+
+        for (File f : srcDir.listFiles()) {
+            if (f.isDirectory()) {
+                checkForLicense(f, missing);
+            } else if (f.getName().endsWith(".java")) {
+                checkForLicenseInFile(f, missing);
+            }
+        }
+    }
+
+    private void checkForLicenseInFile(File f, HashSet<String> missing)
+            throws IOException {
+        String contents = IOUtils.toString(new FileInputStream(f));
+        if (!contents.contains("@" + "ITMillApache2LicenseForJavaFiles" + "@")) {
+            missing.add(f.getPath());
+        }
+
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/PropertysetItemListeners.java b/tests/server-side/com/vaadin/tests/server/PropertysetItemListeners.java
new file mode 100644
index 0000000000..69cbbbfb7c
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/PropertysetItemListeners.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.server;
+
+import com.vaadin.data.Item.PropertySetChangeEvent;
+import com.vaadin.data.Item.PropertySetChangeListener;
+import com.vaadin.data.util.PropertysetItem;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+
+public class PropertysetItemListeners extends AbstractListenerMethodsTest {
+    public void testPropertySetChangeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(PropertysetItem.class,
+                PropertySetChangeEvent.class, PropertySetChangeListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/TestAbstractBeanContainerListeners.java b/tests/server-side/com/vaadin/tests/server/TestAbstractBeanContainerListeners.java
new file mode 100644
index 0000000000..ae70757b3e
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/TestAbstractBeanContainerListeners.java
@@ -0,0 +1,15 @@
+package com.vaadin.tests.server;
+
+import com.vaadin.data.Container.PropertySetChangeEvent;
+import com.vaadin.data.Container.PropertySetChangeListener;
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+
+public class TestAbstractBeanContainerListeners extends AbstractListenerMethodsTest {
+    public void testPropertySetChangeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(BeanItemContainer.class,
+                PropertySetChangeEvent.class, PropertySetChangeListener.class,
+                new BeanItemContainer<PropertySetChangeListener>(
+                        PropertySetChangeListener.class));
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/TestAbstractContainerListeners.java b/tests/server-side/com/vaadin/tests/server/TestAbstractContainerListeners.java
new file mode 100644
index 0000000000..d10c5d7791
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/TestAbstractContainerListeners.java
@@ -0,0 +1,21 @@
+package com.vaadin.tests.server;
+
+import com.vaadin.data.Container.ItemSetChangeEvent;
+import com.vaadin.data.Container.ItemSetChangeListener;
+import com.vaadin.data.Container.PropertySetChangeEvent;
+import com.vaadin.data.Container.PropertySetChangeListener;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+
+public class TestAbstractContainerListeners extends AbstractListenerMethodsTest {
+
+    public void testItemSetChangeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(IndexedContainer.class,
+                ItemSetChangeEvent.class, ItemSetChangeListener.class);
+    }
+
+    public void testPropertySetChangeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(IndexedContainer.class,
+                PropertySetChangeEvent.class, PropertySetChangeListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/TestAbstractInMemoryContainerListeners.java b/tests/server-side/com/vaadin/tests/server/TestAbstractInMemoryContainerListeners.java
new file mode 100644
index 0000000000..754f152936
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/TestAbstractInMemoryContainerListeners.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.server;
+
+import com.vaadin.data.Container.ItemSetChangeEvent;
+import com.vaadin.data.Container.ItemSetChangeListener;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+
+public class TestAbstractInMemoryContainerListeners extends AbstractListenerMethodsTest {
+    public void testItemSetChangeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(IndexedContainer.class,
+                ItemSetChangeEvent.class, ItemSetChangeListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/TestAbstractPropertyListeners.java b/tests/server-side/com/vaadin/tests/server/TestAbstractPropertyListeners.java
new file mode 100644
index 0000000000..58dee08643
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/TestAbstractPropertyListeners.java
@@ -0,0 +1,24 @@
+package com.vaadin.tests.server;
+
+import com.vaadin.data.Property.ReadOnlyStatusChangeEvent;
+import com.vaadin.data.Property.ReadOnlyStatusChangeListener;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.AbstractProperty;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+
+public class TestAbstractPropertyListeners extends AbstractListenerMethodsTest {
+    public void testValueChangeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(AbstractProperty.class,
+                ValueChangeEvent.class, ValueChangeListener.class,
+                new ObjectProperty<String>(""));
+    }
+
+    public void testReadOnlyStatusChangeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(AbstractProperty.class,
+                ReadOnlyStatusChangeEvent.class,
+                ReadOnlyStatusChangeListener.class, new ObjectProperty<String>(
+                        ""));
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/TestClassesSerializable.java b/tests/server-side/com/vaadin/tests/server/TestClassesSerializable.java
new file mode 100644
index 0000000000..f7beafb927
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/TestClassesSerializable.java
@@ -0,0 +1,241 @@
+package com.vaadin.tests.server;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+import junit.framework.TestCase;
+
+public class TestClassesSerializable extends TestCase {
+
+    /**
+     * JARs that will be scanned for classes to test, in addition to classpath
+     * directories.
+     */
+    private static String JAR_PATTERN = ".*vaadin.*\\.jar";
+
+    private static String[] BASE_PACKAGES = { "com.vaadin" };
+
+    private static String[] EXCLUDED_PATTERNS = {
+            "com\\.vaadin\\.demo\\..*", //
+            "com\\.vaadin\\.external\\.org\\.apache\\.commons\\.fileupload\\..*", //
+            "com\\.vaadin\\.launcher\\..*", //
+            "com\\.vaadin\\.terminal\\.gwt\\.client\\..*", //
+            "com\\.vaadin\\.terminal\\.gwt\\.widgetsetutils\\..*", //
+            "com\\.vaadin\\.tests\\..*", // exclude automated tests
+            "com\\.vaadin\\.tools\\..*", //
+            "com\\.vaadin\\.ui\\.themes\\..*", //
+            // exact class level filtering
+            "com\\.vaadin\\.event\\.FieldEvents", //
+            "com\\.vaadin\\.event\\.LayoutEvents", //
+            "com\\.vaadin\\.event\\.MouseEvents", //
+            "com\\.vaadin\\.terminal\\.gwt\\.server\\.AbstractApplicationPortlet", //
+            "com\\.vaadin\\.terminal\\.gwt\\.server\\.ApplicationPortlet2", //
+            "com\\.vaadin\\.terminal\\.gwt\\.server\\.Constants", //
+            "com\\.vaadin\\.util\\.SerializerHelper", // fully static
+            // class level filtering, also affecting nested classes and
+            // interfaces
+            "com\\.vaadin\\.terminal\\.gwt\\.server\\.AbstractCommunicationManager.*", //
+            "com\\.vaadin\\.terminal\\.gwt\\.server\\.ApplicationRunnerServlet.*", //
+            "com\\.vaadin\\.terminal\\.gwt\\.server\\.CommunicationManager.*", //
+            "com\\.vaadin\\.terminal\\.gwt\\.server\\.PortletCommunicationManager.*", //
+    };
+
+    /**
+     * Tests that all the relevant classes and interfaces under
+     * {@link #BASE_PACKAGES} implement Serializable.
+     * 
+     * @throws Exception
+     */
+    public void testClassesSerializable() throws Exception {
+        List<String> rawClasspathEntries = getRawClasspathEntries();
+
+        List<String> classes = new ArrayList<String>();
+        for (String location : rawClasspathEntries) {
+            classes.addAll(findServerClasses(location));
+        }
+
+        ArrayList<Class<?>> nonSerializableClasses = new ArrayList<Class<?>>();
+        for (String className : classes) {
+            Class<?> cls = Class.forName(className);
+            // skip annotations and synthetic classes
+            if (cls.isAnnotation() || cls.isSynthetic()) {
+                continue;
+            }
+            // report non-serializable classes and interfaces
+            if (!Serializable.class.isAssignableFrom(cls)) {
+                nonSerializableClasses.add(cls);
+                // TODO easier to read when testing
+                // System.err.println(cls);
+            }
+        }
+
+        // useful failure message including all non-serializable classes and
+        // interfaces
+        if (!nonSerializableClasses.isEmpty()) {
+            String nonSerializableString = "";
+            Iterator<Class<?>> it = nonSerializableClasses.iterator();
+            nonSerializableString = it.next().getName();
+            while (it.hasNext()) {
+                nonSerializableString += ", " + it.next().getName();
+            }
+            fail("Serializable not implemented by the following classes and interfaces: "
+                    + nonSerializableString);
+        }
+    }
+
+    /**
+     * Lists all class path entries by splitting the class path string.
+     * 
+     * Adapted from ClassPathExplorer.getRawClasspathEntries(), but without
+     * filtering.
+     * 
+     * @return List of class path segment strings
+     */
+    //
+    private final static List<String> getRawClasspathEntries() {
+        // try to keep the order of the classpath
+        List<String> locations = new ArrayList<String>();
+
+        String pathSep = System.getProperty("path.separator");
+        String classpath = System.getProperty("java.class.path");
+
+        if (classpath.startsWith("\"")) {
+            classpath = classpath.substring(1);
+        }
+        if (classpath.endsWith("\"")) {
+            classpath = classpath.substring(0, classpath.length() - 1);
+        }
+
+        String[] split = classpath.split(pathSep);
+        for (int i = 0; i < split.length; i++) {
+            String classpathEntry = split[i];
+            locations.add(classpathEntry);
+        }
+
+        return locations;
+    }
+
+    /**
+     * Finds the server side classes/interfaces under a class path entry -
+     * either a directory or a JAR that matches {@link #JAR_PATTERN}.
+     * 
+     * Only classes under {@link #BASE_PACKAGES} are considered, and those
+     * matching {@link #EXCLUDED_PATTERNS} are filtered out.
+     * 
+     * @param classpathEntry
+     * @return
+     * @throws IOException
+     */
+    private List<String> findServerClasses(String classpathEntry)
+            throws IOException {
+        Collection<String> classes = new ArrayList<String>();
+
+        File file = new File(classpathEntry);
+        if (file.isDirectory()) {
+            classes = findClassesInDirectory(null, file);
+        } else if (file.getName().matches(JAR_PATTERN)) {
+            classes = findClassesInJar(file);
+        } else {
+            System.out.println("Ignoring " + classpathEntry);
+            return Collections.emptyList();
+        }
+
+        List<String> filteredClasses = new ArrayList<String>();
+        for (String className : classes) {
+            boolean ok = false;
+            for (String basePackage : BASE_PACKAGES) {
+                if (className.startsWith(basePackage + ".")) {
+                    ok = true;
+                    break;
+                }
+            }
+            for (String excludedPrefix : EXCLUDED_PATTERNS) {
+                if (className.matches(excludedPrefix)) {
+                    ok = false;
+                    break;
+                }
+            }
+            if (ok) {
+                filteredClasses.add(className);
+            }
+        }
+
+        return filteredClasses;
+    }
+
+    /**
+     * Lists class names (based on .class files) in a JAR file.
+     * 
+     * @param file
+     *            a valid JAR file
+     * @return collection of fully qualified class names in the JAR
+     * @throws IOException
+     */
+    private Collection<String> findClassesInJar(File file) throws IOException {
+        Collection<String> classes = new ArrayList<String>();
+
+        JarFile jar = new JarFile(file);
+        Enumeration<JarEntry> e = jar.entries();
+        while (e.hasMoreElements()) {
+            JarEntry entry = e.nextElement();
+            if (entry.getName().endsWith(".class")) {
+                String nameWithoutExtension = entry.getName().replaceAll(
+                        "\\.class", "");
+                String className = nameWithoutExtension.replace('/', '.');
+                classes.add(className);
+            }
+        }
+        return classes;
+    }
+
+    /**
+     * Lists class names (based on .class files) in a directory (a package path
+     * root).
+     * 
+     * @param parentPackage
+     *            parent package name or null at root of hierarchy, used by
+     *            recursion
+     * @param parent
+     *            File representing the directory to scan
+     * @return collection of fully qualified class names in the directory
+     */
+    private final static Collection<String> findClassesInDirectory(
+            String parentPackage, File parent) {
+        if (parent.isHidden()
+                || parent.getPath().contains(File.separator + ".")) {
+            return Collections.emptyList();
+        }
+
+        if (parentPackage == null) {
+            parentPackage = "";
+        } else {
+            parentPackage += ".";
+        }
+
+        Collection<String> classNames = new ArrayList<String>();
+
+        // add all directories recursively
+        File[] files = parent.listFiles();
+        for (File child : files) {
+            if (child.isDirectory()) {
+                classNames.addAll(findClassesInDirectory(
+                        parentPackage + child.getName(), child));
+            } else if (child.getName().endsWith(".class")) {
+                classNames.add(parentPackage.replace(File.separatorChar, '.')
+                        + child.getName().replaceAll("\\.class", ""));
+            }
+        }
+
+        return classNames;
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/tests/server/TestEventRouter.java b/tests/server-side/com/vaadin/tests/server/TestEventRouter.java
new file mode 100644
index 0000000000..dc388a66ac
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/TestEventRouter.java
@@ -0,0 +1,37 @@
+package com.vaadin.tests.server;
+
+import junit.framework.TestCase;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.ui.TextField;
+
+public class TestEventRouter extends TestCase {
+
+    int innerListenerCalls = 0;
+
+    public void testAddInEventListener() {
+        final TextField tf = new TextField();
+
+        final ValueChangeListener outer = new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                ValueChangeListener inner = new ValueChangeListener() {
+
+                    public void valueChange(ValueChangeEvent event) {
+                        innerListenerCalls++;
+                        System.out.println("The inner listener was called");
+                    }
+                };
+
+                tf.addListener(inner);
+            }
+        };
+
+        tf.addListener(outer);
+        tf.setValue("abc"); // No inner listener calls, adds one inner
+        tf.setValue("def"); // One inner listener call, adds one inner
+        tf.setValue("ghi"); // Two inner listener calls, adds one inner
+        assert (innerListenerCalls == 3);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/TestFileTypeResolver.java b/tests/server-side/com/vaadin/tests/server/TestFileTypeResolver.java
new file mode 100644
index 0000000000..8a368ead53
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/TestFileTypeResolver.java
@@ -0,0 +1,79 @@
+package com.vaadin.tests.server;
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+import com.vaadin.service.FileTypeResolver;
+
+public class TestFileTypeResolver extends TestCase {
+
+    private static final String FLASH_MIME_TYPE = "application/x-shockwave-flash";
+    private static final String TEXT_MIME_TYPE = "text/plain";
+    private static final String HTML_MIME_TYPE = "text/html";
+
+    public void testMimeTypes() {
+        File plainFlash = new File("MyFlash.swf");
+        File plainText = new File("/a/b/MyFlash.txt");
+        File plainHtml = new File("c:\\MyFlash.html");
+
+        // Flash
+        assertEquals(
+                FileTypeResolver.getMIMEType(plainFlash.getAbsolutePath()),
+                FLASH_MIME_TYPE);
+        assertEquals(
+                FileTypeResolver.getMIMEType(plainFlash.getAbsolutePath()
+                        + "?param1=value1"), FLASH_MIME_TYPE);
+        assertEquals(
+                FileTypeResolver.getMIMEType(plainFlash.getAbsolutePath()
+                        + "?param1=value1&param2=value2"), FLASH_MIME_TYPE);
+
+        // Plain text
+        assertEquals(FileTypeResolver.getMIMEType(plainText.getAbsolutePath()),
+                TEXT_MIME_TYPE);
+        assertEquals(
+                FileTypeResolver.getMIMEType(plainText.getAbsolutePath()
+                        + "?param1=value1"), TEXT_MIME_TYPE);
+        assertEquals(
+                FileTypeResolver.getMIMEType(plainText.getAbsolutePath()
+                        + "?param1=value1&param2=value2"), TEXT_MIME_TYPE);
+
+        // Plain text
+        assertEquals(FileTypeResolver.getMIMEType(plainHtml.getAbsolutePath()),
+                HTML_MIME_TYPE);
+        assertEquals(
+                FileTypeResolver.getMIMEType(plainHtml.getAbsolutePath()
+                        + "?param1=value1"), HTML_MIME_TYPE);
+        assertEquals(
+                FileTypeResolver.getMIMEType(plainHtml.getAbsolutePath()
+                        + "?param1=value1&param2=value2"), HTML_MIME_TYPE);
+
+        // Filename missing
+        assertEquals(FileTypeResolver.DEFAULT_MIME_TYPE,
+                FileTypeResolver.getMIMEType(""));
+        assertEquals(FileTypeResolver.DEFAULT_MIME_TYPE,
+                FileTypeResolver.getMIMEType("?param1"));
+
+    }
+
+    public void testExtensionCase() {
+        assertEquals("image/jpeg", FileTypeResolver.getMIMEType("abc.jpg"));
+        assertEquals("image/jpeg", FileTypeResolver.getMIMEType("abc.jPg"));
+        assertEquals("image/jpeg", FileTypeResolver.getMIMEType("abc.JPG"));
+        assertEquals("image/jpeg", FileTypeResolver.getMIMEType("abc.JPEG"));
+        assertEquals("image/jpeg", FileTypeResolver.getMIMEType("abc.Jpeg"));
+        assertEquals("image/jpeg", FileTypeResolver.getMIMEType("abc.JPE"));
+    }
+
+    public void testCustomMimeType() {
+        assertEquals(FileTypeResolver.DEFAULT_MIME_TYPE,
+                FileTypeResolver.getMIMEType("vaadin.foo"));
+
+        FileTypeResolver.addExtension("foo", "Vaadin Foo/Bar");
+        FileTypeResolver.addExtension("FOO2", "Vaadin Foo/Bar2");
+        assertEquals("Vaadin Foo/Bar",
+                FileTypeResolver.getMIMEType("vaadin.foo"));
+        assertEquals("Vaadin Foo/Bar2",
+                FileTypeResolver.getMIMEType("vaadin.Foo2"));
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/TestKeyMapper.java b/tests/server-side/com/vaadin/tests/server/TestKeyMapper.java
new file mode 100644
index 0000000000..02ea45ce7c
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/TestKeyMapper.java
@@ -0,0 +1,102 @@
+package com.vaadin.tests.server;
+
+import java.lang.reflect.Field;
+import java.util.Hashtable;
+
+import junit.framework.TestCase;
+
+import com.vaadin.terminal.KeyMapper;
+
+public class TestKeyMapper extends TestCase {
+
+    public void testAdd() {
+        KeyMapper mapper = new KeyMapper();
+        Object o1 = new Object();
+        Object o2 = new Object();
+        Object o3 = new Object();
+
+        // Create new ids
+        String key1 = mapper.key(o1);
+        String key2 = mapper.key(o2);
+        String key3 = mapper.key(o3);
+
+        assertEquals(mapper.get(key1), o1);
+        assertEquals(mapper.get(key2), o2);
+        assertEquals(mapper.get(key3), o3);
+        assertNotSame(key1, key2);
+        assertNotSame(key1, key3);
+        assertNotSame(key2, key3);
+
+        assertSize(mapper, 3);
+
+        // Key should not add if there already is a mapping
+        assertEquals(mapper.key(o3), key3);
+        assertSize(mapper, 3);
+
+        // Remove -> add should return a new key
+        mapper.remove(o1);
+        String newkey1 = mapper.key(o1);
+        assertNotSame(key1, newkey1);
+
+    }
+
+    public void testRemoveAll() {
+        KeyMapper mapper = new KeyMapper();
+        Object o1 = new Object();
+        Object o2 = new Object();
+        Object o3 = new Object();
+
+        // Create new ids
+        mapper.key(o1);
+        mapper.key(o2);
+        mapper.key(o3);
+
+        assertSize(mapper, 3);
+        mapper.removeAll();
+        assertSize(mapper, 0);
+
+    }
+
+    public void testRemove() {
+        KeyMapper mapper = new KeyMapper();
+        Object o1 = new Object();
+        Object o2 = new Object();
+        Object o3 = new Object();
+
+        // Create new ids
+        mapper.key(o1);
+        mapper.key(o2);
+        mapper.key(o3);
+
+        assertSize(mapper, 3);
+        mapper.remove(o1);
+        assertSize(mapper, 2);
+        mapper.key(o1);
+        assertSize(mapper, 3);
+        mapper.remove(o1);
+        assertSize(mapper, 2);
+
+        mapper.remove(o2);
+        mapper.remove(o3);
+        assertSize(mapper, 0);
+
+    }
+
+    private void assertSize(KeyMapper mapper, int i) {
+        try {
+            Field f1 = KeyMapper.class.getDeclaredField("objectKeyMap");
+            Field f2 = KeyMapper.class.getDeclaredField("keyObjectMap");
+            f1.setAccessible(true);
+            f2.setAccessible(true);
+
+            Hashtable<?, ?> h1 = (Hashtable<?, ?>) f1.get(mapper);
+            Hashtable<?, ?> h2 = (Hashtable<?, ?>) f2.get(mapper);
+
+            assertEquals(i, h1.size());
+            assertEquals(i, h2.size());
+        } catch (Throwable t) {
+            t.printStackTrace();
+            fail();
+        }
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/TestMimeTypes.java b/tests/server-side/com/vaadin/tests/server/TestMimeTypes.java
new file mode 100644
index 0000000000..8231030666
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/TestMimeTypes.java
@@ -0,0 +1,26 @@
+package com.vaadin.tests.server;
+
+import junit.framework.TestCase;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.ClassResource;
+import com.vaadin.ui.Embedded;
+
+public class TestMimeTypes extends TestCase {
+
+    public void testEmbeddedPDF() {
+        Application app = new Application() {
+
+            @Override
+            public void init() {
+                // TODO Auto-generated method stub
+
+            }
+        };
+        Embedded e = new Embedded("A pdf", new ClassResource("file.pddf", app));
+        assertEquals("Invalid mimetype", "application/octet-stream",
+                e.getMimeType());
+        e = new Embedded("A pdf", new ClassResource("file.pdf", app));
+        assertEquals("Invalid mimetype", "application/pdf", e.getMimeType());
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/TestSerialization.java b/tests/server-side/com/vaadin/tests/server/TestSerialization.java
new file mode 100644
index 0000000000..03a9d3e262
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/TestSerialization.java
@@ -0,0 +1,115 @@
+package com.vaadin.tests.server;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+
+import junit.framework.TestCase;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.data.util.MethodProperty;
+import com.vaadin.data.validator.RegexpValidator;
+import com.vaadin.ui.Form;
+
+public class TestSerialization extends TestCase {
+
+    public void testValidators() throws Exception {
+        RegexpValidator validator = new RegexpValidator(".*", "Error");
+        validator.isValid("aaa");
+        RegexpValidator validator2 = (RegexpValidator) serializeAndDeserialize(validator);
+        validator2.isValid("aaa");
+    }
+
+    public void testForm() throws Exception {
+        Form f = new Form();
+        String propertyId = "My property";
+        f.addItemProperty(propertyId, new MethodProperty<Object>(new Data(),
+                "dummyGetterAndSetter"));
+        f.replaceWithSelect(propertyId, new Object[] { "a", "b", null },
+                new String[] { "Item a", "ITem b", "Null item" });
+
+        serializeAndDeserialize(f);
+
+    }
+
+    public void testIndedexContainerItemIds() throws Exception {
+        IndexedContainer ic = new IndexedContainer();
+        ic.addContainerProperty("prop1", String.class, null);
+        Object id = ic.addItem();
+        ic.getItem(id).getItemProperty("prop1").setValue("1");
+
+        Item item2 = ic.addItem("item2");
+        item2.getItemProperty("prop1").setValue("2");
+
+        serializeAndDeserialize(ic);
+    }
+
+    public void testMethodPropertyGetter() throws Exception {
+        MethodProperty<?> mp = new MethodProperty<Object>(new Data(),
+                "dummyGetter");
+        serializeAndDeserialize(mp);
+    }
+
+    public void testMethodPropertyGetterAndSetter() throws Exception {
+        MethodProperty<?> mp = new MethodProperty<Object>(new Data(),
+                "dummyGetterAndSetter");
+        serializeAndDeserialize(mp);
+    }
+
+    public void testMethodPropertyInt() throws Exception {
+        MethodProperty<?> mp = new MethodProperty<Object>(new Data(),
+                "dummyInt");
+        serializeAndDeserialize(mp);
+    }
+
+    private static Serializable serializeAndDeserialize(Serializable s)
+            throws IOException, ClassNotFoundException {
+        // Serialize and deserialize
+
+        ByteArrayOutputStream bs = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream(bs);
+        out.writeObject(s);
+        byte[] data = bs.toByteArray();
+        ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(
+                data));
+        Serializable s2 = (Serializable) in.readObject();
+
+        if (s.equals(s2)) {
+            System.out.println(s + " equals " + s2);
+        } else {
+            System.out.println(s + " does NOT equal " + s2);
+        }
+
+        return s2;
+    }
+
+    public static class Data implements Serializable {
+        private String dummyGetter;
+        private String dummyGetterAndSetter;
+        private int dummyInt;
+
+        public String getDummyGetterAndSetter() {
+            return dummyGetterAndSetter;
+        }
+
+        public void setDummyGetterAndSetter(String dummyGetterAndSetter) {
+            this.dummyGetterAndSetter = dummyGetterAndSetter;
+        }
+
+        public int getDummyInt() {
+            return dummyInt;
+        }
+
+        public void setDummyInt(int dummyInt) {
+            this.dummyInt = dummyInt;
+        }
+
+        public String getDummyGetter() {
+            return dummyGetter;
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/server-side/com/vaadin/tests/server/TestSimpleMultiPartInputStream.java b/tests/server-side/com/vaadin/tests/server/TestSimpleMultiPartInputStream.java
new file mode 100644
index 0000000000..65455eba37
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/TestSimpleMultiPartInputStream.java
@@ -0,0 +1,138 @@
+package com.vaadin.tests.server;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Arrays;
+
+import junit.framework.TestCase;
+
+import com.vaadin.terminal.gwt.server.AbstractCommunicationManager.SimpleMultiPartInputStream;
+
+public class TestSimpleMultiPartInputStream extends TestCase {
+
+    /**
+     * Check that the output for a given stream until boundary is as expected.
+     * 
+     * @param input
+     * @param boundary
+     * @param expected
+     * @throws Exception
+     */
+    protected void checkBoundaryDetection(byte[] input, String boundary,
+            byte[] expected) throws Exception {
+        ByteArrayInputStream bais = new ByteArrayInputStream(input);
+        SimpleMultiPartInputStream smpis = new SimpleMultiPartInputStream(bais,
+                boundary);
+        ByteArrayOutputStream resultStream = new ByteArrayOutputStream();
+        int outbyte;
+        try {
+            while ((outbyte = smpis.read()) != -1) {
+                resultStream.write(outbyte);
+            }
+        } catch (IOException e) {
+            throw new IOException(e.getMessage() + "; expected "
+                    + new String(expected) + " but got "
+                    + resultStream.toString());
+        }
+        if (!Arrays.equals(expected, resultStream.toByteArray())) {
+            throw new Exception("Mismatch: expected " + new String(expected)
+                    + " but got " + resultStream.toString());
+        }
+    }
+
+    protected void checkBoundaryDetection(String input, String boundary,
+            String expected) throws Exception {
+        checkBoundaryDetection(input.getBytes(), boundary, expected.getBytes());
+    }
+
+    public void testSingleByteBoundaryAtEnd() throws Exception {
+        checkBoundaryDetection("xyz123" + getFullBoundary("a"), "a", "xyz123");
+    }
+
+    public void testSingleByteBoundaryInMiddle() throws Exception {
+        checkBoundaryDetection("xyz" + getFullBoundary("a") + "123", "a", "xyz");
+    }
+
+    public void testCorrectBoundaryAtEnd() throws Exception {
+        checkBoundaryDetection("xyz123" + getFullBoundary("abc"), "abc",
+                "xyz123");
+    }
+
+    public void testCorrectBoundaryNearEnd() throws Exception {
+        checkBoundaryDetection("xyz123" + getFullBoundary("abc") + "de", "abc",
+                "xyz123");
+    }
+
+    public void testCorrectBoundaryAtBeginning() throws Exception {
+        checkBoundaryDetection(getFullBoundary("abc") + "xyz123", "abc", "");
+    }
+
+    public void testRepeatingCharacterBoundary() throws Exception {
+        checkBoundaryDetection(getFullBoundary("aa") + "xyz123", "aa", "");
+        checkBoundaryDetection("axyz" + getFullBoundary("aa") + "123", "aa",
+                "axyz");
+        checkBoundaryDetection("xyz123" + getFullBoundary("aa"), "aa", "xyz123");
+    }
+
+    /**
+     * Note, the boundary in this test is invalid. Boundary strings don't
+     * contain CR/LF.
+     * 
+     */
+    // public void testRepeatingNewlineBoundary() throws Exception {
+    // checkBoundaryDetection("1234567890" + getFullBoundary("\n\n")
+    // + "1234567890", "\n\n", "");
+    // }
+
+    public void testRepeatingStringBoundary() throws Exception {
+        checkBoundaryDetection(getFullBoundary("abab") + "xyz123", "abab", "");
+        checkBoundaryDetection("abaxyz" + getFullBoundary("abab") + "123",
+                "abab", "abaxyz");
+        checkBoundaryDetection("xyz123" + getFullBoundary("abab"), "abab",
+                "xyz123");
+    }
+
+    public void testOverlappingBoundary() throws Exception {
+        checkBoundaryDetection("abc" + getFullBoundary("abcabd") + "xyz123",
+                "abcabd", "abc");
+        checkBoundaryDetection("xyzabc" + getFullBoundary("abcabd") + "123",
+                "abcabd", "xyzabc");
+        checkBoundaryDetection("xyz123abc" + getFullBoundary("abcabd"),
+                "abcabd", "xyz123abc");
+    }
+
+    /*
+     * TODO fix these tests, they don't do what their method name says.
+     */
+
+    // public void testNoBoundaryInInput() throws Exception {
+    // try {
+    // checkBoundaryDetection("xyz123", "abc", "xyz123");
+    // fail();
+    // } catch (IOException e) {
+    // }
+    // }
+    //
+    // public void testPartialBoundaryAtInputEnd() throws Exception {
+    // try {
+    // // This should lead to IOException (stream end), not AIOOBE
+    // checkBoundaryDetection("xyz123ab", "abc", "xyz123ab");
+    // fail();
+    // } catch (IOException e) {
+    // }
+    // }
+    //
+    // public void testPartialBoundaryAtInputBeginning() throws Exception {
+    // try {
+    // checkBoundaryDetection("abxyz123", "abc", "abxyz123");
+    // fail();
+    // } catch (IOException e) {
+    // }
+    // }
+
+    public static String getFullBoundary(String str) {
+        return "\r\n--" + str + "--";
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/tests/server/TransactionListenersConcurrency.java b/tests/server-side/com/vaadin/tests/server/TransactionListenersConcurrency.java
new file mode 100644
index 0000000000..3f16bb262b
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/TransactionListenersConcurrency.java
@@ -0,0 +1,185 @@
+package com.vaadin.tests.server;
+
+import static org.easymock.EasyMock.createMock;
+
+import java.lang.Thread.UncaughtExceptionHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.Random;
+
+import javax.servlet.http.HttpSession;
+
+import junit.framework.TestCase;
+
+import org.easymock.EasyMock;
+
+import com.vaadin.Application;
+import com.vaadin.service.ApplicationContext.TransactionListener;
+import com.vaadin.terminal.gwt.server.AbstractWebApplicationContext;
+import com.vaadin.terminal.gwt.server.WebApplicationContext;
+
+public class TransactionListenersConcurrency extends TestCase {
+
+    /**
+     * This test starts N threads concurrently. Each thread creates an
+     * application which adds a transaction listener to the context. A
+     * transaction is then started for each application. Some semi-random delays
+     * are included so that calls to addTransactionListener and
+     * WebApplicationContext.startTransaction are mixed.
+     * 
+     */
+    public void testTransactionListeners() throws Exception {
+        final List<Throwable> exceptions = new ArrayList<Throwable>();
+
+        HttpSession session = createSession();
+        final WebApplicationContext context = WebApplicationContext
+                .getApplicationContext(session);
+        List<Thread> threads = new ArrayList<Thread>();
+
+        for (int i = 0; i < 5; i++) {
+            Thread t = new Thread(new Runnable() {
+
+                public void run() {
+                    Application app = new Application() {
+
+                        @Override
+                        public void init() {
+                            // Sleep 0-1000ms so another transaction has time to
+                            // start before we add the transaction listener.
+                            try {
+                                Thread.sleep((long) (1000 * new Random()
+                                        .nextDouble()));
+                            } catch (InterruptedException e) {
+                                // TODO Auto-generated catch block
+                                e.printStackTrace();
+                            }
+
+                            getContext().addTransactionListener(
+                                    new DelayTransactionListener(2000));
+                        }
+
+                    };
+
+                    // Start the application so the transaction listener is
+                    // called later on.
+                    try {
+
+                        app.start(new URL("http://localhost/"),
+                                new Properties(), context);
+                    } catch (MalformedURLException e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+
+                    try {
+                        // Call the transaction listener using reflection as
+                        // startTransaction is protected.
+
+                        Method m = AbstractWebApplicationContext.class
+                                .getDeclaredMethod("startTransaction",
+                                        Application.class, Object.class);
+                        m.setAccessible(true);
+                        m.invoke(context, app, null);
+                    } catch (Exception e) {
+                        throw new RuntimeException(e);
+                    }
+                }
+
+            });
+
+            threads.add(t);
+            t.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
+
+                public void uncaughtException(Thread t, Throwable e) {
+                    e = e.getCause();
+                    exceptions.add(e);
+                }
+            });
+        }
+
+        // Start the threads and wait for all of them to finish
+        for (Thread t : threads) {
+            t.start();
+        }
+        int running = threads.size();
+
+        while (running > 0) {
+            for (Iterator<Thread> i = threads.iterator(); i.hasNext();) {
+                Thread t = i.next();
+                if (!t.isAlive()) {
+                    running--;
+                    i.remove();
+                }
+            }
+        }
+
+        for (Throwable t : exceptions) {
+            if (t instanceof InvocationTargetException) {
+                t = t.getCause();
+            }
+            t.printStackTrace(System.err);
+            fail(t.getClass().getName());
+        }
+
+        System.out.println("Done, all ok");
+
+    }
+
+    /**
+     * Creates a HttpSession mock
+     * 
+     */
+    private static HttpSession createSession() {
+        HttpSession session = createMock(HttpSession.class);
+        EasyMock.expect(
+                session.getAttribute(WebApplicationContext.class.getName()))
+                .andReturn(null).anyTimes();
+        session.setAttribute(
+                EasyMock.eq(WebApplicationContext.class.getName()),
+                EasyMock.anyObject());
+
+        EasyMock.replay(session);
+        return session;
+    }
+
+    /**
+     * A transaction listener that just sleeps for the given amount of time in
+     * transactionStart and transactionEnd.
+     * 
+     */
+    public static class DelayTransactionListener implements TransactionListener {
+
+        private int delay;
+
+        public DelayTransactionListener(int delay) {
+            this.delay = delay;
+        }
+
+        public void transactionStart(Application application,
+                Object transactionData) {
+            try {
+                Thread.sleep(delay);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+
+        }
+
+        public void transactionEnd(Application application,
+                Object transactionData) {
+            try {
+                Thread.sleep(delay);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+
+        }
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/AbstractListenerMethodsTest.java b/tests/server-side/com/vaadin/tests/server/component/AbstractListenerMethodsTest.java
new file mode 100644
index 0000000000..355f5167d7
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/AbstractListenerMethodsTest.java
@@ -0,0 +1,170 @@
+package com.vaadin.tests.server.component;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import junit.framework.TestCase;
+
+import org.easymock.EasyMock;
+import org.junit.Assert;
+
+import com.vaadin.tests.VaadinClasses;
+import com.vaadin.ui.Component;
+
+public abstract class AbstractListenerMethodsTest extends TestCase {
+
+    public static void main(String[] args) {
+        findAllListenerMethods();
+    }
+
+    private static void findAllListenerMethods() {
+        Set<Class<?>> classes = new HashSet<Class<?>>();
+        for (Class<?> c : VaadinClasses.getAllServerSideClasses()) {
+            while (c != null && c.getName().startsWith("com.vaadin.")) {
+                classes.add(c);
+                c = c.getSuperclass();
+            }
+        }
+
+        for (Class<?> c : classes) {
+            boolean found = false;
+            for (Method m : c.getDeclaredMethods()) {
+                if (m.getName().equals("addListener")) {
+                    if (m.getParameterTypes().length != 1) {
+                        continue;
+                    }
+                    String packageName = "com.vaadin.tests.server";
+                    if (Component.class.isAssignableFrom(c)) {
+                        packageName += ".component."
+                                + c.getSimpleName().toLowerCase();
+                        continue;
+                    }
+
+                    if (!found) {
+                        found = true;
+                        System.out.println("package " + packageName + ";");
+
+                        System.out.println("import "
+                                + AbstractListenerMethodsTest.class.getName() + ";");
+                        System.out.println("import " + c.getName() + ";");
+                        System.out.println("public class " + c.getSimpleName()
+                                + "Listeners extends "
+                                + AbstractListenerMethodsTest.class.getSimpleName() + " {");
+                    }
+
+                    String listenerClassName = m.getParameterTypes()[0]
+                            .getSimpleName();
+                    String eventClassName = listenerClassName.replaceFirst(
+                            "Listener$", "Event");
+                    System.out.println("public void test" + listenerClassName
+                            + "() throws Exception {");
+                    System.out.println("    testListener(" + c.getSimpleName()
+                            + ".class, " + eventClassName + ".class, "
+                            + listenerClassName + ".class);");
+                    System.out.println("}");
+                }
+            }
+            if (found) {
+                System.out.println("}");
+                System.out.println();
+            }
+        }
+    }
+
+    protected void testListenerAddGetRemove(Class<?> testClass,
+            Class<?> eventClass, Class<?> listenerClass) throws Exception {
+        // Create a component for testing
+        Object c = testClass.newInstance();
+        testListenerAddGetRemove(testClass, eventClass, listenerClass, c);
+
+    }
+
+    protected void testListenerAddGetRemove(Class<?> cls, Class<?> eventClass,
+            Class<?> listenerClass, Object c) throws Exception {
+
+        Object mockListener1 = EasyMock.createMock(listenerClass);
+        Object mockListener2 = EasyMock.createMock(listenerClass);
+
+        // Verify we start from no listeners
+        verifyListeners(c, eventClass);
+
+        // Add one listener and verify
+        addListener(c, mockListener1, listenerClass);
+        verifyListeners(c, eventClass, mockListener1);
+
+        // Add another listener and verify
+        addListener(c, mockListener2, listenerClass);
+        verifyListeners(c, eventClass, mockListener1, mockListener2);
+
+        // Ensure we can fetch using parent class also
+        if (eventClass.getSuperclass() != null) {
+            verifyListeners(c, eventClass.getSuperclass(), mockListener1,
+                    mockListener2);
+        }
+
+        // Remove the first and verify
+        removeListener(c, mockListener1, listenerClass);
+        verifyListeners(c, eventClass, mockListener2);
+
+        // Remove the remaining and verify
+        removeListener(c, mockListener2, listenerClass);
+        verifyListeners(c, eventClass);
+
+    }
+
+    private void removeListener(Object c, Object listener,
+            Class<?> listenerClass) throws IllegalArgumentException,
+            IllegalAccessException, InvocationTargetException,
+            SecurityException, NoSuchMethodException {
+        Method method = getRemoveListenerMethod(c.getClass(), listenerClass);
+        method.invoke(c, listener);
+
+    }
+
+    private void addListener(Object c, Object listener1, Class<?> listenerClass)
+            throws IllegalArgumentException, IllegalAccessException,
+            InvocationTargetException, SecurityException, NoSuchMethodException {
+        Method method = getAddListenerMethod(c.getClass(), listenerClass);
+        method.invoke(c, listener1);
+    }
+
+    private Collection<?> getListeners(Object c, Class<?> eventType)
+            throws IllegalArgumentException, IllegalAccessException,
+            InvocationTargetException, SecurityException, NoSuchMethodException {
+        Method method = getGetListenersMethod(c.getClass());
+        return (Collection<?>) method.invoke(c, eventType);
+    }
+
+    private Method getGetListenersMethod(Class<? extends Object> cls)
+            throws SecurityException, NoSuchMethodException {
+        return cls.getMethod("getListeners", Class.class);
+    }
+
+    private Method getAddListenerMethod(Class<?> cls, Class<?> listenerClass)
+            throws SecurityException, NoSuchMethodException {
+        return cls.getMethod("addListener", listenerClass);
+
+    }
+
+    private Method getRemoveListenerMethod(Class<?> cls, Class<?> listenerClass)
+            throws SecurityException, NoSuchMethodException {
+        return cls.getMethod("removeListener", listenerClass);
+
+    }
+
+    private void verifyListeners(Object c, Class<?> eventClass,
+            Object... expectedListeners) throws IllegalArgumentException,
+            SecurityException, IllegalAccessException,
+            InvocationTargetException, NoSuchMethodException {
+        Collection<?> registeredListeners = getListeners(c, eventClass);
+        assertEquals("Number of listeners", expectedListeners.length,
+                registeredListeners.size());
+
+        Assert.assertArrayEquals(expectedListeners,
+                registeredListeners.toArray());
+
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/FinalMethodTest.java b/tests/server-side/com/vaadin/tests/server/component/FinalMethodTest.java
new file mode 100644
index 0000000000..ad80007882
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/FinalMethodTest.java
@@ -0,0 +1,68 @@
+package com.vaadin.tests.server.component;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.HashSet;
+
+import junit.framework.TestCase;
+
+import com.vaadin.tests.VaadinClasses;
+import com.vaadin.ui.Component;
+
+public class FinalMethodTest extends TestCase {
+
+    // public void testThatContainersHaveNoFinalMethods() {
+    // HashSet<Class<?>> tested = new HashSet<Class<?>>();
+    // for (Class<?> c : VaadinClasses.getAllServerSideClasses()) {
+    // if (Container.class.isAssignableFrom(c)) {
+    // ensureNoFinalMethods(c, tested);
+    // }
+    // }
+    // }
+
+    public void testThatComponentsHaveNoFinalMethods() {
+        HashSet<Class<?>> tested = new HashSet<Class<?>>();
+        for (Class<? extends Component> c : VaadinClasses.getComponents()) {
+            ensureNoFinalMethods(c, tested);
+        }
+    }
+
+    private void ensureNoFinalMethods(Class<?> c, HashSet<Class<?>> tested) {
+        if (tested.contains(c)) {
+            return;
+        }
+
+        tested.add(c);
+
+        if (c == Object.class) {
+            return;
+        }
+        System.out.println("Checking " + c.getName());
+        for (Method m : c.getDeclaredMethods()) {
+            if (isPrivate(m)) {
+                continue;
+            }
+            if (isFinal(m)) {
+                String error = "Class " + c.getName() + " contains a "
+                        + (isPublic(m) ? "public" : "non-public")
+                        + " final method: " + m.getName();
+                // System.err.println(error);
+                throw new RuntimeException(error);
+            }
+        }
+        ensureNoFinalMethods(c.getSuperclass(), tested);
+
+    }
+
+    private boolean isFinal(Method m) {
+        return Modifier.isFinal(m.getModifiers());
+    }
+
+    private boolean isPrivate(Method m) {
+        return Modifier.isPrivate(m.getModifiers());
+    }
+
+    private boolean isPublic(Method m) {
+        return Modifier.isPublic(m.getModifiers());
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/absolutelayout/AbsoluteLayoutListeners.java b/tests/server-side/com/vaadin/tests/server/component/absolutelayout/AbsoluteLayoutListeners.java
new file mode 100644
index 0000000000..a569ea03e9
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/absolutelayout/AbsoluteLayoutListeners.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.server.component.absolutelayout;
+
+import com.vaadin.event.LayoutEvents.LayoutClickEvent;
+import com.vaadin.event.LayoutEvents.LayoutClickListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.AbsoluteLayout;
+
+public class AbsoluteLayoutListeners extends AbstractListenerMethodsTest {
+    public void testLayoutClickListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(AbsoluteLayout.class, LayoutClickEvent.class,
+                LayoutClickListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/absolutelayout/ComponentPosition.java b/tests/server-side/com/vaadin/tests/server/component/absolutelayout/ComponentPosition.java
new file mode 100644
index 0000000000..6fc7fbba0d
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/absolutelayout/ComponentPosition.java
@@ -0,0 +1,205 @@
+package com.vaadin.tests.server.component.absolutelayout;
+
+import junit.framework.TestCase;
+
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.Button;
+
+public class ComponentPosition extends TestCase {
+
+    private static final String CSS = "top:7.0px;right:7.0%;bottom:7.0pc;left:7.0em;z-index:7;";
+    private static final String PARTIAL_CSS = "top:7.0px;left:7.0em;";
+    private static final Float CSS_VALUE = Float.valueOf(7);
+
+    private static final int UNIT_UNSET = Sizeable.UNITS_PIXELS;
+
+    /**
+     * Add component w/o giving positions, assert that everything is unset
+     */
+    public void testNoPosition() {
+        AbsoluteLayout layout = new AbsoluteLayout();
+        Button b = new Button();
+        layout.addComponent(b);
+
+        assertNull(layout.getPosition(b).getTopValue());
+        assertNull(layout.getPosition(b).getBottomValue());
+        assertNull(layout.getPosition(b).getLeftValue());
+        assertNull(layout.getPosition(b).getRightValue());
+
+        assertEquals(UNIT_UNSET, layout.getPosition(b).getTopUnits());
+        assertEquals(UNIT_UNSET, layout.getPosition(b).getBottomUnits());
+        assertEquals(UNIT_UNSET, layout.getPosition(b).getLeftUnits());
+        assertEquals(UNIT_UNSET, layout.getPosition(b).getRightUnits());
+
+        assertEquals(-1, layout.getPosition(b).getZIndex());
+
+        assertEquals("", layout.getPosition(b).getCSSString());
+
+    }
+
+    /**
+     * Add component, setting all attributes using CSS, assert getter agree
+     */
+    public void testFullCss() {
+        AbsoluteLayout layout = new AbsoluteLayout();
+        Button b = new Button();
+        layout.addComponent(b, CSS);
+
+        assertEquals(CSS_VALUE, layout.getPosition(b).getTopValue());
+        assertEquals(CSS_VALUE, layout.getPosition(b).getBottomValue());
+        assertEquals(CSS_VALUE, layout.getPosition(b).getLeftValue());
+        assertEquals(CSS_VALUE, layout.getPosition(b).getRightValue());
+
+        assertEquals(Sizeable.UNITS_PIXELS, layout.getPosition(b).getTopUnits());
+        assertEquals(Sizeable.UNITS_PICAS, layout.getPosition(b)
+                .getBottomUnits());
+        assertEquals(Sizeable.UNITS_EM, layout.getPosition(b).getLeftUnits());
+        assertEquals(Sizeable.UNITS_PERCENTAGE, layout.getPosition(b)
+                .getRightUnits());
+
+        assertEquals(7, layout.getPosition(b).getZIndex());
+
+        assertEquals(CSS, layout.getPosition(b).getCSSString());
+
+    }
+
+    /**
+     * Add component, setting some attributes using CSS, assert getters agree
+     */
+    public void testPartialCss() {
+        AbsoluteLayout layout = new AbsoluteLayout();
+        Button b = new Button();
+        layout.addComponent(b, PARTIAL_CSS);
+
+        assertEquals(CSS_VALUE, layout.getPosition(b).getTopValue());
+        assertNull(layout.getPosition(b).getBottomValue());
+        assertEquals(CSS_VALUE, layout.getPosition(b).getLeftValue());
+        assertNull(layout.getPosition(b).getRightValue());
+
+        assertEquals(Sizeable.UNITS_PIXELS, layout.getPosition(b).getTopUnits());
+        assertEquals(UNIT_UNSET, layout.getPosition(b).getBottomUnits());
+        assertEquals(Sizeable.UNITS_EM, layout.getPosition(b).getLeftUnits());
+        assertEquals(UNIT_UNSET, layout.getPosition(b).getRightUnits());
+
+        assertEquals(-1, layout.getPosition(b).getZIndex());
+
+        assertEquals(PARTIAL_CSS, layout.getPosition(b).getCSSString());
+
+    }
+
+    /**
+     * Add component setting all attributes using CSS, then reset using partial
+     * CSS; assert getters agree and the appropriate attributes are unset.
+     */
+    public void testPartialCssReset() {
+        AbsoluteLayout layout = new AbsoluteLayout();
+        Button b = new Button();
+        layout.addComponent(b, CSS);
+
+        layout.getPosition(b).setCSSString(PARTIAL_CSS);
+
+        assertEquals(CSS_VALUE, layout.getPosition(b).getTopValue());
+        assertNull(layout.getPosition(b).getBottomValue());
+        assertEquals(CSS_VALUE, layout.getPosition(b).getLeftValue());
+        assertNull(layout.getPosition(b).getRightValue());
+
+        assertEquals(Sizeable.UNITS_PIXELS, layout.getPosition(b).getTopUnits());
+        assertEquals(UNIT_UNSET, layout.getPosition(b).getBottomUnits());
+        assertEquals(Sizeable.UNITS_EM, layout.getPosition(b).getLeftUnits());
+        assertEquals(UNIT_UNSET, layout.getPosition(b).getRightUnits());
+
+        assertEquals(-1, layout.getPosition(b).getZIndex());
+
+        assertEquals(PARTIAL_CSS, layout.getPosition(b).getCSSString());
+
+    }
+
+    /**
+     * Add component, then set all position attributes with individual setters
+     * for value and units; assert getters agree.
+     */
+    public void testSetPosition() {
+        final Float SIZE = Float.valueOf(12);
+
+        AbsoluteLayout layout = new AbsoluteLayout();
+        Button b = new Button();
+        layout.addComponent(b);
+
+        layout.getPosition(b).setTopValue(SIZE);
+        layout.getPosition(b).setRightValue(SIZE);
+        layout.getPosition(b).setBottomValue(SIZE);
+        layout.getPosition(b).setLeftValue(SIZE);
+
+        layout.getPosition(b).setTopUnits(Sizeable.UNITS_CM);
+        layout.getPosition(b).setRightUnits(Sizeable.UNITS_EX);
+        layout.getPosition(b).setBottomUnits(Sizeable.UNITS_INCH);
+        layout.getPosition(b).setLeftUnits(Sizeable.UNITS_MM);
+
+        assertEquals(SIZE, layout.getPosition(b).getTopValue());
+        assertEquals(SIZE, layout.getPosition(b).getRightValue());
+        assertEquals(SIZE, layout.getPosition(b).getBottomValue());
+        assertEquals(SIZE, layout.getPosition(b).getLeftValue());
+
+        assertEquals(Sizeable.UNITS_CM, layout.getPosition(b).getTopUnits());
+        assertEquals(Sizeable.UNITS_EX, layout.getPosition(b).getRightUnits());
+        assertEquals(Sizeable.UNITS_INCH, layout.getPosition(b)
+                .getBottomUnits());
+        assertEquals(Sizeable.UNITS_MM, layout.getPosition(b).getLeftUnits());
+
+    }
+
+    /**
+     * Add component, then set all position attributes with combined setters for
+     * value and units; assert getters agree.
+     */
+    public void testSetPosition2() {
+        final Float SIZE = Float.valueOf(12);
+        AbsoluteLayout layout = new AbsoluteLayout();
+        Button b = new Button();
+        layout.addComponent(b);
+
+        layout.getPosition(b).setTop(SIZE, Sizeable.UNITS_CM);
+        layout.getPosition(b).setRight(SIZE, Sizeable.UNITS_EX);
+        layout.getPosition(b).setBottom(SIZE, Sizeable.UNITS_INCH);
+        layout.getPosition(b).setLeft(SIZE, Sizeable.UNITS_MM);
+
+        assertEquals(SIZE, layout.getPosition(b).getTopValue());
+        assertEquals(SIZE, layout.getPosition(b).getRightValue());
+        assertEquals(SIZE, layout.getPosition(b).getBottomValue());
+        assertEquals(SIZE, layout.getPosition(b).getLeftValue());
+
+        assertEquals(Sizeable.UNITS_CM, layout.getPosition(b).getTopUnits());
+        assertEquals(Sizeable.UNITS_EX, layout.getPosition(b).getRightUnits());
+        assertEquals(Sizeable.UNITS_INCH, layout.getPosition(b)
+                .getBottomUnits());
+        assertEquals(Sizeable.UNITS_MM, layout.getPosition(b).getLeftUnits());
+
+    }
+
+    /**
+     * Add component, set all attributes using CSS, unset some using method
+     * calls, assert getters agree.
+     */
+    public void testUnsetPosition() {
+        AbsoluteLayout layout = new AbsoluteLayout();
+        Button b = new Button();
+        layout.addComponent(b, CSS);
+
+        layout.getPosition(b).setTopValue(null);
+        layout.getPosition(b).setRightValue(null);
+        layout.getPosition(b).setBottomValue(null);
+        layout.getPosition(b).setLeftValue(null);
+
+        layout.getPosition(b).setZIndex(-1);
+
+        assertNull(layout.getPosition(b).getTopValue());
+        assertNull(layout.getPosition(b).getBottomValue());
+        assertNull(layout.getPosition(b).getLeftValue());
+        assertNull(layout.getPosition(b).getRightValue());
+
+        assertEquals("", layout.getPosition(b).getCSSString());
+
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/abstractcomponent/TestAbstractComponentStyleNames.java b/tests/server-side/com/vaadin/tests/server/component/abstractcomponent/TestAbstractComponentStyleNames.java
new file mode 100644
index 0000000000..b1c4a8f4be
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/abstractcomponent/TestAbstractComponentStyleNames.java
@@ -0,0 +1,62 @@
+package com.vaadin.tests.server.component.abstractcomponent;
+
+import junit.framework.TestCase;
+
+import com.vaadin.ui.AbstractComponent;
+
+public class TestAbstractComponentStyleNames extends TestCase {
+
+    public void testSetMultiple() {
+        AbstractComponent component = getComponent();
+        component.setStyleName("style1 style2");
+        assertEquals(component.getStyleName(), "style1 style2");
+    }
+
+    public void testSetAdd() {
+        AbstractComponent component = getComponent();
+        component.setStyleName("style1");
+        component.addStyleName("style2");
+        assertEquals(component.getStyleName(), "style1 style2");
+    }
+
+    public void testAddSame() {
+        AbstractComponent component = getComponent();
+        component.setStyleName("style1 style2");
+        component.addStyleName("style1");
+        assertEquals(component.getStyleName(), "style1 style2");
+    }
+
+    public void testSetRemove() {
+        AbstractComponent component = getComponent();
+        component.setStyleName("style1 style2");
+        component.removeStyleName("style1");
+        assertEquals(component.getStyleName(), "style2");
+    }
+
+    public void testAddRemove() {
+        AbstractComponent component = getComponent();
+        component.addStyleName("style1");
+        component.addStyleName("style2");
+        component.removeStyleName("style1");
+        assertEquals(component.getStyleName(), "style2");
+    }
+
+    public void testRemoveMultipleWithExtraSpaces() {
+        AbstractComponent component = getComponent();
+        component.setStyleName("style1 style2 style3");
+        component.removeStyleName(" style1  style3 ");
+        assertEquals(component.getStyleName(), "style2");
+    }
+
+    public void testSetWithExtraSpaces() {
+        AbstractComponent component = getComponent();
+        component.setStyleName(" style1  style2 ");
+        assertEquals(component.getStyleName(), "style1 style2");
+    }
+
+    private AbstractComponent getComponent() {
+        return new AbstractComponent() {
+        };
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/abstractcomponentcontainer/TestAbstractComponentContainerListeners.java b/tests/server-side/com/vaadin/tests/server/component/abstractcomponentcontainer/TestAbstractComponentContainerListeners.java
new file mode 100644
index 0000000000..adf9c8d72e
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/abstractcomponentcontainer/TestAbstractComponentContainerListeners.java
@@ -0,0 +1,21 @@
+package com.vaadin.tests.server.component.abstractcomponentcontainer;
+
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.ComponentContainer.ComponentAttachEvent;
+import com.vaadin.ui.ComponentContainer.ComponentAttachListener;
+import com.vaadin.ui.ComponentContainer.ComponentDetachEvent;
+import com.vaadin.ui.ComponentContainer.ComponentDetachListener;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.VerticalLayout;
+
+public class TestAbstractComponentContainerListeners extends AbstractListenerMethodsTest {
+    public void testComponentDetachListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(HorizontalLayout.class,
+                ComponentDetachEvent.class, ComponentDetachListener.class);
+    }
+
+    public void testComponentAttachListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(VerticalLayout.class,
+                ComponentAttachEvent.class, ComponentAttachListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/abstractfield/TestAbstractFieldListeners.java b/tests/server-side/com/vaadin/tests/server/component/abstractfield/TestAbstractFieldListeners.java
new file mode 100644
index 0000000000..63536baf68
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/abstractfield/TestAbstractFieldListeners.java
@@ -0,0 +1,20 @@
+package com.vaadin.tests.server.component.abstractfield;
+
+import com.vaadin.data.Property.ReadOnlyStatusChangeEvent;
+import com.vaadin.data.Property.ReadOnlyStatusChangeListener;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.Button;
+
+public class TestAbstractFieldListeners extends AbstractListenerMethodsTest {
+    public void testReadOnlyStatusChangeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Button.class, ReadOnlyStatusChangeEvent.class,
+                ReadOnlyStatusChangeListener.class);
+    }
+
+    public void testValueChangeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Button.class, ValueChangeEvent.class,
+                ValueChangeListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/abstractorderedlayout/TestAbstractOrderedLayoutListeners.java b/tests/server-side/com/vaadin/tests/server/component/abstractorderedlayout/TestAbstractOrderedLayoutListeners.java
new file mode 100644
index 0000000000..05dfc47126
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/abstractorderedlayout/TestAbstractOrderedLayoutListeners.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.server.component.abstractorderedlayout;
+
+import com.vaadin.event.LayoutEvents.LayoutClickEvent;
+import com.vaadin.event.LayoutEvents.LayoutClickListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.VerticalLayout;
+
+public class TestAbstractOrderedLayoutListeners extends AbstractListenerMethodsTest {
+    public void testLayoutClickListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(VerticalLayout.class, LayoutClickEvent.class,
+                LayoutClickListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/abstractselect/TestAbstractSelectListeners.java b/tests/server-side/com/vaadin/tests/server/component/abstractselect/TestAbstractSelectListeners.java
new file mode 100644
index 0000000000..c1886943fd
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/abstractselect/TestAbstractSelectListeners.java
@@ -0,0 +1,20 @@
+package com.vaadin.tests.server.component.abstractselect;
+
+import com.vaadin.data.Container.ItemSetChangeEvent;
+import com.vaadin.data.Container.ItemSetChangeListener;
+import com.vaadin.data.Container.PropertySetChangeEvent;
+import com.vaadin.data.Container.PropertySetChangeListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.ComboBox;
+
+public class TestAbstractSelectListeners extends AbstractListenerMethodsTest {
+    public void testItemSetChangeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(ComboBox.class, ItemSetChangeEvent.class,
+                ItemSetChangeListener.class);
+    }
+
+    public void testPropertySetChangeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(ComboBox.class, PropertySetChangeEvent.class,
+                PropertySetChangeListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/abstractsplitpanel/TestAbstractSplitPanelListeners.java b/tests/server-side/com/vaadin/tests/server/component/abstractsplitpanel/TestAbstractSplitPanelListeners.java
new file mode 100644
index 0000000000..4f66d1446b
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/abstractsplitpanel/TestAbstractSplitPanelListeners.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.server.component.abstractsplitpanel;
+
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.AbstractSplitPanel.SplitterClickEvent;
+import com.vaadin.ui.AbstractSplitPanel.SplitterClickListener;
+import com.vaadin.ui.HorizontalSplitPanel;
+
+public class TestAbstractSplitPanelListeners extends AbstractListenerMethodsTest {
+    public void testSplitterClickListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(HorizontalSplitPanel.class,
+                SplitterClickEvent.class, SplitterClickListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/abstracttextfield/TestAbstractTextFieldListeners.java b/tests/server-side/com/vaadin/tests/server/component/abstracttextfield/TestAbstractTextFieldListeners.java
new file mode 100644
index 0000000000..fb8eb65f55
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/abstracttextfield/TestAbstractTextFieldListeners.java
@@ -0,0 +1,27 @@
+package com.vaadin.tests.server.component.abstracttextfield;
+
+import com.vaadin.event.FieldEvents.BlurEvent;
+import com.vaadin.event.FieldEvents.BlurListener;
+import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.event.FieldEvents.FocusListener;
+import com.vaadin.event.FieldEvents.TextChangeEvent;
+import com.vaadin.event.FieldEvents.TextChangeListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.TextField;
+
+public class TestAbstractTextFieldListeners extends AbstractListenerMethodsTest {
+    public void testTextChangeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(TextField.class, TextChangeEvent.class,
+                TextChangeListener.class);
+    }
+
+    public void testFocusListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(TextField.class, FocusEvent.class,
+                FocusListener.class);
+    }
+
+    public void testBlurListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(TextField.class, BlurEvent.class,
+                BlurListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/button/ButtonListeners.java b/tests/server-side/com/vaadin/tests/server/component/button/ButtonListeners.java
new file mode 100644
index 0000000000..59ddad4efe
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/button/ButtonListeners.java
@@ -0,0 +1,27 @@
+package com.vaadin.tests.server.component.button;
+
+import com.vaadin.event.FieldEvents.BlurEvent;
+import com.vaadin.event.FieldEvents.BlurListener;
+import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.event.FieldEvents.FocusListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+
+public class ButtonListeners extends AbstractListenerMethodsTest {
+    public void testFocusListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Button.class, FocusEvent.class,
+                FocusListener.class);
+    }
+
+    public void testBlurListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Button.class, BlurEvent.class,
+                BlurListener.class);
+    }
+
+    public void testClickListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Button.class, ClickEvent.class,
+                ClickListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/csslayout/CssLayoutListeners.java b/tests/server-side/com/vaadin/tests/server/component/csslayout/CssLayoutListeners.java
new file mode 100644
index 0000000000..e646467cb2
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/csslayout/CssLayoutListeners.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.server.component.csslayout;
+
+import com.vaadin.event.LayoutEvents.LayoutClickEvent;
+import com.vaadin.event.LayoutEvents.LayoutClickListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.CssLayout;
+
+public class CssLayoutListeners extends AbstractListenerMethodsTest {
+    public void testLayoutClickListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(CssLayout.class, LayoutClickEvent.class,
+                LayoutClickListener.class);
+    }
+}
\ No newline at end of file
diff --git a/tests/server-side/com/vaadin/tests/server/component/datefield/DateFieldListeners.java b/tests/server-side/com/vaadin/tests/server/component/datefield/DateFieldListeners.java
new file mode 100644
index 0000000000..1d7f729868
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/datefield/DateFieldListeners.java
@@ -0,0 +1,20 @@
+package com.vaadin.tests.server.component.datefield;
+
+import com.vaadin.event.FieldEvents.BlurEvent;
+import com.vaadin.event.FieldEvents.BlurListener;
+import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.event.FieldEvents.FocusListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.DateField;
+
+public class DateFieldListeners extends AbstractListenerMethodsTest {
+    public void testFocusListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(DateField.class, FocusEvent.class,
+                FocusListener.class);
+    }
+
+    public void testBlurListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(DateField.class, BlurEvent.class,
+                BlurListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/datefield/WeekNumberCalculation.java b/tests/server-side/com/vaadin/tests/server/component/datefield/WeekNumberCalculation.java
new file mode 100644
index 0000000000..428a8634b3
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/datefield/WeekNumberCalculation.java
@@ -0,0 +1,111 @@
+package com.vaadin.tests.server.component.datefield;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import com.vaadin.terminal.gwt.client.DateTimeService;
+
+public class WeekNumberCalculation extends TestCase {
+
+    final long MILLISECONDS_PER_DAY = 24 * 3600 * 1000;
+
+    static Map<Date, Integer> isoWeekNumbers = new HashMap<Date, Integer>();
+    static {
+        isoWeekNumbers.put(getDate(2005, 02, 02), 5);
+
+        isoWeekNumbers.put(getDate(2005, 1, 1), 53);
+        isoWeekNumbers.put(getDate(2005, 1, 2), 53);
+        isoWeekNumbers.put(getDate(2005, 1, 3), 1);
+        isoWeekNumbers.put(getDate(2005, 1, 4), 1);
+        isoWeekNumbers.put(getDate(2005, 1, 5), 1);
+        isoWeekNumbers.put(getDate(2005, 1, 6), 1);
+        isoWeekNumbers.put(getDate(2005, 1, 7), 1);
+        isoWeekNumbers.put(getDate(2005, 1, 8), 1);
+        isoWeekNumbers.put(getDate(2005, 1, 9), 1);
+        isoWeekNumbers.put(getDate(2005, 1, 10), 2);
+        isoWeekNumbers.put(getDate(2005, 12, 31), 52);
+        isoWeekNumbers.put(getDate(2005, 12, 30), 52);
+        isoWeekNumbers.put(getDate(2005, 12, 29), 52);
+        isoWeekNumbers.put(getDate(2005, 12, 28), 52);
+        isoWeekNumbers.put(getDate(2005, 12, 27), 52);
+        isoWeekNumbers.put(getDate(2005, 12, 26), 52);
+        isoWeekNumbers.put(getDate(2005, 12, 25), 51);
+        isoWeekNumbers.put(getDate(2007, 1, 1), 1);
+        isoWeekNumbers.put(getDate(2007, 12, 30), 52);
+        isoWeekNumbers.put(getDate(2007, 12, 31), 1);
+        isoWeekNumbers.put(getDate(2008, 1, 1), 1);
+        isoWeekNumbers.put(getDate(2008, 12, 28), 52);
+        isoWeekNumbers.put(getDate(2008, 12, 29), 1);
+        isoWeekNumbers.put(getDate(2008, 12, 30), 1);
+        isoWeekNumbers.put(getDate(2008, 12, 31), 1);
+        isoWeekNumbers.put(getDate(2009, 1, 1), 1);
+        isoWeekNumbers.put(getDate(2009, 12, 31), 53);
+        isoWeekNumbers.put(getDate(2010, 1, 1), 53);
+        isoWeekNumbers.put(getDate(2010, 1, 2), 53);
+        isoWeekNumbers.put(getDate(2010, 1, 3), 53);
+        isoWeekNumbers.put(getDate(2010, 1, 4), 1);
+        isoWeekNumbers.put(getDate(2010, 1, 5), 1);
+        isoWeekNumbers.put(getDate(2010, 10, 10), 40);
+
+    }
+
+    /**
+     * Test all dates from 1990-1992 + some more and see that {@link Calendar}
+     * calculates the ISO week number like we do.
+     * 
+     */
+    public void testISOWeekNumbers() {
+        Calendar c = Calendar.getInstance();
+        c.set(1990, 1, 1);
+        long start = c.getTimeInMillis();
+
+        for (int i = 0; i < 1000; i++) {
+            Date d = new Date(start + i * MILLISECONDS_PER_DAY);
+            int expected = getCalendarISOWeekNr(d);
+            int calculated = DateTimeService.getISOWeekNumber(d);
+            assertEquals(d + " should be week " + expected, expected,
+                    calculated);
+
+        }
+    }
+
+    /**
+     * Verify that special cases are handled correctly by us (and
+     * {@link Calendar}).
+     * 
+     */
+    public void testSampleISOWeekNumbers() {
+        for (Date d : isoWeekNumbers.keySet()) {
+            // System.out.println("Sample: " + d);
+            int expected = isoWeekNumbers.get(d);
+            int calculated = DateTimeService.getISOWeekNumber(d);
+            assertEquals(d + " should be week " + expected
+                    + " (Java Calendar is wrong?)", expected,
+                    getCalendarISOWeekNr(d));
+            assertEquals(d + " should be week " + expected, expected,
+                    calculated);
+
+        }
+    }
+
+    private int getCalendarISOWeekNr(Date d) {
+        Calendar c = Calendar.getInstance();
+        c.setFirstDayOfWeek(Calendar.MONDAY);
+        c.setMinimalDaysInFirstWeek(4);
+        c.setTime(d);
+
+        return c.get(Calendar.WEEK_OF_YEAR);
+    }
+
+    private static Date getDate(int year, int month, int date) {
+        Calendar c = Calendar.getInstance();
+        c.clear();
+        c.set(year, month - 1, date);
+        return c.getTime();
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/embedded/EmbeddedListeners.java b/tests/server-side/com/vaadin/tests/server/component/embedded/EmbeddedListeners.java
new file mode 100644
index 0000000000..66a9a2b5d5
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/embedded/EmbeddedListeners.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.server.component.embedded;
+
+import com.vaadin.event.MouseEvents.ClickEvent;
+import com.vaadin.event.MouseEvents.ClickListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.Embedded;
+
+public class EmbeddedListeners extends AbstractListenerMethodsTest {
+    public void testClickListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Embedded.class, ClickEvent.class,
+                ClickListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/gridlayout/GridLayoutListeners.java b/tests/server-side/com/vaadin/tests/server/component/gridlayout/GridLayoutListeners.java
new file mode 100644
index 0000000000..24db0856da
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/gridlayout/GridLayoutListeners.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.server.component.gridlayout;
+
+import com.vaadin.event.LayoutEvents.LayoutClickEvent;
+import com.vaadin.event.LayoutEvents.LayoutClickListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.GridLayout;
+
+public class GridLayoutListeners extends AbstractListenerMethodsTest {
+    public void testLayoutClickListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(GridLayout.class, LayoutClickEvent.class,
+                LayoutClickListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/label/LabelListeners.java b/tests/server-side/com/vaadin/tests/server/component/label/LabelListeners.java
new file mode 100644
index 0000000000..a25309b32f
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/label/LabelListeners.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.server.component.label;
+
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Label.ValueChangeEvent;
+
+public class LabelListeners extends AbstractListenerMethodsTest {
+    public void testValueChangeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Label.class, ValueChangeEvent.class,
+                ValueChangeListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/loginform/LoginFormListeners.java b/tests/server-side/com/vaadin/tests/server/component/loginform/LoginFormListeners.java
new file mode 100644
index 0000000000..a8e7d76710
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/loginform/LoginFormListeners.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.server.component.loginform;
+
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.LoginForm;
+import com.vaadin.ui.LoginForm.LoginEvent;
+import com.vaadin.ui.LoginForm.LoginListener;
+
+public class LoginFormListeners extends AbstractListenerMethodsTest {
+    public void testLoginListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(LoginForm.class, LoginEvent.class,
+                LoginListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/menubar/MenuBarIds.java b/tests/server-side/com/vaadin/tests/server/component/menubar/MenuBarIds.java
new file mode 100644
index 0000000000..9ce55361bd
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/menubar/MenuBarIds.java
@@ -0,0 +1,97 @@
+package com.vaadin.tests.server.component.menubar;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import junit.framework.TestCase;
+
+import com.vaadin.ui.MenuBar;
+import com.vaadin.ui.MenuBar.Command;
+import com.vaadin.ui.MenuBar.MenuItem;
+
+public class MenuBarIds extends TestCase implements Command {
+
+    private MenuItem lastSelectedItem;
+    private MenuItem menuFile;
+    private MenuItem menuEdit;
+    private MenuItem menuEditCopy;
+    private MenuItem menuEditCut;
+    private MenuItem menuEditPaste;
+    private MenuItem menuEditFind;
+    private MenuItem menuFileOpen;
+    private MenuItem menuFileSave;
+    private MenuItem menuFileExit;
+    private Set<MenuItem> menuItems = new HashSet<MenuItem>();
+
+    private MenuBar menuBar;
+
+    @Override
+    public void setUp() {
+        menuBar = new MenuBar();
+        menuFile = menuBar.addItem("File", this);
+        menuEdit = menuBar.addItem("Edit", this);
+        menuEditCopy = menuEdit.addItem("Copy", this);
+        menuEditCut = menuEdit.addItem("Cut", this);
+        menuEditPaste = menuEdit.addItem("Paste", this);
+        menuEdit.addSeparator();
+        menuEditFind = menuEdit.addItem("Find...", this);
+        menuFileOpen = menuFile.addItem("Open", this);
+        menuFileSave = menuFile.addItem("Save", this);
+        menuFile.addSeparator();
+        menuFileExit = menuFile.addItem("Exit", this);
+
+        menuItems.add(menuFile);
+        menuItems.add(menuEdit);
+        menuItems.add(menuEditCopy);
+        menuItems.add(menuEditCut);
+        menuItems.add(menuEditPaste);
+        menuItems.add(menuEditFind);
+        menuItems.add(menuFileOpen);
+        menuItems.add(menuFileSave);
+        menuItems.add(menuFileExit);
+    }
+
+    public void testMenubarIdUniqueness() {
+        // Ids within a menubar must be unique
+        assertUniqueIds(menuBar);
+
+        menuBar.removeItem(menuFile);
+        MenuItem file2 = menuBar.addItem("File2", this);
+        MenuItem file3 = menuBar.addItem("File3", this);
+        MenuItem file2sub = file2.addItem("File2 sub menu", this);
+        menuItems.add(file2);
+        menuItems.add(file2sub);
+        menuItems.add(file3);
+
+        assertUniqueIds(menuBar);
+    }
+
+    private static void assertUniqueIds(MenuBar menuBar) {
+
+        Set<Object> ids = new HashSet<Object>();
+
+        for (MenuItem item : menuBar.getItems()) {
+            assertUniqueIds(ids, item);
+        }
+    }
+
+    private static void assertUniqueIds(Set<Object> ids, MenuItem item) {
+        int id = item.getId();
+        System.out.println("Item " + item.getText() + ", id: " + id);
+        assertFalse(ids.contains(id));
+        ids.add(id);
+        if (item.getChildren() != null) {
+            for (MenuItem subItem : item.getChildren()) {
+                assertUniqueIds(ids, subItem);
+            }
+        }
+    }
+
+    public void menuSelected(MenuItem selectedItem) {
+        assertNull("lastSelectedItem was not cleared before selecting an item",
+                lastSelectedItem);
+
+        lastSelectedItem = selectedItem;
+
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/optiongroup/OptionGroupListeners.java b/tests/server-side/com/vaadin/tests/server/component/optiongroup/OptionGroupListeners.java
new file mode 100644
index 0000000000..a4c2289da4
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/optiongroup/OptionGroupListeners.java
@@ -0,0 +1,20 @@
+package com.vaadin.tests.server.component.optiongroup;
+
+import com.vaadin.event.FieldEvents.BlurEvent;
+import com.vaadin.event.FieldEvents.BlurListener;
+import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.event.FieldEvents.FocusListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.OptionGroup;
+
+public class OptionGroupListeners extends AbstractListenerMethodsTest {
+    public void testFocusListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(OptionGroup.class, FocusEvent.class,
+                FocusListener.class);
+    }
+
+    public void testBlurListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(OptionGroup.class, BlurEvent.class,
+                BlurListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/orderedlayout/TestOrderedLayout.java b/tests/server-side/com/vaadin/tests/server/component/orderedlayout/TestOrderedLayout.java
new file mode 100644
index 0000000000..e17fb284dc
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/orderedlayout/TestOrderedLayout.java
@@ -0,0 +1,49 @@
+package com.vaadin.tests.server.component.orderedlayout;
+
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+public class TestOrderedLayout extends TestCase {
+
+    public void testVLIteration() {
+        testIndexing(new VerticalLayout(), 10);
+    }
+
+    public void testHLIteration() {
+        testIndexing(new HorizontalLayout(), 12);
+    }
+
+    public void testIndexing(AbstractOrderedLayout aol, int nrComponents) {
+        Component[] components = generateComponents(nrComponents);
+        for (Component c : components) {
+            aol.addComponent(c);
+        }
+        for (int i = 0; i < nrComponents; i++) {
+            assert (aol.getComponent(i) == components[i]);
+            assert (aol.getComponentIndex(components[i]) == i);
+        }
+
+        // Iteration should be in indexed order
+        int idx = 0;
+        for (Iterator<Component> i = aol.getComponentIterator(); i.hasNext();) {
+            Component c = i.next();
+            assert (aol.getComponentIndex(c) == idx++);
+        }
+    }
+
+    private Component[] generateComponents(int nr) {
+        Component[] components = new Component[nr];
+        for (int i = 0; i < nr; i++) {
+            components[i] = new Label("" + i);
+        }
+
+        return components;
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/panel/PanelListeners.java b/tests/server-side/com/vaadin/tests/server/component/panel/PanelListeners.java
new file mode 100644
index 0000000000..e6094225e2
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/panel/PanelListeners.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.server.component.panel;
+
+import com.vaadin.event.MouseEvents.ClickEvent;
+import com.vaadin.event.MouseEvents.ClickListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.Panel;
+
+public class PanelListeners extends AbstractListenerMethodsTest {
+    public void testClickListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Panel.class, ClickEvent.class,
+                ClickListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/popupview/PopupViewListeners.java b/tests/server-side/com/vaadin/tests/server/component/popupview/PopupViewListeners.java
new file mode 100644
index 0000000000..5b5fc2eb31
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/popupview/PopupViewListeners.java
@@ -0,0 +1,14 @@
+package com.vaadin.tests.server.component.popupview;
+
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.PopupView;
+import com.vaadin.ui.PopupView.PopupVisibilityEvent;
+import com.vaadin.ui.PopupView.PopupVisibilityListener;
+
+public class PopupViewListeners extends AbstractListenerMethodsTest {
+    public void testPopupVisibilityListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(PopupView.class, PopupVisibilityEvent.class,
+                PopupVisibilityListener.class, new PopupView("", new Label()));
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/select/SelectListeners.java b/tests/server-side/com/vaadin/tests/server/component/select/SelectListeners.java
new file mode 100644
index 0000000000..8f90f2021e
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/select/SelectListeners.java
@@ -0,0 +1,20 @@
+package com.vaadin.tests.server.component.select;
+
+import com.vaadin.event.FieldEvents.BlurEvent;
+import com.vaadin.event.FieldEvents.BlurListener;
+import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.event.FieldEvents.FocusListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.Select;
+
+public class SelectListeners extends AbstractListenerMethodsTest {
+    public void testFocusListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Select.class, FocusEvent.class,
+                FocusListener.class);
+    }
+
+    public void testBlurListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Select.class, BlurEvent.class,
+                BlurListener.class);
+    }
+}
\ No newline at end of file
diff --git a/tests/server-side/com/vaadin/tests/server/component/table/TableColumnAlignments.java b/tests/server-side/com/vaadin/tests/server/component/table/TableColumnAlignments.java
new file mode 100644
index 0000000000..04f436f5c4
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/table/TableColumnAlignments.java
@@ -0,0 +1,165 @@
+package com.vaadin.tests.server.component.table;
+
+import static org.junit.Assert.assertArrayEquals;
+
+import org.junit.Test;
+
+import com.vaadin.ui.Table;
+
+public class TableColumnAlignments {
+
+    @Test
+    public void defaultColumnAlignments() {
+        for (int properties = 0; properties < 10; properties++) {
+            Table t = TableGenerator.createTableWithDefaultContainer(
+                    properties, 10);
+            Object[] expected = new Object[properties];
+            for (int i = 0; i < properties; i++) {
+                expected[i] = Table.ALIGN_LEFT;
+            }
+            org.junit.Assert.assertArrayEquals("getColumnAlignments", expected,
+                    t.getColumnAlignments());
+        }
+    }
+
+    @Test
+    public void explicitColumnAlignments() {
+        int properties = 5;
+        Table t = TableGenerator
+                .createTableWithDefaultContainer(properties, 10);
+        String[] explicitAlignments = new String[] { Table.ALIGN_CENTER,
+                Table.ALIGN_LEFT, Table.ALIGN_RIGHT, Table.ALIGN_RIGHT,
+                Table.ALIGN_LEFT };
+
+        t.setColumnAlignments(explicitAlignments);
+
+        assertArrayEquals("Explicit visible columns, 5 properties",
+                explicitAlignments, t.getColumnAlignments());
+    }
+
+    @Test
+    public void invalidColumnAlignmentStrings() {
+        Table t = TableGenerator.createTableWithDefaultContainer(3, 7);
+        String[] defaultAlignments = new String[] { Table.ALIGN_LEFT,
+                Table.ALIGN_LEFT, Table.ALIGN_LEFT };
+        try {
+            t.setColumnAlignments(new String[] { "a", "b", "c" });
+            junit.framework.Assert
+                    .fail("No exception thrown for invalid array length");
+        } catch (IllegalArgumentException e) {
+            // Ok, expected
+        }
+
+        assertArrayEquals("Invalid change affected alignments",
+                defaultAlignments, t.getColumnAlignments());
+
+    }
+
+    @Test
+    public void invalidColumnAlignmentString() {
+        Table t = TableGenerator.createTableWithDefaultContainer(3, 7);
+        String[] defaultAlignments = new String[] { Table.ALIGN_LEFT,
+                Table.ALIGN_LEFT, Table.ALIGN_LEFT };
+        try {
+            t.setColumnAlignment("Property 1", "a");
+            junit.framework.Assert
+                    .fail("No exception thrown for invalid array length");
+        } catch (IllegalArgumentException e) {
+            // Ok, expected
+        }
+
+        assertArrayEquals("Invalid change affected alignments",
+                defaultAlignments, t.getColumnAlignments());
+
+    }
+
+    @Test
+    public void columnAlignmentForPropertyNotInContainer() {
+        Table t = TableGenerator.createTableWithDefaultContainer(3, 7);
+        String[] defaultAlignments = new String[] { Table.ALIGN_LEFT,
+                Table.ALIGN_LEFT, Table.ALIGN_LEFT };
+        try {
+            t.setColumnAlignment("Property 1200", Table.ALIGN_LEFT);
+            // FIXME: Uncomment as there should be an exception (#6475)
+            // junit.framework.Assert
+            // .fail("No exception thrown for property not in container");
+        } catch (IllegalArgumentException e) {
+            // Ok, expected
+        }
+
+        assertArrayEquals("Invalid change affected alignments",
+                defaultAlignments, t.getColumnAlignments());
+
+        // FIXME: Uncomment as null should be returned (#6474)
+        // junit.framework.Assert.assertEquals(
+        // "Column alignment for property not in container returned",
+        // null, t.getColumnAlignment("Property 1200"));
+
+    }
+
+    @Test
+    public void invalidColumnAlignmentsLength() {
+        Table t = TableGenerator.createTableWithDefaultContainer(7, 7);
+        String[] defaultAlignments = new String[] { Table.ALIGN_LEFT,
+                Table.ALIGN_LEFT, Table.ALIGN_LEFT, Table.ALIGN_LEFT,
+                Table.ALIGN_LEFT, Table.ALIGN_LEFT, Table.ALIGN_LEFT };
+
+        try {
+            t.setColumnAlignments(new String[] { Table.ALIGN_LEFT });
+            junit.framework.Assert
+                    .fail("No exception thrown for invalid array length");
+        } catch (IllegalArgumentException e) {
+            // Ok, expected
+        }
+        assertArrayEquals("Invalid change affected alignments",
+                defaultAlignments, t.getColumnAlignments());
+
+        try {
+            t.setColumnAlignments(new String[] {});
+            junit.framework.Assert
+                    .fail("No exception thrown for invalid array length");
+        } catch (IllegalArgumentException e) {
+            // Ok, expected
+        }
+        assertArrayEquals("Invalid change affected alignments",
+                defaultAlignments, t.getColumnAlignments());
+
+        try {
+            t.setColumnAlignments(new String[] { Table.ALIGN_LEFT,
+                    Table.ALIGN_LEFT, Table.ALIGN_LEFT, Table.ALIGN_LEFT,
+                    Table.ALIGN_LEFT, Table.ALIGN_LEFT, Table.ALIGN_LEFT,
+                    Table.ALIGN_LEFT });
+            junit.framework.Assert
+                    .fail("No exception thrown for invalid array length");
+        } catch (IllegalArgumentException e) {
+            // Ok, expected
+        }
+        assertArrayEquals("Invalid change affected alignments",
+                defaultAlignments, t.getColumnAlignments());
+
+    }
+
+    @Test
+    public void explicitColumnAlignmentOneByOne() {
+        int properties = 5;
+        Table t = TableGenerator
+                .createTableWithDefaultContainer(properties, 10);
+        String[] explicitAlignments = new String[] { Table.ALIGN_CENTER,
+                Table.ALIGN_LEFT, Table.ALIGN_RIGHT, Table.ALIGN_RIGHT,
+                Table.ALIGN_LEFT };
+
+        String[] currentAlignments = new String[] { Table.ALIGN_LEFT,
+                Table.ALIGN_LEFT, Table.ALIGN_LEFT, Table.ALIGN_LEFT,
+                Table.ALIGN_LEFT };
+
+        for (int i = 0; i < properties; i++) {
+            t.setColumnAlignment("Property " + i, explicitAlignments[i]);
+            currentAlignments[i] = explicitAlignments[i];
+
+            assertArrayEquals("Explicit visible columns, " + i
+                    + " alignments set", currentAlignments,
+                    t.getColumnAlignments());
+        }
+
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/table/TableGenerator.java b/tests/server-side/com/vaadin/tests/server/component/table/TableGenerator.java
new file mode 100644
index 0000000000..0e63049944
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/table/TableGenerator.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.server.component.table;
+
+import org.junit.Test;
+
+import com.vaadin.data.Item;
+import com.vaadin.ui.Table;
+
+public class TableGenerator {
+    public static Table createTableWithDefaultContainer(int properties,
+            int items) {
+        Table t = new Table();
+
+        for (int i = 0; i < properties; i++) {
+            t.addContainerProperty("Property " + i, String.class, null);
+        }
+
+        for (int j = 0; j < items; j++) {
+            Item item = t.addItem("Item " + j);
+            for (int i = 0; i < properties; i++) {
+                item.getItemProperty("Property " + i).setValue(
+                        "Item " + j + "/Property " + i);
+            }
+        }
+
+        return t;
+    }
+
+    @Test
+    public void testTableGenerator() {
+        Table t = createTableWithDefaultContainer(1, 1);
+        junit.framework.Assert.assertEquals(t.size(), 1);
+        junit.framework.Assert.assertEquals(t.getContainerPropertyIds().size(),
+                1);
+
+        t = createTableWithDefaultContainer(100, 50);
+        junit.framework.Assert.assertEquals(t.size(), 50);
+        junit.framework.Assert.assertEquals(t.getContainerPropertyIds().size(),
+                100);
+
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/table/TableListeners.java b/tests/server-side/com/vaadin/tests/server/component/table/TableListeners.java
new file mode 100644
index 0000000000..75ec839823
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/table/TableListeners.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.server.component.table;
+
+import com.vaadin.event.ItemClickEvent;
+import com.vaadin.event.ItemClickEvent.ItemClickListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.ColumnReorderEvent;
+import com.vaadin.ui.Table.ColumnReorderListener;
+import com.vaadin.ui.Table.ColumnResizeEvent;
+import com.vaadin.ui.Table.ColumnResizeListener;
+import com.vaadin.ui.Table.FooterClickEvent;
+import com.vaadin.ui.Table.FooterClickListener;
+import com.vaadin.ui.Table.HeaderClickEvent;
+import com.vaadin.ui.Table.HeaderClickListener;
+
+public class TableListeners extends AbstractListenerMethodsTest {
+    public void testColumnResizeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Table.class, ColumnResizeEvent.class,
+                ColumnResizeListener.class);
+    }
+
+    public void testItemClickListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Table.class, ItemClickEvent.class, ItemClickListener.class);
+    }
+
+    public void testFooterClickListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Table.class, FooterClickEvent.class,
+                FooterClickListener.class);
+    }
+
+    public void testHeaderClickListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Table.class, HeaderClickEvent.class,
+                HeaderClickListener.class);
+    }
+
+    public void testColumnReorderListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Table.class, ColumnReorderEvent.class,
+                ColumnReorderListener.class);
+    }
+}
\ No newline at end of file
diff --git a/tests/server-side/com/vaadin/tests/server/component/table/TableVisibleColumns.java b/tests/server-side/com/vaadin/tests/server/component/table/TableVisibleColumns.java
new file mode 100644
index 0000000000..be312044db
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/table/TableVisibleColumns.java
@@ -0,0 +1,75 @@
+package com.vaadin.tests.server.component.table;
+
+import static org.junit.Assert.assertArrayEquals;
+
+import org.junit.Test;
+
+import com.vaadin.ui.Table;
+
+public class TableVisibleColumns {
+
+    String[] defaultColumns3 = new String[] { "Property 0", "Property 1",
+            "Property 2" };
+
+    @Test
+    public void defaultVisibleColumns() {
+        for (int properties = 0; properties < 10; properties++) {
+            Table t = TableGenerator.createTableWithDefaultContainer(
+                    properties, 10);
+            Object[] expected = new Object[properties];
+            for (int i = 0; i < properties; i++) {
+                expected[i] = "Property " + i;
+            }
+            org.junit.Assert.assertArrayEquals("getVisibleColumns", expected,
+                    t.getVisibleColumns());
+        }
+    }
+
+    @Test
+    public void explicitVisibleColumns() {
+        Table t = TableGenerator.createTableWithDefaultContainer(5, 10);
+        Object[] newVisibleColumns = new Object[] { "Property 1", "Property 2" };
+        t.setVisibleColumns(newVisibleColumns);
+        assertArrayEquals("Explicit visible columns, 5 properties",
+                newVisibleColumns, t.getVisibleColumns());
+
+    }
+
+    @Test
+    public void invalidVisibleColumnIds() {
+        Table t = TableGenerator.createTableWithDefaultContainer(3, 10);
+
+        try {
+            t.setVisibleColumns(new Object[] { "a", "Property 2", "Property 3" });
+            junit.framework.Assert.fail("IllegalArgumentException expected");
+        } catch (IllegalArgumentException e) {
+            // OK, expected
+        }
+        assertArrayEquals(defaultColumns3, t.getVisibleColumns());
+    }
+
+    @Test
+    public void duplicateVisibleColumnIds() {
+        Table t = TableGenerator.createTableWithDefaultContainer(3, 10);
+        try {
+            t.setVisibleColumns(new Object[] { "Property 0", "Property 1",
+                    "Property 2", "Property 1" });
+            // FIXME: Multiple properties in the Object array should be detected
+            // (#6476)
+            // junit.framework.Assert.fail("IllegalArgumentException expected");
+        } catch (IllegalArgumentException e) {
+            // OK, expected
+        }
+        // FIXME: Multiple properties in the Object array should be detected
+        // (#6476)
+        // assertArrayEquals(defaultColumns3, t.getVisibleColumns());
+    }
+
+    @Test
+    public void noVisibleColumns() {
+        Table t = TableGenerator.createTableWithDefaultContainer(3, 10);
+        t.setVisibleColumns(new Object[] {});
+        assertArrayEquals(new Object[] {}, t.getVisibleColumns());
+
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/table/TestFooter.java b/tests/server-side/com/vaadin/tests/server/component/table/TestFooter.java
new file mode 100644
index 0000000000..647d13855b
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/table/TestFooter.java
@@ -0,0 +1,94 @@
+package com.vaadin.tests.server.component.table;
+
+import junit.framework.TestCase;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.ui.Table;
+
+/**
+ * Test case for testing the footer API
+ * 
+ */
+public class TestFooter extends TestCase {
+
+    /**
+     * Tests if setting the footer visibility works properly
+     */
+    public void testFooterVisibility() {
+        Table table = new Table("Test table", createContainer());
+
+        // The footer should by default be hidden
+        assertFalse(table.isFooterVisible());
+
+        // Set footer visibility to tru should be reflected in the
+        // isFooterVisible() method
+        table.setFooterVisible(true);
+        assertTrue(table.isFooterVisible());
+    }
+
+    /**
+     * Tests adding footers to the columns
+     */
+    public void testAddingFooters() {
+        Table table = new Table("Test table", createContainer());
+
+        // Table should not contain any footers at initialization
+        assertNull(table.getColumnFooter("col1"));
+        assertNull(table.getColumnFooter("col2"));
+        assertNull(table.getColumnFooter("col3"));
+
+        // Adding column footer
+        table.setColumnFooter("col1", "Footer1");
+        assertEquals("Footer1", table.getColumnFooter("col1"));
+
+        // Add another footer
+        table.setColumnFooter("col2", "Footer2");
+        assertEquals("Footer2", table.getColumnFooter("col2"));
+
+        // Add footer for a non-existing column
+        table.setColumnFooter("fail", "FooterFail");
+    }
+
+    /**
+     * Test removing footers
+     */
+    public void testRemovingFooters() {
+        Table table = new Table("Test table", createContainer());
+        table.setColumnFooter("col1", "Footer1");
+        table.setColumnFooter("col2", "Footer2");
+
+        // Test removing footer
+        assertNotNull(table.getColumnFooter("col1"));
+        table.setColumnFooter("col1", null);
+        assertNull(table.getColumnFooter("col1"));
+
+        // The other footer should still be there
+        assertNotNull(table.getColumnFooter("col2"));
+
+        // Remove non-existing footer
+        table.setColumnFooter("fail", null);
+    }
+
+    /**
+     * Creates a container with three properties "col1,col2,col3" with 100 items
+     * 
+     * @return Returns the created table
+     */
+    private static Container createContainer() {
+        IndexedContainer container = new IndexedContainer();
+        container.addContainerProperty("col1", String.class, "");
+        container.addContainerProperty("col2", String.class, "");
+        container.addContainerProperty("col3", String.class, "");
+
+        for (int i = 0; i < 100; i++) {
+            Item item = container.addItem("item " + i);
+            item.getItemProperty("col1").setValue("first" + i);
+            item.getItemProperty("col2").setValue("middle" + i);
+            item.getItemProperty("col3").setValue("last" + i);
+        }
+
+        return container;
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/table/TestMultipleSelection.java b/tests/server-side/com/vaadin/tests/server/component/table/TestMultipleSelection.java
new file mode 100644
index 0000000000..767b651b68
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/table/TestMultipleSelection.java
@@ -0,0 +1,57 @@
+package com.vaadin.tests.server.component.table;
+
+import java.util.Arrays;
+import java.util.Set;
+
+import junit.framework.TestCase;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.ui.AbstractSelect.MultiSelectMode;
+import com.vaadin.ui.Table;
+
+public class TestMultipleSelection extends TestCase {
+
+    /**
+     * Tests weather the multiple select mode is set when using Table.set
+     */
+    @SuppressWarnings("unchecked")
+    public void testSetMultipleItems() {
+        Table table = new Table("", createTestContainer());
+
+        // Tests if multiple selection is set
+        table.setMultiSelect(true);
+        assertTrue(table.isMultiSelect());
+
+        // Test multiselect by setting several items at once
+
+        table.setValue(Arrays.asList("1", new String[] { "3" }));
+        assertEquals(2, ((Set<String>) table.getValue()).size());
+    }
+
+    /**
+     * Tests setting the multiselect mode of the Table. The multiselect mode
+     * affects how mouse selection is made in the table by the user.
+     */
+    public void testSetMultiSelectMode() {
+        Table table = new Table("", createTestContainer());
+
+        // Default multiselect mode should be MultiSelectMode.DEFAULT
+        assertEquals(MultiSelectMode.DEFAULT, table.getMultiSelectMode());
+
+        // Tests if multiselectmode is set
+        table.setMultiSelectMode(MultiSelectMode.SIMPLE);
+        assertEquals(MultiSelectMode.SIMPLE, table.getMultiSelectMode());
+    }
+
+    /**
+     * Creates a testing container for the tests
+     * 
+     * @return A new container with test items
+     */
+    private Container createTestContainer() {
+        IndexedContainer container = new IndexedContainer(Arrays.asList("1",
+                new String[] { "2", "3", "4" }));
+        return container;
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/tabsheet/TabSheetListeners.java b/tests/server-side/com/vaadin/tests/server/component/tabsheet/TabSheetListeners.java
new file mode 100644
index 0000000000..30dcbca155
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/tabsheet/TabSheetListeners.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.server.component.tabsheet;
+
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
+import com.vaadin.ui.TabSheet.SelectedTabChangeListener;
+
+public class TabSheetListeners extends AbstractListenerMethodsTest {
+    public void testSelectedTabChangeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(TabSheet.class, SelectedTabChangeEvent.class,
+                SelectedTabChangeListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/tabsheet/TestTabSheet.java b/tests/server-side/com/vaadin/tests/server/component/tabsheet/TestTabSheet.java
new file mode 100644
index 0000000000..873bb1c030
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/tabsheet/TestTabSheet.java
@@ -0,0 +1,124 @@
+package com.vaadin.tests.server.component.tabsheet;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Iterator;
+
+import org.junit.Test;
+
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.Tab;
+
+public class TestTabSheet {
+
+    @Test
+    public void addExistingComponent() {
+        Component c = new Label("abc");
+        TabSheet tabSheet = new TabSheet();
+        tabSheet.addComponent(c);
+        tabSheet.addComponent(c);
+
+        Iterator<Component> iter = tabSheet.getComponentIterator();
+
+        assertEquals(c, iter.next());
+        assertEquals(false, iter.hasNext());
+        assertNotNull(tabSheet.getTab(c));
+    }
+
+    @Test
+    public void getComponentFromTab() {
+        Component c = new Label("abc");
+        TabSheet tabSheet = new TabSheet();
+        Tab tab = tabSheet.addTab(c);
+        assertEquals(c, tab.getComponent());
+    }
+
+    @Test
+    public void addTabWithComponentOnly() {
+        TabSheet tabSheet = new TabSheet();
+        Tab tab1 = tabSheet.addTab(new Label("aaa"));
+        Tab tab2 = tabSheet.addTab(new Label("bbb"));
+        Tab tab3 = tabSheet.addTab(new Label("ccc"));
+
+        // Check right order of tabs
+        assertEquals(0, tabSheet.getTabPosition(tab1));
+        assertEquals(1, tabSheet.getTabPosition(tab2));
+        assertEquals(2, tabSheet.getTabPosition(tab3));
+
+        // Calling addTab with existing component does not move tab
+        tabSheet.addTab(tab1.getComponent());
+
+        // Check right order of tabs
+        assertEquals(0, tabSheet.getTabPosition(tab1));
+        assertEquals(1, tabSheet.getTabPosition(tab2));
+        assertEquals(2, tabSheet.getTabPosition(tab3));
+    }
+
+    @Test
+    public void addTabWithComponentAndIndex() {
+        TabSheet tabSheet = new TabSheet();
+        Tab tab1 = tabSheet.addTab(new Label("aaa"));
+        Tab tab2 = tabSheet.addTab(new Label("bbb"));
+        Tab tab3 = tabSheet.addTab(new Label("ccc"));
+
+        Tab tab4 = tabSheet.addTab(new Label("ddd"), 1);
+        Tab tab5 = tabSheet.addTab(new Label("eee"), 3);
+
+        assertEquals(0, tabSheet.getTabPosition(tab1));
+        assertEquals(1, tabSheet.getTabPosition(tab4));
+        assertEquals(2, tabSheet.getTabPosition(tab2));
+        assertEquals(3, tabSheet.getTabPosition(tab5));
+        assertEquals(4, tabSheet.getTabPosition(tab3));
+
+        // Calling addTab with existing component does not move tab
+        tabSheet.addTab(tab1.getComponent(), 3);
+
+        assertEquals(0, tabSheet.getTabPosition(tab1));
+        assertEquals(1, tabSheet.getTabPosition(tab4));
+        assertEquals(2, tabSheet.getTabPosition(tab2));
+        assertEquals(3, tabSheet.getTabPosition(tab5));
+        assertEquals(4, tabSheet.getTabPosition(tab3));
+    }
+
+    @Test
+    public void addTabWithAllParameters() {
+        TabSheet tabSheet = new TabSheet();
+        Tab tab1 = tabSheet.addTab(new Label("aaa"));
+        Tab tab2 = tabSheet.addTab(new Label("bbb"));
+        Tab tab3 = tabSheet.addTab(new Label("ccc"));
+
+        Tab tab4 = tabSheet.addTab(new Label("ddd"), "ddd", null, 1);
+        Tab tab5 = tabSheet.addTab(new Label("eee"), "eee", null, 3);
+
+        assertEquals(0, tabSheet.getTabPosition(tab1));
+        assertEquals(1, tabSheet.getTabPosition(tab4));
+        assertEquals(2, tabSheet.getTabPosition(tab2));
+        assertEquals(3, tabSheet.getTabPosition(tab5));
+        assertEquals(4, tabSheet.getTabPosition(tab3));
+
+        // Calling addTab with existing component does not move tab
+        tabSheet.addTab(tab1.getComponent(), "xxx", null, 3);
+
+        assertEquals(0, tabSheet.getTabPosition(tab1));
+        assertEquals(1, tabSheet.getTabPosition(tab4));
+        assertEquals(2, tabSheet.getTabPosition(tab2));
+        assertEquals(3, tabSheet.getTabPosition(tab5));
+        assertEquals(4, tabSheet.getTabPosition(tab3));
+    }
+
+    @Test
+    public void getTabByPosition() {
+        TabSheet tabSheet = new TabSheet();
+        Tab tab1 = tabSheet.addTab(new Label("aaa"));
+        Tab tab2 = tabSheet.addTab(new Label("bbb"));
+        Tab tab3 = tabSheet.addTab(new Label("ccc"));
+
+        assertEquals(tab1, tabSheet.getTab(0));
+        assertEquals(tab2, tabSheet.getTab(1));
+        assertEquals(tab3, tabSheet.getTab(2));
+    }
+    
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/tree/TestListeners.java b/tests/server-side/com/vaadin/tests/server/component/tree/TestListeners.java
new file mode 100644
index 0000000000..391ef02e3c
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/tree/TestListeners.java
@@ -0,0 +1,135 @@
+package com.vaadin.tests.server.component.tree;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Tree.CollapseEvent;
+import com.vaadin.ui.Tree.CollapseListener;
+import com.vaadin.ui.Tree.ExpandEvent;
+import com.vaadin.ui.Tree.ExpandListener;
+
+public class TestListeners extends TestCase implements ExpandListener,
+        CollapseListener {
+    private int expandCalled;
+    private int collapseCalled;
+    private Object lastExpanded;
+    private Object lastCollapsed;
+
+    @Override
+    protected void setUp() {
+        expandCalled = 0;
+    }
+
+    public void testExpandListener() {
+        Tree tree = createTree(10, 20, false);
+        tree.addListener((ExpandListener) this);
+        List<Object> rootIds = new ArrayList<Object>(tree.rootItemIds());
+
+        assertEquals(10, rootIds.size());
+        assertEquals(10 + 10 * 20 + 10, tree.size());
+
+        // Expanding should send one expand event for the root item id
+        tree.expandItem(rootIds.get(0));
+        assertEquals(1, expandCalled);
+        assertEquals(rootIds.get(0), lastExpanded);
+
+        // Expand should send one event for each expanded item id.
+        // In this case root + child 4
+        expandCalled = 0;
+        tree.expandItemsRecursively(rootIds.get(1));
+        assertEquals(2, expandCalled);
+        List<Object> c = new ArrayList<Object>(tree.getChildren(rootIds.get(1)));
+
+        assertEquals(c.get(4), lastExpanded);
+
+        // Expanding an already expanded item should send no expand event
+        expandCalled = 0;
+        tree.expandItem(rootIds.get(0));
+        assertEquals(0, expandCalled);
+    }
+
+    /**
+     * Creates a tree with "rootItems" roots, each with "children" children,
+     * each with 1 child.
+     * 
+     * @param rootItems
+     * @param children
+     * @param expand
+     * @return
+     */
+    private Tree createTree(int rootItems, int children, boolean expand) {
+        Tree tree = new Tree();
+        for (int i = 0; i < rootItems; i++) {
+            String rootId = "root " + i;
+            tree.addItem(rootId);
+            if (expand) {
+                tree.expandItemsRecursively(rootId);
+            } else {
+                tree.collapseItemsRecursively(rootId);
+
+            }
+            for (int j = 0; j < children; j++) {
+                String childId = "child " + i + "/" + j;
+                tree.addItem(childId);
+                tree.setParent(childId, rootId);
+                tree.setChildrenAllowed(childId, false);
+                if (j == 4) {
+                    tree.setChildrenAllowed(childId, true);
+                    Object grandChildId = tree.addItem();
+                    tree.setParent(grandChildId, childId);
+                    tree.setChildrenAllowed(grandChildId, false);
+                    if (expand) {
+                        tree.expandItemsRecursively(childId);
+                    } else {
+                        tree.collapseItemsRecursively(childId);
+                    }
+                }
+            }
+        }
+
+        return tree;
+    }
+
+    public void testCollapseListener() {
+        Tree tree = createTree(7, 15, true);
+        tree.addListener((CollapseListener) this);
+
+        List<Object> rootIds = new ArrayList<Object>(tree.rootItemIds());
+
+        assertEquals(7, rootIds.size());
+        assertEquals(7 + 7 * 15 + 7, tree.size());
+
+        // Expanding should send one expand event for the root item id
+        tree.collapseItem(rootIds.get(0));
+        assertEquals(1, collapseCalled);
+        assertEquals(rootIds.get(0), lastCollapsed);
+
+        // Collapse sends one event for each collapsed node.
+        // In this case root + child 4
+        collapseCalled = 0;
+        tree.collapseItemsRecursively(rootIds.get(1));
+        assertEquals(2, collapseCalled);
+        List<Object> c = new ArrayList<Object>(tree.getChildren(rootIds.get(1)));
+        assertEquals(c.get(4), lastCollapsed);
+
+        // Collapsing an already expanded item should send no expand event
+        collapseCalled = 0;
+        tree.collapseItem(rootIds.get(0));
+        assertEquals(0, collapseCalled);
+    }
+
+    public void nodeExpand(ExpandEvent event) {
+        lastExpanded = event.getItemId();
+        expandCalled++;
+
+    }
+
+    public void nodeCollapse(CollapseEvent event) {
+        lastCollapsed = event.getItemId();
+        collapseCalled++;
+
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/tree/TreeListeners.java b/tests/server-side/com/vaadin/tests/server/component/tree/TreeListeners.java
new file mode 100644
index 0000000000..8ba2e1de4d
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/tree/TreeListeners.java
@@ -0,0 +1,27 @@
+package com.vaadin.tests.server.component.tree;
+
+import com.vaadin.event.ItemClickEvent;
+import com.vaadin.event.ItemClickEvent.ItemClickListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Tree.CollapseEvent;
+import com.vaadin.ui.Tree.CollapseListener;
+import com.vaadin.ui.Tree.ExpandEvent;
+import com.vaadin.ui.Tree.ExpandListener;
+
+public class TreeListeners extends AbstractListenerMethodsTest {
+    public void testExpandListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Tree.class, ExpandEvent.class,
+                ExpandListener.class);
+    }
+
+    public void testItemClickListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Tree.class, ItemClickEvent.class,
+                ItemClickListener.class);
+    }
+
+    public void testCollapseListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Tree.class, CollapseEvent.class,
+                CollapseListener.class);
+    }
+}
\ No newline at end of file
diff --git a/tests/server-side/com/vaadin/tests/server/component/treetable/EmptyTreeTable.java b/tests/server-side/com/vaadin/tests/server/component/treetable/EmptyTreeTable.java
new file mode 100644
index 0000000000..535ed8e860
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/treetable/EmptyTreeTable.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.server.component.treetable;
+
+import junit.framework.TestCase;
+
+import com.vaadin.ui.TreeTable;
+
+public class EmptyTreeTable extends TestCase {
+    public void testLastId() {
+        TreeTable treeTable = new TreeTable();
+
+        assertFalse(treeTable.isLastId(treeTable.getValue()));
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/upload/UploadListeners.java b/tests/server-side/com/vaadin/tests/server/component/upload/UploadListeners.java
new file mode 100644
index 0000000000..ea5fa94326
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/upload/UploadListeners.java
@@ -0,0 +1,41 @@
+package com.vaadin.tests.server.component.upload;
+
+import com.vaadin.terminal.StreamVariable.StreamingProgressEvent;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.Upload;
+import com.vaadin.ui.Upload.FailedEvent;
+import com.vaadin.ui.Upload.FailedListener;
+import com.vaadin.ui.Upload.FinishedEvent;
+import com.vaadin.ui.Upload.FinishedListener;
+import com.vaadin.ui.Upload.ProgressListener;
+import com.vaadin.ui.Upload.StartedEvent;
+import com.vaadin.ui.Upload.StartedListener;
+import com.vaadin.ui.Upload.SucceededEvent;
+import com.vaadin.ui.Upload.SucceededListener;
+
+public class UploadListeners extends AbstractListenerMethodsTest {
+    public void testProgressListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Upload.class, StreamingProgressEvent.class,
+                ProgressListener.class);
+    }
+
+    public void testSucceededListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Upload.class, SucceededEvent.class,
+                SucceededListener.class);
+    }
+
+    public void testStartedListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Upload.class, StartedEvent.class,
+                StartedListener.class);
+    }
+
+    public void testFailedListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Upload.class, FailedEvent.class,
+                FailedListener.class);
+    }
+
+    public void testFinishedListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Upload.class, FinishedEvent.class,
+                FinishedListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/urifragmentutility/UriFragmentUtilityListeners.java b/tests/server-side/com/vaadin/tests/server/component/urifragmentutility/UriFragmentUtilityListeners.java
new file mode 100644
index 0000000000..fe400e55b9
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/urifragmentutility/UriFragmentUtilityListeners.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.server.component.urifragmentutility;
+
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.UriFragmentUtility;
+import com.vaadin.ui.UriFragmentUtility.FragmentChangedEvent;
+import com.vaadin.ui.UriFragmentUtility.FragmentChangedListener;
+
+public class UriFragmentUtilityListeners extends AbstractListenerMethodsTest {
+    public void testFragmentChangedListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(UriFragmentUtility.class,
+                FragmentChangedEvent.class, FragmentChangedListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/window/AddRemoveSubWindow.java b/tests/server-side/com/vaadin/tests/server/component/window/AddRemoveSubWindow.java
new file mode 100644
index 0000000000..afc050b981
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/window/AddRemoveSubWindow.java
@@ -0,0 +1,83 @@
+package com.vaadin.tests.server.component.window;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Window;
+
+public class AddRemoveSubWindow {
+
+    public class TestApp extends Application {
+
+        @Override
+        public void init() {
+            Window w = new Window("Main window");
+            setMainWindow(w);
+        }
+    }
+
+    @Test
+    public void addSubWindow() {
+        TestApp app = new TestApp();
+        app.init();
+        Window subWindow = new Window("Sub window");
+        Window mainWindow = app.getMainWindow();
+
+        mainWindow.addWindow(subWindow);
+        // Added to main window so the parent of the sub window should be the
+        // main window
+        assertEquals(subWindow.getParent(), mainWindow);
+
+        try {
+            mainWindow.addWindow(subWindow);
+            assertTrue("Window.addWindow did not throw the expected exception",
+                    false);
+        } catch (IllegalArgumentException e) {
+            // Should throw an exception as it has already been added to the
+            // main window
+        }
+
+        // Try to add the same sub window to another window
+        try {
+            Window w = new Window();
+            w.addWindow(subWindow);
+            assertTrue("Window.addWindow did not throw the expected exception",
+                    false);
+        } catch (IllegalArgumentException e) {
+            // Should throw an exception as it has already been added to the
+            // main window
+        }
+
+    }
+
+    @Test
+    public void removeSubWindow() {
+        TestApp app = new TestApp();
+        app.init();
+        Window subWindow = new Window("Sub window");
+        Window mainWindow = app.getMainWindow();
+        mainWindow.addWindow(subWindow);
+
+        // Added to main window so the parent of the sub window should be the
+        // main window
+        assertEquals(subWindow.getParent(), mainWindow);
+
+        // Remove from the wrong window, should result in an exception
+        boolean removed = subWindow.removeWindow(subWindow);
+        assertFalse("Window was removed even though it should not have been",
+                removed);
+
+        // Parent should still be set
+        assertEquals(subWindow.getParent(), mainWindow);
+
+        // Remove from the main window and assert it has been removed
+        removed = mainWindow.removeWindow(subWindow);
+        assertTrue("Window was not removed correctly", removed);
+        assertNull(subWindow.getParent());
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/component/window/WindowListeners.java b/tests/server-side/com/vaadin/tests/server/component/window/WindowListeners.java
new file mode 100644
index 0000000000..b8d9579dae
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/component/window/WindowListeners.java
@@ -0,0 +1,34 @@
+package com.vaadin.tests.server.component.window;
+
+import com.vaadin.event.FieldEvents.BlurEvent;
+import com.vaadin.event.FieldEvents.BlurListener;
+import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.event.FieldEvents.FocusListener;
+import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.CloseEvent;
+import com.vaadin.ui.Window.CloseListener;
+import com.vaadin.ui.Window.ResizeEvent;
+import com.vaadin.ui.Window.ResizeListener;
+
+public class WindowListeners extends AbstractListenerMethodsTest {
+    public void testFocusListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Window.class, FocusEvent.class,
+                FocusListener.class);
+    }
+
+    public void testBlurListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Window.class, BlurEvent.class,
+                BlurListener.class);
+    }
+
+    public void testResizeListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Window.class, ResizeEvent.class,
+                ResizeListener.class);
+    }
+
+    public void testCloseListenerAddGetRemove() throws Exception {
+        testListenerAddGetRemove(Window.class, CloseEvent.class,
+                CloseListener.class);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/componentcontainer/AddRemoveComponentTest.java b/tests/server-side/com/vaadin/tests/server/componentcontainer/AddRemoveComponentTest.java
new file mode 100644
index 0000000000..828404bd5a
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/componentcontainer/AddRemoveComponentTest.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.server.componentcontainer;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import com.vaadin.tests.VaadinClasses;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+
+public class AddRemoveComponentTest extends TestCase {
+
+    public void testRemoveComponentFromWrongContainer()
+            throws InstantiationException, IllegalAccessException {
+        List<Class<? extends ComponentContainer>> containerClasses = VaadinClasses
+                .getComponentContainersSupportingAddRemoveComponent();
+
+        // No default constructor, special case
+        containerClasses.remove(CustomLayout.class);
+        testRemoveComponentFromWrongContainer(new CustomLayout("dummy"));
+
+        for (Class<? extends ComponentContainer> c : containerClasses) {
+            testRemoveComponentFromWrongContainer(c.newInstance());
+        }
+    }
+
+    private void testRemoveComponentFromWrongContainer(
+            ComponentContainer componentContainer) {
+        HorizontalLayout hl = new HorizontalLayout();
+        Label label = new Label();
+        hl.addComponent(label);
+
+        componentContainer.removeComponent(label);
+        assertEquals(
+                "Parent no longer correct for " + componentContainer.getClass(),
+                hl, label.getParent());
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/components/AbstractTestFieldValueChange.java b/tests/server-side/com/vaadin/tests/server/components/AbstractTestFieldValueChange.java
new file mode 100644
index 0000000000..3aebd5bf9d
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/components/AbstractTestFieldValueChange.java
@@ -0,0 +1,169 @@
+package com.vaadin.tests.server.components;
+
+import junit.framework.TestCase;
+
+import org.easymock.EasyMock;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.Property.ValueChangeNotifier;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.ui.AbstractField;
+
+/**
+ * Base class for tests for checking that value change listeners for fields are
+ * not called exactly once when they should be, and not at other times.
+ * 
+ * Does not check all cases (e.g. properties that do not implement
+ * {@link ValueChangeNotifier}).
+ * 
+ * Subclasses should implement {@link #setValue()} and call
+ * <code>super.setValue(AbstractField)</code>. Also, subclasses should typically
+ * override {@link #setValue(AbstractField)} to set the field value via
+ * <code>changeVariables()</code>.
+ */
+public abstract class AbstractTestFieldValueChange extends TestCase {
+
+    private AbstractField field;
+    private ValueChangeListener listener;
+
+    protected void setUp(AbstractField field) throws Exception {
+        this.field = field;
+        listener = EasyMock.createStrictMock(ValueChangeListener.class);
+
+    }
+
+    protected ValueChangeListener getListener() {
+        return listener;
+    }
+
+    /**
+     * Test that listeners are not called when they have been unregistered.
+     */
+    public void testRemoveListener() {
+        getField().setPropertyDataSource(new ObjectProperty<String>(""));
+        getField().setWriteThrough(true);
+        getField().setReadThrough(true);
+
+        // Expectations and start test
+        listener.valueChange(EasyMock.isA(ValueChangeEvent.class));
+        EasyMock.replay(listener);
+
+        // Add listener and set the value -> should end up in listener once
+        getField().addListener(listener);
+        setValue(getField());
+
+        // Ensure listener was called once
+        EasyMock.verify(listener);
+
+        // Remove the listener and set the value -> should not end up in
+        // listener
+        getField().removeListener(listener);
+        setValue(getField());
+
+        // Ensure listener still has been called only once
+        EasyMock.verify(listener);
+    }
+
+    /**
+     * Common unbuffered case: both writeThrough (auto-commit) and readThrough
+     * are on. Calling commit() should not cause notifications.
+     * 
+     * Using the readThrough mode allows changes made to the property value to
+     * be seen in some cases also when there is no notification of value change
+     * from the property.
+     * 
+     * Field value change notifications closely mirror value changes of the data
+     * source behind the field.
+     */
+    public void testWriteThroughReadThrough() {
+        getField().setPropertyDataSource(new ObjectProperty<String>(""));
+        getField().setWriteThrough(true);
+        getField().setReadThrough(true);
+
+        expectValueChangeFromSetValueNotCommit();
+    }
+
+    /**
+     * Fully buffered use where the data source is neither read nor modified
+     * during editing, and is updated at commit().
+     * 
+     * Field value change notifications reflect the buffered value in the field,
+     * not the original data source value changes.
+     */
+    public void testNoWriteThroughNoReadThrough() {
+        getField().setPropertyDataSource(new ObjectProperty<String>(""));
+        getField().setWriteThrough(false);
+        getField().setReadThrough(false);
+
+        expectValueChangeFromSetValueNotCommit();
+    }
+
+    /**
+     * Less common partly buffered case: writeThrough (auto-commit) is on and
+     * readThrough is off. Calling commit() should not cause notifications.
+     * 
+     * Without readThrough activated, changes to the data source that do not
+     * cause notifications are not reflected by the field value.
+     * 
+     * Field value change notifications correspond to changes made to the data
+     * source value through the text field or the (notifying) property.
+     */
+    public void testWriteThroughNoReadThrough() {
+        getField().setPropertyDataSource(new ObjectProperty<String>(""));
+        getField().setWriteThrough(true);
+        getField().setReadThrough(false);
+
+        expectValueChangeFromSetValueNotCommit();
+    }
+
+    /**
+     * Partly buffered use where the data source is read but not nor modified
+     * during editing, and is updated at commit().
+     * 
+     * When used like this, a field is updated from the data source if necessary
+     * when its value is requested and the property value has changed but the
+     * field has not been modified in its buffer.
+     * 
+     * Field value change notifications reflect the buffered value in the field,
+     * not the original data source value changes.
+     */
+    public void testNoWriteThroughReadThrough() {
+        getField().setPropertyDataSource(new ObjectProperty<String>(""));
+        getField().setWriteThrough(false);
+        getField().setReadThrough(true);
+
+        expectValueChangeFromSetValueNotCommit();
+    }
+
+    protected void expectValueChangeFromSetValueNotCommit() {
+        // Expectations and start test
+        listener.valueChange(EasyMock.isA(ValueChangeEvent.class));
+        EasyMock.replay(listener);
+
+        // Add listener and set the value -> should end up in listener once
+        getField().addListener(listener);
+        setValue(getField());
+
+        // Ensure listener was called once
+        EasyMock.verify(listener);
+
+        // commit
+        getField().commit();
+
+        // Ensure listener was not called again
+        EasyMock.verify(listener);
+    }
+
+    protected AbstractField getField() {
+        return field;
+    }
+
+    /**
+     * Override in subclasses to set value with changeVariables().
+     */
+    protected void setValue(AbstractField field) {
+        field.setValue("newValue");
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/tests/server/components/ComponentAttachDetachListenerTest.java b/tests/server-side/com/vaadin/tests/server/components/ComponentAttachDetachListenerTest.java
new file mode 100644
index 0000000000..1e01d9a55f
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/components/ComponentAttachDetachListenerTest.java
@@ -0,0 +1,343 @@
+package com.vaadin.tests.server.components;
+
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+
+import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.ComponentContainer.ComponentAttachEvent;
+import com.vaadin.ui.ComponentContainer.ComponentAttachListener;
+import com.vaadin.ui.ComponentContainer.ComponentDetachEvent;
+import com.vaadin.ui.ComponentContainer.ComponentDetachListener;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.GridLayout.Area;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+
+public class ComponentAttachDetachListenerTest extends TestCase {
+
+    private AbstractOrderedLayout olayout;
+    private GridLayout gridlayout;
+    private AbsoluteLayout absolutelayout;
+    private CssLayout csslayout;
+
+    // General variables
+    private int attachCounter = 0;
+    private Component attachedComponent = null;
+    private ComponentContainer attachTarget = null;
+    private boolean foundInContainer = false;
+
+    private int detachCounter = 0;
+    private Component detachedComponent = null;
+    private ComponentContainer detachedTarget = null;
+
+    // Ordered layout specific variables
+    private int indexOfComponent = -1;
+
+    // Grid layout specific variables
+    private Area componentArea = null;
+
+    // Absolute layout specific variables
+    private ComponentPosition componentPosition = null;
+
+    private class MyAttachListener implements ComponentAttachListener {
+        public void componentAttachedToContainer(ComponentAttachEvent event) {
+            attachCounter++;
+            attachedComponent = event.getAttachedComponent();
+            attachTarget = event.getContainer();
+
+            // Search for component in container (should be found)
+            Iterator<Component> iter = attachTarget.getComponentIterator();
+            while (iter.hasNext()) {
+                if (iter.next() == attachedComponent) {
+                    foundInContainer = true;
+                    break;
+                }
+            }
+
+            // Get layout specific variables
+            if (attachTarget instanceof AbstractOrderedLayout) {
+                indexOfComponent = ((AbstractOrderedLayout) attachTarget)
+                        .getComponentIndex(attachedComponent);
+            } else if (attachTarget instanceof GridLayout) {
+                componentArea = ((GridLayout) attachTarget)
+                        .getComponentArea(attachedComponent);
+            } else if (attachTarget instanceof AbsoluteLayout) {
+                componentPosition = ((AbsoluteLayout) attachTarget)
+                        .getPosition(attachedComponent);
+            }
+        }
+    }
+
+    private class MyDetachListener implements ComponentDetachListener {
+        public void componentDetachedFromContainer(ComponentDetachEvent event) {
+            detachCounter++;
+            detachedComponent = event.getDetachedComponent();
+            detachedTarget = event.getContainer();
+
+            // Search for component in container (should NOT be found)
+            Iterator<Component> iter = detachedTarget.getComponentIterator();
+            while (iter.hasNext()) {
+                if (iter.next() == detachedComponent) {
+                    foundInContainer = true;
+                    break;
+                }
+            }
+
+            // Get layout specific variables
+            if (detachedTarget instanceof AbstractOrderedLayout) {
+                indexOfComponent = ((AbstractOrderedLayout) detachedTarget)
+                        .getComponentIndex(detachedComponent);
+            } else if (detachedTarget instanceof GridLayout) {
+                componentArea = ((GridLayout) detachedTarget)
+                        .getComponentArea(detachedComponent);
+            } else if (detachedTarget instanceof AbsoluteLayout) {
+                componentPosition = ((AbsoluteLayout) detachedTarget)
+                        .getPosition(detachedComponent);
+            }
+
+        }
+    }
+
+    private void resetVariables() {
+        // Attach
+        attachCounter = 0;
+        attachedComponent = null;
+        attachTarget = null;
+        foundInContainer = false;
+
+        // Detach
+        detachCounter = 0;
+        detachedComponent = null;
+        detachedTarget = null;
+
+        // Common
+        indexOfComponent = -1;
+        componentArea = null;
+        componentPosition = null;
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        olayout = new HorizontalLayout();
+        olayout.addListener(new MyAttachListener());
+        olayout.addListener(new MyDetachListener());
+
+        gridlayout = new GridLayout();
+        gridlayout.addListener(new MyAttachListener());
+        gridlayout.addListener(new MyDetachListener());
+
+        absolutelayout = new AbsoluteLayout();
+        absolutelayout.addListener(new MyAttachListener());
+        absolutelayout.addListener(new MyDetachListener());
+
+        csslayout = new CssLayout();
+        csslayout.addListener(new MyAttachListener());
+        csslayout.addListener(new MyDetachListener());
+    }
+
+    public void testOrderedLayoutAttachListener() {
+        // Reset state variables
+        resetVariables();
+
+        // Add component -> Should trigger attach listener
+        Component comp = new Label();
+        olayout.addComponent(comp);
+
+        // Attach counter should get incremented
+        assertEquals(1, attachCounter);
+
+        // The attached component should be the label
+        assertSame(comp, attachedComponent);
+
+        // The attached target should be the layout
+        assertSame(olayout, attachTarget);
+
+        // The attached component should be found in the container
+        assertTrue(foundInContainer);
+
+        // The index of the component should not be -1
+        assertFalse(indexOfComponent == -1);
+    }
+
+    public void testOrderedLayoutDetachListener() {
+        // Add a component to detach
+        Component comp = new Label();
+        olayout.addComponent(comp);
+
+        // Reset state variables (since they are set by the attach listener)
+        resetVariables();
+
+        // Detach the component -> triggers the detach listener
+        olayout.removeComponent(comp);
+
+        // Detach counter should get incremented
+        assertEquals(1, detachCounter);
+
+        // The detached component should be the label
+        assertSame(comp, detachedComponent);
+
+        // The detached target should be the layout
+        assertSame(olayout, detachedTarget);
+
+        // The detached component should not be found in the container
+        assertFalse(foundInContainer);
+
+        // The index of the component should be -1
+        assertEquals(-1, indexOfComponent);
+    }
+
+    public void testGridLayoutAttachListener() {
+        // Reset state variables
+        resetVariables();
+
+        // Add component -> Should trigger attach listener
+        Component comp = new Label();
+        gridlayout.addComponent(comp);
+
+        // Attach counter should get incremented
+        assertEquals(1, attachCounter);
+
+        // The attached component should be the label
+        assertSame(comp, attachedComponent);
+
+        // The attached target should be the layout
+        assertSame(gridlayout, attachTarget);
+
+        // The attached component should be found in the container
+        assertTrue(foundInContainer);
+
+        // The grid area should not be null
+        assertNotNull(componentArea);
+    }
+
+    public void testGridLayoutDetachListener() {
+        // Add a component to detach
+        Component comp = new Label();
+        gridlayout.addComponent(comp);
+
+        // Reset state variables (since they are set by the attach listener)
+        resetVariables();
+
+        // Detach the component -> triggers the detach listener
+        gridlayout.removeComponent(comp);
+
+        // Detach counter should get incremented
+        assertEquals(1, detachCounter);
+
+        // The detached component should be the label
+        assertSame(comp, detachedComponent);
+
+        // The detached target should be the layout
+        assertSame(gridlayout, detachedTarget);
+
+        // The detached component should not be found in the container
+        assertFalse(foundInContainer);
+
+        // The grid area should be null
+        assertNull(componentArea);
+    }
+
+    public void testAbsoluteLayoutAttachListener() {
+        // Reset state variables
+        resetVariables();
+
+        // Add component -> Should trigger attach listener
+        Component comp = new Label();
+        absolutelayout.addComponent(comp);
+
+        // Attach counter should get incremented
+        assertEquals(1, attachCounter);
+
+        // The attached component should be the label
+        assertSame(comp, attachedComponent);
+
+        // The attached target should be the layout
+        assertSame(absolutelayout, attachTarget);
+
+        // The attached component should be found in the container
+        assertTrue(foundInContainer);
+
+        // The component position should not be null
+        assertNotNull(componentPosition);
+    }
+
+    public void testAbsoluteLayoutDetachListener() {
+        // Add a component to detach
+        Component comp = new Label();
+        absolutelayout.addComponent(comp);
+
+        // Reset state variables (since they are set by the attach listener)
+        resetVariables();
+
+        // Detach the component -> triggers the detach listener
+        absolutelayout.removeComponent(comp);
+
+        // Detach counter should get incremented
+        assertEquals(1, detachCounter);
+
+        // The detached component should be the label
+        assertSame(comp, detachedComponent);
+
+        // The detached target should be the layout
+        assertSame(absolutelayout, detachedTarget);
+
+        // The detached component should not be found in the container
+        assertFalse(foundInContainer);
+
+        // The component position should be null
+        assertNull(componentPosition);
+    }
+
+    public void testCSSLayoutAttachListener() {
+        // Reset state variables
+        resetVariables();
+
+        // Add component -> Should trigger attach listener
+        Component comp = new Label();
+        csslayout.addComponent(comp);
+
+        // Attach counter should get incremented
+        assertEquals(1, attachCounter);
+
+        // The attached component should be the label
+        assertSame(comp, attachedComponent);
+
+        // The attached target should be the layout
+        assertSame(csslayout, attachTarget);
+
+        // The attached component should be found in the container
+        assertTrue(foundInContainer);
+    }
+
+    public void testCSSLayoutDetachListener() {
+        // Add a component to detach
+        Component comp = new Label();
+        csslayout.addComponent(comp);
+
+        // Reset state variables (since they are set by the attach listener)
+        resetVariables();
+
+        // Detach the component -> triggers the detach listener
+        csslayout.removeComponent(comp);
+
+        // Detach counter should get incremented
+        assertEquals(1, detachCounter);
+
+        // The detached component should be the label
+        assertSame(comp, detachedComponent);
+
+        // The detached target should be the layout
+        assertSame(csslayout, detachedTarget);
+
+        // The detached component should not be found in the container
+        assertFalse(foundInContainer);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/components/TestComboBoxValueChange.java b/tests/server-side/com/vaadin/tests/server/components/TestComboBoxValueChange.java
new file mode 100644
index 0000000000..cb73199fb8
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/components/TestComboBoxValueChange.java
@@ -0,0 +1,30 @@
+package com.vaadin.tests.server.components;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.vaadin.ui.AbstractField;
+import com.vaadin.ui.ComboBox;
+
+/**
+ * Check that the value change listener for a combo box is triggered exactly
+ * once when setting the value, at the correct time.
+ * 
+ * See <a href="http://dev.vaadin.com/ticket/4394">Ticket 4394</a>.
+ */
+public class TestComboBoxValueChange extends AbstractTestFieldValueChange {
+    @Override
+    protected void setUp() throws Exception {
+        ComboBox combo = new ComboBox();
+        combo.addItem("myvalue");
+        super.setUp(combo);
+    }
+
+    @Override
+    protected void setValue(AbstractField field) {
+        Map<String, Object> variables = new HashMap<String, Object>();
+        variables.put("selected", new String[] { "myvalue" });
+        field.changeVariables(field, variables);
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/tests/server/components/TestGridLayoutLastRowRemoval.java b/tests/server-side/com/vaadin/tests/server/components/TestGridLayoutLastRowRemoval.java
new file mode 100644
index 0000000000..92664917fd
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/components/TestGridLayoutLastRowRemoval.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.server.components;
+
+import junit.framework.TestCase;
+
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+
+public class TestGridLayoutLastRowRemoval extends TestCase {
+
+    public void testRemovingLastRow() {
+        GridLayout grid = new GridLayout(2, 1);
+        grid.addComponent(new Label("Col1"));
+        grid.addComponent(new Label("Col2"));
+
+        try {
+            // Removing the last row in the grid
+            grid.removeRow(0);
+        } catch (IllegalArgumentException iae) {
+            // Removing the last row should not throw an
+            // IllegalArgumentException
+            fail("removeRow(0) threw an IllegalArgumentExcetion when removing the last row");
+        }
+
+        // The column amount should be preserved
+        assertEquals(2, grid.getColumns());
+
+        // There should be one row left
+        assertEquals(1, grid.getRows());
+
+        // There should be no component left in the grid layout
+        assertNull("A component should not be left in the layout",
+                grid.getComponent(0, 0));
+        assertNull("A component should not be left in the layout",
+                grid.getComponent(1, 0));
+
+        // The cursor should be in the first cell
+        assertEquals(0, grid.getCursorX());
+        assertEquals(0, grid.getCursorY());
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/components/TestTextFieldValueChange.java b/tests/server-side/com/vaadin/tests/server/components/TestTextFieldValueChange.java
new file mode 100644
index 0000000000..1144caf805
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/components/TestTextFieldValueChange.java
@@ -0,0 +1,180 @@
+package com.vaadin.tests.server.components;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import org.easymock.EasyMock;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.ui.AbstractField;
+import com.vaadin.ui.TextField;
+
+/**
+ * Check that the value change listener for a text field is triggered exactly
+ * once when setting the value, at the correct time.
+ * 
+ * See <a href="http://dev.vaadin.com/ticket/4394">Ticket 4394</a>.
+ */
+public class TestTextFieldValueChange extends AbstractTestFieldValueChange {
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp(new TextField());
+    }
+
+    /**
+     * Case where the text field only uses its internal buffer, no external
+     * property data source.
+     */
+    public void testNoDataSource() {
+        getField().setPropertyDataSource(null);
+
+        expectValueChangeFromSetValueNotCommit();
+    }
+
+    @Override
+    protected void setValue(AbstractField field) {
+        Map<String, Object> variables = new HashMap<String, Object>();
+        variables.put("text", "newValue");
+        field.changeVariables(field, variables);
+    }
+
+    /**
+     * Test that field propagates value change events originating from property,
+     * but don't fire value change events twice if value has only changed once.
+     * 
+     * 
+     * TODO make test field type agnostic (eg. combobox)
+     */
+    public void testValueChangeEventPropagationWithReadThrough() {
+        ObjectProperty<String> property = new ObjectProperty<String>("");
+        getField().setPropertyDataSource(property);
+
+        // defaults, buffering off
+        getField().setWriteThrough(true);
+        getField().setReadThrough(true);
+
+        // Expectations and start test
+        getListener().valueChange(EasyMock.isA(ValueChangeEvent.class));
+        EasyMock.replay(getListener());
+
+        // Add listener and set the value -> should end up in listener once
+        getField().addListener(getListener());
+
+        property.setValue("Foo");
+
+        // Ensure listener was called once
+        EasyMock.verify(getListener());
+
+        // get value should not fire value change again
+        Object value = getField().getValue();
+        Assert.assertEquals("Foo", value);
+
+        // Ensure listener still has been called only once
+        EasyMock.verify(getListener());
+    }
+
+    /**
+     * If read through is on and value has been modified, but not committed, the
+     * value should not propagate similar to
+     * {@link #testValueChangeEventPropagationWithReadThrough()}
+     * 
+     * TODO make test field type agnostic (eg. combobox)
+     */
+    public void testValueChangePropagationWithReadThroughWithModifiedValue() {
+        final String initialValue = "initial";
+        ObjectProperty<String> property = new ObjectProperty<String>(
+                initialValue);
+        getField().setPropertyDataSource(property);
+
+        // write buffering on, read buffering off
+        getField().setWriteThrough(false);
+        getField().setReadThrough(true);
+
+        // Expect no value changes calls to listener
+        EasyMock.replay(getListener());
+
+        // first set the value (note, write through false -> not forwarded to
+        // property)
+        setValue(getField());
+
+        Assert.assertTrue(getField().isModified());
+
+        // Add listener and set the value -> should end up in listener once
+        getField().addListener(getListener());
+
+        // modify property value, should not fire value change in field as the
+        // field has uncommitted value (aka isModified() == true)
+        property.setValue("Foo");
+
+        // Ensure listener was called once
+        EasyMock.verify(getListener());
+
+        // get value should not fire value change again
+        Object value = getField().getValue();
+        // Ensure listener still has been called only once
+        EasyMock.verify(getListener());
+
+        // field value should be different from the original value and current
+        // proeprty value
+        boolean isValueEqualToInitial = value.equals(initialValue);
+        Assert.assertFalse(isValueEqualToInitial);
+        boolean isValueEqualToPropertyValue = value.equals(property.getValue());
+        Assert.assertFalse(isValueEqualToPropertyValue);
+
+        // Ensure listener has not been called
+        EasyMock.verify(getListener());
+
+    }
+
+    /**
+     * Value change events from property should not propagate if read through is
+     * false. Execpt when the property is being set.
+     * 
+     * TODO make test field type agnostic (eg. combobox)
+     */
+    public void testValueChangePropagationWithReadThroughOff() {
+        final String initialValue = "initial";
+        ObjectProperty<String> property = new ObjectProperty<String>(
+                initialValue);
+
+        // set buffering
+        getField().setWriteThrough(false);
+        getField().setReadThrough(false);
+
+        // Value change should only happen once, when setting the property,
+        // further changes via property should not cause value change listener
+        // in field to be notified
+        getListener().valueChange(EasyMock.isA(ValueChangeEvent.class));
+        EasyMock.replay(getListener());
+
+        getField().addListener(getListener());
+        getField().setPropertyDataSource(property);
+
+        // Ensure listener was called once
+        EasyMock.verify(getListener());
+
+        // modify property value, should not fire value change in field as the
+        // read buffering is on (read through == false)
+        property.setValue("Foo");
+
+        // Ensure listener still has been called only once
+        EasyMock.verify(getListener());
+
+        // get value should not fire value change again
+        Object value = getField().getValue();
+
+        // field value should be different from the original value and current
+        // proeprty value
+        boolean isValueEqualToInitial = value.equals(initialValue);
+        Assert.assertTrue(isValueEqualToInitial);
+
+        // Ensure listener still has been called only once
+        EasyMock.verify(getListener());
+
+    }
+
+}
diff --git a/tests/server-side/com/vaadin/tests/server/components/TestWindow.java b/tests/server-side/com/vaadin/tests/server/components/TestWindow.java
new file mode 100644
index 0000000000..05604aba61
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/components/TestWindow.java
@@ -0,0 +1,90 @@
+package com.vaadin.tests.server.components;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.easymock.EasyMock;
+
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.CloseEvent;
+import com.vaadin.ui.Window.CloseListener;
+import com.vaadin.ui.Window.ResizeEvent;
+import com.vaadin.ui.Window.ResizeListener;
+
+public class TestWindow extends TestCase {
+
+    private Window window;
+
+    @Override
+    protected void setUp() throws Exception {
+        window = new Window();
+    }
+
+    public void testCloseListener() {
+        CloseListener cl = EasyMock.createMock(Window.CloseListener.class);
+
+        // Expectations
+        cl.windowClose(EasyMock.isA(CloseEvent.class));
+
+        // Start actual test
+        EasyMock.replay(cl);
+
+        // Add listener and send a close event -> should end up in listener once
+        window.addListener(cl);
+        sendClose(window);
+
+        // Ensure listener was called once
+        EasyMock.verify(cl);
+
+        // Remove the listener and send close event -> should not end up in
+        // listener
+        window.removeListener(cl);
+        sendClose(window);
+
+        // Ensure listener still has been called only once
+        EasyMock.verify(cl);
+
+    }
+
+    public void testResizeListener() {
+        ResizeListener rl = EasyMock.createMock(Window.ResizeListener.class);
+
+        // Expectations
+        rl.windowResized(EasyMock.isA(ResizeEvent.class));
+
+        // Start actual test
+        EasyMock.replay(rl);
+
+        // Add listener and send a resize event -> should end up in listener
+        // once
+        window.addListener(rl);
+        sendResize(window);
+
+        // Ensure listener was called once
+        EasyMock.verify(rl);
+
+        // Remove the listener and send close event -> should not end up in
+        // listener
+        window.removeListener(rl);
+        sendResize(window);
+
+        // Ensure listener still has been called only once
+        EasyMock.verify(rl);
+
+    }
+
+    private void sendResize(Window window2) {
+        Map<String, Object> variables = new HashMap<String, Object>();
+        variables.put("height", 1234);
+        window.changeVariables(window, variables);
+
+    }
+
+    private static void sendClose(Window window) {
+        Map<String, Object> variables = new HashMap<String, Object>();
+        variables.put("close", true);
+        window.changeVariables(window, variables);
+    }
+}
diff --git a/tests/server-side/com/vaadin/tests/server/validation/TestReadOnlyValidation.java b/tests/server-side/com/vaadin/tests/server/validation/TestReadOnlyValidation.java
new file mode 100644
index 0000000000..6939ce27d2
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/server/validation/TestReadOnlyValidation.java
@@ -0,0 +1,17 @@
+package com.vaadin.tests.server.validation;
+
+import org.junit.Test;
+
+import com.vaadin.data.validator.IntegerValidator;
+import com.vaadin.ui.TextField;
+
+public class TestReadOnlyValidation {
+
+    @Test
+    public void testIntegerValidation() {
+        TextField field = new TextField();
+        field.addValidator(new IntegerValidator("Enter a Valid Number"));
+        field.setValue(Integer.valueOf(10));
+        field.validate();
+    }
+}
diff --git a/tests/src/com/vaadin/tests/Components.java b/tests/src/com/vaadin/tests/Components.java
deleted file mode 100644
index 6987c04a54..0000000000
--- a/tests/src/com/vaadin/tests/Components.java
+++ /dev/null
@@ -1,269 +0,0 @@
-package com.vaadin.tests;
-
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import com.vaadin.Application;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.DefaultItemSorter;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.event.ItemClickEvent;
-import com.vaadin.event.ItemClickEvent.ItemClickListener;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.tests.components.AbstractComponentTest;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.Tree.ItemStyleGenerator;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Components extends Application {
-
-    private static final Object CAPTION = "c";
-    private Map<Class<? extends AbstractComponentTest<?>>, String> tests = new HashMap<Class<? extends AbstractComponentTest<?>>, String>();
-    private Tree naviTree;
-    private HorizontalSplitPanel sp;
-    private Window mainWindow;
-    private final Embedded applicationEmbedder = new Embedded();
-    private String baseUrl;
-    private List<Class<? extends Component>> componentsWithoutTests = new ArrayList<Class<? extends Component>>();
-
-    {
-        for (Class<? extends AbstractComponentTest<?>> c : VaadinClasses
-                .getBasicComponentTests()) {
-            String testClass = c.getSimpleName();
-            tests.put(c, testClass);
-        }
-
-        List<Class<? extends Component>> componentsWithoutTest = VaadinClasses
-                .getComponents();
-        Set<String> availableTests = new HashSet<String>();
-        for (String testName : tests.values()) {
-            availableTests.add(testName);
-        }
-
-        for (Class<? extends Component> component : componentsWithoutTest) {
-            String baseName = component.getSimpleName();
-            if (availableTests.contains(baseName + "es")) {
-                continue;
-            }
-            if (availableTests.contains(baseName + "es2")) {
-                continue;
-            }
-            if (availableTests.contains(baseName + "s2")) {
-                continue;
-            }
-            if (availableTests.contains(baseName + "s")) {
-                continue;
-            }
-            if (availableTests.contains(baseName + "Test")) {
-                continue;
-            }
-
-            componentsWithoutTests.add(component);
-        }
-
-    }
-
-    class MissingTest extends AbstractComponentTest<AbstractComponent> {
-        @Override
-        protected Class<AbstractComponent> getTestClass() {
-            return null;
-        }
-    }
-
-    @Override
-    public void init() {
-        mainWindow = new Window();
-        setTheme("tests-components");
-        mainWindow.getContent().setSizeFull();
-        setMainWindow(mainWindow);
-        sp = new HorizontalSplitPanel();
-        sp.setSizeFull();
-        VerticalLayout naviLayout = new VerticalLayout();
-        naviLayout
-                .addComponent(new Label(
-                        "Click to open a test case.<br/>Right click to open test in a new window<br/><br/>",
-                        Label.CONTENT_XHTML));
-        naviLayout.addComponent(createMenu());
-        naviLayout.addComponent(createMissingTestsList());
-
-        sp.setFirstComponent(naviLayout);
-        sp.setSplitPosition(250, Sizeable.UNITS_PIXELS);
-        VerticalLayout embeddingLayout = new VerticalLayout();
-        embeddingLayout.setSizeFull();
-        embeddingLayout
-                .addComponent(new Label(
-                        "<b>Do not use the embedded version for creating automated tests. Open the test in a new window before recording.</b><br/>",
-                        Label.CONTENT_XHTML));
-        applicationEmbedder.setSizeFull();
-        embeddingLayout.addComponent(applicationEmbedder);
-        embeddingLayout.setExpandRatio(applicationEmbedder, 1);
-        sp.setSecondComponent(embeddingLayout);
-        mainWindow.addComponent(sp);
-
-        applicationEmbedder.setType(Embedded.TYPE_BROWSER);
-        baseUrl = getURL().toString().replace(getClass().getName(), "")
-                .replaceAll("//$", "/");
-    }
-
-    private Component createMissingTestsList() {
-        String missingTests = "";
-        for (Class<? extends Component> component : componentsWithoutTests) {
-            String cls = "missing";
-            if (component.getAnnotation(Deprecated.class) != null) {
-                cls = "missing-deprecated";
-            }
-            missingTests += "<font class=\"" + cls + "\">"
-                    + component.getSimpleName() + "</font><br/>";
-        }
-        return new Label("<b>Components without a test:</B><br/>"
-                + missingTests, Label.CONTENT_XHTML);
-    }
-
-    private Component createMenu() {
-        naviTree = new Tree();
-        naviTree.setItemStyleGenerator(new ItemStyleGenerator() {
-
-            public String getStyle(Object itemId) {
-                Class<?> cls = (Class<?>) itemId;
-                if (!isAbstract(cls)) {
-                    return "blue";
-                }
-                return null;
-            }
-        });
-        HierarchicalContainer hc = new HierarchicalContainer();
-        naviTree.setContainerDataSource(hc);
-        DefaultItemSorter sorter = new DefaultItemSorter() {
-            @SuppressWarnings("rawtypes")
-            @Override
-            public int compare(Object o1, Object o2) {
-                if (o1 instanceof Class && o2 instanceof Class && o1 != null
-                        && o2 != null) {
-                    Class<?> c1 = (Class) o1;
-                    Class<?> c2 = (Class) o2;
-                    boolean a1 = isAbstract(c1);
-                    boolean a2 = isAbstract(c2);
-
-                    if (a1 && !a2) {
-                        return 1;
-                    } else if (!a1 && a2) {
-                        return -1;
-                    }
-
-                }
-                return super.compare(o1, o2);
-            }
-        };
-        hc.setItemSorter(sorter);
-        naviTree.addContainerProperty(CAPTION, String.class, "");
-        naviTree.setItemCaptionPropertyId(CAPTION);
-        for (Class<? extends AbstractComponentTest<?>> cls : tests.keySet()) {
-            addTreeItem(cls);
-        }
-        hc.sort(new Object[] { CAPTION }, new boolean[] { true });
-        naviTree.setSelectable(false);
-        for (Object o : naviTree.rootItemIds()) {
-            expandAndSetChildrenAllowed(o);
-        }
-
-        naviTree.addListener(new ItemClickListener() {
-
-            public void itemClick(ItemClickEvent event) {
-                Class<?> cls = (Class<?>) event.getItemId();
-                if (!isAbstract(cls)) {
-                    String url = baseUrl + cls.getName()
-                            + "?restartApplication";
-                    if (event.getButton() == ItemClickEvent.BUTTON_LEFT) {
-                        openEmbedded(url);
-                        naviTree.setValue(event.getItemId());
-                    } else if (event.getButton() == ItemClickEvent.BUTTON_RIGHT) {
-                        openInNewTab(url);
-                    }
-                }
-            }
-
-        });
-        return naviTree;
-    }
-
-    protected void openInNewTab(String url) {
-        getMainWindow().open(new ExternalResource(url), "_blank");
-    }
-
-    protected void openEmbedded(String url) {
-        applicationEmbedder.setSource(new ExternalResource(url));
-    }
-
-    private void expandAndSetChildrenAllowed(Object o) {
-        Collection<?> children = naviTree.getChildren(o);
-        if (children == null || children.size() == 0) {
-            naviTree.setChildrenAllowed(o, false);
-        } else {
-            naviTree.expandItem(o);
-            for (Object c : children) {
-                expandAndSetChildrenAllowed(c);
-            }
-        }
-
-    }
-
-    protected boolean isAbstract(Class<?> cls) {
-        return Modifier.isAbstract(cls.getModifiers());
-    }
-
-    @SuppressWarnings("unchecked")
-    private void addTreeItem(Class<? extends AbstractComponentTest<?>> cls) {
-        String name = tests.get(cls);
-        if (name == null) {
-            name = cls.getSimpleName();
-        }
-
-        Class<? extends AbstractComponentTest<?>> superClass = (Class<? extends AbstractComponentTest<?>>) cls
-                .getSuperclass();
-
-        // This cast is needed only to make compilation through Ant work ..
-        if (((Class<?>) cls) != AbstractComponentTest.class) {
-            addTreeItem(superClass);
-        }
-        if (naviTree.containsId(cls)) {
-            return;
-        }
-
-        Item i = naviTree.addItem(cls);
-        i.getItemProperty(CAPTION).setValue(name);
-        naviTree.setParent(cls, superClass);
-    }
-
-    protected Component createTestComponent(
-            Class<? extends AbstractComponentTest<?>> cls) {
-        try {
-            AbstractComponentTest<?> t = cls.newInstance();
-            t.init();
-            ComponentContainer c = t.getMainWindow().getContent();
-            t.getMainWindow().setContent(null);
-            return c;
-        } catch (InstantiationException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        } catch (IllegalAccessException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/CustomLayoutDemo.java b/tests/src/com/vaadin/tests/CustomLayoutDemo.java
deleted file mode 100644
index c81491a8be..0000000000
--- a/tests/src/com/vaadin/tests/CustomLayoutDemo.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component.Event;
-import com.vaadin.ui.Component.Listener;
-import com.vaadin.ui.CustomLayout;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.PasswordField;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.Window;
-
-/**
- * This example demonstrates custom layout. All components created here are
- * placed using custom.html file. Custom layouts may be created with any web
- * designer tool such as Dreamweaver. To place Vaadin components into html page,
- * use divs with location tag as an identifier for Vaadin components, see html
- * page (themes/example/layout/custom.html) and source code below. Body panel
- * contents are changed when menu items are clicked. Contents are HTML pages
- * located at themes/example/layout directory.
- * 
- * @author IT Mill Ltd.
- * @since 4.0.0
- * 
- */
-public class CustomLayoutDemo extends com.vaadin.Application implements
-        Listener {
-
-    private CustomLayout mainLayout = null;
-
-    private final Panel bodyPanel = new Panel();
-
-    private final TextField username = new TextField("Username");
-
-    private final PasswordField loginPwd = new PasswordField("Password");
-
-    private final Button loginButton = new Button("Login", this, "loginClicked");
-
-    private final Tree menu = new Tree();
-
-    /**
-     * Initialize Application. Demo components are added to main window.
-     */
-    @Override
-    public void init() {
-        final Window mainWindow = new Window("CustomLayout demo");
-        setMainWindow(mainWindow);
-
-        // set the application to use example -theme
-        setTheme("tests-components");
-
-        // Create custom layout, themes/example/layout/mainLayout.html
-        mainLayout = new CustomLayout("mainLayout");
-        // wrap custom layout inside a panel
-        final Panel customLayoutPanel = new Panel(
-                "Panel containing custom layout (mainLayout.html)");
-        customLayoutPanel.addComponent(mainLayout);
-
-        // Login components
-        mainLayout.addComponent(username, "loginUser");
-        mainLayout.addComponent(loginPwd, "loginPassword");
-        mainLayout.addComponent(loginButton, "loginButton");
-
-        // Menu component, when clicked bodyPanel is updated
-        menu.addItem("Welcome");
-        menu.addItem("Products");
-        menu.addItem("Support");
-        menu.addItem("News");
-        menu.addItem("Developers");
-        menu.addItem("Contact");
-        // "this" handles all menu events, e.g. node clicked event
-        menu.addListener(this);
-        // Value changes are immediate
-        menu.setImmediate(true);
-        menu.setNullSelectionAllowed(false);
-        mainLayout.addComponent(menu, "menu");
-
-        // Body component
-        mainLayout.addComponent(bodyPanel, "body");
-
-        // Initial body are comes from Welcome.html
-        setBody("Welcome");
-
-        // Add heading label and custom layout panel to main window
-        mainWindow.addComponent(new Label("<h3>Custom layout demo</h3>",
-                Label.CONTENT_XHTML));
-        mainWindow.addComponent(customLayoutPanel);
-    }
-
-    /**
-     * Login button clicked. Hide login components and replace username
-     * component with "Welcome user Username" message.
-     * 
-     */
-    public void loginClicked() {
-        username.setVisible(false);
-        loginPwd.setVisible(false);
-        if (username.getValue().toString().length() < 1) {
-            username.setValue("Anonymous");
-        }
-        mainLayout.replaceComponent(loginButton, new Label("Welcome user <em>"
-                + username.getValue() + "</em>", Label.CONTENT_XHTML));
-    }
-
-    /**
-     * Set body panel caption, remove all existing components and add given
-     * custom layout in it.
-     * 
-     */
-    public void setBody(String customLayout) {
-        bodyPanel.setCaption(customLayout + ".html");
-        bodyPanel.removeAllComponents();
-        bodyPanel.addComponent(new CustomLayout(customLayout));
-    }
-
-    /**
-     * Handle all menu events. Updates body panel contents if menu item is
-     * clicked.
-     */
-    public void componentEvent(Event event) {
-        // Check if event occured at fsTree component
-        if (event.getSource() == menu) {
-            // Check if event is about changing value
-            if (event.getClass() == Field.ValueChangeEvent.class) {
-                // Update body area with selected item
-                setBody(menu.getValue().toString());
-            }
-            // here we could check for other type of events for tree
-            // component
-        }
-        // here we could check for other component's events
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/FocusingComponents.java b/tests/src/com/vaadin/tests/FocusingComponents.java
deleted file mode 100644
index e74a935830..0000000000
--- a/tests/src/com/vaadin/tests/FocusingComponents.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.vaadin.tests;
-
-import com.vaadin.ui.AbstractSelect;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.ListSelect;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.OptionGroup;
-import com.vaadin.ui.TextField;
-
-/**
- * Simple test helper to test Focusable.focus() method.
- * 
- */
-public class FocusingComponents extends CustomComponent {
-    GridLayout lo = new GridLayout(2, 1);
-
-    public FocusingComponents() {
-
-        setCompositionRoot(lo);
-        lo.setSpacing(true);
-
-        Focusable f;
-
-        f = new Button();
-
-        addFocusableTest(f);
-        addFocusableTest(new ComboBox());
-        addFocusableTest(new TextField());
-        addFocusableTest(new DateField());
-        addFocusableTest(new NativeSelect());
-        addFocusableTest(new ListSelect());
-        addFocusableTest(new OptionGroup());
-        OptionGroup optionGroup = new OptionGroup();
-        optionGroup.setMultiSelect(true);
-        addFocusableTest(optionGroup);
-
-    }
-
-    private void addFocusableTest(final Focusable f) {
-
-        f.setCaption(f.getClass().getSimpleName());
-        lo.addComponent(f);
-
-        if (f instanceof AbstractSelect) {
-            AbstractSelect s = (AbstractSelect) f;
-            s.addItem("Foo");
-            s.addItem("Bar");
-        }
-
-        Button focus = new Button("focus");
-        focus.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                f.focus();
-            }
-        });
-        lo.addComponent(focus);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/LayoutDemo.java b/tests/src/com/vaadin/tests/LayoutDemo.java
deleted file mode 100644
index a06e7e4da2..0000000000
--- a/tests/src/com/vaadin/tests/LayoutDemo.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.terminal.ClassResource;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-/**
- * This example demonstrates layouts. Layouts are populated with sample Vaadin
- * UI components.
- * 
- * @author IT Mill Ltd.
- * @since 4.0.0
- * 
- */
-public class LayoutDemo extends com.vaadin.Application {
-
-    /**
-     * Initialize Application. Demo components are added to main window.
-     */
-    @Override
-    public void init() {
-        final Window mainWindow = new Window("Layout demo");
-        setMainWindow(mainWindow);
-
-        //
-        // Create horizontal ordered layout
-        //
-        final HorizontalLayout layoutA = new HorizontalLayout();
-        // Add 4 panels
-        fillLayout(layoutA, 4);
-
-        //
-        // Create vertical ordered layout
-        //
-        final VerticalLayout layoutB = new VerticalLayout();
-        // Add 4 panels
-        fillLayout(layoutB, 4);
-
-        //
-        // Create grid layout
-        //
-        final GridLayout layoutG = new GridLayout(4, 4);
-        // Add 16 panels components
-        fillLayout(layoutG, 16);
-
-        //
-        // Create grid layout
-        //
-        final GridLayout layoutG2 = new GridLayout(4, 4);
-        // Add 4 panels with absolute coordinates (diagonally)
-        layoutG2.addComponent(getExampleComponent("x=0, y=0"), 0, 0);
-        layoutG2.addComponent(getExampleComponent("x=1, y=1"), 1, 1);
-        layoutG2.addComponent(getExampleComponent("x=2, y=2"), 2, 2);
-        layoutG2.addComponent(getExampleComponent("x=3, y=3"), 3, 3);
-        // Add 4 pictures with absolute coordinates (diagonally)
-        layoutG2.addComponent(getExamplePicture("x=3, y=0"), 3, 0);
-        layoutG2.addComponent(getExamplePicture("x=2, y=1"), 2, 1);
-        layoutG2.addComponent(getExamplePicture("x=1, y=2"), 1, 2);
-        layoutG2.addComponent(getExamplePicture("x=0, y=3"), 0, 3);
-
-        //
-        // Create TabSheet
-        //
-        final TabSheet tabsheet = new TabSheet();
-        tabsheet.setCaption("Tabsheet, above layouts are added to this component");
-        tabsheet.addTab(layoutA, "Horizontal ordered layout", null);
-        tabsheet.addTab(layoutB, "Vertical ordered layout", null);
-        tabsheet.addTab(layoutG, "First grid layout", null);
-        tabsheet.addTab(layoutG2, "Second grid layout", null);
-
-        //
-        // Add demo layouts to main window
-        //
-        mainWindow.addComponent(new Label(
-                "<h3>Horizontal ordered layout</h3>Added four components.",
-                Label.CONTENT_XHTML));
-        mainWindow.addComponent(layoutA);
-        mainWindow.addComponent(new Label(
-                "<br /><h3>Vertical ordered layout</h3>Added four components.",
-                Label.CONTENT_XHTML));
-        mainWindow.addComponent(layoutB);
-        mainWindow.addComponent(new Label(
-                "<br /><h3>Grid Layout (4 x 4)</h3>Added 16 components.",
-                Label.CONTENT_XHTML));
-        mainWindow.addComponent(layoutG);
-        mainWindow
-                .addComponent(new Label("<br /><h3>Grid Layout (4 x 4)</h3>"
-                        + "Added four panels and four embedded components "
-                        + "diagonally with absolute coordinates.",
-                        Label.CONTENT_XHTML));
-        mainWindow.addComponent(layoutG2);
-        mainWindow.addComponent(new Label(
-                "<br /><h3>TabSheet</h3>Added above layouts as tabs.",
-                Label.CONTENT_XHTML));
-        mainWindow.addComponent(tabsheet);
-
-    }
-
-    private Component getExamplePicture(String caption) {
-        // loads image from package com.vaadin.demo
-        final ClassResource cr = new ClassResource("m-bullet-blue.gif", this);
-        final Embedded em = new Embedded("Embedded " + caption, cr);
-        em.setWidth("170px");
-        return em;
-    }
-
-    private Component getExampleComponent(String caption) {
-        final Panel panel = new Panel();
-        panel.setCaption("Panel component " + caption);
-        panel.addComponent(new Label(
-                "Panel is a container for other components, by default it draws a frame around it's "
-                        + "extremities and may have a caption to clarify the nature of the contained components' purpose."
-                        + " Panel contains an layout where the actual contained components are added, "
-                        + "this layout may be switched on the fly.",
-                Label.CONTENT_XHTML));
-        panel.setWidth("222px");
-        return panel;
-    }
-
-    /**
-     * Add multiple demo component to given layout.
-     * 
-     * @param layout
-     *            where components are added
-     * @param numberOfComponents
-     *            to add
-     */
-    private void fillLayout(Layout layout, int numberOfComponents) {
-        for (int i = 1; i <= numberOfComponents; i++) {
-            layout.addComponent(getExampleComponent(Integer.toString(i)));
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/ListenerOrder.java b/tests/src/com/vaadin/tests/ListenerOrder.java
deleted file mode 100644
index c1d6245222..0000000000
--- a/tests/src/com/vaadin/tests/ListenerOrder.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package com.vaadin.tests;
-
-import java.util.HashMap;
-import java.util.Iterator;
-
-import com.vaadin.data.Container.ItemSetChangeEvent;
-import com.vaadin.data.Container.ItemSetChangeListener;
-import com.vaadin.data.Container.PropertySetChangeEvent;
-import com.vaadin.data.Container.PropertySetChangeListener;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.Window;
-
-public class ListenerOrder extends com.vaadin.Application implements
-        Button.ClickListener, PropertySetChangeListener, ItemSetChangeListener,
-        ValueChangeListener {
-
-    Button b1;
-
-    Select s1;
-
-    HashMap<String, Integer> buttonListeners = new HashMap<String, Integer>();
-
-    @Override
-    public void init() {
-        createNewView();
-    }
-
-    public void createNewView() {
-        final Window main = new Window("Test window");
-        setMainWindow(main);
-
-        main.removeAllComponents();
-        main.addComponent(new Label("Testing multiple listeners."));
-
-        //
-        // Button listeners
-        //
-        b1 = new Button("Button 1");
-        main.addComponent(b1);
-
-        MyClickListener mutualListener = new MyClickListener("mutual1");
-
-        addListeners(b1, 1);
-        b1.addListener(mutualListener);
-        b1.addListener(mutualListener);
-        b1.addListener((Button.ClickListener) this);
-        b1.addListener(mutualListener);
-        Button.ClickListener b1Listener = addListeners(b1, 3);
-        b1.addListener(mutualListener);
-        b1.addListener((Button.ClickListener) this);
-        b1.addListener((ValueChangeListener) this);
-        b1.addListener(mutualListener);
-        b1.removeListener(b1Listener);
-        // remove non-existing listener
-        b1.removeListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-            }
-        });
-
-        //
-        // Select listeners
-        //
-        s1 = new Select("Select 1");
-        main.addComponent(s1);
-        s1.setImmediate(true);
-        s1.setNewItemsAllowed(true);
-
-        s1.addItem("first");
-        s1.addItem("first");
-        s1.addItem("first");
-        s1.addItem("second");
-        s1.addItem("third");
-        s1.addItem("fourth");
-        s1.addListener((ValueChangeListener) this);
-        s1.addListener((PropertySetChangeListener) this);
-        s1.addListener((ItemSetChangeListener) this);
-        s1.addListener((ItemSetChangeListener) this);
-        s1.addListener((PropertySetChangeListener) this);
-        s1.addListener((PropertySetChangeListener) this);
-        s1.addListener((ItemSetChangeListener) this);
-        s1.addListener((ValueChangeListener) this);
-        s1.addListener((ValueChangeListener) this);
-
-        Item i = s1.getItem("second");
-        for (Iterator<?> it = i.getItemPropertyIds().iterator(); it.hasNext();) {
-            Object o = it.next();
-            System.out.println("[" + o + "]");
-        }
-
-    }
-
-    private Button.ClickListener addListeners(Button b, int count) {
-        String name = b.getCaption();
-        // System.out.println("Adding listener for " + name);
-        Button.ClickListener listener = null;
-        for (int i = 0; i < count; i++) {
-            listener = new MyClickListener(name);
-            b.addListener(listener);
-        }
-        // return last listener added
-        return listener;
-    }
-
-    public void buttonClick(ClickEvent event) {
-        System.out.println("ClickEvent from Test1");
-        s1.addItem("new item " + System.currentTimeMillis());
-    }
-
-    public class MyClickListener implements Button.ClickListener {
-        String name = "";
-        int count = 0;
-
-        public MyClickListener(String name) {
-            Integer count = null;
-            try {
-                count = buttonListeners.get(name);
-                count = new Integer(count.intValue() + 1);
-                buttonListeners.put(name, count);
-            } catch (Exception e) {
-                count = new Integer(1);
-                buttonListeners.put(name, count);
-            }
-
-            this.name = name;
-            this.count = count.intValue();
-
-            System.out.println("Created listener " + name + ", id=" + count);
-        }
-
-        public void buttonClick(ClickEvent event) {
-            String msg = "ClickEvent from MyClickListener " + name + ", id="
-                    + count;
-            System.out.println(msg);
-            getMainWindow().showNotification(msg);
-        }
-
-    }
-
-    public void containerPropertySetChange(PropertySetChangeEvent event) {
-        String msg = "containerPropertySetChange from " + this;
-        System.out.println(msg);
-        getMainWindow().showNotification(msg);
-    }
-
-    public void containerItemSetChange(ItemSetChangeEvent event) {
-        String msg = "containerItemSetChange from " + this;
-        System.out.println(msg);
-        getMainWindow().showNotification(msg);
-    }
-
-    public void valueChange(ValueChangeEvent event) {
-        String msg = "valueChange from " + this;
-        System.out.println(msg);
-        getMainWindow().showNotification(msg);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/ModalWindow.java b/tests/src/com/vaadin/tests/ModalWindow.java
deleted file mode 100644
index 4ace9f889e..0000000000
--- a/tests/src/com/vaadin/tests/ModalWindow.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-/**
- * Simple program that demonstrates "modal windows" that block all access other
- * windows.
- * 
- * @author IT Mill Ltd.
- * @since 4.0.1
- * @see com.vaadin.Application
- * @see com.vaadin.ui.Window
- * @see com.vaadin.ui.Label
- */
-public class ModalWindow extends com.vaadin.Application implements
-        ClickListener {
-
-    private Window test;
-    private Button reopen;
-
-    @Override
-    public void init() {
-
-        // Create main window
-        final Window main = new Window("ModalWindow demo");
-        setMainWindow(main);
-        main.addComponent(new Label("ModalWindow demo"));
-
-        // Main window textfield
-        final TextField f = new TextField();
-        f.setTabIndex(1);
-        main.addComponent(f);
-
-        // Main window button
-        final Button b = new Button("Test Button in main window");
-        b.addListener(this);
-        b.setTabIndex(2);
-        main.addComponent(b);
-
-        reopen = new Button("Open modal subwindow");
-        reopen.addListener(this);
-        reopen.setTabIndex(3);
-        main.addComponent(reopen);
-
-    }
-
-    public void buttonClick(ClickEvent event) {
-        if (event.getButton() == reopen) {
-            openSubWindow();
-        }
-        getMainWindow().addComponent(
-                new Label("Button click: " + event.getButton().getCaption()));
-    }
-
-    private void openSubWindow() {
-        // Modal window
-        test = new Window("Modal window");
-        test.setModal(true);
-        getMainWindow().addWindow(test);
-        test.addComponent(new Label(
-                "You have to close this window before accessing others."));
-
-        // Textfield for modal window
-        final TextField f = new TextField();
-        f.setTabIndex(4);
-        test.addComponent(f);
-        f.focus();
-
-        // Modal window button
-        final Button b = new Button("Test Button in modal window");
-        b.setTabIndex(5);
-        b.addListener(this);
-        test.addComponent(b);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/NativeWindowing.java b/tests/src/com/vaadin/tests/NativeWindowing.java
deleted file mode 100644
index 877aeceae1..0000000000
--- a/tests/src/com/vaadin/tests/NativeWindowing.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class NativeWindowing extends Application {
-
-    Window main = new Window("Windowing test");
-
-    @Override
-    public void init() {
-
-        setMainWindow(main);
-
-        main.addComponent(new Button("Add new subwindow",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        final Window w = new Window("sw "
-                                + System.currentTimeMillis());
-                        main.addWindow(w);
-                        w.setPositionX(100);
-                        w.setPositionY(100);
-                        w.setWidth("200px");
-                        w.setHeight("200px");
-
-                        w.setWidth("100px");
-                        w.setHeight("400px");
-
-                        final Button closebutton = new Button("Close "
-                                + w.getCaption(), new Button.ClickListener() {
-                            public void buttonClick(ClickEvent event) {
-                                main.removeWindow(w);
-                            }
-
-                        });
-                        w.addComponent(closebutton);
-
-                        w.addComponent(new Label(
-                                "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>",
-                                Label.CONTENT_XHTML));
-
-                    }
-                }));
-
-        main.addComponent(new Button(
-                "Open a currently uncreated application level window",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        try {
-                            main.open(
-                                    new com.vaadin.terminal.ExternalResource(
-                                            new URL(
-                                                    getURL(),
-                                                    "mainwin-"
-                                                            + System.currentTimeMillis()
-                                                            + "/")), null);
-                        } catch (final MalformedURLException e) {
-                        }
-                    }
-                }));
-
-        main.addComponent(new Button(
-                "Commit (saves window state: size, place, scrollpos)"));
-    }
-
-    @Override
-    public Window getWindow(String name) {
-
-        final Window w = super.getWindow(name);
-        if (w != null) {
-            return w;
-        }
-
-        if (name != null && name.startsWith("mainwin-")) {
-            final String postfix = name.substring("mainwin-".length());
-            final Window ww = new Window("Window: " + postfix);
-            ww.setName(name);
-            ww.addComponent(new Label(
-                    "This is a application-level window opened with name: "
-                            + name));
-            ww.addComponent(new Button("Click me", new Button.ClickListener() {
-                int state = 0;
-
-                public void buttonClick(ClickEvent event) {
-                    ww.addComponent(new Label("Button clicked " + (++state)
-                            + " times"));
-                }
-            }));
-            addWindow(ww);
-            return ww;
-        }
-
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/OrderedLayoutSwapComponents.java b/tests/src/com/vaadin/tests/OrderedLayoutSwapComponents.java
deleted file mode 100644
index 34ec439010..0000000000
--- a/tests/src/com/vaadin/tests/OrderedLayoutSwapComponents.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.util.ArrayList;
-
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-
-/**
- * 
- * This Component contains some simple test to see that component updates its
- * contents propertly.
- * 
- * @author IT Mill Ltd.
- */
-public class OrderedLayoutSwapComponents extends CustomComponent {
-
-    private final AbstractOrderedLayout main;
-
-    ArrayList<MyComponent> order = new ArrayList<MyComponent>();
-
-    public OrderedLayoutSwapComponents() {
-
-        main = new VerticalLayout();
-        // main.setSizeFull();
-        setCompositionRoot(main);
-        createNewView();
-    }
-
-    public void createNewView() {
-        main.removeAllComponents();
-
-        for (int i = 0; i < 10; i++) {
-            MyComponent c = new MyComponent("Component " + i);
-            main.addComponent(c);
-            order.add(c);
-        }
-        setCompositionRoot(main);
-
-    }
-
-    class MyComponent extends CustomComponent {
-
-        private static final int FIRST = 0;
-        private static final int LAST = 1;
-        private Button up;
-        private Button down;
-
-        MyComponent(String name) {
-            HorizontalLayout ol = new HorizontalLayout();
-            ol.setDebugId(name.replaceAll(" ", ""));
-            ol.addComponent(new Label(name));
-            up = new Button("up");
-            up.addListener(new Button.ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    int newIndex = order.indexOf(MyComponent.this) - 1;
-                    MyComponent old = order.get(newIndex);
-                    main.replaceComponent(old, MyComponent.this);
-                    order.remove(MyComponent.this);
-                    order.add(newIndex, MyComponent.this);
-                    if (newIndex == 0) {
-                        MyComponent.this.setMode(FIRST);
-                    } else {
-                        MyComponent.this.setMode(69);
-                    }
-                }
-            });
-            ol.addComponent(up);
-
-            down = new Button("down");
-            down.addListener(new Button.ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    int newIndex = order.indexOf(MyComponent.this) + 1;
-                    MyComponent old = order.get(newIndex);
-                    main.replaceComponent(old, MyComponent.this);
-                    order.remove(MyComponent.this);
-                    order.add(newIndex, MyComponent.this);
-                    if (newIndex == order.size() - 1) {
-                        MyComponent.this.setMode(LAST);
-                    } else {
-                        MyComponent.this.setMode(69);
-                    }
-                }
-            });
-            ol.addComponent(down);
-
-            setCompositionRoot(ol);
-
-        }
-
-        public void setMode(int mode) {
-            up.setEnabled(true);
-            down.setEnabled(true);
-            if (mode == FIRST) {
-                up.setEnabled(false);
-            } else if (mode == LAST) {
-                down.setEnabled(false);
-            }
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/Parameters.java b/tests/src/com/vaadin/tests/Parameters.java
deleted file mode 100644
index 34b32a8808..0000000000
--- a/tests/src/com/vaadin/tests/Parameters.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.net.URL;
-import java.util.Iterator;
-import java.util.Map;
-
-import com.vaadin.terminal.DownloadStream;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.terminal.ParameterHandler;
-import com.vaadin.terminal.URIHandler;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-/**
- * This is a demonstration of how URL parameters can be recieved and handled.
- * Parameters and URL:s can be received trough the windows by registering
- * URIHandler and ParameterHandler classes window.
- * 
- * @since 3.1.1
- */
-public class Parameters extends com.vaadin.Application implements URIHandler,
-        ParameterHandler {
-
-    private final Label context = new Label();
-
-    private final Label relative = new Label();
-
-    private final Table params = new Table();
-
-    @Override
-    public void init() {
-        final Window main = new Window("Parameters demo");
-        setMainWindow(main);
-
-        // This class acts both as URI handler and parameter handler
-        main.addURIHandler(this);
-        main.addParameterHandler(this);
-
-        final VerticalLayout layout = new VerticalLayout();
-        final Label info = new Label("To test URI and Parameter Handlers, "
-                + "add get parameters to URL. For example try examples below: ");
-        info.setCaption("Usage info");
-        layout.addComponent(info);
-        try {
-            final URL u1 = new URL(getURL(), "test/uri?test=1&test=2");
-            final URL u2 = new URL(getURL(), "foo/bar?mary=john&count=3");
-            layout.addComponent(new Link(u1.toString(),
-                    new ExternalResource(u1)));
-            layout.addComponent(new Label("Or this: "));
-            layout.addComponent(new Link(u2.toString(),
-                    new ExternalResource(u2)));
-        } catch (final Exception e) {
-            System.out.println("Couldn't get hostname for this machine: "
-                    + e.toString());
-            e.printStackTrace();
-        }
-
-        // URI
-        final Panel panel1 = new Panel("URI Handler");
-        context.setCaption("Last URI handler context");
-        panel1.addComponent(context);
-        relative.setCaption("Last relative URI");
-        panel1.addComponent(relative);
-        layout.addComponent(panel1);
-
-        params.addContainerProperty("Key", String.class, "");
-        params.addContainerProperty("Value", String.class, "");
-        final Panel panel2 = new Panel("Parameter Handler");
-        params.setSizeFull();
-        panel2.setContent(new VerticalLayout());
-        ((Layout) panel2.getContent()).setMargin(true);
-
-        params.setColumnHeaderMode(Table.COLUMN_HEADER_MODE_ID);
-        panel2.addComponent(params);
-        layout.addComponent(panel2);
-
-        // expand parameter panel and its table
-        layout.setExpandRatio(panel2, 1);
-
-        layout.setMargin(true);
-        layout.setSpacing(true);
-
-        main.setContent(layout);
-    }
-
-    /**
-     * Update URI
-     * 
-     * @see com.vaadin.terminal.URIHandler#handleURI(URL, String)
-     */
-    @Override
-    public DownloadStream handleURI(URL context, String relativeUri) {
-        this.context.setValue(context.toString());
-        relative.setValue(relativeUri);
-        return null;
-    }
-
-    /**
-     * Handles GET parameters, in this demo GET parameteres are used to
-     * communicate with EmbeddedToolkit.jsp
-     */
-    public void handleParameters(Map<String, String[]> parameters) {
-        params.removeAllItems();
-        for (final Iterator<String> i = parameters.keySet().iterator(); i
-                .hasNext();) {
-            final String name = i.next();
-            final String[] values = parameters.get(name);
-            String v = "";
-            for (int j = 0; j < values.length; j++) {
-                if (v.length() > 0) {
-                    v += ", ";
-                }
-                v += "'" + values[j] + "'";
-            }
-            params.addItem(new Object[] { name, v }, name);
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/PerformanceTestBasicComponentRendering.java b/tests/src/com/vaadin/tests/PerformanceTestBasicComponentRendering.java
deleted file mode 100644
index 7258df1879..0000000000
--- a/tests/src/com/vaadin/tests/PerformanceTestBasicComponentRendering.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.util.Date;
-import java.util.Map;
-
-import com.vaadin.terminal.UserError;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-public class PerformanceTestBasicComponentRendering extends CustomComponent {
-
-    private final VerticalLayout main;
-
-    private final VerticalLayout testContainer;
-
-    private Date startTime;
-
-    private final Label result;
-
-    private static final String DESCRIPTION = "Rendering lots of differend components to stress rendering performance. Visits server after render (due table cache row fetch) and prints client round trip time to a label. More exact render time can be checked from clients debug dialog.";
-
-    private static final int INITIAL_COMPONENTS = 10;
-
-    public PerformanceTestBasicComponentRendering() {
-
-        main = new VerticalLayout();
-        setCompositionRoot(main);
-        addInfo();
-
-        result = new Label();
-        main.addComponent(result);
-
-        testContainer = new VerticalLayout();
-
-        final Table t = TestForTablesInitialColumnWidthLogicRendering
-                .getTestTable(5, 200);
-
-        Table t2 = new Table("Test Table with 199 rows rendered initially") {
-            @Override
-            public void changeVariables(Object source,
-                    Map<String, Object> variables) {
-                super.changeVariables(source, variables);
-                // end timing on cache row request
-                endTest();
-            }
-        };
-        t2.setPageLength(199); // render almost all rows at once
-        t2.setContainerDataSource(t.getContainerDataSource());
-
-        testContainer.addComponent(t2);
-
-        for (int i = 0; i < INITIAL_COMPONENTS; i++) {
-            ComboBox cb = new ComboBox("Combobox " + i);
-            for (int j = 0; j < INITIAL_COMPONENTS; j++) {
-                cb.addItem("option " + i + " " + j);
-            }
-            testContainer.addComponent(cb);
-
-            TextField tf = new TextField("TextField " + i);
-            tf.setDescription("DESC SDKJSDF");
-            tf.setComponentError(new UserError("dsfjklsdf"));
-            testContainer.addComponent(tf);
-
-            testContainer.addComponent(new DateField("DateField" + i));
-
-            testContainer.addComponent(new Button("Button" + i));
-
-            TabSheet ts = new TabSheet();
-
-            for (int j = 0; j < INITIAL_COMPONENTS; j++) {
-                Label tab = new Label("Tab content " + i + " " + j);
-                tab.setCaption("Tab " + i + " " + j);
-                ts.addTab(tab);
-            }
-            testContainer.addComponent(ts);
-
-        }
-
-        main.addComponent(testContainer);
-        startTest();
-    }
-
-    public void startTest() {
-        startTime = new Date();
-    }
-
-    public void endTest() {
-        final long millis = (new Date()).getTime() - startTime.getTime();
-        final Float f = new Float(millis / 1000.0);
-        result.setValue("Test completed in " + f + " seconds");
-    }
-
-    private void addInfo() {
-        main.addComponent(new Label(DESCRIPTION, Label.CONTENT_XHTML));
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/PerformanceTestLabelsAndOrderedLayouts.java b/tests/src/com/vaadin/tests/PerformanceTestLabelsAndOrderedLayouts.java
deleted file mode 100644
index ff2ed51c57..0000000000
--- a/tests/src/com/vaadin/tests/PerformanceTestLabelsAndOrderedLayouts.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.util.Date;
-
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-
-public class PerformanceTestLabelsAndOrderedLayouts extends CustomComponent {
-    private final AbstractOrderedLayout main;
-
-    private final AbstractOrderedLayout testContainer;
-
-    private Date startTime;
-
-    private final Label result;
-
-    private static final String DESCRIPTION = "Simple test that renders n labels into ordered layout.";
-
-    private static final int INITIAL_COMPONENTS = 1000;
-
-    public PerformanceTestLabelsAndOrderedLayouts() {
-        main = new VerticalLayout();
-        setCompositionRoot(main);
-        addInfo();
-
-        result = new Label();
-        main.addComponent(result);
-
-        main.addComponent(new Button("click when rendered",
-                new ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        endTest();
-                    }
-                }));
-
-        main.addComponent(new Button(
-                "Click for layout repaint (cached components)",
-                new ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        testContainer.requestRepaint();
-                    }
-                }));
-
-        testContainer = new VerticalLayout();
-
-        for (int i = 0; i < INITIAL_COMPONENTS; i++) {
-            Label l = new Label("foo" + i);
-            testContainer.addComponent(l);
-        }
-
-        main.addComponent(testContainer);
-        startTest();
-    }
-
-    public void startTest() {
-        startTime = new Date();
-    }
-
-    public void endTest() {
-        final long millis = (new Date()).getTime() - startTime.getTime();
-        final Float f = new Float(millis / 1000.0);
-        result.setValue("Test completed in " + f + " seconds");
-    }
-
-    private void addInfo() {
-        main.addComponent(new Label(DESCRIPTION, Label.CONTENT_XHTML));
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/PerformanceTestSubTreeCaching.java b/tests/src/com/vaadin/tests/PerformanceTestSubTreeCaching.java
deleted file mode 100644
index a746ed45bf..0000000000
--- a/tests/src/com/vaadin/tests/PerformanceTestSubTreeCaching.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.util.Date;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-
-public class PerformanceTestSubTreeCaching extends CustomComponent {
-
-    private final VerticalLayout main;
-
-    private final VerticalLayout testContainer;
-
-    private Date startTime;
-
-    private final Label result;
-
-    private static final String DESCRIPTION = "Hypothesis: Toolkit 4 has major architechtural problem when adding "
-            + "small incrementall updates to a container which has either a lot or "
-            + "some very slow components in it. Toolkit 5 has 'subtree caching' and a"
-            + " small amount of logic in containers, so CommunicationManager can assure"
-            + " that client do not need information about unchanged components it contains."
-            + " Completing test ought to be much faster with Toolkit 5.";
-
-    private static final int INITIAL_COMPONENTS = 40;
-
-    public PerformanceTestSubTreeCaching() {
-        main = new VerticalLayout();
-        setCompositionRoot(main);
-        addInfo();
-
-        Button b = new Button("start test", this, "startTest");
-        b.setDescription("Push this button to start test. A test label will be rendered above existing components.");
-        main.addComponent(b);
-        b = new Button("end test", this, "endTest");
-        b.setDescription("Push this button as soon as test componenet is rendered.");
-        main.addComponent(b);
-
-        result = new Label();
-        main.addComponent(result);
-
-        testContainer = new VerticalLayout();
-        populateContainer(testContainer, INITIAL_COMPONENTS);
-        main.addComponent(testContainer);
-    }
-
-    public void startTest() {
-        startTime = new Date();
-        testContainer.addComponentAsFirst(new Label("Simplel Test Component"));
-    }
-
-    public void endTest() {
-        final long millis = (new Date()).getTime() - startTime.getTime();
-        final Float f = new Float(millis / 1000.0);
-        result.setValue("Test completed in " + f + " seconds");
-    }
-
-    /**
-     * Adds n Table components to given container
-     * 
-     * @param testContainer2
-     */
-    private void populateContainer(VerticalLayout container, int n) {
-        for (int i = 0; i < n; i++) {
-            // array_type array_element = [i];
-            final Table t = TestForTablesInitialColumnWidthLogicRendering
-                    .getTestTable(5, 100);
-            container.addComponent(t);
-        }
-    }
-
-    private void addInfo() {
-        main.addComponent(new Label(DESCRIPTION, Label.CONTENT_XHTML));
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/RandomLayoutStress.java b/tests/src/com/vaadin/tests/RandomLayoutStress.java
deleted file mode 100644
index 7e4daa47dc..0000000000
--- a/tests/src/com/vaadin/tests/RandomLayoutStress.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.util.Random;
-
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.CustomLayout;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-/**
- * This example demonstrates layouts. Layouts are populated with sample Vaadin
- * UI components.
- * 
- * @author IT Mill Ltd.
- * 
- */
-public class RandomLayoutStress extends com.vaadin.Application {
-
-    private final Random seededRandom = new Random(1);
-
-    // FIXME increasing these settings brings out interesting client-side issues
-    // (DOM errors)
-    // TODO increasing values "even more" crashes Hosted Mode, pumping Xmx/Xms
-    // helps to some extent
-    private static final int componentCountA = 50;
-    private static final int componentCountB = 50;
-    private static final int componentCountC = 200;
-    private static final int componentCountD = 50;
-
-    /**
-     * Initialize Application. Demo components are added to main window.
-     */
-    @Override
-    public void init() {
-        final Window mainWindow = new Window("Layout demo");
-        setMainWindow(mainWindow);
-
-        // Create horizontal ordered layout
-        final Panel panelA = new Panel(
-                "Panel containing horizontal ordered layout");
-        HorizontalLayout layoutA = new HorizontalLayout();
-        // Add 4 random components
-        fillLayout(layoutA, componentCountA);
-        // Add layout to panel
-        panelA.addComponent(layoutA);
-
-        // Create vertical ordered layout
-        final Panel panelB = new Panel(
-                "Panel containing vertical ordered layout");
-        VerticalLayout layoutB = new VerticalLayout();
-        // Add 4 random components
-        fillLayout(layoutB, componentCountB);
-        // Add layout to panel
-        panelB.addComponent(layoutB);
-
-        // Create grid layout
-        final int gridSize = (int) java.lang.Math.sqrt(componentCountC);
-        final Panel panelG = new Panel("Panel containing grid layout ("
-                + gridSize + " x " + gridSize + ")");
-        GridLayout layoutG = new GridLayout(gridSize, gridSize);
-        // Add 12 random components
-        fillLayout(layoutG, componentCountC);
-        // Add layout to panel
-        panelG.addComponent(layoutG);
-
-        // Create TabSheet
-        final TabSheet tabsheet = new TabSheet();
-        tabsheet.setCaption("Tabsheet, above layouts are added to this component");
-        layoutA = new HorizontalLayout();
-        // Add 4 random components
-        fillLayout(layoutA, componentCountA);
-        tabsheet.addTab(layoutA, "Horizontal ordered layout", null);
-        layoutB = new VerticalLayout();
-        // Add 4 random components
-        fillLayout(layoutB, componentCountB);
-        tabsheet.addTab(layoutB, "Vertical ordered layout", null);
-        layoutG = new GridLayout(gridSize, gridSize);
-        // Add 12 random components
-        fillLayout(layoutG, componentCountC);
-        tabsheet.addTab(layoutG, "Grid layout (4 x 2)", null);
-
-        // Create custom layout
-        final Panel panelC = new Panel("Custom layout with style exampleStyle");
-        final CustomLayout layoutC = new CustomLayout("exampleStyle");
-        // Add 4 random components
-        fillLayout(layoutC, componentCountD);
-        // Add layout to panel
-        panelC.addComponent(layoutC);
-
-        // Add demo panels (layouts) to main window
-        mainWindow.addComponent(panelA);
-        mainWindow.addComponent(panelB);
-        mainWindow.addComponent(panelG);
-        mainWindow.addComponent(tabsheet);
-        mainWindow.addComponent(panelC);
-    }
-
-    private AbstractComponent getRandomComponent(int caption) {
-        AbstractComponent result = null;
-        final int randint = seededRandom.nextInt(7);
-        switch (randint) {
-        case 0:
-            // Label
-            result = new Label();
-            result.setCaption("Label component " + caption);
-            break;
-        case 1:
-            // Button
-            result = new Button();
-            result.setCaption("Button component " + caption);
-            break;
-        case 2:
-            // TextField
-            result = new TextField();
-            result.setCaption("TextField component " + caption);
-            break;
-        case 3:
-            // Select
-            result = new Select("Select " + caption);
-            result.setCaption("Select component " + caption);
-            ((Select) result).addItem("First item");
-            ((Select) result).addItem("Second item");
-            ((Select) result).addItem("Third item");
-            break;
-        case 4:
-            // Link
-            result = new Link("", new ExternalResource("http://www.vaadin.com"));
-            result.setCaption("Link component " + caption);
-            break;
-        case 5:
-            // Link
-            result = new Panel();
-            result.setCaption("Panel component " + caption);
-            ((Panel) result)
-                    .addComponent(new Label(
-                            "Panel is a container for other components, by default it draws a frame around it's "
-                                    + "extremities and may have a caption to clarify the nature of the contained components' purpose."
-                                    + " Panel contains an layout where the actual contained components are added, "
-                                    + "this layout may be switched on the fly."));
-            ((Panel) result).setWidth("250px");
-            break;
-        case 6:
-            // Datefield
-            result = new DateField();
-            ((DateField) result).setStyleName("calendar");
-            ((DateField) result).setValue(new java.util.Date());
-            result.setCaption("Calendar component " + caption);
-            break;
-        case 7:
-            // Datefield
-            result = new DateField();
-            ((DateField) result).setValue(new java.util.Date());
-            result.setCaption("Calendar component " + caption);
-            break;
-        }
-
-        return result;
-    }
-
-    /**
-     * Add demo components to given layout
-     * 
-     * @param layout
-     */
-    private void fillLayout(Layout layout, int numberOfComponents) {
-        for (int i = 0; i < numberOfComponents; i++) {
-            layout.addComponent(getRandomComponent(i));
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/ScrollbarStressTest.java b/tests/src/com/vaadin/tests/ScrollbarStressTest.java
deleted file mode 100644
index a66274a635..0000000000
--- a/tests/src/com/vaadin/tests/ScrollbarStressTest.java
+++ /dev/null
@@ -1,237 +0,0 @@
-package com.vaadin.tests;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Accordion;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.OptionGroup;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.VerticalSplitPanel;
-import com.vaadin.ui.Window;
-
-public class ScrollbarStressTest extends Application {
-
-    final Window main = new Window("Scrollbar Stress Test");
-
-    final Panel panel = new Panel("Panel");
-    final VerticalSplitPanel splitPanel = new VerticalSplitPanel();
-    final Accordion accordion = new Accordion();
-    final TabSheet tabsheet = new TabSheet();
-    final Window subwindow = new Window("Subwindow");
-
-    final OptionGroup width = new OptionGroup("LO Width");
-    final OptionGroup height = new OptionGroup("LO Height");
-
-    private boolean getTable;
-
-    @Override
-    public void init() {
-        setTheme("tests-tickets");
-        setMainWindow(main);
-        createControlWindow();
-        subwindow.setWidth("400px");
-        subwindow.setHeight("400px");
-    }
-
-    private void createControlWindow() {
-        final OptionGroup context = new OptionGroup("Context");
-        context.addItem("Main window");
-        context.addItem("ExpandLayout");
-        context.addItem("Subwindow");
-        context.addItem("Panel");
-        context.addItem("Split Panel");
-        context.addItem("TabSheet");
-        context.addItem("Accordion");
-        context.setValue("Main window");
-
-        final OptionGroup testComponent = new OptionGroup(
-                "TestComponent 100%x100%");
-        testComponent.addItem("Label");
-        testComponent.addItem("Table");
-        testComponent.setValue("Label");
-
-        width.addItem("100%");
-        width.addItem("50%");
-        width.addItem("150%");
-        width.addItem("100px");
-        width.addItem("500px");
-        width.setValue("100%");
-
-        height.addItem("100%");
-        height.addItem("50%");
-        height.addItem("150%");
-        height.addItem("100px");
-        height.addItem("500px");
-        height.setValue("100%");
-
-        final Button set = new Button("Set", new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                getTable = testComponent.getValue().equals("Table");
-
-                if (context.getValue() == "Main window") {
-                    drawInMainWindow();
-                } else if (context.getValue() == "Subwindow") {
-                    drawInSubwindow();
-                } else if (context.getValue() == "Panel") {
-                    drawInPanel();
-                } else if (context.getValue() == "Split Panel") {
-                    drawInSplitPanel();
-                } else if (context.getValue() == "TabSheet") {
-                    drawInTabSheet(false);
-                } else if (context.getValue() == "Accordion") {
-                    drawInTabSheet(true);
-                } else if (context.getValue() == "ExpandLayout") {
-                    drawInExpandLayout();
-                }
-            }
-        });
-
-        HorizontalLayout ol = new HorizontalLayout();
-        ol.addComponent(context);
-        ol.addComponent(testComponent);
-        ol.addComponent(width);
-        ol.addComponent(height);
-        ol.addComponent(set);
-        ol.setSpacing(true);
-        ol.setMargin(true);
-
-        Window controller = new Window("Controller");
-        controller.setContent(ol);
-        main.addWindow(controller);
-    }
-
-    protected void drawInExpandLayout() {
-        main.removeAllComponents();
-        main.getContent().setSizeFull();
-
-        VerticalLayout ol = new VerticalLayout();
-
-        VerticalLayout el = new VerticalLayout();
-
-        el.removeAllComponents();
-
-        ol.setWidth((String) width.getValue());
-        ol.setHeight((String) height.getValue());
-
-        ol.addComponent(getTestComponent());
-
-        el.addComponent(ol);
-
-        main.getContent().addComponent(el);
-        main.removeWindow(subwindow);
-
-    }
-
-    protected void drawInTabSheet(boolean verticalAkaAccordion) {
-        main.removeAllComponents();
-        main.getContent().setSizeFull();
-
-        VerticalLayout ol = new VerticalLayout();
-        ol.setCaption("Tab 1");
-        VerticalLayout ol2 = new VerticalLayout();
-        ol2.setCaption("Tab 2");
-
-        TabSheet ts = (verticalAkaAccordion ? accordion : tabsheet);
-        ts.setSizeFull();
-
-        ts.removeAllComponents();
-
-        ts.addComponent(ol);
-        ts.addComponent(ol2);
-
-        ol.setWidth((String) width.getValue());
-        ol.setHeight((String) height.getValue());
-        ol2.setWidth((String) width.getValue());
-        ol2.setHeight((String) height.getValue());
-
-        ol.addComponent(getTestComponent());
-
-        ol2.addComponent(getTestComponent());
-
-        main.addComponent(ts);
-        main.removeWindow(subwindow);
-    }
-
-    private void drawInSplitPanel() {
-        main.removeAllComponents();
-        main.getContent().setSizeFull();
-
-        VerticalLayout ol = new VerticalLayout();
-        VerticalLayout ol2 = new VerticalLayout();
-
-        splitPanel.setFirstComponent(ol);
-        splitPanel.setSecondComponent(ol2);
-
-        ol.setWidth((String) width.getValue());
-        ol.setHeight((String) height.getValue());
-        ol2.setWidth((String) width.getValue());
-        ol2.setHeight((String) height.getValue());
-
-        ol.addComponent(getTestComponent());
-
-        ol2.addComponent(getTestComponent());
-
-        main.addComponent(splitPanel);
-        main.removeWindow(subwindow);
-    }
-
-    private void drawInPanel() {
-        main.removeAllComponents();
-        main.getContent().setSizeFull();
-
-        VerticalLayout ol = new VerticalLayout();
-        panel.setSizeFull();
-        panel.setContent(ol);
-
-        ol.setWidth((String) width.getValue());
-        ol.setHeight((String) height.getValue());
-
-        ol.addComponent(getTestComponent());
-        main.addComponent(panel);
-        main.removeWindow(subwindow);
-    }
-
-    private void drawInSubwindow() {
-        main.removeAllComponents();
-        main.getContent().setSizeFull();
-        VerticalLayout ol = new VerticalLayout();
-        ol.setWidth((String) width.getValue());
-        ol.setHeight((String) height.getValue());
-
-        ol.addComponent(getTestComponent());
-        subwindow.setContent(ol);
-        main.addWindow(subwindow);
-    }
-
-    private void drawInMainWindow() {
-        main.removeAllComponents();
-        VerticalLayout ol = new VerticalLayout();
-        main.setContent(ol);
-        ol.setWidth((String) width.getValue());
-        ol.setHeight((String) height.getValue());
-
-        ol.addComponent(getTestComponent());
-        main.removeWindow(subwindow);
-    }
-
-    private Component getTestComponent() {
-        if (getTable) {
-            Table testTable = TestForTablesInitialColumnWidthLogicRendering
-                    .getTestTable(4, 50);
-            testTable.setSizeFull();
-            return testTable;
-        } else {
-            Label l = new Label("Label");
-            l.setStyleName("no-padding");
-            l.setSizeFull();
-            return l;
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/StressComponentsInTable.java b/tests/src/com/vaadin/tests/StressComponentsInTable.java
deleted file mode 100644
index 75b4916b37..0000000000
--- a/tests/src/com/vaadin/tests/StressComponentsInTable.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.util.Date;
-import java.util.Vector;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-
-public class StressComponentsInTable extends CustomComponent {
-
-    public StressComponentsInTable() {
-        final VerticalLayout main = new VerticalLayout();
-        setCompositionRoot(main);
-
-        main.addComponent(getTestTable(4, 1000));
-
-    }
-
-    public static Table getTestTable(int cols, int rows) {
-        final Table t = new Table();
-        t.setColumnCollapsingAllowed(true);
-        for (int i = 0; i < cols; i++) {
-            t.addContainerProperty(testString[i], String.class, "");
-        }
-        t.addContainerProperty("button", Button.class, null);
-        for (int i = 0; i < rows; i++) {
-            final Vector<Object> content = new Vector<Object>();
-            for (int j = 0; j < cols; j++) {
-                content.add(rndString());
-            }
-            content.add(new Button("b" + i, new Button.ClickListener() {
-
-                public void buttonClick(ClickEvent event) {
-                    Button b = event.getButton();
-                    System.out.println(b.getCaption() + " click: "
-                            + (new Date()).toString());
-                    System.out.println(b.getApplication());
-
-                }
-            }));
-            t.addItem(content.toArray(), "" + i);
-        }
-        t.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-        return t;
-    }
-
-    static String[] testString = new String[] { "Jacob", "Michael", "Joshua",
-            "Matthew", "Ethan", "Andrew", "Daniel", "Anthony", "Christopher",
-            "Joseph", "William", "Alexander", "Ryan", "David", "Nicholas",
-            "Tyler", "James", "John", "Jonathan", "Nathan", "Samuel",
-            "Christian", "Noah", "Dylan", "Benjamin", "Logan", "Brandon",
-            "Gabriel", "Zachary", "Jose", "Elijah", "Angel", "Kevin", "Jack",
-            "Caleb", "Justin", "Austin", "Evan", "Robert", "Thomas", "Luke",
-            "Mason", "Aidan", "Jackson", "Isaiah", "Jordan", "Gavin", "Connor",
-            "Aiden", "Isaac", "Jason", "Cameron", "Hunter", "Jayden", "Juan",
-            "Charles", "Aaron", "Lucas", "Luis", "Owen", "Landon", "Diego",
-            "Brian", "Adam", "Adrian", "Kyle", "Eric", "Ian", "Nathaniel",
-            "Carlos", "Alex", "Bryan", "Jesus", "Julian", "Sean", "Carter",
-            "Hayden", "Jeremiah", "Cole", "Brayden", "Wyatt", "Chase",
-            "Steven", "Timothy", "Dominic", "Sebastian", "Xavier", "Jaden",
-            "Jesse", "Devin", "Seth", "Antonio", "Richard", "Miguel", "Colin",
-            "Cody", "Alejandro", "Caden", "Blake", "Carson" };
-
-    public static String rndString() {
-        return testString[(int) (Math.random() * testString.length)];
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TableChangingDatasource.java b/tests/src/com/vaadin/tests/TableChangingDatasource.java
deleted file mode 100644
index 2b9639b32d..0000000000
--- a/tests/src/com/vaadin/tests/TableChangingDatasource.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-
-public class TableChangingDatasource extends CustomComponent implements
-        ClickListener {
-    Table t;
-    Table[] ta = new Table[4];
-    private int mode = 0;
-
-    public TableChangingDatasource() {
-        final VerticalLayout main = new VerticalLayout();
-
-        main.addComponent(new Label(
-                "Table should look sane after data source changes"));
-
-        t = new Table();
-
-        t.setWidth("500px");
-        t.setHeight("300px");
-
-        ta[0] = TestForTablesInitialColumnWidthLogicRendering
-                .getTestTable(3, 0);
-        ta[1] = TestForTablesInitialColumnWidthLogicRendering
-                .getTestTable(3, 7);
-        ta[2] = TestForTablesInitialColumnWidthLogicRendering
-                .getTestTable(3, 5);
-        ta[3] = TestForTablesInitialColumnWidthLogicRendering
-                .getTestTable(3, 1);
-
-        main.addComponent(t);
-        main.addComponent(new Button("switch DS", this));
-
-        setCompositionRoot(main);
-
-    }
-
-    public void buttonClick(ClickEvent event) {
-        int i = mode % 4;
-        t.setContainerDataSource(ta[i].getContainerDataSource());
-        mode++;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/TableSelectTest.java b/tests/src/com/vaadin/tests/TableSelectTest.java
deleted file mode 100644
index d5196d2a2a..0000000000
--- a/tests/src/com/vaadin/tests/TableSelectTest.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-
-public class TableSelectTest extends CustomComponent implements
-        Table.ValueChangeListener {
-
-    public TableSelectTest() {
-        final VerticalLayout main = new VerticalLayout();
-        setCompositionRoot(main);
-        main.addComponent(new Label("Hello World!"));
-
-        Table t;
-        t = new Table("single nullsel");
-        main.addComponent(t);
-        t(t);
-        t.setMultiSelect(false);
-        t.setNullSelectionAllowed(true);
-        t.addListener(this);
-
-        t = new Table("single NO-nullsel");
-        main.addComponent(t);
-        t(t);
-        t.setMultiSelect(false);
-        t.setNullSelectionAllowed(false);
-        t.addListener(this);
-
-        t = new Table("multi nullsel");
-        main.addComponent(t);
-        t(t);
-        t.setMultiSelect(true);
-        t.setNullSelectionAllowed(true);
-        t.addListener(this);
-
-        t = new Table("multi NO-nullsel");
-        main.addComponent(t);
-        t(t);
-        t.setMultiSelect(true);
-        t.setNullSelectionAllowed(false);
-        t.addListener(this);
-
-        // --
-
-        t = new Table("single nullsel nullselid");
-        main.addComponent(t);
-        Object id = t(t);
-        t.setNullSelectionItemId(id);
-        t.setMultiSelect(false);
-        t.setNullSelectionAllowed(true);
-        t.addListener(this);
-
-        t = new Table("single NO-nullsel nullselid");
-        main.addComponent(t);
-        id = t(t);
-        t.setNullSelectionItemId(id);
-        t.setMultiSelect(false);
-        t.setNullSelectionAllowed(false);
-        t.addListener(this);
-
-        t = new Table("multi(fails) nullsel nullselid");
-        main.addComponent(t);
-        id = t(t);
-        t.setNullSelectionItemId(id);
-        try {
-            t.setMultiSelect(true);
-            t.setCaption("multi(SHOLD FAIL BUT DID NOT) nullsel nullselid");
-        } catch (final Exception e) {
-            System.err.println("failed ok");
-        }
-        t.setNullSelectionAllowed(true);
-        t.addListener(this);
-
-        t = new Table("multi(fails) NO-nullsel nullselid");
-        main.addComponent(t);
-        id = t(t);
-        t.setNullSelectionItemId(id);
-        try {
-            t.setMultiSelect(true);
-            t.setCaption("multi(SHOLD FAIL BUT DID NOT) NO-nullsel nullselid");
-        } catch (final Exception e) {
-            System.err.println("failed ok");
-        }
-        t.setNullSelectionAllowed(false);
-        t.addListener(this);
-
-        /*
-         * And that's it! The framework will display the main window and its
-         * contents when the application is accessed with the terminal.
-         */
-
-    }
-
-    private Object t(Table t) {
-        t.setImmediate(true);
-        t.setSelectable(true);
-
-        Object id = null;
-        for (int i = 0; i < 5; i++) {
-            id = t.addItem();
-        }
-        t.addContainerProperty("asd", String.class, "the asd thing");
-        t.addContainerProperty("foo", String.class, "foo stuff");
-        t.addContainerProperty("Alonger column header", String.class, "short");
-
-        return id;
-    }
-
-    public void valueChange(ValueChangeEvent event) {
-        final Object val = event.getProperty().getValue();
-
-        System.err.println("Value: " + val);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestBench.java b/tests/src/com/vaadin/tests/TestBench.java
deleted file mode 100644
index 98c6cd41f8..0000000000
--- a/tests/src/com/vaadin/tests/TestBench.java
+++ /dev/null
@@ -1,330 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.io.File;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-import com.vaadin.Application;
-import com.vaadin.data.Property;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.UriFragmentUtility;
-import com.vaadin.ui.UriFragmentUtility.FragmentChangedEvent;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-/**
- * TestBench finds out testable classes within given java packages and adds them
- * to menu from where they can be executed. Class is considered testable if it
- * is of class Application or CustomComponent.
- * 
- * Note: edit TestBench.testablePackages array
- * 
- * @author IT Mill Ltd.
- * 
- */
-public class TestBench extends com.vaadin.Application implements
-        Property.ValueChangeListener {
-
-    // Add here packages which are used for finding testable classes
-    String[] testablePackages = { "com.vaadin.tests",
-            "com.vaadin.tests.tickets" };
-
-    HierarchicalContainer testables = new HierarchicalContainer();
-
-    Window mainWindow = new Window("TestBench window");
-
-    // Main layout consists of tree menu and body layout
-    HorizontalSplitPanel mainLayout = new HorizontalSplitPanel();
-
-    Tree menu;
-
-    Panel bodyLayout = new Panel();
-
-    // TODO this could probably be a simple Set
-    HashMap<Class<?>, String> itemCaptions = new HashMap<Class<?>, String>();
-
-    @Override
-    public void init() {
-
-        // Add testable classes to hierarchical container
-        for (int p = 0; p < testablePackages.length; p++) {
-            testables.addItem(testablePackages[p]);
-            try {
-                final List<Class<?>> testableClasses = getTestableClassesForPackage(testablePackages[p]);
-                for (final Iterator<Class<?>> it = testableClasses.iterator(); it
-                        .hasNext();) {
-                    final Class<?> t = it.next();
-                    // ignore TestBench itself
-                    if (t.equals(TestBench.class)) {
-                        continue;
-                    }
-                    try {
-                        testables.addItem(t);
-                        itemCaptions.put(t, t.getName());
-                        testables.setParent(t, testablePackages[p]);
-                        testables.setChildrenAllowed(t, false);
-                        continue;
-                    } catch (final Exception e) {
-                        try {
-                            testables.addItem(t);
-                            itemCaptions.put(t, t.getName());
-                            testables.setParent(t, testablePackages[p]);
-                            testables.setChildrenAllowed(t, false);
-                            continue;
-                        } catch (final Exception e1) {
-                            e1.printStackTrace();
-                        }
-                    }
-                }
-            } catch (final Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        menu = new Tree("Testables", testables);
-
-        for (final Iterator<Class<?>> i = itemCaptions.keySet().iterator(); i
-                .hasNext();) {
-            final Class<?> testable = i.next();
-            // simplify captions
-            final String name = testable.getName().substring(
-                    testable.getName().lastIndexOf('.') + 1);
-            menu.setItemCaption(testable, name);
-        }
-        // expand all root items
-        for (final Iterator<?> i = menu.rootItemIds().iterator(); i.hasNext();) {
-            menu.expandItemsRecursively(i.next());
-        }
-
-        menu.addListener(this);
-        menu.setImmediate(true);
-        menu.setNullSelectionAllowed(false);
-        VerticalLayout lo = new VerticalLayout();
-        lo.addComponent(menu);
-
-        UriFragmentUtility uri = new UriFragmentUtility();
-        lo.addComponent(uri);
-
-        uri.addListener(new UriFragmentUtility.FragmentChangedListener() {
-            public void fragmentChanged(FragmentChangedEvent source) {
-                String fragment = source.getUriFragmentUtility().getFragment();
-                if (fragment != null && !"".equals(fragment)) {
-                    // try to find a proper test class
-
-                    // exact match
-                    Iterator<?> iterator = menu.getItemIds().iterator();
-                    while (iterator.hasNext()) {
-                        Object next = iterator.next();
-                        if (next instanceof Class) {
-                            Class<?> c = (Class<?>) next;
-                            String string = c.getName();
-                            if (string.equals(fragment)) {
-                                menu.setValue(c);
-                                mainLayout.setSplitPosition(0);
-                                return;
-                            }
-                        }
-                    }
-
-                    // simple name match
-                    iterator = menu.getItemIds().iterator();
-                    while (iterator.hasNext()) {
-                        Object next = iterator.next();
-                        if (next instanceof Class) {
-                            Class<?> c = (Class<?>) next;
-                            String string = c.getSimpleName();
-                            if (string.equals(fragment)) {
-                                menu.setValue(c);
-                                mainLayout.setSplitPosition(0);
-                                return;
-                            }
-                        }
-                    }
-                    // ticket match
-                    iterator = menu.getItemIds().iterator();
-                    while (iterator.hasNext()) {
-                        Object next = iterator.next();
-                        if (next instanceof Class) {
-                            Class<?> c = (Class<?>) next;
-                            String string = c.getSimpleName();
-                            if (string.startsWith("Ticket" + fragment)) {
-                                menu.setValue(c);
-                                mainLayout.setSplitPosition(0);
-                                return;
-                            }
-                        }
-                    }
-
-                    // just partly mach lowercase
-                    iterator = menu.getItemIds().iterator();
-                    while (iterator.hasNext()) {
-                        Object next = iterator.next();
-                        if (next instanceof Class) {
-                            Class<?> c = (Class<?>) next;
-                            String string = c.getSimpleName();
-                            if (string.toLowerCase().contains(
-                                    fragment.toLowerCase())) {
-                                menu.setValue(c);
-                                mainLayout.setSplitPosition(0);
-                                return;
-                            }
-                        }
-                    }
-
-                    getMainWindow().showNotification(
-                            "No potential matc for #" + fragment);
-
-                }
-
-            }
-        });
-
-        mainLayout.addComponent(lo);
-
-        bodyLayout.addStyleName("light");
-        bodyLayout.setSizeFull();
-        bodyLayout.setContent(new VerticalLayout());
-
-        mainLayout.addComponent(bodyLayout);
-
-        mainLayout.setSplitPosition(30);
-
-        mainWindow.setContent(mainLayout);
-
-        setMainWindow(mainWindow);
-    }
-
-    private Component createTestable(Class<?> c) {
-        try {
-            final Application app = (Application) c.newInstance();
-            app.init();
-            Layout lo = (Layout) app.getMainWindow().getContent();
-            lo.setParent(null);
-            return lo;
-        } catch (final Exception e) {
-            try {
-                final CustomComponent cc = (CustomComponent) c.newInstance();
-                cc.setSizeFull();
-                return cc;
-            } catch (final Exception e1) {
-                e1.printStackTrace();
-                VerticalLayout lo = new VerticalLayout();
-                lo.addComponent(new Label(
-                        "Cannot create application / custom component: "
-                                + e1.toString()));
-
-                Link l = new Link("Try opening via app runner",
-                        new ExternalResource("../run/" + c.getName()));
-                lo.addComponent(l);
-
-                return lo;
-            }
-        }
-    }
-
-    // Handle menu selection and update body
-    public void valueChange(Property.ValueChangeEvent event) {
-        bodyLayout.removeAllComponents();
-        bodyLayout.setCaption(null);
-
-        final Object o = menu.getValue();
-        if (o != null && o instanceof Class) {
-            final Class<?> c = (Class<?>) o;
-            final String title = c.getName();
-            bodyLayout.setCaption(title);
-            bodyLayout.addComponent(createTestable(c));
-        } else {
-            // NOP node selected or deselected tree item
-        }
-    }
-
-    /**
-     * Return all testable classes within given package. Class is considered
-     * testable if it's superclass is Application or CustomComponent.
-     * 
-     * @param packageName
-     * @return
-     * @throws ClassNotFoundException
-     */
-    public static List<Class<?>> getTestableClassesForPackage(String packageName)
-            throws Exception {
-        final ArrayList<File> directories = new ArrayList<File>();
-        try {
-            final ClassLoader cld = Thread.currentThread()
-                    .getContextClassLoader();
-            if (cld == null) {
-                throw new ClassNotFoundException("Can't get class loader.");
-            }
-            final String path = packageName.replace('.', '/');
-            // Ask for all resources for the path
-            final Enumeration<URL> resources = cld.getResources(path);
-            while (resources.hasMoreElements()) {
-                final URL url = resources.nextElement();
-                directories.add(new File(url.getFile()));
-            }
-        } catch (final Exception x) {
-            throw new Exception(packageName
-                    + " does not appear to be a valid package.");
-        }
-
-        final ArrayList<Class<?>> classes = new ArrayList<Class<?>>();
-        // For every directory identified capture all the .class files
-        for (final Iterator<File> it = directories.iterator(); it.hasNext();) {
-            final File directory = it.next();
-            if (directory.exists()) {
-                // Get the list of the files contained in the package
-                final String[] files = directory.list();
-                for (int j = 0; j < files.length; j++) {
-                    // we are only interested in .class files
-                    if (files[j].endsWith(".class")) {
-                        // removes the .class extension
-                        final String p = packageName + '.'
-                                + files[j].substring(0, files[j].length() - 6);
-                        final Class<?> c = Class.forName(p);
-                        if (c.getSuperclass() != null) {
-                            if ((c.getSuperclass()
-                                    .equals(com.vaadin.Application.class))) {
-                                classes.add(c);
-                            } else if ((c.getSuperclass()
-                                    .equals(com.vaadin.ui.CustomComponent.class))) {
-                                classes.add(c);
-                            }
-                        }
-
-                        // for (int i = 0; i < c.getInterfaces().length; i++) {
-                        // Class cc = c.getInterfaces()[i];
-                        // if (c.getInterfaces()[i].equals(Testable.class)) {
-                        // // Class is testable
-                        // classes.add(c);
-                        // }
-                        // }
-                    }
-                }
-            } else {
-                throw new ClassNotFoundException(packageName + " ("
-                        + directory.getPath()
-                        + ") does not appear to be a valid package");
-            }
-        }
-
-        return classes;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestCaptionWrapper.java b/tests/src/com/vaadin/tests/TestCaptionWrapper.java
deleted file mode 100644
index f63c148892..0000000000
--- a/tests/src/com/vaadin/tests/TestCaptionWrapper.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.terminal.ClassResource;
-import com.vaadin.terminal.ErrorMessage;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.terminal.UserError;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Component.Listener;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.OptionGroup;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.ProgressIndicator;
-import com.vaadin.ui.RichTextArea;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.Slider;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.TwinColSelect;
-import com.vaadin.ui.Upload;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class TestCaptionWrapper extends CustomComponent implements Listener {
-
-    VerticalLayout main = new VerticalLayout();
-
-    final String eventListenerString = "Component.Listener feedback: ";
-    Label eventListenerFeedback = new Label(eventListenerString
-            + " <no events occured>");
-    int count = 0;
-
-    public TestCaptionWrapper() {
-        setCompositionRoot(main);
-    }
-
-    @Override
-    public void attach() {
-        super.attach();
-        createNewView();
-    }
-
-    public void createNewView() {
-        main.removeAllComponents();
-
-        main.addComponent(new Label(
-                "Each Layout and their contained components should "
-                        + "have icon, caption, description, user error defined. "
-                        + "Eeach layout should contain similar components."));
-
-        main.addComponent(eventListenerFeedback);
-
-        main.addComponent(new Label("OrderedLayout"));
-        test(main);
-        populateLayout(main);
-
-        final Panel panel = new Panel("Panel");
-        test(panel);
-        populateLayout((Layout) panel.getContent());
-
-        final TabSheet tabsheet = new TabSheet();
-        test(tabsheet);
-        final VerticalLayout tab1 = new VerticalLayout();
-        tab1.addComponent(new Label("try tab2"));
-        final VerticalLayout tab2 = new VerticalLayout();
-        test(tab2);
-        populateLayout(tab2);
-        tabsheet.addTab(tab1, "TabSheet tab1", new ClassResource("m.gif",
-                getApplication()));
-        tabsheet.addTab(tab2, "TabSheet tab2", new ClassResource("m.gif",
-                getApplication()));
-
-        final VerticalLayout expandLayout = new VerticalLayout();
-        test(expandLayout);
-        populateLayout(expandLayout);
-
-        final GridLayout gridLayout = new GridLayout();
-        test(gridLayout);
-        populateLayout(gridLayout);
-
-        final Window window = new Window("TEST: Window");
-        test(window);
-        populateLayout((Layout) window.getContent());
-
-    }
-
-    void populateLayout(Layout layout) {
-
-        final Button button = new Button("Button " + count++);
-        test(layout, button);
-        button.addListener(this);
-
-        final DateField df = new DateField("DateField " + count++);
-        test(layout, df);
-
-        final CheckBox cb = new CheckBox("Checkbox " + count++);
-        test(layout, cb);
-
-        final Embedded emb = new Embedded("Embedded " + count++);
-        test(layout, emb);
-
-        final Panel panel = new Panel("Panel " + count++);
-        test(layout, panel);
-
-        final Label label = new Label("Label " + count++);
-        test(layout, label);
-
-        final Link link = new Link("Link " + count++, new ExternalResource(
-                "www.vaadin.com"));
-        test(layout, link);
-
-        final NativeSelect nativeSelect = new NativeSelect("NativeSelect "
-                + count++);
-        test(layout, nativeSelect);
-
-        final OptionGroup optionGroup = new OptionGroup("OptionGroup "
-                + count++);
-        test(layout, optionGroup);
-
-        final ProgressIndicator pi = new ProgressIndicator();
-        test(layout, pi);
-
-        final RichTextArea rta = new RichTextArea();
-        test(layout, rta);
-
-        final Select select = new Select("Select " + count++);
-        test(layout, select);
-
-        final Slider slider = new Slider("Slider " + count++);
-        test(layout, slider);
-
-        final Table table = new Table("Table " + count++);
-        test(layout, table);
-
-        final TextField tf = new TextField("Textfield " + count++);
-        test(layout, tf);
-
-        final Tree tree = new Tree("Tree " + count++);
-        test(layout, tree);
-
-        final TwinColSelect twinColSelect = new TwinColSelect("TwinColSelect "
-                + count++);
-        test(layout, twinColSelect);
-
-        final Upload upload = new Upload("Upload (non-functional)", null);
-        test(layout, upload);
-
-        // Custom components
-        layout.addComponent(new Label("<B>Below are few custom components</B>",
-                Label.CONTENT_XHTML));
-        final TestForUpload tfu = new TestForUpload();
-        layout.addComponent(tfu);
-
-    }
-
-    /**
-     * Stresses component by configuring it
-     * 
-     * @param c
-     */
-    void test(AbstractComponent c) {
-        final ClassResource res = new ClassResource("m.gif", getApplication());
-        final ErrorMessage errorMsg = new UserError("User error " + c);
-
-        if ((c.getCaption() == null) || (c.getCaption().length() <= 0)) {
-            c.setCaption("Caption " + c);
-        }
-        c.setDescription("Description " + c);
-        c.setComponentError(errorMsg);
-        c.setIcon(res);
-    }
-
-    /**
-     * Stresses component by configuring it in a given layout
-     * 
-     * @param c
-     */
-    void test(Layout layout, AbstractComponent c) {
-        test(c);
-        layout.addComponent(c);
-    }
-
-    public void componentEvent(Event event) {
-        final String feedback = eventListenerString + " source="
-                + event.getSource() + ", toString()=" + event.toString();
-        System.out.println("eventListenerFeedback: " + feedback);
-        eventListenerFeedback.setValue(feedback);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestComponentAddAndRecursion.java b/tests/src/com/vaadin/tests/TestComponentAddAndRecursion.java
deleted file mode 100644
index 5203a7055f..0000000000
--- a/tests/src/com/vaadin/tests/TestComponentAddAndRecursion.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/**
- * 
- */
-package com.vaadin.tests;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-/**
- * @author marc
- * 
- */
-public class TestComponentAddAndRecursion extends CustomComponent {
-    Panel p;
-    Panel p2;
-    Label l;
-    Label l2;
-    Panel p3;
-
-    public TestComponentAddAndRecursion() {
-
-        VerticalLayout main = new VerticalLayout();
-        setCompositionRoot(main);
-
-        l = new Label("A");
-        l2 = new Label("B");
-        p = new Panel("p");
-        p.addComponent(l);
-        p.addComponent(l2);
-        main.addComponent(p);
-        p2 = new Panel("p2");
-        p2.addComponent(l);
-        main.addComponent(p2);
-        p3 = new Panel("p3");
-        p2.addComponent(p3);
-
-        Button b = new Button("use gridlayout", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                p.setContent(new GridLayout());
-                p2.setContent(new GridLayout());
-                p3.setContent(new GridLayout());
-            }
-
-        });
-        main.addComponent(b);
-        b = new Button("use orderedlayout", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                p.setContent(new VerticalLayout());
-                p2.setContent(new VerticalLayout());
-                p3.setContent(new VerticalLayout());
-            }
-
-        });
-        main.addComponent(b);
-        b = new Button("move B", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                p2.addComponent(l2);
-            }
-
-        });
-        main.addComponent(b);
-        b = new Button("move p", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                p3.addComponent(p);
-            }
-
-        });
-        main.addComponent(b);
-        b = new Button("add to both", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                Label l = new Label("both");
-                p.addComponent(l);
-                p2.addComponent(l);
-            }
-
-        });
-        main.addComponent(b);
-        b = new Button("recurse", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                try {
-                    p3.addComponent(p2);
-                    getWindow().showNotification("ERROR",
-                            "This should have failed",
-                            Window.Notification.TYPE_ERROR_MESSAGE);
-                } catch (Exception e) {
-                    getWindow().showNotification("OK", "threw, as expected",
-                            Window.Notification.TYPE_ERROR_MESSAGE);
-                }
-            }
-
-        });
-        main.addComponent(b);
-        b = new Button("recurse2", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                Panel p = new Panel("dynamic");
-                p.addComponent(p2);
-                try {
-                    p3.addComponent(p);
-                    getWindow().showNotification("ERROR",
-                            "This should have failed",
-                            Window.Notification.TYPE_ERROR_MESSAGE);
-                } catch (Exception e) {
-                    getWindow().showNotification("OK", "threw, as expected",
-                            Window.Notification.TYPE_ERROR_MESSAGE);
-                }
-            }
-
-        });
-        main.addComponent(b);
-        /*
-         * And that's it! The framework will display the main window and its
-         * contents when the application is accessed with the terminal.
-         */
-    }
-}
diff --git a/tests/src/com/vaadin/tests/TestContainerChanges.java b/tests/src/com/vaadin/tests/TestContainerChanges.java
deleted file mode 100644
index c3a1a98665..0000000000
--- a/tests/src/com/vaadin/tests/TestContainerChanges.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/**
- * 
- */
-package com.vaadin.tests;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.ContainerHierarchicalWrapper;
-import com.vaadin.data.util.ContainerOrderedWrapper;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.ListSelect;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.themes.Reindeer;
-
-/**
- * @author marc
- * 
- */
-public class TestContainerChanges extends CustomComponent {
-    Container cont = new IndexedContainer();
-    Container hierarchical = new ContainerHierarchicalWrapper(cont);
-    Container ordered = new ContainerOrderedWrapper(cont);
-
-    int cnt = 0;
-    Table tbl;
-
-    public TestContainerChanges() {
-
-        cont.addContainerProperty("Asd", String.class, "qwe");
-        cont.addContainerProperty("Bar", String.class, "foo");
-
-        VerticalLayout main = new VerticalLayout();
-        setCompositionRoot(main);
-
-        main.addComponent(new Label(
-                "The same IndexedContainer is wrapped in a ordered/hierarchical wrapper and is set as data source for all components . The buttons only affect the 'original' IndexedContainer."));
-
-        HorizontalLayout h = new HorizontalLayout();
-
-        main.addComponent(h);
-
-        VerticalLayout v = new VerticalLayout();
-        h.addComponent(v);
-        tbl = new Table();
-        tbl.setHeight("200px");
-        tbl.setWidth("300px");
-        v.addComponent(tbl);
-        tbl.setSelectable(true);
-        tbl.setMultiSelect(false);
-        tbl.setImmediate(true);
-        tbl.setEditable(true);
-        tbl.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-        // Original container
-        tbl.setContainerDataSource(hierarchical);
-
-        Table tbl2 = new Table();
-        tbl2.setHeight("200px");
-        tbl2.setWidth("300px");
-        v.addComponent(tbl2);
-        tbl2.setSelectable(true);
-        tbl2.setMultiSelect(false);
-        tbl2.setImmediate(true);
-        tbl2.addListener(new Table.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                System.err.println("Value now "
-                        + event.getProperty().getValue());
-
-            }
-        });
-        tbl2.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-        // non-ordered container will get wrapped
-        tbl2.setContainerDataSource(hierarchical);
-
-        VerticalLayout buttons = new VerticalLayout();
-        v.addComponent(buttons);
-
-        Button b = new Button("table.commit()", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                tbl.commit();
-            }
-
-        });
-        buttons.addComponent(b);
-
-        b = new Button("indexedcontainer.addItem()",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        cont.addItem(new Integer(cnt++));
-                    }
-
-                });
-        buttons.addComponent(b);
-        b = new Button("indexedcontainer.addItem(null)",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        cont.addItem(null);
-                    }
-
-                });
-        buttons.addComponent(b);
-        b = new Button("indexedcontainer.removeItem(table.lastItemId()",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        cont.removeItem(tbl.lastItemId());
-                    }
-
-                });
-        buttons.addComponent(b);
-
-        b = new Button("indexedcontainer.addContainerProperty()",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        cont.addContainerProperty("prop" + cnt, String.class,
-                                "#" + cnt++);
-                    }
-
-                });
-        buttons.addComponent(b);
-
-        b = new Button("indexedcontainer.clear()", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                cont.removeAllItems();
-            }
-
-        });
-        buttons.addComponent(b);
-        b = new Button("table.setContainerDataSource(indexedcontainer)",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        tbl.setContainerDataSource(cont);
-                    }
-
-                });
-        buttons.addComponent(b);
-        b = new Button("table.setContainerDataSource(orderedwrapper)",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        tbl.setContainerDataSource(ordered);
-                    }
-
-                });
-        buttons.addComponent(b);
-        b = new Button("table.setContainerDataSource(hierarchicalwrapper)",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        tbl.setContainerDataSource(hierarchical);
-                    }
-
-                });
-        buttons.addComponent(b);
-
-        Panel p = new Panel("Tree");
-        p.setStyleName(Reindeer.PANEL_LIGHT);
-        h.addComponent(p);
-        Tree tree = new Tree("ITEM_CAPTION_MODE_PROPERTY");
-        tree.setContainerDataSource(ordered);
-        tree.setItemCaptionPropertyId("Asd");
-        tree.setItemCaptionMode(Tree.ITEM_CAPTION_MODE_PROPERTY);
-        p.addComponent(tree);
-        tree = new Tree("ITEM_CAPTION_MODE_ITEM");
-        // nonhierarchical container will get wrapped
-        tree.setContainerDataSource(ordered);
-        tree.setItemCaptionMode(Tree.ITEM_CAPTION_MODE_ITEM);
-        p.addComponent(tree);
-
-        p = new Panel("ComboBox");
-        p.setStyleName(Reindeer.PANEL_LIGHT);
-        h.addComponent(p);
-        ComboBox c = new ComboBox("ITEM_CAPTION_MODE_PROPERTY");
-        c.setImmediate(true);
-        c.setContainerDataSource(cont);
-        c.setItemCaptionPropertyId("Asd");
-        c.setItemCaptionMode(ComboBox.ITEM_CAPTION_MODE_PROPERTY);
-        p.addComponent(c);
-        c = new ComboBox("ITEM_CAPTION_MODE_ITEM");
-        c.setImmediate(true);
-        c.setContainerDataSource(cont);
-        c.setItemCaptionMode(ComboBox.ITEM_CAPTION_MODE_ITEM);
-        p.addComponent(c);
-
-        p = new Panel("ListBox");
-        p.setStyleName(Reindeer.PANEL_LIGHT);
-        h.addComponent(p);
-        ListSelect l = new ListSelect("ITEM_CAPTION_MODE_PROPERTY");
-        l.setContainerDataSource(cont);
-        l.setItemCaptionPropertyId("Asd");
-        l.setItemCaptionMode(ComboBox.ITEM_CAPTION_MODE_PROPERTY);
-        p.addComponent(l);
-        l = new ListSelect("ITEM_CAPTION_MODE_ITEM");
-        l.setContainerDataSource(cont);
-        l.setItemCaptionMode(ComboBox.ITEM_CAPTION_MODE_ITEM);
-        p.addComponent(l);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/TestDateField.java b/tests/src/com/vaadin/tests/TestDateField.java
deleted file mode 100644
index 287007bad6..0000000000
--- a/tests/src/com/vaadin/tests/TestDateField.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.util.Locale;
-
-import com.vaadin.terminal.ClassResource;
-import com.vaadin.terminal.ErrorMessage;
-import com.vaadin.terminal.UserError;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-
-/**
- * 
- * @author IT Mill Ltd.
- */
-public class TestDateField extends CustomComponent {
-
-    VerticalLayout main = new VerticalLayout();
-
-    DateField df;
-
-    public TestDateField() {
-        setCompositionRoot(main);
-        createNewView();
-    }
-
-    public void createNewView() {
-        main.removeAllComponents();
-        main.addComponent(new Label("DateField"));
-
-        df = new DateField();
-        main.addComponent(df);
-
-        final ErrorMessage errorMsg = new UserError("User error " + df);
-        df.setCaption("DateField caption " + df);
-        df.setDescription("DateField description " + df);
-        df.setComponentError(errorMsg);
-        df.setImmediate(true);
-        // FIXME: bug #1138 this makes datefield to render with unknown
-        // component (UIDL tree debug)
-        df.addStyleName("thisShouldBeHarmless");
-
-        // Another test: locale
-        final DateField df1 = new DateField("US locale");
-        main.addComponent(df1);
-        df1.setLocale(new Locale("en", "US"));
-
-        final DateField df2 = new DateField("DE locale");
-        main.addComponent(df2);
-        df2.setLocale(new Locale("de", "DE"));
-
-        final DateField df3 = new DateField("RU locale");
-        main.addComponent(df3);
-        df3.setLocale(new Locale("ru", "RU"));
-
-        final DateField df4 = new DateField("FI locale");
-        main.addComponent(df4);
-        df4.setLocale(new Locale("fi", "FI"));
-    }
-
-    @Override
-    public void attach() {
-        final ClassResource res = new ClassResource("m.gif",
-                super.getApplication());
-        df.setIcon(res);
-        super.attach();
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestForAlignments.java b/tests/src/com/vaadin/tests/TestForAlignments.java
deleted file mode 100644
index 4296744224..0000000000
--- a/tests/src/com/vaadin/tests/TestForAlignments.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-public class TestForAlignments extends CustomComponent {
-
-    public TestForAlignments() {
-
-        final VerticalLayout main = new VerticalLayout();
-
-        final Button b1 = new Button("Right");
-        final Button b2 = new Button("Left");
-        final Button b3 = new Button("Bottom");
-        final Button b4 = new Button("Top");
-        final TextField t1 = new TextField("Right aligned");
-        final TextField t2 = new TextField("Bottom aligned");
-        final DateField d1 = new DateField("Center aligned");
-        final DateField d2 = new DateField("Center aligned");
-
-        final VerticalLayout vert = new VerticalLayout();
-        vert.addComponent(b1);
-        vert.addComponent(b2);
-        vert.addComponent(t1);
-        vert.addComponent(d1);
-        // vert.getSize().setWidth(500);
-        vert.setComponentAlignment(b1, Alignment.TOP_RIGHT);
-        vert.setComponentAlignment(b2, Alignment.TOP_LEFT);
-        vert.setComponentAlignment(t1, Alignment.TOP_RIGHT);
-        vert.setComponentAlignment(d1, Alignment.TOP_CENTER);
-        final HorizontalLayout hori = new HorizontalLayout();
-        hori.addComponent(b3);
-        hori.addComponent(b4);
-        hori.addComponent(t2);
-        hori.addComponent(d2);
-        // hori.getSize().setHeight(200);
-        hori.setComponentAlignment(b3, Alignment.BOTTOM_LEFT);
-        hori.setComponentAlignment(b4, Alignment.TOP_LEFT);
-        hori.setComponentAlignment(t2, Alignment.BOTTOM_LEFT);
-        hori.setComponentAlignment(d2, Alignment.MIDDLE_LEFT);
-
-        main.addComponent(vert);
-        main.addComponent(hori);
-
-        setCompositionRoot(main);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestForApplicationLayoutThatUsesWholeBrosersSpace.java b/tests/src/com/vaadin/tests/TestForApplicationLayoutThatUsesWholeBrosersSpace.java
deleted file mode 100644
index b15949518a..0000000000
--- a/tests/src/com/vaadin/tests/TestForApplicationLayoutThatUsesWholeBrosersSpace.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.Application;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.VerticalSplitPanel;
-import com.vaadin.ui.Window;
-
-public class TestForApplicationLayoutThatUsesWholeBrosersSpace extends
-        Application {
-
-    Window main = new Window("Windowing test");
-
-    VerticalLayout rootLayout;
-
-    VerticalSplitPanel firstLevelSplit;
-
-    @Override
-    public void init() {
-        setMainWindow(main);
-
-        rootLayout = new VerticalLayout();
-        main.setContent(rootLayout);
-
-        rootLayout.addComponent(new Label("header"));
-
-        firstLevelSplit = new VerticalSplitPanel();
-
-        final HorizontalSplitPanel secondSplitPanel = new HorizontalSplitPanel();
-        secondSplitPanel.setFirstComponent(new Label("left"));
-
-        final VerticalLayout topRight = new VerticalLayout();
-        topRight.addComponent(new Label("topright header"));
-
-        final Table t = TestForTablesInitialColumnWidthLogicRendering
-                .getTestTable(4, 100);
-        t.setSizeFull();
-        topRight.addComponent(t);
-        topRight.setExpandRatio(t, 1);
-
-        topRight.addComponent(new Label("topright footer"));
-
-        secondSplitPanel.setSecondComponent(topRight);
-
-        final VerticalLayout el = new VerticalLayout();
-        el.addComponent(new Label("B��"));
-
-        firstLevelSplit.setFirstComponent(secondSplitPanel);
-        firstLevelSplit.setSecondComponent(el);
-
-        rootLayout.addComponent(firstLevelSplit);
-        rootLayout.setExpandRatio(firstLevelSplit, 1);
-
-        rootLayout.addComponent(new Label("footer"));
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestForBasicApplicationLayout.java b/tests/src/com/vaadin/tests/TestForBasicApplicationLayout.java
deleted file mode 100644
index e4b7592398..0000000000
--- a/tests/src/com/vaadin/tests/TestForBasicApplicationLayout.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.util.Locale;
-
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.themes.Reindeer;
-
-public class TestForBasicApplicationLayout extends CustomComponent {
-
-    private final Button click;
-    private final Button click2;
-    private final TabSheet tab;
-
-    public TestForBasicApplicationLayout() {
-
-        click = new Button("Set height -1", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                tab.setHeight(null);
-            }
-
-        });
-
-        click2 = new Button("Set height 100%", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                tab.setHeight(100, TabSheet.UNITS_PERCENTAGE);
-            }
-
-        });
-
-        final HorizontalSplitPanel sp = new HorizontalSplitPanel();
-        sp.setSplitPosition(290, Sizeable.UNITS_PIXELS);
-
-        final HorizontalSplitPanel sp2 = new HorizontalSplitPanel();
-        sp2.setSplitPosition(255, Sizeable.UNITS_PIXELS);
-
-        final Panel p = new Panel("Accordion Panel");
-        p.setSizeFull();
-
-        tab = new TabSheet();
-        tab.setSizeFull();
-
-        final Panel report = new Panel("Monthly Program Runs",
-                new VerticalLayout());
-        final VerticalLayout controls = new VerticalLayout();
-        controls.setMargin(true);
-        controls.addComponent(new Label("Report tab"));
-        controls.addComponent(click);
-        controls.addComponent(click2);
-        report.addComponent(controls);
-        final DateField cal = new DateField();
-        cal.setResolution(DateField.RESOLUTION_DAY);
-        cal.setLocale(new Locale("en", "US"));
-        report.addComponent(cal);
-        ((VerticalLayout) report.getContent()).setExpandRatio(controls, 1);
-        report.addStyleName(Reindeer.PANEL_LIGHT);
-        report.setHeight(100, Sizeable.UNITS_PERCENTAGE);
-
-        sp2.setFirstComponent(report);
-
-        final Table table = TestForTablesInitialColumnWidthLogicRendering
-                .getTestTable(5, 200);
-        table.setPageLength(15);
-        table.setSelectable(true);
-        table.setRowHeaderMode(Table.ROW_HEADER_MODE_INDEX);
-        table.setColumnCollapsingAllowed(true);
-        table.setColumnReorderingAllowed(true);
-        table.setSortDisabled(false);
-        table.setSizeFull();
-        table.addStyleName("table-inline");
-        sp2.setSecondComponent(table);
-
-        tab.addTab(new Label("Tab1"), "Summary", null);
-        tab.addTab(sp2, "Reports", null);
-        tab.addTab(new Label("Tab 3"), "Statistics", null);
-        tab.addTab(new Label("Tab 4"), "Error Tracking", null);
-        tab.setSelectedTab(sp2);
-
-        sp.setFirstComponent(p);
-        sp.setSecondComponent(tab);
-
-        setCompositionRoot(sp);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestForChildComponentRendering.java b/tests/src/com/vaadin/tests/TestForChildComponentRendering.java
deleted file mode 100644
index 2aafe6b38c..0000000000
--- a/tests/src/com/vaadin/tests/TestForChildComponentRendering.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.VerticalLayout;
-
-/**
- * 
- * This Component contains some simple test to see that component updates its
- * contents propertly.
- * 
- * @author IT Mill Ltd.
- */
-public class TestForChildComponentRendering extends CustomComponent {
-
-    private final VerticalLayout main;
-
-    public TestForChildComponentRendering() {
-
-        main = new VerticalLayout();
-        setCompositionRoot(main);
-        createNewView();
-    }
-
-    public void createNewView() {
-        main.removeAllComponents();
-        main.addComponent(new Label("SDFGFHFHGJGFDSDSSSGFDD"));
-
-        final Link l = new Link();
-        l.setCaption("Siirry Vaadiniin");
-        l.setResource(new ExternalResource("http://www.vaadin.com/"));
-        l.setTargetHeight(200);
-        l.setTargetWidth(500);
-        l.setTargetBorder(Link.TARGET_BORDER_MINIMAL);
-        main.addComponent(l);
-
-        final Select se = new Select();
-        se.setCaption("VALITSET TÄSTÄ");
-        se.addItem("valinta1");
-        se.addItem("Valinta 2");
-
-        Button b = new Button("refresh view", this, "createNewView");
-        main.addComponent(b);
-
-        b = new Button("reorder view", this, "randomReorder");
-        main.addComponent(b);
-
-        b = new Button("remove randomly one component", this,
-                "removeRandomComponent");
-        main.addComponent(b);
-
-    }
-
-    public void randomReorder() {
-        final Iterator<Component> it = main.getComponentIterator();
-        final ArrayList<Component> components = new ArrayList<Component>();
-        while (it.hasNext()) {
-            components.add(it.next());
-        }
-
-        final VerticalLayout v = main;
-        v.removeAllComponents();
-
-        for (int i = components.size(); i > 0; i--) {
-            final int index = (int) (Math.random() * i);
-            v.addComponent(components.get(index));
-            components.remove(index);
-        }
-    }
-
-    public void removeRandomComponent() {
-        final Iterator<Component> it = main.getComponentIterator();
-        final ArrayList<Component> components = new ArrayList<Component>();
-        while (it.hasNext()) {
-            components.add(it.next());
-        }
-        final int size = components.size();
-        final int index = (int) (Math.random() * size);
-        main.removeComponent(components.get(index));
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestForContainerFilterable.java b/tests/src/com/vaadin/tests/TestForContainerFilterable.java
deleted file mode 100644
index 7b5124b4f3..0000000000
--- a/tests/src/com/vaadin/tests/TestForContainerFilterable.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-public class TestForContainerFilterable extends CustomComponent {
-
-    VerticalLayout lo = new VerticalLayout();
-    IndexedContainer ic = new IndexedContainer();
-    Table t = new Table();
-    private static String parts[] = { "Neo", "Sa", "rem", "the", "adi", "za",
-            "tre", "day", "Ca", "re", "cen", "ter", "mi", "nal" };
-    TextField fooFilter = new TextField("foo-filter");
-    TextField barFilter = new TextField("bar-filter");
-    Button filterButton = new Button("Filter");
-    Label count = new Label();
-
-    public TestForContainerFilterable() {
-        setCompositionRoot(lo);
-
-        // Init datasource
-        ic.addContainerProperty("foo", String.class, "");
-        ic.addContainerProperty("bar", String.class, "");
-        for (int i = 0; i < 1000; i++) {
-            final Object id = ic.addItem();
-            ic.getContainerProperty(id, "foo").setValue(randomWord());
-            ic.getContainerProperty(id, "bar").setValue(randomWord());
-        }
-
-        // Init filtering view
-        final Panel filterPanel = new Panel("Filter", new HorizontalLayout());
-        filterPanel.setWidth(100, Panel.UNITS_PERCENTAGE);
-        lo.addComponent(filterPanel);
-        filterPanel.addComponent(fooFilter);
-        filterPanel.addComponent(barFilter);
-        filterPanel.addComponent(filterButton);
-        fooFilter
-                .setDescription("Filters foo column in case-sensitive contains manner.");
-        barFilter
-                .setDescription("Filters bar column in case-insensitive prefix manner.");
-        filterPanel.addComponent(count);
-
-        // Table
-        lo.addComponent(t);
-        t.setPageLength(12);
-        t.setWidth(100, Table.UNITS_PERCENTAGE);
-        t.setContainerDataSource(ic);
-
-        // Handler
-        filterButton.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                ic.removeAllContainerFilters();
-                if (fooFilter.toString().length() > 0) {
-                    ic.addContainerFilter("foo", fooFilter.toString(), false,
-                            false);
-                }
-                if (barFilter.toString().length() > 0) {
-                    ic.addContainerFilter("bar", barFilter.toString(), true,
-                            true);
-                }
-                count.setValue("Rows in table: " + ic.size());
-            }
-        });
-
-        // Resetbutton
-        lo.addComponent(new Button("Rebind table datasource",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        t.setContainerDataSource(ic);
-                    }
-                }));
-    }
-
-    private String randomWord() {
-        int len = (int) (Math.random() * 4);
-        final StringBuffer buf = new StringBuffer();
-        while (len-- >= 0) {
-            buf.append(parts[(int) (Math.random() * parts.length)]);
-        }
-        return buf.toString();
-    }
-}
diff --git a/tests/src/com/vaadin/tests/TestForGridLayoutChildComponentRendering.java b/tests/src/com/vaadin/tests/TestForGridLayoutChildComponentRendering.java
deleted file mode 100644
index 5c121dd3d3..0000000000
--- a/tests/src/com/vaadin/tests/TestForGridLayoutChildComponentRendering.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.Select;
-
-/**
- * 
- * This Component contains some simple test to see that component updates its
- * contents propertly.
- * 
- * @author IT Mill Ltd.
- */
-public class TestForGridLayoutChildComponentRendering extends CustomComponent {
-
-    private final GridLayout main = new GridLayout(2, 3);
-
-    public TestForGridLayoutChildComponentRendering() {
-
-        setCompositionRoot(main);
-        createNewView();
-    }
-
-    public void createNewView() {
-        main.removeAllComponents();
-        main.addComponent(new Label("SDFGFHFHGJGFDSDSSSGFDD"));
-
-        final Link l = new Link();
-        l.setCaption("Siirry Vaadiniin");
-        l.setResource(new ExternalResource("http://www.vaadin.com/"));
-        l.setTargetHeight(200);
-        l.setTargetWidth(500);
-        l.setTargetBorder(Link.TARGET_BORDER_MINIMAL);
-        main.addComponent(l);
-
-        final Select se = new Select("Tästä valitaan");
-        se.setCaption("Whattaa select");
-        se.addItem("valinta1");
-        se.addItem("Valinta 2");
-
-        main.addComponent(se, 0, 1, 1, 1);
-
-        Button b = new Button("refresh view", this, "createNewView");
-        main.addComponent(b);
-
-        b = new Button("reorder view", this, "randomReorder");
-        main.addComponent(b);
-
-        b = new Button("remove randomly one component", this,
-                "removeRandomComponent");
-        main.addComponent(b);
-
-    }
-
-    public void randomReorder() {
-        final Iterator<Component> it = main.getComponentIterator();
-        final ArrayList<Component> components = new ArrayList<Component>();
-        while (it.hasNext()) {
-            components.add(it.next());
-        }
-
-        main.removeAllComponents();
-
-        final int size = components.size();
-        final int colspanIndex = ((int) (Math.random() * size) / 2) * 2 + 2;
-
-        for (int i = components.size(); i > 0; i--) {
-            final int index = (int) (Math.random() * i);
-            if (i == colspanIndex) {
-                main.addComponent(components.get(index), 0, (size - i) / 2, 1,
-                        (size - i) / 2);
-            } else {
-                main.addComponent(components.get(index));
-            }
-            components.remove(index);
-        }
-    }
-
-    public void removeRandomComponent() {
-        final Iterator<Component> it = main.getComponentIterator();
-        final ArrayList<Component> components = new ArrayList<Component>();
-        while (it.hasNext()) {
-            components.add(it.next());
-        }
-        final int size = components.size();
-        final int index = (int) (Math.random() * size);
-        main.removeComponent(components.get(index));
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestForMultipleStyleNames.java b/tests/src/com/vaadin/tests/TestForMultipleStyleNames.java
deleted file mode 100644
index 7bad629913..0000000000
--- a/tests/src/com/vaadin/tests/TestForMultipleStyleNames.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TwinColSelect;
-import com.vaadin.ui.VerticalLayout;
-
-/**
- * TODO: Note you need to add Theme under WebContent/VAADIN/Themes/mytheme in
- * order to see actual visible results on the browser. Currently changes are
- * visible only by inspecting DOM.
- * 
- * @author IT Mill Ltd.
- */
-public class TestForMultipleStyleNames extends CustomComponent implements
-        ValueChangeListener {
-
-    private final VerticalLayout main = new VerticalLayout();
-
-    private Label l;
-
-    private final TwinColSelect s = new TwinColSelect();
-
-    private ArrayList<String> styleNames2;
-
-    public TestForMultipleStyleNames() {
-        setCompositionRoot(main);
-        createNewView();
-    }
-
-    public void createNewView() {
-        main.removeAllComponents();
-        main.addComponent(new Label(
-                "TK5 supports multiple stylenames for components."));
-        main.addComponent(new Label("Note you need to add Theme under"
-                + " WebContent/VAADIN/Themes/mytheme"
-                + " in order to see actual visible results"
-                + " on the browser. Currently changes are"
-                + " visible only by inspecting DOM."));
-
-        styleNames2 = new ArrayList<String>();
-
-        styleNames2.add("red");
-        styleNames2.add("bold");
-        styleNames2.add("italic");
-
-        s.setContainerDataSource(new IndexedContainer(styleNames2));
-        s.addListener(this);
-        s.setImmediate(true);
-        main.addComponent(s);
-
-        l = new Label("Test labele");
-        main.addComponent(l);
-
-    }
-
-    public void valueChange(ValueChangeEvent event) {
-
-        final String currentStyle = l.getStyleName();
-        final String[] tmp = currentStyle.split(" ");
-        final ArrayList<String> curStyles = new ArrayList<String>();
-        for (int i = 0; i < tmp.length; i++) {
-            if (tmp[i] != "") {
-                curStyles.add(tmp[i]);
-            }
-        }
-
-        final Collection<?> styles = (Collection<?>) s.getValue();
-
-        for (final Iterator<?> iterator = styles.iterator(); iterator.hasNext();) {
-            final String styleName = (String) iterator.next();
-            if (curStyles.contains(styleName)) {
-                // already added
-                curStyles.remove(styleName);
-            } else {
-                l.addStyleName(styleName);
-            }
-        }
-        for (final Iterator<String> iterator2 = curStyles.iterator(); iterator2
-                .hasNext();) {
-            final String object = iterator2.next();
-            l.removeStyleName(object);
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestForNativeWindowing.java b/tests/src/com/vaadin/tests/TestForNativeWindowing.java
deleted file mode 100644
index 38fbb42aa2..0000000000
--- a/tests/src/com/vaadin/tests/TestForNativeWindowing.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class TestForNativeWindowing extends Application {
-
-    Window main = new Window("Windowing test");
-
-    @Override
-    public void init() {
-
-        setMainWindow(main);
-
-        main.addComponent(new Button("Add new subwindow",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        final Window w = new Window("sw "
-                                + System.currentTimeMillis());
-                        main.addWindow(w);
-                        w.setPositionX(100);
-                        w.setPositionY(100);
-                        w.setWidth("200px");
-                        w.setHeight("200px");
-
-                        w.setWidth("100px");
-                        w.setHeight("400px");
-
-                        final Button closebutton = new Button("Close "
-                                + w.getCaption(), new Button.ClickListener() {
-                            public void buttonClick(ClickEvent event) {
-                                main.removeWindow(w);
-                            }
-
-                        });
-                        w.addComponent(closebutton);
-
-                        w.addComponent(new Label(
-                                "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>"
-                                        + "<p>Lorem ipsum dolor sit amet.</p>",
-                                Label.CONTENT_XHTML));
-
-                    }
-                }));
-
-        main.addComponent(new Button(
-                "Open a currently uncreated application level window",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        try {
-                            main.open(
-                                    new com.vaadin.terminal.ExternalResource(
-                                            new URL(
-                                                    getURL(),
-                                                    "mainwin-"
-                                                            + System.currentTimeMillis()
-                                                            + "/")), null);
-                        } catch (final MalformedURLException e) {
-                        }
-                    }
-                }));
-
-        main.addComponent(new Button(
-                "Commit (saves window state: size, place, scrollpos)"));
-    }
-
-    @Override
-    public Window getWindow(String name) {
-
-        final Window w = super.getWindow(name);
-        if (w != null) {
-            return w;
-        }
-
-        if (name != null && name.startsWith("mainwin-")) {
-            final String postfix = name.substring("mainwin-".length());
-            final Window ww = new Window("Window: " + postfix);
-            ww.setName(name);
-            ww.addComponent(new Label(
-                    "This is a application-level window opened with name: "
-                            + name));
-            ww.addComponent(new Button("Click me", new Button.ClickListener() {
-                int state = 0;
-
-                public void buttonClick(ClickEvent event) {
-                    ww.addComponent(new Label("Button clicked " + (++state)
-                            + " times"));
-                }
-            }));
-            addWindow(ww);
-            return ww;
-        }
-
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestForPreconfiguredComponents.java b/tests/src/com/vaadin/tests/TestForPreconfiguredComponents.java
deleted file mode 100644
index e009489683..0000000000
--- a/tests/src/com/vaadin/tests/TestForPreconfiguredComponents.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.event.Action;
-import com.vaadin.event.Action.Handler;
-import com.vaadin.ui.AbstractSelect;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.OptionGroup;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.TwinColSelect;
-import com.vaadin.ui.VerticalLayout;
-
-/**
- * @author IT Mill Ltd.
- */
-public class TestForPreconfiguredComponents extends CustomComponent implements
-        Handler {
-
-    private static final String[] firstnames = new String[] { "John", "Mary",
-            "Joe", "Sarah", "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" };
-
-    private static final String[] lastnames = new String[] { "Torvalds",
-            "Smith", "Jones", "Beck", "Sheridan", "Picard", "Hill", "Fielding",
-            "Einstein" };
-
-    private final VerticalLayout main = new VerticalLayout();
-
-    private final Action[] actions = new Action[] { new Action("edit"),
-            new Action("delete") };
-
-    private Panel al;
-
-    private Tree contextTree;
-
-    public TestForPreconfiguredComponents() {
-
-        setCompositionRoot(main);
-        createNewView();
-    }
-
-    public void createNewView() {
-        main.removeAllComponents();
-        main.addComponent(new Label(
-                "In Toolkit 5 we introduce new components. Previously we"
-                        + " usually used setStyle or some other methods on possibly "
-                        + "multiple steps to configure component for ones needs. These new "
-                        + "server side components are mostly just classes that in constructor "
-                        + "set base class to state that programmer wants."));
-
-        main.addComponent(new Button("commit"));
-
-        Panel test = createTestBench(new CheckBox());
-        test.setCaption("CheckBox (configured from button)");
-        main.addComponent(test);
-
-        AbstractSelect s = new TwinColSelect();
-        fillSelect(s, 20);
-        test = createTestBench(s);
-        test.setCaption("TwinColSelect (configured from select)");
-        main.addComponent(test);
-
-        s = new NativeSelect();
-        fillSelect(s, 20);
-        test = createTestBench(s);
-        test.setCaption("Native (configured from select)");
-        main.addComponent(test);
-
-        s = new OptionGroup();
-        fillSelect(s, 20);
-        test = createTestBench(s);
-        test.setCaption("OptionGroup (configured from select)");
-        main.addComponent(test);
-
-        s = new OptionGroup();
-        fillSelect(s, 20);
-        s.setMultiSelect(true);
-        test = createTestBench(s);
-        test.setCaption("OptionGroup + multiselect manually (configured from select)");
-        main.addComponent(test);
-
-        final Button b = new Button("refresh view", this, "createNewView");
-        main.addComponent(b);
-
-    }
-
-    public static void fillSelect(AbstractSelect s, int items) {
-        for (int i = 0; i < items; i++) {
-            final String name = firstnames[(int) (Math.random() * (firstnames.length - 1))]
-                    + " "
-                    + lastnames[(int) (Math.random() * (lastnames.length - 1))];
-            s.addItem(name);
-        }
-    }
-
-    public Tree createTestTree() {
-        Tree t = new Tree("Tree");
-        final String[] names = new String[100];
-        for (int i = 0; i < names.length; i++) {
-            names[i] = firstnames[(int) (Math.random() * (firstnames.length - 1))]
-                    + " "
-                    + lastnames[(int) (Math.random() * (lastnames.length - 1))];
-        }
-
-        // Create tree
-        t = new Tree("Organization Structure");
-        for (int i = 0; i < 100; i++) {
-            t.addItem(names[i]);
-            final String parent = names[(int) (Math.random() * (names.length - 1))];
-            if (t.containsId(parent)) {
-                t.setParent(names[i], parent);
-            }
-        }
-
-        // Forbid childless people to have children (makes them leaves)
-        for (int i = 0; i < 100; i++) {
-            if (!t.hasChildren(names[i])) {
-                t.setChildrenAllowed(names[i], false);
-            }
-        }
-        return t;
-    }
-
-    public Panel createTestBench(Component t) {
-        final Panel ol = new Panel();
-        ol.setContent(new HorizontalLayout());
-
-        ol.addComponent(t);
-
-        final HorizontalLayout ol2 = new HorizontalLayout();
-        final Panel status = new Panel("Events");
-        final Button clear = new Button("clear event log");
-        clear.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                status.removeAllComponents();
-                status.addComponent(ol2);
-            }
-        });
-        ol2.addComponent(clear);
-        final Button commit = new Button("commit changes");
-        ol2.addComponent(commit);
-        status.addComponent(ol2);
-
-        status.setHeight("300px");
-        status.setWidth("400px");
-
-        ol.addComponent(status);
-
-        t.addListener(new Listener() {
-            public void componentEvent(Event event) {
-                status.addComponent(new Label(event.getClass().getName()));
-                status.addComponent(new Label("selected: "
-                        + event.getSource().toString()));
-            }
-        });
-
-        return ol;
-    }
-
-    public Action[] getActions(Object target, Object sender) {
-        return actions;
-    }
-
-    public void handleAction(Action action, Object sender, Object target) {
-        if (action == actions[1]) {
-            al.addComponent(new Label("Delete selected on " + target));
-            contextTree.removeItem(target);
-
-        } else {
-            al.addComponent(new Label("Edit selected on " + target));
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/TestForRichTextEditor.java b/tests/src/com/vaadin/tests/TestForRichTextEditor.java
deleted file mode 100644
index 50b7be91ef..0000000000
--- a/tests/src/com/vaadin/tests/TestForRichTextEditor.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.RichTextArea;
-import com.vaadin.ui.VerticalLayout;
-
-/**
- * 
- * @author IT Mill Ltd.
- */
-public class TestForRichTextEditor extends CustomComponent implements
-        ValueChangeListener {
-
-    private final VerticalLayout main = new VerticalLayout();
-
-    private Label l;
-
-    private RichTextArea rte;
-
-    public TestForRichTextEditor() {
-
-        setCompositionRoot(main);
-        createNewView();
-    }
-
-    public void createNewView() {
-        main.removeAllComponents();
-        main.addComponent(new Label(
-                "RTE uses google richtextArea and their examples toolbar."));
-
-        rte = new RichTextArea();
-        rte.addListener(this);
-
-        main.addComponent(rte);
-
-        main.addComponent(new Button("commit content to label below"));
-
-        l = new Label("", Label.CONTENT_XHTML);
-        main.addComponent(l);
-
-        CheckBox b = new CheckBox("enabled");
-        b.setImmediate(true);
-        b.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                rte.setEnabled(!rte.isEnabled());
-            }
-        });
-        main.addComponent(b);
-
-    }
-
-    public void valueChange(ValueChangeEvent event) {
-        l.setValue(rte.getValue());
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestForStyledUpload.java b/tests/src/com/vaadin/tests/TestForStyledUpload.java
deleted file mode 100644
index 6a6ae130e5..0000000000
--- a/tests/src/com/vaadin/tests/TestForStyledUpload.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.management.ManagementFactory;
-import java.lang.management.MemoryMXBean;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.StreamResource;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.ProgressIndicator;
-import com.vaadin.ui.Upload;
-import com.vaadin.ui.Upload.FailedEvent;
-import com.vaadin.ui.Upload.FailedListener;
-import com.vaadin.ui.Upload.FinishedEvent;
-import com.vaadin.ui.Upload.FinishedListener;
-import com.vaadin.ui.Upload.StartedEvent;
-import com.vaadin.ui.Upload.StartedListener;
-import com.vaadin.ui.Upload.SucceededEvent;
-import com.vaadin.ui.Upload.SucceededListener;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class TestForStyledUpload extends Application implements
-        Upload.FinishedListener, FailedListener, SucceededListener,
-        StartedListener {
-
-    Layout main = new VerticalLayout();
-
-    TmpFileBuffer buffer = new TmpFileBuffer();
-
-    Panel status = new Panel("Uploaded file:");
-
-    private final Upload up;
-
-    private final Label l;
-
-    private final Label transferred = new Label("");
-
-    private final ProgressIndicator pi = new ProgressIndicator();
-
-    private final Label memoryStatus;
-
-    public TestForStyledUpload() {
-        main.addComponent(new Label(
-                "Clicking on button b updates information about upload components status or same with garbage collector."));
-
-        up = new Upload(null, buffer);
-        up.setButtonCaption("Select file");
-        up.setImmediate(true);
-        up.addListener((FinishedListener) this);
-        up.addListener((FailedListener) this);
-        up.addListener((SucceededListener) this);
-        up.addListener((StartedListener) this);
-
-        up.addListener(new Upload.ProgressListener() {
-
-            public void updateProgress(long readBytes, long contentLenght) {
-                pi.setValue(new Float(readBytes / (float) contentLenght));
-
-                refreshMemUsage();
-
-                transferred.setValue("Transferred " + readBytes + " of "
-                        + contentLenght);
-            }
-
-        });
-
-        final Button b = new Button("Update status", this, "readState");
-
-        final Button c = new Button("Update status with gc", this, "gc");
-
-        main.addComponent(up);
-        l = new Label("Idle");
-        main.addComponent(l);
-
-        pi.setVisible(false);
-        pi.setPollingInterval(300);
-        main.addComponent(pi);
-        main.addComponent(transferred);
-
-        memoryStatus = new Label();
-        main.addComponent(memoryStatus);
-
-        status.setVisible(false);
-        main.addComponent(status);
-
-        Button cancel = new Button("Cancel current upload");
-        cancel.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                buffer.cancel();
-            }
-        });
-
-        main.addComponent(cancel);
-
-        final Button restart = new Button("Restart demo application");
-        restart.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                TestForStyledUpload.this.close();
-            }
-        });
-        main.addComponent(restart);
-        main.addComponent(b);
-        main.addComponent(c);
-
-    }
-
-    public void gc() {
-        Runtime.getRuntime().gc();
-        readState();
-    }
-
-    public void readState() {
-        final StringBuffer sb = new StringBuffer();
-
-        if (up.isUploading()) {
-            sb.append("Uploading...");
-            sb.append(up.getBytesRead());
-            sb.append("/");
-            sb.append(up.getUploadSize());
-            sb.append(" ");
-            sb.append(Math.round(100 * up.getBytesRead()
-                    / (double) up.getUploadSize()));
-            sb.append("%");
-        } else {
-            sb.append("Idle");
-        }
-        l.setValue(sb.toString());
-        refreshMemUsage();
-    }
-
-    public void uploadFinished(FinishedEvent event) {
-        status.removeAllComponents();
-        final InputStream stream = buffer.getStream();
-        if (stream == null) {
-            status.addComponent(new Label(
-                    "Upload finished, but output buffer is null!!"));
-        } else {
-            status.addComponent(new Label(
-                    "<b>Name:</b> " + event.getFilename(), Label.CONTENT_XHTML));
-            status.addComponent(new Label("<b>Mimetype:</b> "
-                    + event.getMIMEType(), Label.CONTENT_XHTML));
-            status.addComponent(new Label("<b>Size:</b> " + event.getLength()
-                    + " bytes.", Label.CONTENT_XHTML));
-
-            status.addComponent(new Link("Download " + buffer.getFileName(),
-                    new StreamResource(buffer, buffer.getFileName(), this)));
-
-            status.setVisible(true);
-        }
-    }
-
-    public interface Buffer extends StreamResource.StreamSource,
-            Upload.Receiver {
-
-        String getFileName();
-    }
-
-    public class TmpFileBuffer implements Buffer {
-        String mimeType;
-
-        String fileName;
-
-        private File file;
-
-        private FileInputStream stream;
-
-        public TmpFileBuffer() {
-            final String tempFileName = "upload_tmpfile_"
-                    + System.currentTimeMillis();
-            try {
-                file = File.createTempFile(tempFileName, null);
-            } catch (final IOException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-
-        }
-
-        public void cancel() {
-            up.interruptUpload();
-        }
-
-        public InputStream getStream() {
-            if (file == null) {
-                return null;
-            }
-            try {
-                stream = new FileInputStream(file);
-                return stream;
-            } catch (final FileNotFoundException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-            return null;
-        }
-
-        /**
-         * @see com.vaadin.ui.Upload.Receiver#receiveUpload(String, String)
-         */
-        public OutputStream receiveUpload(String filename, String MIMEType) {
-            fileName = filename;
-            mimeType = MIMEType;
-            try {
-                return new FileOutputStream(file);
-            } catch (final FileNotFoundException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-            return null;
-        }
-
-        /**
-         * Returns the fileName.
-         * 
-         * @return String
-         */
-        public String getFileName() {
-            return fileName;
-        }
-
-        /**
-         * Returns the mimeType.
-         * 
-         * @return String
-         */
-        public String getMimeType() {
-            return mimeType;
-        }
-
-    }
-
-    public void uploadFailed(FailedEvent event) {
-        pi.setVisible(false);
-        l.setValue("Upload was interrupted");
-    }
-
-    public void uploadSucceeded(SucceededEvent event) {
-        pi.setVisible(false);
-        l.setValue("Finished upload, idle");
-        System.out.println(event);
-    }
-
-    private void refreshMemUsage() {
-        // memoryStatus.setValue("Not available in Java 1.4");
-        StringBuffer mem = new StringBuffer();
-        MemoryMXBean mmBean = ManagementFactory.getMemoryMXBean();
-        mem.append("Heap (M):");
-        mem.append(mmBean.getHeapMemoryUsage().getUsed() / 1048576);
-        mem.append(" | Non-Heap (M):");
-        mem.append(mmBean.getNonHeapMemoryUsage().getUsed() / 1048576);
-        memoryStatus.setValue(mem.toString());
-
-    }
-
-    public void uploadStarted(StartedEvent event) {
-        pi.setVisible(true);
-        l.setValue("Started uploading file " + event.getFilename());
-    }
-
-    @Override
-    public void init() {
-        Window w = new Window();
-        w.setTheme("runo");
-        w.addComponent(main);
-        setMainWindow(w);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestForTabSheet.java b/tests/src/com/vaadin/tests/TestForTabSheet.java
deleted file mode 100644
index 938bf43115..0000000000
--- a/tests/src/com/vaadin/tests/TestForTabSheet.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.vaadin.tests;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
-
-public class TestForTabSheet extends CustomComponent implements
-        Button.ClickListener, TabSheet.SelectedTabChangeListener {
-    TabSheet tabsheet = new TabSheet();
-    Button tab1_root = new Button("Push this button");
-    Label tab2_root = new Label("Contents of Second Tab");
-    Label tab3_root = new Label("Contents of Third Tab");
-
-    TestForTabSheet() {
-        setCompositionRoot(tabsheet);
-
-        tabsheet.addListener(this);
-
-        /* Listen for button click events. */
-        tab1_root.addListener(this);
-        tabsheet.addTab(tab1_root, "First Tab", null);
-
-        /* A tab that is initially disabled. */
-        tab2_root.setEnabled(false);
-        tabsheet.addTab(tab2_root, "Second Tab", null);
-
-        /* A tab that is initially disabled. */
-        tab3_root.setEnabled(false);
-        tabsheet.addTab(tab3_root, "Third tab", null);
-    }
-
-    public void buttonClick(ClickEvent event) {
-        System.out.println("tab2=" + tab2_root.isEnabled() + " tab3="
-                + tab3_root.isEnabled());
-        tab2_root.setEnabled(true);
-        tab3_root.setEnabled(true);
-    }
-
-    public void selectedTabChange(SelectedTabChangeEvent event) {
-        /*
-         * Cast to a TabSheet. This isn't really necessary in this example, as
-         * we have only one TabSheet component, but would be useful if there
-         * were multiple TabSheets.
-         */
-        TabSheet source = (TabSheet) event.getSource();
-        if (source == tabsheet) {
-            /* If the first tab was selected. */
-            if (source.getSelectedTab() == tab1_root) {
-                System.out.println("foo");
-                tab2_root.setEnabled(false);
-                tab3_root.setEnabled(false);
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/TestForTablesInitialColumnWidthLogicRendering.java b/tests/src/com/vaadin/tests/TestForTablesInitialColumnWidthLogicRendering.java
deleted file mode 100644
index d849ab37a0..0000000000
--- a/tests/src/com/vaadin/tests/TestForTablesInitialColumnWidthLogicRendering.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.util.Iterator;
-import java.util.Vector;
-
-import com.vaadin.terminal.UserError;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-
-/**
- * 
- * This Component contains some simple test to see that component updates its
- * contents propertly.
- * 
- * @author IT Mill Ltd.
- */
-public class TestForTablesInitialColumnWidthLogicRendering extends
-        CustomComponent {
-
-    private final VerticalLayout main = new VerticalLayout();
-
-    public TestForTablesInitialColumnWidthLogicRendering() {
-
-        setCompositionRoot(main);
-        createNewView();
-    }
-
-    public void createNewView() {
-        main.removeAllComponents();
-        main.addComponent(new Label(
-                "Below are same tables that all should render somewhat nice. Also when testing, you might want to try resizing window."));
-
-        Table t;
-
-        Layout lo = new VerticalLayout();
-        lo.setWidth("600px");
-        lo.setHeight("250px");
-
-        t = getTestTable(4, 50);
-        t.setSizeFull();
-        lo.setCaption("Fullsize table insize 400x250px layout");
-        lo.addComponent(t);
-        main.addComponent(lo);
-
-        // t = new Table("Empty table");
-        // main.addComponent(t);
-
-        t = getTestTable(5, 0);
-        t.setCaption("Table with only headers");
-        // main.addComponent(t);
-
-        t = getTestTable(5, 200);
-        t.setCaption("Table with  some cols and lot of rows");
-        main.addComponent(t);
-
-        t = getTestTable(5, 5);
-        t.setCaption("Table with  some cols and rows rows, some col widths fixed");
-
-        Iterator<?> it = t.getContainerPropertyIds().iterator();
-        it.next();
-        it.next();
-        t.setColumnWidth(it.next(), 30);
-        t.setColumnWidth(it.next(), 30);
-        t.setWidth("700px");
-        main.addComponent(t);
-
-        t = getTestTable(12, 4);
-        t.setCaption("Table with  some rows and lot of columns");
-        main.addComponent(t);
-
-        t = getTestTable(3, 40);
-        t.setCaption("Table with some columns and wide explicit width. (Ought to widen columns to use all space)");
-        t.setWidth("1000px");
-        main.addComponent(t);
-
-        t = getTestTable(12, 4);
-        t.setCaption("Table with  some rows and lot of columns, width == 100%");
-        t.setWidth(100, Table.UNITS_PERCENTAGE);
-        main.addComponent(t);
-
-        t = getTestTable(12, 100);
-        t.setCaption("Table with  lot of rows and lot of columns, width == 50%");
-        t.setWidth(50, Table.UNITS_PERCENTAGE);
-        main.addComponent(t);
-
-        t = getTestTable(5, 100);
-        t.setCaption("Table with 40 rows");
-        // main.addComponent(t);
-
-        t = getTestTable(4, 4);
-        t.setCaption("Table with some rows and width = 200px");
-
-        t.setWidth("200px");
-        main.addComponent(t);
-
-        final Button b = new Button("refresh view", this, "createNewView");
-        main.addComponent(b);
-
-    }
-
-    public static Table getTestTable(int cols, int rows) {
-        final Table t = new Table();
-        t.setColumnCollapsingAllowed(true);
-        for (int i = 0; i < cols; i++) {
-            t.addContainerProperty(testString[i], String.class, "");
-        }
-        t.addContainerProperty("button", Button.class, null);
-        for (int i = 0; i < rows; i++) {
-            final Vector<Object> content = new Vector<Object>();
-            for (int j = 0; j < cols; j++) {
-                content.add(rndString());
-            }
-            Button button = new Button("b", new Button.ClickListener() {
-
-                public void buttonClick(ClickEvent event) {
-                    System.out.println("b click");
-
-                }
-            });
-            button.setDescription("Yep yep");
-            button.setComponentError(new UserError("Error"));
-            content.add(button);
-            t.addItem(content.toArray(), "" + i);
-        }
-        return t;
-    }
-
-    static String[] testString = new String[] { "Jacob", "Michael", "Joshua",
-            "Matthew", "Ethan", "Andrew", "Daniel", "Anthony", "Christopher",
-            "Joseph", "William", "Alexander", "Ryan", "David", "Nicholas",
-            "Tyler", "James", "John", "Jonathan", "Nathan", "Samuel",
-            "Christian", "Noah", "Dylan", "Benjamin", "Logan", "Brandon",
-            "Gabriel", "Zachary", "Jose", "Elijah", "Angel", "Kevin", "Jack",
-            "Caleb", "Justin", "Austin", "Evan", "Robert", "Thomas", "Luke",
-            "Mason", "Aidan", "Jackson", "Isaiah", "Jordan", "Gavin", "Connor",
-            "Aiden", "Isaac", "Jason", "Cameron", "Hunter", "Jayden", "Juan",
-            "Charles", "Aaron", "Lucas", "Luis", "Owen", "Landon", "Diego",
-            "Brian", "Adam", "Adrian", "Kyle", "Eric", "Ian", "Nathaniel",
-            "Carlos", "Alex", "Bryan", "Jesus", "Julian", "Sean", "Carter",
-            "Hayden", "Jeremiah", "Cole", "Brayden", "Wyatt", "Chase",
-            "Steven", "Timothy", "Dominic", "Sebastian", "Xavier", "Jaden",
-            "Jesse", "Devin", "Seth", "Antonio", "Richard", "Miguel", "Colin",
-            "Cody", "Alejandro", "Caden", "Blake", "Carson" };
-
-    public static String rndString() {
-        return testString[(int) (Math.random() * testString.length)];
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestForTrees.java b/tests/src/com/vaadin/tests/TestForTrees.java
deleted file mode 100644
index 32139511e1..0000000000
--- a/tests/src/com/vaadin/tests/TestForTrees.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.event.Action;
-import com.vaadin.event.Action.Handler;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.VerticalLayout;
-
-/**
- * Some test cases for trees. Events panel logs events that happen server side.
- * 
- * @author IT Mill Ltd.
- */
-public class TestForTrees extends CustomComponent implements Handler {
-
-    private static final String[] firstnames = new String[] { "John", "Mary",
-            "Joe", "Sarah", "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" };
-
-    private static final String[] lastnames = new String[] { "Torvalds",
-            "Smith", "Jones", "Beck", "Sheridan", "Picard", "Hill", "Fielding",
-            "Einstein" };
-
-    private final VerticalLayout main = new VerticalLayout();
-
-    private final Action[] actions = new Action[] { new Action("edit"),
-            new Action("delete") };
-
-    private Panel al;
-
-    private Tree contextTree;
-
-    public TestForTrees() {
-
-        setCompositionRoot(main);
-        createNewView();
-    }
-
-    public void createNewView() {
-        main.removeAllComponents();
-        main.addComponent(new Label(
-                "Some test cases for trees. Events panel logs events that happen server side."));
-
-        main.addComponent(new Button("commit"));
-
-        Tree t;
-
-        t = createTestTree();
-        t.setCaption("Default settings");
-        main.addComponent(createTestBench(t));
-
-        t = createTestTree();
-        t.setCaption("Multiselect settings");
-        t.setMultiSelect(true);
-        main.addComponent(createTestBench(t));
-
-        t = createTestTree();
-        t.setCaption("Multiselect and immediate");
-        t.setImmediate(true);
-        t.setMultiSelect(true);
-        main.addComponent(createTestBench(t));
-
-        t = createTestTree();
-        t.setCaption("immediate");
-        t.setImmediate(true);
-        main.addComponent(createTestBench(t));
-
-        t = createTestTree();
-        t.setCaption("with actions");
-        t.setImmediate(true);
-        t.addActionHandler(this);
-        final AbstractOrderedLayout ol = (AbstractOrderedLayout) createTestBench(t);
-        al = new Panel("action log");
-        ol.addComponent(al);
-        main.addComponent(ol);
-        contextTree = t;
-
-        final Button b = new Button("refresh view", this, "createNewView");
-        main.addComponent(b);
-
-    }
-
-    public Tree createTestTree() {
-        Tree t = new Tree("Tree");
-        final String[] names = new String[100];
-        for (int i = 0; i < names.length; i++) {
-            names[i] = firstnames[(int) (Math.random() * (firstnames.length - 1))]
-                    + " "
-                    + lastnames[(int) (Math.random() * (lastnames.length - 1))];
-        }
-
-        // Create tree
-        t = new Tree("Organization Structure");
-        for (int i = 0; i < 100; i++) {
-            t.addItem(names[i]);
-            final String parent = names[(int) (Math.random() * (names.length - 1))];
-            if (t.containsId(parent)) {
-                t.setParent(names[i], parent);
-            }
-        }
-
-        // Forbid childless people to have children (makes them leaves)
-        for (int i = 0; i < 100; i++) {
-            if (!t.hasChildren(names[i])) {
-                t.setChildrenAllowed(names[i], false);
-            }
-        }
-        return t;
-    }
-
-    public Component createTestBench(Tree t) {
-        final HorizontalLayout ol = new HorizontalLayout();
-
-        ol.addComponent(t);
-
-        final Panel status = new Panel("Events");
-        final Button clear = new Button("c");
-        clear.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                status.removeAllComponents();
-                status.addComponent(clear);
-            }
-        });
-        status.addComponent(clear);
-
-        status.setHeight("300px");
-        status.setWidth("400px");
-
-        ol.addComponent(status);
-
-        t.addListener(new Listener() {
-            public void componentEvent(Event event) {
-                status.addComponent(new Label(event.getClass().getName()));
-                status.addComponent(new Label("selected: "
-                        + event.getSource().toString()));
-            }
-        });
-
-        return ol;
-    }
-
-    public Action[] getActions(Object target, Object sender) {
-        return actions;
-    }
-
-    public void handleAction(Action action, Object sender, Object target) {
-        if (action == actions[1]) {
-            al.addComponent(new Label("Delete selected on " + target));
-            contextTree.removeItem(target);
-
-        } else {
-            al.addComponent(new Label("Edit selected on " + target));
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/TestForUpload.java b/tests/src/com/vaadin/tests/TestForUpload.java
deleted file mode 100644
index 3fed6b233e..0000000000
--- a/tests/src/com/vaadin/tests/TestForUpload.java
+++ /dev/null
@@ -1,433 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.management.ManagementFactory;
-import java.lang.management.MemoryMXBean;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.terminal.StreamResource;
-import com.vaadin.ui.AbstractField;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.ProgressIndicator;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Upload;
-import com.vaadin.ui.Upload.FinishedEvent;
-import com.vaadin.ui.Upload.StartedEvent;
-import com.vaadin.ui.Upload.StartedListener;
-import com.vaadin.ui.VerticalLayout;
-
-public class TestForUpload extends CustomComponent implements
-        Upload.ProgressListener {
-
-    private static final long serialVersionUID = -3400119871764256575L;
-
-    Layout main = new VerticalLayout();
-
-    Buffer buffer = new MemoryBuffer();
-
-    Panel status = new Panel("Uploaded file:");
-
-    private final Upload up;
-
-    private final Label l;
-
-    private final ProgressIndicator pi = new ProgressIndicator();
-    private final ProgressIndicator pi2 = new ProgressIndicator();
-
-    private final Label memoryStatus;
-
-    private final Select uploadBufferSelector;
-
-    private TextField textField;
-
-    private Label textFieldValue;
-
-    private CheckBox beSluggish = new CheckBox("Be sluggish");
-
-    private CheckBox throwExecption = new CheckBox(
-            "Throw exception in receiver");
-
-    private Button interrupt = new Button("Interrupt upload");
-
-    public TestForUpload() {
-        setCompositionRoot(main);
-        main.addComponent(new Label(
-                "This is a simple test for upload application. "
-                        + "Upload should work with big files and concurrent "
-                        + "requests should not be blocked. Button 'b' reads "
-                        + "current state into label below it. Memory receiver "
-                        + "streams upload contents into memory. You may track"
-                        + "consumption."
-                        + "tempfile receiver writes upload to file and "
-                        + "should have low memory consumption."));
-
-        main.addComponent(new Label(
-                "Clicking on button b updates information about upload components status or same with garbage collector."));
-
-        textField = new TextField("Test field");
-        textFieldValue = new Label();
-        main.addComponent(textField);
-        main.addComponent(textFieldValue);
-
-        up = new Upload("Upload", buffer);
-        up.setImmediate(true);
-        up.addListener(new Listener() {
-            private static final long serialVersionUID = -8319074730512324303L;
-
-            public void componentEvent(Event event) {
-                // print out all events fired by upload for debug purposes
-                System.out.println("Upload fired event | " + event);
-            }
-        });
-
-        up.addListener(new StartedListener() {
-            private static final long serialVersionUID = 5508883803861085154L;
-
-            public void uploadStarted(StartedEvent event) {
-                pi.setVisible(true);
-                pi2.setVisible(true);
-                l.setValue("Started uploading file " + event.getFilename());
-                textFieldValue
-                        .setValue(" TestFields value at the upload start is:"
-                                + textField.getValue());
-            }
-        });
-
-        up.addListener(new Upload.FinishedListener() {
-            private static final long serialVersionUID = -3773034195991947371L;
-
-            public void uploadFinished(FinishedEvent event) {
-                pi.setVisible(false);
-                pi2.setVisible(false);
-                if (event instanceof Upload.FailedEvent) {
-                    Exception reason = ((Upload.FailedEvent) event).getReason();
-                    l.setValue("Finished with failure ( " + reason
-                            + "  ), idle");
-                } else if (event instanceof Upload.SucceededEvent) {
-                    l.setValue("Finished with succes, idle");
-                } else {
-                    l.setValue("Finished with unknow event");
-                }
-
-                status.removeAllComponents();
-                final InputStream stream = buffer.getStream();
-                if (stream == null) {
-                    status.addComponent(new Label(
-                            "Upload finished, but output buffer is null"));
-                } else {
-                    status.addComponent(new Label("<b>Name:</b> "
-                            + event.getFilename(), Label.CONTENT_XHTML));
-                    status.addComponent(new Label("<b>Mimetype:</b> "
-                            + event.getMIMEType(), Label.CONTENT_XHTML));
-                    status.addComponent(new Label("<b>Size:</b> "
-                            + event.getLength() + " bytes.",
-                            Label.CONTENT_XHTML));
-
-                    status.addComponent(new Link("Download "
-                            + buffer.getFileName(), new StreamResource(buffer,
-                            buffer.getFileName(), getApplication())));
-
-                    status.setVisible(true);
-                }
-
-                setBuffer();
-            }
-        });
-
-        up.addListener(new Upload.ProgressListener() {
-
-            public void updateProgress(long readBytes, long contentLenght) {
-                pi2.setValue(new Float(readBytes / (float) contentLenght));
-
-                refreshMemUsage();
-            }
-
-        });
-
-        final Button b = new Button("Reed state from upload", this, "readState");
-
-        final Button c = new Button("Force GC", this, "gc");
-
-        main.addComponent(b);
-        main.addComponent(c);
-        main.addComponent(beSluggish);
-        main.addComponent(throwExecption);
-        main.addComponent(interrupt);
-        interrupt.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                up.interruptUpload();
-            }
-        });
-
-        uploadBufferSelector = new Select("StreamVariable type");
-        uploadBufferSelector.setImmediate(true);
-        uploadBufferSelector.addItem("memory");
-        uploadBufferSelector.setValue("memory");
-        uploadBufferSelector.addItem("tempfile");
-        uploadBufferSelector
-                .addListener(new AbstractField.ValueChangeListener() {
-                    public void valueChange(ValueChangeEvent event) {
-                        setBuffer();
-                    }
-                });
-        main.addComponent(uploadBufferSelector);
-
-        main.addComponent(up);
-        l = new Label("Idle");
-        main.addComponent(l);
-
-        pi.setVisible(false);
-        pi.setPollingInterval(1000);
-        main.addComponent(pi);
-
-        pi2.setVisible(false);
-        pi2.setPollingInterval(1000);
-        main.addComponent(pi2);
-
-        memoryStatus = new Label();
-        main.addComponent(memoryStatus);
-
-        status.setVisible(false);
-        main.addComponent(status);
-
-        final Button restart = new Button("R");
-        restart.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                getApplication().close();
-            }
-        });
-        main.addComponent(restart);
-
-    }
-
-    private void setBuffer() {
-        final String id = (String) uploadBufferSelector.getValue();
-        if ("memory".equals(id)) {
-            buffer = new MemoryBuffer();
-        } else if ("tempfile".equals(id)) {
-            buffer = new TmpFileBuffer();
-        }
-        up.setReceiver(buffer);
-    }
-
-    public void gc() {
-        Runtime.getRuntime().gc();
-    }
-
-    public void readState() {
-        final StringBuffer sb = new StringBuffer();
-
-        if (up.isUploading()) {
-            sb.append("Uploading...");
-            sb.append(up.getBytesRead());
-            sb.append("/");
-            sb.append(up.getUploadSize());
-            sb.append(" ");
-            sb.append(Math.round(100 * up.getBytesRead()
-                    / (double) up.getUploadSize()));
-            sb.append("%");
-        } else {
-            sb.append("Idle");
-        }
-        l.setValue(sb.toString());
-        refreshMemUsage();
-    }
-
-    public interface Buffer extends StreamResource.StreamSource,
-            Upload.Receiver {
-
-        String getFileName();
-    }
-
-    public class MemoryBuffer implements Buffer {
-        ByteArrayOutputStream outputBuffer = null;
-
-        String mimeType;
-
-        String fileName;
-
-        public MemoryBuffer() {
-
-        }
-
-        public InputStream getStream() {
-            if (outputBuffer == null) {
-                return null;
-            }
-            return new ByteArrayInputStream(outputBuffer.toByteArray());
-        }
-
-        /**
-         * @see com.vaadin.ui.Upload.Receiver#receiveUpload(String, String)
-         */
-        public OutputStream receiveUpload(String filename, String MIMEType) {
-            fileName = filename;
-            mimeType = MIMEType;
-            outputBuffer = new ByteArrayOutputStream() {
-                @Override
-                public synchronized void write(byte[] b, int off, int len) {
-                    beSluggish();
-                    throwExecption();
-                    super.write(b, off, len);
-                }
-
-            };
-            return outputBuffer;
-        }
-
-        /**
-         * Returns the fileName.
-         * 
-         * @return String
-         */
-        public String getFileName() {
-            return fileName;
-        }
-
-        /**
-         * Returns the mimeType.
-         * 
-         * @return String
-         */
-        public String getMimeType() {
-            return mimeType;
-        }
-
-    }
-
-    public class TmpFileBuffer implements Buffer {
-        String mimeType;
-
-        String fileName;
-
-        private File file;
-
-        public TmpFileBuffer() {
-            final String tempFileName = "upload_tmpfile_"
-                    + System.currentTimeMillis();
-            try {
-                file = File.createTempFile(tempFileName, null);
-            } catch (final IOException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-
-        }
-
-        public InputStream getStream() {
-            if (file == null) {
-                return null;
-            }
-            try {
-                return new FileInputStream(file);
-            } catch (final FileNotFoundException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-            return null;
-        }
-
-        /**
-         * @see com.vaadin.ui.Upload.Receiver#receiveUpload(String, String)
-         */
-        public OutputStream receiveUpload(String filename, String MIMEType) {
-            fileName = filename;
-            mimeType = MIMEType;
-            try {
-                return new FileOutputStream(file) {
-
-                    @Override
-                    public void write(byte[] b, int off, int len)
-                            throws IOException {
-                        beSluggish();
-                        throwExecption();
-                        super.write(b, off, len);
-                    }
-
-                };
-            } catch (final FileNotFoundException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-            return null;
-        }
-
-        /**
-         * Returns the fileName.
-         * 
-         * @return String
-         */
-        public String getFileName() {
-            return fileName;
-        }
-
-        /**
-         * Returns the mimeType.
-         * 
-         * @return String
-         */
-        public String getMimeType() {
-            return mimeType;
-        }
-
-    }
-
-    public void updateProgress(long readBytes, long contentLenght) {
-        pi.setValue(new Float(readBytes / (float) contentLenght));
-
-        refreshMemUsage();
-    }
-
-    private void refreshMemUsage() {
-        memoryStatus.setValue("Not available in Java 1.4");
-
-        StringBuffer mem = new StringBuffer();
-        MemoryMXBean mmBean = ManagementFactory.getMemoryMXBean();
-        mem.append("Heap (M):");
-        mem.append(mmBean.getHeapMemoryUsage().getUsed() / 1048576);
-        mem.append(" | Non-Heap (M):");
-        mem.append(mmBean.getNonHeapMemoryUsage().getUsed() / 1048576);
-        memoryStatus.setValue(mem.toString());
-
-    }
-
-    private void beSluggish() {
-        if (beSluggish.booleanValue()) {
-            try {
-                Thread.sleep(1000);
-            } catch (InterruptedException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-        }
-    }
-
-    private void throwExecption() {
-        if (throwExecption.booleanValue()) {
-            throwExecption.setValue(false);
-            throw new RuntimeException("Test execption in receiver.");
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/TestForWindowOpen.java b/tests/src/com/vaadin/tests/TestForWindowOpen.java
deleted file mode 100644
index 74e3af46ea..0000000000
--- a/tests/src/com/vaadin/tests/TestForWindowOpen.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.VerticalLayout;
-
-public class TestForWindowOpen extends CustomComponent {
-
-    public TestForWindowOpen() {
-
-        final VerticalLayout main = new VerticalLayout();
-        setCompositionRoot(main);
-
-        main.addComponent(new Button("Open in this window",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        final ExternalResource r = new ExternalResource(
-                                "http://www.google.com");
-                        getApplication().getMainWindow().open(r);
-
-                    }
-
-                }));
-
-        main.addComponent(new Button("Open in target \"mytarget\"",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        final ExternalResource r = new ExternalResource(
-                                "http://www.google.com");
-                        getApplication().getMainWindow().open(r, "mytarget");
-
-                    }
-
-                }));
-
-        main.addComponent(new Button("Open in target \"secondtarget\"",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        final ExternalResource r = new ExternalResource(
-                                "http://www.google.com");
-                        getApplication().getMainWindow()
-                                .open(r, "secondtarget");
-
-                    }
-
-                }));
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestForWindowing.java b/tests/src/com/vaadin/tests/TestForWindowing.java
deleted file mode 100644
index fb7c388567..0000000000
--- a/tests/src/com/vaadin/tests/TestForWindowing.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.ui.AbstractSelect;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.OptionGroup;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.Slider;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class TestForWindowing extends CustomComponent {
-
-    private Select s2;
-
-    public TestForWindowing() {
-
-        final VerticalLayout main = new VerticalLayout();
-
-        main.addComponent(new Label(
-                "Click the button to create a new inline window."));
-
-        final CheckBox asModal = new CheckBox("As modal");
-        main.addComponent(asModal);
-
-        final Button create = new Button("Create a new window",
-                new ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        Window w = new Window("Testing Window");
-
-                        if (((Boolean) asModal.getValue()).booleanValue()) {
-                            w.setModal(true);
-                        }
-
-                        AbstractSelect s1 = new OptionGroup();
-                        s1.setCaption("1. Select output format");
-                        s1.addItem("Excel sheet");
-                        s1.addItem("CSV plain text");
-                        s1.setValue("Excel sheet");
-                        s1.setImmediate(true);
-
-                        s2 = new Select();
-                        s2.addItem("Separate by comma (,)");
-                        s2.addItem("Separate by colon (:)");
-                        s2.addItem("Separate by semicolon (;)");
-                        s2.setEnabled(false);
-
-                        s1.addListener(new ValueChangeListener() {
-
-                            public void valueChange(ValueChangeEvent event) {
-                                String v = (String) event.getProperty()
-                                        .getValue();
-                                if (v.equals("CSV plain text")) {
-                                    s2.setEnabled(true);
-                                } else {
-                                    s2.setEnabled(false);
-                                }
-                            }
-
-                        });
-
-                        w.addComponent(s1);
-                        w.addComponent(s2);
-
-                        Slider s = new Slider();
-                        s.setCaption("Volume");
-                        s.setMax(13);
-                        s.setMin(12);
-                        s.setResolution(2);
-                        s.setImmediate(true);
-                        // s.setOrientation(Slider.ORIENTATION_VERTICAL);
-                        // s.setArrows(false);
-
-                        w.addComponent(s);
-
-                        getApplication().getMainWindow().addWindow(w);
-
-                    }
-
-                });
-
-        main.addComponent(create);
-
-        setCompositionRoot(main);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestIFrames.java b/tests/src/com/vaadin/tests/TestIFrames.java
deleted file mode 100644
index ea93398206..0000000000
--- a/tests/src/com/vaadin/tests/TestIFrames.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-
-public class TestIFrames extends CustomComponent {
-
-    VerticalLayout main = new VerticalLayout();
-
-    public TestIFrames() {
-        setCompositionRoot(main);
-        createNewView();
-    }
-
-    public void createNewView() {
-        main.removeAllComponents();
-        main.addComponent(createEmbedded("http://demo.vaadin.com/sampler/"));
-        main.addComponent(createEmbedded("../colorpicker"));
-        // main.addComponent(createEmbedded("../TestForNativeWindowing"));
-        main.addComponent(createEmbedded("http://demo.vaadin.com/timeline"));
-        main.addComponent(createEmbedded("http://demo.vaadin.com/colorpicker"));
-    }
-
-    private Label createEmbedded(String URL) {
-        final int width = 600;
-        final int height = 250;
-        final String iFrame = "<iframe height=\"" + height + "\" width=\""
-                + width + "\" src=\"" + URL + "\" />";
-        return new Label(iFrame, Label.CONTENT_XHTML);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestMethodProperty.java b/tests/src/com/vaadin/tests/TestMethodProperty.java
deleted file mode 100644
index 49a3c110fa..0000000000
--- a/tests/src/com/vaadin/tests/TestMethodProperty.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.vaadin.tests;
-
-import com.vaadin.data.util.MethodProperty;
-
-public class TestMethodProperty {
-
-    /**
-     * @param args
-     */
-    public static void main(String[] args) {
-
-        MyTest myTest = new MyTest();
-
-        MethodProperty<Integer> methodProperty2 = new MethodProperty<Integer>(
-                Integer.TYPE, myTest, "getInt", "setInt", new Object[0],
-                new Object[] { null }, 0);
-
-        methodProperty2.setValue("3");
-
-        System.out.println("Succeeded");
-
-    }
-
-    public static class MyTest {
-
-        int integer;
-
-        public void setInteger(Integer integer) {
-            System.out.println("setInteger");
-            this.integer = integer;
-        }
-
-        public Integer getInteger() {
-            System.out.println("getInteger");
-            return Integer.valueOf(integer);
-        }
-
-        public void setInt(int i) {
-            System.out.println("setInt");
-            integer = i;
-        }
-
-        public int getInt() {
-            System.out.println("getInt");
-            return integer;
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/TestSelectAndDatefieldInDeepLayouts.java b/tests/src/com/vaadin/tests/TestSelectAndDatefieldInDeepLayouts.java
deleted file mode 100644
index 5a72a34be9..0000000000
--- a/tests/src/com/vaadin/tests/TestSelectAndDatefieldInDeepLayouts.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.util.Collection;
-import java.util.Vector;
-
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.VerticalLayout;
-
-/**
- * This test has a somewhat deep layout within one page. At the bottom, Select
- * and Datefield render their popups incorrectly. Popus tend to be "left behind"
- * from the actual components. When the page is even bigger or longer, the
- * popups are eventually rendered outside the visual parts of the page.
- * 
- * @author Ville Ingman
- * 
- */
-public class TestSelectAndDatefieldInDeepLayouts extends CustomComponent {
-
-    public TestSelectAndDatefieldInDeepLayouts() {
-        final AbstractOrderedLayout root = getOrderedLayout();
-        setCompositionRoot(root);
-
-        root.addComponent(getSelect());
-        root.addComponent(getDateField());
-        root.addComponent(getSelect());
-        root.addComponent(getDateField());
-
-        final Panel p1 = getPanel();
-        root.addComponent(p1);
-
-        p1.addComponent(getSelect());
-        p1.addComponent(getDateField());
-        p1.addComponent(getSelect());
-        p1.addComponent(getDateField());
-
-        final AbstractOrderedLayout l1 = getOrderedLayout();
-        p1.addComponent(l1);
-
-        l1.addComponent(getSelect());
-        l1.addComponent(getDateField());
-        l1.addComponent(getSelect());
-        l1.addComponent(getDateField());
-
-        final Panel p2 = getPanel();
-        l1.addComponent(p2);
-
-        p2.addComponent(getSelect());
-        p2.addComponent(getDateField());
-        p2.addComponent(getSelect());
-        p2.addComponent(getDateField());
-
-    }
-
-    VerticalLayout getOrderedLayout() {
-        final VerticalLayout l = new VerticalLayout();
-        l.setCaption(getCaption("orderedlayout"));
-        return l;
-    }
-
-    Panel getPanel() {
-        final Panel panel = new Panel();
-        panel.setCaption(getCaption("panel"));
-        return panel;
-    }
-
-    Component getSelect() {
-        return new Select(getCaption("select"), getSelectOptions());
-    }
-
-    Component getDateField() {
-        return new DateField(getCaption("datefield"));
-    }
-
-    private Collection<String> getSelectOptions() {
-        final Collection<String> opts = new Vector<String>(3);
-        opts.add(getCaption("opt 1"));
-        opts.add(getCaption("opt 2"));
-        opts.add(getCaption("opt 3"));
-        return opts;
-    }
-
-    private String getCaption(String string) {
-        return string + (Math.random() * 99999.9);
-        // This is Java 5 code:
-        // return string + " " + UUID.randomUUID().toString().substring(0, 5);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TestSetVisibleAndCaching.java b/tests/src/com/vaadin/tests/TestSetVisibleAndCaching.java
deleted file mode 100644
index 479a7602ef..0000000000
--- a/tests/src/com/vaadin/tests/TestSetVisibleAndCaching.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Window;
-
-public class TestSetVisibleAndCaching extends com.vaadin.Application {
-
-    Panel panelA = new Panel("Panel A");
-    Panel panelB = new Panel("Panel B");
-    Panel panelC = new Panel("Panel C");
-
-    Button buttonNextPanel = new Button("Show next panel");
-
-    int selectedPanel = 0;
-
-    @Override
-    public void init() {
-        final Window mainWindow = new Window("TestSetVisibleAndCaching");
-        setMainWindow(mainWindow);
-
-        panelA.addComponent(new Label(
-                "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"));
-        panelB.addComponent(new Label(
-                "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"));
-        panelC.addComponent(new Label(
-                "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"));
-
-        mainWindow
-                .addComponent(new Label(
-                        "Inspect transfered data from server to "
-                                + "client using firebug (http request / response cycles)."
-                                + " See how widgets are re-used,"
-                                + " after each panel is once shown in GUI then"
-                                + " their contents are not resend."));
-        mainWindow.addComponent(buttonNextPanel);
-        mainWindow.addComponent(panelA);
-        mainWindow.addComponent(panelB);
-        mainWindow.addComponent(panelC);
-
-        selectPanel(selectedPanel);
-
-        buttonNextPanel.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                selectedPanel++;
-                if (selectedPanel > 2) {
-                    selectedPanel = 0;
-                }
-                selectPanel(selectedPanel);
-            }
-        });
-
-    }
-
-    private void selectPanel(int selectedPanel) {
-        System.err.println("Selecting panel " + selectedPanel);
-        switch (selectedPanel) {
-        case 0:
-            panelA.setVisible(true);
-            panelB.setVisible(false);
-            panelC.setVisible(false);
-            break;
-        case 1:
-            panelA.setVisible(false);
-            panelB.setVisible(true);
-            panelC.setVisible(false);
-            break;
-        case 2:
-            panelA.setVisible(false);
-            panelB.setVisible(false);
-            panelC.setVisible(true);
-            break;
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/TestSizeableIncomponents.java b/tests/src/com/vaadin/tests/TestSizeableIncomponents.java
deleted file mode 100644
index 5d82c9d0ee..0000000000
--- a/tests/src/com/vaadin/tests/TestSizeableIncomponents.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.io.File;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import com.vaadin.Application;
-import com.vaadin.data.Container;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.AbstractSelect;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class TestSizeableIncomponents extends Application {
-
-    private IndexedContainer cont;
-    private ComboBox select;
-    private Button prev;
-    private Button next;
-    private Panel testPanel;
-
-    @Override
-    public void init() {
-
-        initComponentList();
-
-        Window w = new Window();
-        setMainWindow(w);
-        w.setTheme("tests-components");
-
-        final VerticalLayout main = new VerticalLayout();
-        w.setContent(main);
-
-        select = new ComboBox();
-        select.setImmediate(true);
-        select.setFilteringMode(ComboBox.FILTERINGMODE_CONTAINS);
-        select.setWidth("400px");
-
-        prev = new Button("<<-|");
-        prev.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                Object cur = select.getValue();
-                Testable prev = (Testable) cont.prevItemId(cur);
-                if (prev == null) {
-                    getMainWindow().showNotification("No more test cases");
-                } else {
-                    getMainWindow().showNotification(
-                            "Selected test:" + prev.getTestableName());
-                    select.setValue(prev);
-                    select.requestRepaint();
-                }
-            }
-        });
-        next = new Button("|->>");
-        next.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                Object cur = select.getValue();
-                Testable next = (Testable) cont.nextItemId(cur);
-                if (next == null) {
-                    getMainWindow().showNotification("No more test cases");
-                } else {
-                    getMainWindow().showNotification(
-                            "Selected test:" + next.getTestableName());
-                    select.setValue(next);
-                    select.requestRepaint();
-                }
-            }
-        });
-
-        HorizontalLayout controllers = new HorizontalLayout();
-        controllers.addComponent(prev);
-        controllers.addComponent(select);
-        controllers.addComponent(next);
-        main.addComponent(controllers);
-
-        select.setContainerDataSource(cont);
-        select.addListener(new ComboBox.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                Testable t = (Testable) select.getValue();
-                if (t != null) {
-                    testPanel.removeAllComponents();
-                    try {
-                        Component c = t.getComponent();
-                        if (c != null) {
-                            testPanel.addComponent(c);
-                        }
-                    } catch (InstantiationException e) {
-                        // TODO Auto-generated catch block
-                        e.printStackTrace();
-                    } catch (IllegalAccessException e) {
-                        // TODO Auto-generated catch block
-                        e.printStackTrace();
-                    }
-                }
-            }
-        });
-
-        testPanel = new Panel();
-        testPanel.setSizeFull();
-        testPanel.setContent(new VerticalLayout());
-        testPanel.setStyleName("testable");
-        main.addComponent(testPanel);
-        main.setExpandRatio(testPanel, 1);
-
-    }
-
-    private void initComponentList() {
-        cont = new IndexedContainer();
-        ClassLoader cl = Thread.currentThread().getContextClassLoader();
-
-        URL dir = cl.getResource("com/vaadin/ui");
-
-        String[] list2 = (new File(dir.getFile())).list();
-        for (int i = 0; i < list2.length; i++) {
-            String f = list2[i];
-            if (f.endsWith(".class") && (f.indexOf("CustomComponent") == -1)
-                    && (f.indexOf("Window") == -1)) {
-                f = f.replaceAll(".class", "");
-                String className = "com.vaadin.ui." + f;
-                Class<?> c;
-                try {
-                    c = Class.forName(className);
-                    Object o = c.newInstance();
-                    if (o instanceof Component) {
-                        Testable t = new Testable(c);
-                        cont.addItem(t);
-                        t = new Testable(c);
-                        t.addConfiguration(new Configuration("100px*100px") {
-                            @Override
-                            void configure(Component c) {
-                                c.setWidth("60px");
-                                c.setHeight("60px");
-                            }
-                        });
-                        t = new Testable(c);
-                        t.addConfiguration(new Configuration("Width 50em") {
-                            @Override
-                            void configure(Component c) {
-                                c.setWidth("50em");
-                            }
-                        });
-                        cont.addItem(t);
-                        t = new Testable(c);
-                        t.addConfiguration(new Configuration("Height 7cm") {
-                            @Override
-                            void configure(Component c) {
-                                c.setHeight("7cm");
-                            }
-                        });
-                        cont.addItem(t);
-                        t = new Testable(c) {
-                            @Override
-                            public Component getComponent()
-                                    throws InstantiationException,
-                                    IllegalAccessException {
-
-                                Component c = super.getComponent();
-
-                                Panel p = new Panel(
-                                        "Wrapper panel (400px*400px)");
-                                p.setContent(new VerticalLayout());
-                                p.setWidth("400px");
-                                p.setHeight("400px");
-                                p.addComponent(c);
-                                p.addStyleName("testablew");
-                                p.addStyleName("testable");
-                                return p;
-                            }
-
-                        };
-                        t.addConfiguration(new Configuration("100%*100%") {
-                            @Override
-                            void configure(Component c) {
-                                c.setSizeFull();
-                            }
-
-                        });
-                        cont.addItem(t);
-                    }
-
-                } catch (ClassNotFoundException e) {
-                    // TODO Auto-generated catch block
-                    // e.printStackTrace();
-                } catch (InstantiationException e) {
-                    // TODO Auto-generated catch block
-                    // e.printStackTrace();
-                } catch (IllegalAccessException e) {
-                    // TODO Auto-generated catch block
-                    // e.printStackTrace();
-                }
-            }
-        }
-
-    }
-
-    class Testable {
-
-        private Class<?> classToTest;
-        private ArrayList<Configuration> configurations = new ArrayList<Configuration>();
-
-        Testable(Class<?> c) {
-            classToTest = c;
-        }
-
-        public void addConfiguration(Configuration conf) {
-            configurations.add(conf);
-        }
-
-        public String getTestableName() {
-            StringBuffer sb = new StringBuffer();
-            sb.append(classToTest.getName().replaceAll("com.vaadin.ui.", ""));
-            sb.append("[");
-            for (Iterator<Configuration> i = configurations.iterator(); i
-                    .hasNext();) {
-                sb.append((i.next()).getDescription());
-                if (i.hasNext()) {
-                    sb.append(",");
-                }
-            }
-            sb.append("]");
-
-            return sb.toString();
-        }
-
-        /**
-         * Instantiates and populates component with test data to be ready for
-         * testing.
-         * 
-         * @return
-         * @throws InstantiationException
-         * @throws IllegalAccessException
-         */
-        public Component getComponent() throws InstantiationException,
-                IllegalAccessException {
-            Component c = (Component) classToTest.newInstance();
-
-            if (c instanceof Button) {
-                ((AbstractComponent) c).setCaption("test");
-            }
-            if (AbstractSelect.class.isAssignableFrom(c.getClass())) {
-                if (c instanceof Table) {
-                    Table new_name = (Table) c;
-                    new_name.setContainerDataSource(TestForTablesInitialColumnWidthLogicRendering
-                            .getTestTable(5, 100).getContainerDataSource());
-
-                } else {
-                    AbstractSelect new_name = (AbstractSelect) c;
-                    Container cont = TestForTablesInitialColumnWidthLogicRendering
-                            .getTestTable(2, 8).getContainerDataSource();
-                    new_name.setContainerDataSource(cont);
-                    new_name.setItemCaptionPropertyId(cont
-                            .getContainerPropertyIds().iterator().next());
-
-                }
-            } else if (c instanceof ComponentContainer) {
-                ComponentContainer new_name = (ComponentContainer) c;
-                new_name.addComponent(new Label("component 1 in test container"));
-                new_name.addComponent(new Button("component 2"));
-            } else if (c instanceof Embedded) {
-                Embedded em = (Embedded) c;
-                em.setSource(new ThemeResource("test.png"));
-            } else if (c instanceof Label) {
-                ((Label) c).setValue("Test label");
-            }
-
-            for (Iterator<Configuration> i = configurations.iterator(); i
-                    .hasNext();) {
-                Configuration conf = i.next();
-                conf.configure(c);
-            }
-            return c;
-        }
-
-        @Override
-        public String toString() {
-            return getTestableName();
-        }
-    }
-
-    public abstract class Configuration {
-
-        private String description = "";
-
-        Configuration(String description) {
-            this.description = description;
-        }
-
-        public String getDescription() {
-            return description;
-        }
-
-        abstract void configure(Component c);
-
-        @Override
-        public String toString() {
-            return getDescription();
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/TestSplitPanel.java b/tests/src/com/vaadin/tests/TestSplitPanel.java
deleted file mode 100644
index d2665cc971..0000000000
--- a/tests/src/com/vaadin/tests/TestSplitPanel.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalSplitPanel;
-import com.vaadin.ui.Window;
-
-public class TestSplitPanel extends com.vaadin.Application {
-
-    VerticalSplitPanel verticalSplit = new VerticalSplitPanel();
-
-    @Override
-    public void init() {
-        final Window mainWindow = new Window("Feature Browser");
-        setMainWindow(mainWindow);
-
-        verticalSplit.setFirstComponent(new Label("vertical first"));
-        verticalSplit.setSecondComponent(new Label("vertical second"));
-
-        mainWindow.setContent(verticalSplit);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TreeFilesystem.java b/tests/src/com/vaadin/tests/TreeFilesystem.java
deleted file mode 100644
index 9b05bbce1c..0000000000
--- a/tests/src/com/vaadin/tests/TreeFilesystem.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.io.File;
-
-import com.vaadin.data.Item;
-import com.vaadin.tests.util.SampleDirectory;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.Tree.ExpandEvent;
-import com.vaadin.ui.Window;
-
-/**
- * Browsable file explorer using Vaadin Tree component. Demonstrates: how to add
- * items hierarchically into <code>com.vaadin.ui.Component.Tree</code>, how to
- * receive ExpandEvent and implement
- * <code>com.vaadin.ui.Tree.ExpandListener</code>.
- * 
- * @since 4.0.0
- * 
- */
-public class TreeFilesystem extends com.vaadin.Application implements
-        Tree.ExpandListener {
-
-    // Filesystem explorer panel and it's components
-    private final Panel explorerPanel = new Panel("Filesystem explorer");
-
-    private final Tree tree = new Tree();
-
-    @Override
-    public void init() {
-        final Window main = new Window("Tree filesystem demo");
-        setMainWindow(main);
-
-        // Main window contains heading and panel
-        main.addComponent(new Label("<h2>Tree demo</h2>", Label.CONTENT_XHTML));
-
-        // configure file structure panel
-        main.addComponent(explorerPanel);
-        explorerPanel.addComponent(tree);
-        explorerPanel.setHeight("400px");
-
-        // "this" handles tree's expand event
-        tree.addListener(this);
-
-        // Get sample directory
-        final File sampleDir = SampleDirectory.getDirectory(this);
-        // populate tree's root node with example directory
-        if (sampleDir != null) {
-            populateNode(sampleDir.getAbsolutePath(), null);
-        }
-    }
-
-    /**
-     * Handle tree expand event, populate expanded node's childs with new files
-     * and directories.
-     */
-    public void nodeExpand(ExpandEvent event) {
-        final Item i = tree.getItem(event.getItemId());
-        if (!tree.hasChildren(i)) {
-            // populate tree's node which was expanded
-            populateNode(event.getItemId().toString(), event.getItemId());
-        }
-    }
-
-    /**
-     * Populates files to tree as items. In this example items are of String
-     * type that consist of file path. New items are added to tree and item's
-     * parent and children properties are updated.
-     * 
-     * @param file
-     *            path which contents are added to tree
-     * @param parent
-     *            for added nodes, if null then new nodes are added to root node
-     */
-    private void populateNode(String file, Object parent) {
-        final File subdir = new File(file);
-        final File[] files = subdir.listFiles();
-        for (int x = 0; x < files.length; x++) {
-            try {
-                // add new item (String) to tree
-                final String path = files[x].getCanonicalPath().toString();
-                tree.addItem(path);
-                // set parent if this item has one
-                if (parent != null) {
-                    tree.setParent(path, parent);
-                }
-                // check if item is a directory and read access exists
-                if (files[x].isDirectory() && files[x].canRead()) {
-                    // yes, childrens therefore exists
-                    tree.setChildrenAllowed(path, true);
-                } else {
-                    // no, childrens therefore do not exists
-                    tree.setChildrenAllowed(path, false);
-                }
-            } catch (final Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/TreeFilesystemContainer.java b/tests/src/com/vaadin/tests/TreeFilesystemContainer.java
deleted file mode 100644
index 085abd1666..0000000000
--- a/tests/src/com/vaadin/tests/TreeFilesystemContainer.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.io.File;
-
-import com.vaadin.data.util.FilesystemContainer;
-import com.vaadin.data.util.FilesystemContainer.FileItem;
-import com.vaadin.tests.util.SampleDirectory;
-import com.vaadin.ui.Component.Event;
-import com.vaadin.ui.Component.Listener;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-/**
- * Browsable file explorer using Vaadin Tree component. Demonstrates: how to use
- * <code>com.vaadin.ui.Component.Tree</code> datasource container, how to create
- * <code>com.vaadin.data.util.FilesystemContainer</code>, how to read
- * <code>com.vaadin.ui.Component.Event</code> objects, how to receive and handle
- * any event by implementing <code>com.vaadin.ui.Component.Listener</code>.
- * 
- * @since 4.0.0
- * 
- */
-public class TreeFilesystemContainer extends com.vaadin.Application implements
-        Listener {
-
-    // Filesystem explorer panel and it's components
-    private final Panel explorerPanel = new Panel("Filesystem explorer");
-
-    private final Tree filesystem = new Tree();
-
-    // File properties panel and it's components
-    private final Panel propertyPanel = new Panel("File properties");
-
-    private final Label fileProperties = new Label();
-
-    @Override
-    public void init() {
-        final Window w = new Window("Tree FilesystemContainer demo");
-        setMainWindow(w);
-        final VerticalLayout main = new VerticalLayout();
-        w.setContent(main);
-        main.setMargin(true);
-        main.setSpacing(true);
-
-        propertyPanel.setHeight("120px");
-        main.addComponent(propertyPanel);
-        explorerPanel.setHeight("100%");
-        main.addComponent(explorerPanel);
-        main.setExpandRatio(explorerPanel, 1);
-
-        // Explorer panel contains tree
-        explorerPanel.addComponent(filesystem);
-
-        // Property panel contains label
-        propertyPanel.addComponent(fileProperties);
-        fileProperties.setCaption("No file selected.");
-        propertyPanel.setEnabled(false);
-
-        // Get sample directory
-        final File sampleDir = SampleDirectory.getDirectory(this);
-        // Populate tree with FilesystemContainer
-        final FilesystemContainer fsc = new FilesystemContainer(sampleDir, true);
-        filesystem.setContainerDataSource(fsc);
-        // "this" handles all filesystem events
-        // e.g. node clicked, expanded etc.
-        filesystem.addListener(this);
-        // Value changes are immediate
-        filesystem.setImmediate(true);
-    }
-
-    /**
-     * Listener for any component events. This class has been registered as an
-     * listener for component fsTree.
-     */
-    public void componentEvent(Event event) {
-        // Check if event occured at fsTree component
-        if (event.getSource() == filesystem) {
-            // Check if event is about changing value
-            if (event.getClass() == Field.ValueChangeEvent.class) {
-                // Update property panel contents
-                final FileItem fileItem = (FileItem) filesystem
-                        .getItem(filesystem.getValue());
-                fileProperties.setIcon(fileItem.getIcon());
-                fileProperties.setCaption(fileItem.getName() + ", size "
-                        + fileItem.getSize() + " bytes.");
-                propertyPanel.setEnabled(true);
-            }
-            // here we could check for other type of events for filesystem
-            // component
-        }
-        // here we could check for other component's events
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/UpgradingSample.java b/tests/src/com/vaadin/tests/UpgradingSample.java
deleted file mode 100644
index 55a17d705b..0000000000
--- a/tests/src/com/vaadin/tests/UpgradingSample.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-//
-// Millstone imports were replaced
-//
-// import org.millstone.base.Application;
-// import org.millstone.base.ui.*;
-// import org.millstone.base.data.*;
-//
-import com.vaadin.Application;
-import com.vaadin.data.Property;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-/**
- * <p>
- * Example application demonstrating simple user login. This example is from
- * MillStone 3.1.1 examples section. Upgrading from 3.1.1 to 4.0.0 was done by
- * updating imports, also setTheme("corporate") call was added to application
- * init method.
- * </p>
- * 
- * @since 3.1.1
- * @author IT Mill Ltd.
- */
-public class UpgradingSample extends Application implements
-        Property.ValueChangeListener {
-
-    /* Menu for navigating inside the application. */
-    private final Tree menu = new Tree();
-
-    /* Contents of the website */
-    private final String[][] pages = {
-            { "Welcome", "Welcome to our website..." },
-            { "Products", "Public product information." },
-            { "Contact", "Public contact information." },
-            { "CRM", "CRM Database requiring login." },
-            { "Intranet", "Internal information database." } };
-
-    /* Application layout */
-    private final GridLayout layout = new GridLayout(2, 1);
-
-    /* Initialize the application */
-    @Override
-    public void init() {
-
-        // Create the main window of the application
-        final Window main = new Window("Login example", layout);
-        setMainWindow(main);
-
-        // Add menu and loginbox to the application
-        final VerticalLayout l = new VerticalLayout();
-        layout.addComponent(l, 0, 0);
-        l.addComponent(menu);
-        l.addComponent(new LoginBox());
-
-        // Setup menu
-        menu.setStyleName("menu");
-        menu.addListener(this);
-        menu.setImmediate(true);
-        addToMenu(new String[] { "Welcome", "Products", "Contact" });
-    }
-
-    // Overriding usetUser method is a simple way of updating application
-    // privileges when the user is changed
-    @Override
-    public void setUser(Object user) {
-        super.setUser(user);
-        if (user != null) {
-            addToMenu(new String[] { "CRM", "Intranet" });
-        }
-    }
-
-    public void addToMenu(String[] items) {
-        for (int i = 0; i < items.length; i++) {
-            menu.addItem(items[i]);
-            menu.setChildrenAllowed(items[i], false);
-        }
-        if (menu.getValue() == null) {
-            menu.setValue(items[0]);
-        }
-    }
-
-    // Handle menu selection and update visible page
-    public void valueChange(Property.ValueChangeEvent event) {
-        layout.removeComponent(1, 0);
-        final String title = (String) menu.getValue();
-        for (int i = 0; i < pages.length; i++) {
-            if (pages[i][0].equals(title)) {
-                final Panel p = new Panel(pages[i][0]);
-                p.addComponent(new Label(pages[i][1]));
-                p.setStyleName("strong");
-                layout.addComponent(p, 1, 0);
-            }
-        }
-    }
-
-    // Simple loginbox component for the application
-    public class LoginBox extends CustomComponent implements
-            Application.UserChangeListener {
-
-        // The components this loginbox is composed of
-        private final TextField loginName = new TextField("Name");
-
-        private final Button loginButton = new Button("Enter", this, "login");
-
-        private final Panel loginPanel = new Panel("Login");
-
-        private final Panel statusPanel = new Panel();
-
-        private final Button logoutButton = new Button("Logout",
-                UpgradingSample.this, "close");
-
-        private final Label statusLabel = new Label();
-
-        // Initialize login component
-        public LoginBox() {
-
-            // Initialize the component
-            loginPanel.addComponent(loginName);
-            loginPanel.addComponent(loginButton);
-            loginPanel.setStyleName("strong");
-            loginName.setColumns(8);
-            statusPanel.addComponent(statusLabel);
-            statusPanel.addComponent(logoutButton);
-
-            // Set the status of the loginbox and show correct
-            // components
-            updateStatus();
-
-            // Listen application user change events
-            UpgradingSample.this.addListener(this);
-        }
-
-        // Login into application
-        public void login() {
-            final String name = (String) loginName.getValue();
-            if (name != null && name.length() > 0) {
-                setUser(name);
-            }
-            loginName.setValue("");
-        }
-
-        // Update login status on application user change events
-        public void applicationUserChanged(Application.UserChangeEvent event) {
-            updateStatus();
-        }
-
-        // Update login status of the component by exposing correct
-        // components
-        private void updateStatus() {
-            statusLabel.setValue("User: " + getUser());
-            if (getUser() != null) {
-                setCompositionRoot(statusPanel);
-            } else {
-                setCompositionRoot(loginPanel);
-            }
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/UsingCustomNewItemHandlerInSelect.java b/tests/src/com/vaadin/tests/UsingCustomNewItemHandlerInSelect.java
deleted file mode 100644
index b54bd3d184..0000000000
--- a/tests/src/com/vaadin/tests/UsingCustomNewItemHandlerInSelect.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.util.Random;
-
-import com.vaadin.data.Item;
-import com.vaadin.ui.AbstractSelect;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Select;
-
-public class UsingCustomNewItemHandlerInSelect extends CustomComponent {
-
-    private final Select select = new Select();
-
-    public static Random random = new Random(1);
-
-    private static int sequence = 0;
-
-    public UsingCustomNewItemHandlerInSelect() {
-
-        final Panel panel = new Panel("Select demo");
-        panel.addComponent(select);
-
-        select.setCaption("Select component");
-        select.setImmediate(true);
-        select.addContainerProperty("CAPTION", String.class, "");
-        select.setItemCaptionMode(Select.ITEM_CAPTION_MODE_PROPERTY);
-        select.setItemCaptionPropertyId("CAPTION");
-        select.setNewItemsAllowed(true);
-        select.setNewItemHandler(new MyNewItemHandler());
-
-        populateSelect();
-
-        setCompositionRoot(panel);
-    }
-
-    public void populateSelect() {
-        final String[] names = new String[] { "John", "Mary", "Joe", "Sarah",
-                "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" };
-        for (int j = 0; j < 4; j++) {
-            Integer id = new Integer(sequence++);
-            Item item = select.addItem(id);
-            item.getItemProperty("CAPTION").setValue(
-                    id.toString() + ": "
-                            + names[random.nextInt() % names.length]);
-        }
-    }
-
-    public class MyNewItemHandler implements AbstractSelect.NewItemHandler {
-        public void addNewItem(String newItemCaption) {
-            // here could be db insert or other backend operation
-            Integer id = new Integer(sequence++);
-            Item item = select.addItem(id);
-            item.getItemProperty("CAPTION").setValue(
-                    id.toString() + ": " + newItemCaption);
-            select.setValue(id);
-        }
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/UsingObjectsInSelect.java b/tests/src/com/vaadin/tests/UsingObjectsInSelect.java
deleted file mode 100644
index c9b0939eef..0000000000
--- a/tests/src/com/vaadin/tests/UsingObjectsInSelect.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests;
-
-import java.util.LinkedList;
-import java.util.Random;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.Window;
-
-public class UsingObjectsInSelect extends com.vaadin.Application implements
-        ValueChangeListener {
-
-    private final Select select = new Select();
-    private final Label selectedTask = new Label("Selected task",
-            Label.CONTENT_XHTML);
-
-    public LinkedList<?> exampleTasks = new LinkedList<Object>();
-
-    public static Random random = new Random(1);
-
-    @Override
-    public void init() {
-        final Window main = new Window("Select demo");
-        setMainWindow(main);
-
-        final Panel panel = new Panel("Select demo");
-        panel.addComponent(select);
-        final Panel panel2 = new Panel("Selection");
-        panel2.addComponent(selectedTask);
-
-        select.setCaption("Select component");
-        select.addListener(this);
-        select.setImmediate(true);
-
-        main.addComponent(panel);
-        main.addComponent(panel2);
-
-        createExampleTasks();
-    }
-
-    public void createExampleTasks() {
-        final String[] assignedTo = new String[] { "John", "Mary", "Joe",
-                "Sarah", "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" };
-        final String[] type = new String[] { "Enhancement", "Bugfix",
-                "Testing", "Task" };
-        for (int j = 0; j < 100; j++) {
-            final Task task = new Task(
-                    type[(int) (random.nextDouble() * (type.length - 1))],
-                    assignedTo[(int) (random.nextDouble() * (assignedTo.length - 1))],
-                    random.nextInt(100));
-            select.addItem(task);
-        }
-    }
-
-    public void valueChange(ValueChangeEvent event) {
-        final Task task = (Task) select.getValue();
-        selectedTask.setValue("<b>Type:</b> " + task.getType()
-                + "<br /><b>Assigned to:</b> " + task.getAssignedTo()
-                + "<br /><b>Estimated hours: </b>" + task.getEstimatedHours());
-    }
-
-    /**
-     * Sample class which is bound to Vaadin components
-     * 
-     */
-    public class Task {
-
-        private String type;
-        private String assignedTo;
-        private int estimatedHours;
-
-        public Task(String type, String assignedTo, int estimatedHours) {
-            this.type = type;
-            this.assignedTo = assignedTo;
-            this.estimatedHours = estimatedHours;
-        }
-
-        @Override
-        public String toString() {
-            return type + ", " + assignedTo;
-        }
-
-        public String getType() {
-            return type;
-        }
-
-        public void setType(String type) {
-            this.type = type;
-        }
-
-        public String getAssignedTo() {
-            return assignedTo;
-        }
-
-        public void setAssignedTo(String assignedTo) {
-            this.assignedTo = assignedTo;
-        }
-
-        public float getEstimatedHours() {
-            return estimatedHours;
-        }
-
-        public void setEstimatedHours(int estimatedHours) {
-            this.estimatedHours = estimatedHours;
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/VaadinClasses.java b/tests/src/com/vaadin/tests/VaadinClasses.java
deleted file mode 100644
index 6f826402f4..0000000000
--- a/tests/src/com/vaadin/tests/VaadinClasses.java
+++ /dev/null
@@ -1,210 +0,0 @@
-package com.vaadin.tests;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Modifier;
-import java.net.JarURLConnection;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.jar.JarEntry;
-
-import com.vaadin.Application;
-import com.vaadin.tests.components.AbstractComponentTest;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.DragAndDropWrapper;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.LoginForm;
-import com.vaadin.ui.PopupView;
-import com.vaadin.ui.SplitPanel;
-import com.vaadin.ui.VerticalSplitPanel;
-import com.vaadin.ui.Window;
-
-@SuppressWarnings("deprecation")
-public class VaadinClasses {
-
-    public static void main(String[] args) {
-        System.out.println("ComponentContainers");
-        System.out.println("===================");
-        for (Class<? extends ComponentContainer> c : getComponentContainers()) {
-            System.out.println(c.getName());
-        }
-        System.out.println();
-        System.out.println("Components");
-        System.out.println("==========");
-        for (Class<? extends Component> c : getComponents()) {
-            System.out.println(c.getName());
-        }
-        System.out.println();
-        System.out.println("Server side classes");
-        System.out.println("===================");
-        for (Class<?> c : getAllServerSideClasses()) {
-            System.out.println(c.getName());
-        }
-    }
-
-    public static List<Class<? extends Component>> getComponents() {
-        try {
-            return findClasses(Component.class, "com.vaadin.ui");
-        } catch (IOException e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-
-    public static List<Class<? extends Object>> getAllServerSideClasses() {
-        try {
-            return findClasses(Object.class, "com.vaadin", new String[] {
-                    "com.vaadin.tests", "com.vaadin.terminal.gwt.client" });
-        } catch (IOException e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-
-    public static List<Class<? extends ComponentContainer>> getComponentContainers() {
-        try {
-            return findClasses(ComponentContainer.class, "com.vaadin.ui");
-        } catch (IOException e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-
-    public static List<Class<? extends ComponentContainer>> getComponentContainersSupportingAddRemoveComponent() {
-        List<Class<? extends ComponentContainer>> classes = getComponentContainers();
-        classes.remove(PopupView.class);
-        classes.remove(CustomComponent.class);
-        classes.remove(DragAndDropWrapper.class);
-        classes.remove(CustomComponent.class);
-        classes.remove(LoginForm.class);
-
-        return classes;
-    }
-
-    public static List<Class<? extends ComponentContainer>> getComponentContainersSupportingUnlimitedNumberOfComponents() {
-        List<Class<? extends ComponentContainer>> classes = getComponentContainersSupportingAddRemoveComponent();
-        classes.remove(SplitPanel.class);
-        classes.remove(VerticalSplitPanel.class);
-        classes.remove(HorizontalSplitPanel.class);
-        classes.remove(Window.class);
-
-        return classes;
-    }
-
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    public static List<Class<? extends AbstractComponentTest<?>>> getBasicComponentTests() {
-        try {
-            return (List) findClasses(AbstractComponentTest.class,
-                    "com.vaadin.tests.components");
-        } catch (IOException e) {
-            e.printStackTrace();
-            return null;
-        }
-
-    }
-
-    private static <T> List<Class<? extends T>> findClasses(Class<T> baseClass,
-            String basePackage) throws IOException {
-        return findClasses(baseClass, basePackage, new String[] {});
-    }
-
-    private static <T> List<Class<? extends T>> findClasses(Class<T> baseClass,
-            String basePackage, String[] ignoredPackages) throws IOException {
-        List<Class<? extends T>> classes = new ArrayList<Class<? extends T>>();
-        String basePackageDirName = "/" + basePackage.replace('.', '/');
-        URL location = Application.class.getResource(basePackageDirName);
-        if (location.getProtocol().equals("file")) {
-            try {
-                File f = new File(location.toURI());
-                if (!f.exists()) {
-                    throw new IOException("Directory " + f.toString()
-                            + " does not exist");
-                }
-                findPackages(f, basePackage, baseClass, classes,
-                        ignoredPackages);
-            } catch (URISyntaxException e) {
-                throw new IOException(e.getMessage());
-            }
-        } else if (location.getProtocol().equals("jar")) {
-            JarURLConnection juc = (JarURLConnection) location.openConnection();
-            findPackages(juc, basePackage, baseClass, classes);
-        }
-
-        Collections.sort(classes, new Comparator<Class<? extends T>>() {
-
-            public int compare(Class<? extends T> o1, Class<? extends T> o2) {
-                return o1.getName().compareTo(o2.getName());
-            }
-
-        });
-        return classes;
-
-    }
-
-    private static <T> void findPackages(JarURLConnection juc,
-            String javaPackage, Class<T> baseClass,
-            Collection<Class<? extends T>> result) throws IOException {
-        String prefix = "com/vaadin/ui";
-        Enumeration<JarEntry> ent = juc.getJarFile().entries();
-        while (ent.hasMoreElements()) {
-            JarEntry e = ent.nextElement();
-            if (e.getName().endsWith(".class")
-                    && e.getName().startsWith(prefix)) {
-                String fullyQualifiedClassName = e.getName().replace('/', '.')
-                        .replace(".class", "");
-                addClassIfMatches(result, fullyQualifiedClassName, baseClass);
-            }
-        }
-    }
-
-    private static <T> void findPackages(File parent, String javaPackage,
-            Class<T> baseClass, Collection<Class<? extends T>> result,
-            String[] ignoredPackages) {
-        for (String ignoredPackage : ignoredPackages) {
-            if (javaPackage.equals(ignoredPackage)) {
-                return;
-            }
-        }
-
-        for (File file : parent.listFiles()) {
-            if (file.isDirectory()) {
-                findPackages(file, javaPackage + "." + file.getName(),
-                        baseClass, result, ignoredPackages);
-            } else if (file.getName().endsWith(".class")) {
-                String fullyQualifiedClassName = javaPackage + "."
-                        + file.getName().replace(".class", "");
-                addClassIfMatches(result, fullyQualifiedClassName, baseClass);
-            }
-        }
-
-    }
-
-    @SuppressWarnings("unchecked")
-    private static <T> void addClassIfMatches(
-            Collection<Class<? extends T>> result,
-            String fullyQualifiedClassName, Class<T> baseClass) {
-        try {
-            // Try to load the class
-
-            Class<?> c = Class.forName(fullyQualifiedClassName);
-            if (baseClass.isAssignableFrom(c)
-                    && !Modifier.isAbstract(c.getModifiers())) {
-                result.add((Class<? extends T>) c);
-            }
-        } catch (Exception e) {
-            // Could ignore that class cannot be loaded
-            e.printStackTrace();
-        } catch (LinkageError e) {
-            // Ignore. Client side classes will at least throw LinkageErrors
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/appengine/GAESyncTest.java b/tests/src/com/vaadin/tests/appengine/GAESyncTest.java
deleted file mode 100644
index 2b6656f11a..0000000000
--- a/tests/src/com/vaadin/tests/appengine/GAESyncTest.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package com.vaadin.tests.appengine;
-
-import com.google.apphosting.api.DeadlineExceededException;
-import com.vaadin.Application;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.terminal.ClassResource;
-import com.vaadin.terminal.DownloadStream;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Window.Notification;
-
-public class GAESyncTest extends Application {
-
-    /**
-     * 
-     */
-    private static final long serialVersionUID = -3724319151122707926l;
-
-    @Override
-    public void init() {
-        setMainWindow(new IntrWindow(this));
-
-    }
-
-    @Override
-    public void terminalError(com.vaadin.terminal.Terminal.ErrorEvent event) {
-        Throwable t = event.getThrowable();
-        // Was this caused by a GAE timeout?
-        while (t != null) {
-            if (t instanceof DeadlineExceededException) {
-                getMainWindow().showNotification("Bugger!",
-                        "Deadline Exceeded", Notification.TYPE_ERROR_MESSAGE);
-                return;
-            }
-            t = t.getCause();
-        }
-
-        super.terminalError(event);
-
-    }
-
-    private class IntrWindow extends Window {
-        private int n = 0;
-        private static final long serialVersionUID = -6521351715072191625l;
-        TextField tf;
-        Label l;
-        Application app;
-        GridLayout gl;
-
-        private IntrWindow(Application app) {
-
-            this.app = app;
-            tf = new TextField("Echo thingie");
-            tf.setImmediate(true);
-            tf.addListener(new Property.ValueChangeListener() {
-                public void valueChange(ValueChangeEvent event) {
-                    IntrWindow.this.showNotification((String) event
-                            .getProperty().getValue());
-
-                }
-
-            });
-            addComponent(tf);
-
-            l = new Label("" + n);
-            addComponent(l);
-
-            {
-                Button b = new Button("Slow", new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        try {
-                            Thread.sleep(15000);
-                        } catch (InterruptedException e) {
-                            // TODO Auto-generated catch block
-                            e.printStackTrace();
-                        }
-                    }
-
-                });
-                addComponent(b);
-            }
-
-            {
-                Button b = new Button("Add", new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        if (getWindow() == getApplication().getMainWindow()) {
-                            getWindow().showNotification("main");
-                            try {
-                                Thread.sleep((5000));
-                            } catch (InterruptedException e) {
-                                // TODO Auto-generated catch block
-                                e.printStackTrace();
-                            }
-                        }
-                        addImage();
-                    }
-
-                });
-                addComponent(b);
-            }
-
-            gl = new GridLayout(30, 50);
-            addComponent(gl);
-
-        }
-
-        private void addImage() {
-            ClassResource res = new ClassResource("img1.png", app) {
-
-                private static final long serialVersionUID = 1L;
-
-                @Override
-                public DownloadStream getStream() {
-                    try {
-                        Thread.sleep((long) (Math.random() * 5000));
-                    } catch (InterruptedException e) {
-                        // TODO Auto-generated catch block
-                        e.printStackTrace();
-                    }
-                    return super.getStream();
-                }
-
-            };
-            res.setCacheTime(0);
-            Embedded emb = new Embedded("" + n, res);
-            emb.setWidth("30px");
-            emb.setHeight("5px");
-            gl.addComponent(emb);
-            l.setValue("" + n++);
-        }
-
-    }
-
-    @Override
-    public Window getWindow(String name) {
-        Window w = super.getWindow(name);
-        if (w == null) {
-            w = new IntrWindow(this);
-            addWindow(w);
-        }
-        return w;
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/appengine/img1.png b/tests/src/com/vaadin/tests/appengine/img1.png
deleted file mode 100644
index d249324e0c..0000000000
Binary files a/tests/src/com/vaadin/tests/appengine/img1.png and /dev/null differ
diff --git a/tests/src/com/vaadin/tests/application/ApplicationCloseTest.java b/tests/src/com/vaadin/tests/application/ApplicationCloseTest.java
deleted file mode 100644
index b10752d26c..0000000000
--- a/tests/src/com/vaadin/tests/application/ApplicationCloseTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.vaadin.tests.application;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.gwt.server.WebApplicationContext;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-
-public class ApplicationCloseTest extends TestBase {
-
-    private String memoryConsumer;
-
-    @Override
-    protected void setup() {
-        Label applications = new Label("Applications in session: <br/>",
-                Label.CONTENT_XHTML);
-        for (Application a : ((WebApplicationContext) getContext())
-                .getApplications()) {
-            applications.setValue(applications.getValue() + "App: " + a
-                    + "<br/>");
-        }
-        applications.setValue(applications.getValue() + "<br/><br/>");
-
-        addComponent(applications);
-        Label thisApp = new Label("This applications: " + this);
-        Button close = new Button("Close this", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                event.getButton().getApplication().close();
-            }
-        });
-
-        StringBuilder sb = new StringBuilder();
-
-        // 100 bytes
-        String str = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
-
-        int MB = 5;
-        for (int i = 0; i < MB * 10000; i++) {
-            sb.append(str);
-        }
-
-        memoryConsumer = sb.toString();
-        long totalUsage = Runtime.getRuntime().totalMemory();
-        String totalUsageString = totalUsage / 1000 / 1000 + "MiB";
-        Label memoryUsage = new Label(
-                "Using about "
-                        + memoryConsumer.length()
-                        / 1000
-                        / 1000
-                        + "MiB memory for this application.<br/>Total memory usage reported as "
-                        + totalUsageString + "<br/>", Label.CONTENT_XHTML);
-
-        addComponent(thisApp);
-        addComponent(memoryUsage);
-        addComponent(close);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Click close to close the application and open a new one";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3732;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/application/ErrorInUnloadEvent.html b/tests/src/com/vaadin/tests/application/ErrorInUnloadEvent.html
deleted file mode 100644
index ee200d7f5c..0000000000
--- a/tests/src/com/vaadin/tests/application/ErrorInUnloadEvent.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.application.ErrorInUnloadEvent?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestsapplicationErrorInUnloadEvent::PID_Suser</td>
-	<td>66,14</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestsapplicationErrorInUnloadEvent::PID_Suser</td>
-	<td>a</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestsapplicationErrorInUnloadEvent::PID_Spwd</td>
-	<td>73,16</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestsapplicationErrorInUnloadEvent::PID_Spwd</td>
-	<td>d</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestsapplicationErrorInUnloadEvent::PID_Spwd</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.application.ErrorInUnloadEvent</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestsapplicationErrorInUnloadEvent::/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>...Title...</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/application/ErrorInUnloadEvent.java b/tests/src/com/vaadin/tests/application/ErrorInUnloadEvent.java
deleted file mode 100644
index f212e74ca3..0000000000
--- a/tests/src/com/vaadin/tests/application/ErrorInUnloadEvent.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.vaadin.tests.application;
-
-import com.vaadin.event.ShortcutAction.KeyCode;
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.FormLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class ErrorInUnloadEvent extends AbstractTestCase {
-
-    private Window mainWindow;
-
-    @Override
-    public void init() {
-        if (getUser() == null) {
-            showLoginWindow();
-        } else {
-            showMainWindow();
-        }
-    }
-
-    private void showLoginWindow() {
-        if (mainWindow == null) {
-            mainWindow = new Window();
-        } else {
-            mainWindow.removeAllComponents();
-        }
-        mainWindow.setCaption("Please login");
-
-        FormLayout formLayout = new FormLayout();
-        final TextField userField = new TextField("Username");
-        userField.setDebugId("user");
-        final TextField passwordField = new TextField("Password");
-        passwordField.setDebugId("pwd");
-        passwordField.setSecret(true);
-        Button login = new Button("login");
-        login.setDebugId("loginButton");
-        login.setClickShortcut(KeyCode.ENTER);
-        formLayout.addComponent(userField);
-        formLayout.addComponent(passwordField);
-        formLayout.addComponent(login);
-        mainWindow.setContent(formLayout);
-
-        login.addListener(new ClickListener() {
-            public void buttonClick(final ClickEvent event) {
-                String username = (String) userField.getValue();
-                String password = (String) passwordField.getValue();
-
-                setUser(username);
-                showMainWindow();
-            }
-        });
-
-        setMainWindow(mainWindow);
-    }
-
-    private void showMainWindow() {
-        if (mainWindow == null) {
-            mainWindow = new Window();
-        } else {
-            mainWindow.removeAllComponents();
-        }
-        VerticalLayout root = new VerticalLayout();
-        root.addComponent(createHeader());
-
-        mainWindow.addComponent(root);
-    }
-
-    private Component createHeader() {
-        HorizontalLayout header = new HorizontalLayout();
-        header.addStyleName("header-background");
-        Label title = new Label("...Title...");
-        title.addStyleName("header-title");
-        header.addComponent(title);
-        Button logout = new Button("Logout");
-        logout.addListener(new ClickListener() {
-            public void buttonClick(final ClickEvent event) {
-                setUser(null);
-                showLoginWindow();
-            }
-
-        });
-        header.addComponent(logout);
-        return header;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Enter a text in the password field and press enter. Then reload the page. No error message should be printed about ignoring a variable change.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6316;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/application/WebBrowserTest.html b/tests/src/com/vaadin/tests/application/WebBrowserTest.html
deleted file mode 100644
index 75cd03dce1..0000000000
--- a/tests/src/com/vaadin/tests/application/WebBrowserTest.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-    <td>open</td>
-    <td>/run/com.vaadin.tests.application.WebBrowserTest?restartApplication</td>
-    <td></td>
-</tr>
-<tr>
-    <td>click</td>
-    <td>vaadin=runcomvaadintestsapplicationWebBrowserTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-    <td></td>
-</tr>
-<!-- Raw offset -->
-<tr>
-    <td>assertText</td>
-    <td>vaadin=runcomvaadintestsapplicationWebBrowserTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VLabel[0]</td>
-    <td>7200000</td>
-</tr>
-<!-- offset to Helsinki -->
-<tr>
-    <td>assertText</td>
-    <td>vaadin=runcomvaadintestsapplicationWebBrowserTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[6]/VLabel[0]</td>
-    <td>0</td>
-</tr>
-<!-- in Helsinki? -->
-<tr>
-    <td>assertText</td>
-    <td>vaadin=runcomvaadintestsapplicationWebBrowserTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VLabel[0]</td>
-    <td>Yes</td>
-</tr>
-<!-- DST active? -->
-<tr>
-    <td>assertText</td>
-    <td>vaadin=runcomvaadintestsapplicationWebBrowserTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VLabel[0]</td>
-    <td>Yes</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/application/WebBrowserTest.java b/tests/src/com/vaadin/tests/application/WebBrowserTest.java
deleted file mode 100644
index 08c9061d45..0000000000
--- a/tests/src/com/vaadin/tests/application/WebBrowserTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package com.vaadin.tests.application;
-
-import java.util.Arrays;
-import java.util.Date;
-import java.util.TimeZone;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-
-public class WebBrowserTest extends TestBase {
-
-    @Override
-    protected void setup() {
-
-        final Label offsetLabel = new Label("n/a");
-        offsetLabel.setCaption("Browser offset");
-
-        final Label rawOffsetLabel = new Label("n/a");
-        rawOffsetLabel.setCaption("Browser raw offset");
-
-        final Label dstDiffLabel = new Label("n/a");
-        dstDiffLabel.setCaption("Difference between raw offset and DST");
-
-        final Label dstInEffectLabel = new Label("n/a");
-        dstInEffectLabel.setCaption("Is DST currently active?");
-
-        final Label curDateLabel = new Label("n/a");
-        curDateLabel.setCaption("Current date in the browser");
-
-        final Label diffLabel = new Label("n/a");
-        diffLabel.setCaption("Browser to Europe/Helsinki offset difference");
-
-        final Label containsLabel = new Label("n/a");
-        containsLabel.setCaption("Browser could be in Helsinki");
-
-        final Button update = new Button("Get TimeZone from browser",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        TimeZone hkiTZ = TimeZone
-                                .getTimeZone("Europe/Helsinki");
-                        int hkiOffset = hkiTZ.getOffset(new Date().getTime());
-
-                        int browserOffset = getBrowser().getTimezoneOffset();
-                        int browserRawOffset = getBrowser()
-                                .getRawTimezoneOffset();
-                        String[] tzs = TimeZone
-                                .getAvailableIDs(browserRawOffset);
-
-                        boolean contains = Arrays.asList(tzs).contains(
-                                hkiTZ.getID());
-
-                        offsetLabel.setValue(String.valueOf(browserOffset));
-
-                        rawOffsetLabel.setValue(String
-                                .valueOf(browserRawOffset));
-
-                        diffLabel.setValue(String.valueOf(browserOffset
-                                - hkiOffset));
-
-                        containsLabel.setValue(contains ? "Yes" : "No");
-
-                        dstDiffLabel.setValue(String.valueOf(getBrowser()
-                                .getDSTSavings()));
-
-                        dstInEffectLabel
-                                .setValue(getBrowser().isDSTInEffect() ? "Yes"
-                                        : "No");
-
-                        curDateLabel.setValue(getBrowser().getCurrentDate()
-                                .toString());
-                    }
-                });
-
-        addComponent(update);
-        addComponent(offsetLabel);
-        addComponent(rawOffsetLabel);
-        addComponent(dstDiffLabel);
-        addComponent(dstInEffectLabel);
-        addComponent(curDateLabel);
-        addComponent(diffLabel);
-        addComponent(containsLabel);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Verifies that browser TimeZone offset works - should be same as server in our case (NOTE assumes server+browser in same TZ)";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6691;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/applicationcontext/ChangeSessionId.html b/tests/src/com/vaadin/tests/applicationcontext/ChangeSessionId.html
deleted file mode 100644
index 6d028f1fea..0000000000
--- a/tests/src/com/vaadin/tests/applicationcontext/ChangeSessionId.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
-<title>ChangeSessionId</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ChangeSessionId</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.applicationcontext.ChangeSessionId?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestsapplicationcontextChangeSessionId::/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestsapplicationcontextChangeSessionId::/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestsapplicationcontextChangeSessionId::PID_SLog_row_1</td>
-	<td>2. Session id changed successfully from * to *</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/applicationcontext/ChangeSessionId.java b/tests/src/com/vaadin/tests/applicationcontext/ChangeSessionId.java
deleted file mode 100644
index ddbbc49e68..0000000000
--- a/tests/src/com/vaadin/tests/applicationcontext/ChangeSessionId.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.vaadin.tests.applicationcontext;
-
-import com.vaadin.terminal.gwt.server.WebApplicationContext;
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Window;
-
-public class ChangeSessionId extends AbstractTestCase {
-
-    private Log log = new Log(5);
-    Button loginButton = new Button("Change session");
-    boolean requestSessionSwitch = false;
-
-    @Override
-    public void init() {
-        Window mainWindow = new Window("Sestest Application");
-        mainWindow.addComponent(log);
-        mainWindow.addComponent(loginButton);
-        mainWindow.addComponent(new Button("Show session id",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        logSessionId();
-                    }
-                }));
-        setMainWindow(mainWindow);
-
-        loginButton.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                WebApplicationContext context = ((WebApplicationContext) getContext());
-
-                String oldSessionId = context.getHttpSession().getId();
-                context.reinitializeSession();
-                String newSessionId = context.getHttpSession().getId();
-                if (oldSessionId.equals(newSessionId)) {
-                    log.log("FAILED! Both old and new session id is "
-                            + newSessionId);
-                } else {
-                    log.log("Session id changed successfully from "
-                            + oldSessionId + " to " + newSessionId);
-                }
-
-            }
-        });
-        logSessionId();
-    }
-
-    private void logSessionId() {
-        log.log("Session id: " + getSessionId());
-    }
-
-    protected String getSessionId() {
-        return ((WebApplicationContext) getContext()).getHttpSession().getId();
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tests that the session id can be changed to prevent session fixation attacks";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6094;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/applicationcontext/RemoveTransactionListener.java b/tests/src/com/vaadin/tests/applicationcontext/RemoveTransactionListener.java
deleted file mode 100644
index 8723e23a2a..0000000000
--- a/tests/src/com/vaadin/tests/applicationcontext/RemoveTransactionListener.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.vaadin.tests.applicationcontext;
-
-import com.vaadin.Application;
-import com.vaadin.service.ApplicationContext;
-import com.vaadin.service.ApplicationContext.TransactionListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-
-public class RemoveTransactionListener extends TestBase {
-
-    private final Log log = new Log(10);
-
-    @Override
-    protected void setup() {
-        // Add one listener that will remove itself from within transactionEnd
-        getMainWindow().getApplication().getContext()
-                .addTransactionListener(new TransactionListener() {
-                    public void transactionStart(Application application,
-                            Object transactionData) {
-                    }
-
-                    public void transactionEnd(Application application,
-                            Object transactionData) {
-                        removeListener(this);
-                        log.log("Listener removed in transactionEnd");
-                    }
-                });
-
-        // Add one listener that will remove itself from within transactionStart
-        getMainWindow().getApplication().getContext()
-                .addTransactionListener(new TransactionListener() {
-                    public void transactionStart(Application application,
-                            Object transactionData) {
-                        removeListener(this);
-                        log.log("Listener removed in transactionStart");
-                    }
-
-                    public void transactionEnd(Application application,
-                            Object transactionData) {
-                    }
-                });
-
-        // Add one listener to verify that all listeners are called, as thrown
-        // ConcurrentModificationException causes subsequent listeners to be
-        // ignored
-        getMainWindow().getApplication().getContext()
-                .addTransactionListener(new TransactionListener() {
-                    public void transactionStart(Application application,
-                            Object transactionData) {
-                        log.log("transactionStart from last listener");
-                    }
-
-                    public void transactionEnd(Application application,
-                            Object transactionData) {
-                        log.log("transactionEnd from last listener");
-                    }
-                });
-
-        addComponent(log);
-    }
-
-    private void removeListener(TransactionListener l) {
-        ApplicationContext context = getMainWindow().getApplication()
-                .getContext();
-        context.removeTransactionListener(l);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tests that a transaction listener can be removed from within the listener.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return Integer.valueOf(7065);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/applicationservlet/NoMainWindow.java b/tests/src/com/vaadin/tests/applicationservlet/NoMainWindow.java
deleted file mode 100644
index 9097274236..0000000000
--- a/tests/src/com/vaadin/tests/applicationservlet/NoMainWindow.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.vaadin.tests.applicationservlet;
-
-import com.vaadin.tests.components.AbstractTestCase;
-
-public class NoMainWindow extends AbstractTestCase {
-
-    @Override
-    protected String getDescription() {
-        return "This should produce an stack trace with \"No window found. Did you remember to setMainWindow()?\"";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3349;
-    }
-
-    @Override
-    public void init() {
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/AbstractComponentContainerTest.java b/tests/src/com/vaadin/tests/components/AbstractComponentContainerTest.java
deleted file mode 100644
index 0c9c9c4ae2..0000000000
--- a/tests/src/com/vaadin/tests/components/AbstractComponentContainerTest.java
+++ /dev/null
@@ -1,356 +0,0 @@
-package com.vaadin.tests.components;
-
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-
-import com.vaadin.ui.AbstractComponentContainer;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.ComponentContainer.ComponentAttachEvent;
-import com.vaadin.ui.ComponentContainer.ComponentAttachListener;
-import com.vaadin.ui.ComponentContainer.ComponentDetachEvent;
-import com.vaadin.ui.ComponentContainer.ComponentDetachListener;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.InlineDateField;
-import com.vaadin.ui.NativeButton;
-import com.vaadin.ui.PopupDateField;
-import com.vaadin.ui.RichTextArea;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextArea;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalSplitPanel;
-
-public abstract class AbstractComponentContainerTest<T extends AbstractComponentContainer>
-        extends AbstractComponentTest<T> implements ComponentAttachListener,
-        ComponentDetachListener {
-
-    private String CATEGORY_COMPONENT_CONTAINER_FEATURES = "Component container features";
-    private Command<T, ComponentSize> addButtonCommand = new Command<T, ComponentSize>() {
-
-        public void execute(T c, ComponentSize size, Object data) {
-            Button b = new Button("A button");
-            c.addComponent(b);
-            size.apply(b);
-        }
-    };
-
-    private Command<T, ComponentSize> addNativeButtonCommand = new Command<T, ComponentSize>() {
-
-        public void execute(T c, ComponentSize size, Object data) {
-            NativeButton b = new NativeButton("Native button");
-            c.addComponent(b);
-            size.apply(b);
-        }
-    };
-
-    private Command<T, ComponentSize> addTextAreaCommand = new Command<T, ComponentSize>() {
-        public void execute(T c, ComponentSize size, Object data) {
-            TextArea ta = new TextArea();
-            c.addComponent(ta);
-            size.apply(ta);
-        }
-    };
-
-    private Command<T, ComponentSize> addRichTextAreaCommand = new Command<T, ComponentSize>() {
-        public void execute(T c, ComponentSize size, Object data) {
-            RichTextArea ta = new RichTextArea();
-            c.addComponent(ta);
-            size.apply(ta);
-        }
-    };
-
-    private Command<T, ComponentSize> addTextFieldCommand = new Command<T, ComponentSize>() {
-        public void execute(T c, ComponentSize size, Object data) {
-            TextField tf = new TextField();
-            c.addComponent(tf);
-            size.apply(tf);
-        }
-    };
-
-    private Command<T, ComponentSize> addInlineDateFieldCommand = new Command<T, ComponentSize>() {
-        public void execute(T c, ComponentSize size, Object data) {
-            InlineDateField tf = new InlineDateField();
-            c.addComponent(tf);
-            size.apply(tf);
-        }
-    };
-    private Command<T, ComponentSize> addPopupDateFieldCommand = new Command<T, ComponentSize>() {
-        public void execute(T c, ComponentSize size, Object data) {
-            PopupDateField tf = new PopupDateField();
-            c.addComponent(tf);
-            size.apply(tf);
-        }
-    };
-
-    private Command<T, ComponentSize> addVerticalSplitPanelCommand = new Command<T, ComponentSize>() {
-        public void execute(T c, ComponentSize size, Object data) {
-            VerticalSplitPanel vsp = new VerticalSplitPanel();
-            c.addComponent(vsp);
-            size.apply(vsp);
-        }
-    };
-
-    private Command<T, ComponentSize> addHorizontalSplitPanelCommand = new Command<T, ComponentSize>() {
-        public void execute(T c, ComponentSize size, Object data) {
-            HorizontalSplitPanel vsp = new HorizontalSplitPanel();
-            c.addComponent(vsp);
-            size.apply(vsp);
-        }
-    };
-
-    private Command<T, ComponentSize> addTabSheetCommand = new Command<T, ComponentSize>() {
-        public void execute(T c, ComponentSize size, Object data) {
-            TabSheet ts = createTabSheet();
-            c.addComponent(ts);
-            size.apply(ts);
-        }
-    };
-
-    private Command<T, ComponentSize> addTableCommand = new Command<T, ComponentSize>() {
-
-        public void execute(T c, ComponentSize size, Object data) {
-            Table t = createTable();
-            c.addComponent(t);
-            size.apply(t);
-        }
-    };
-    private Command<T, Object> removeAllComponentsCommand = new Command<T, Object>() {
-        public void execute(T c, Object value, Object data) {
-            c.removeAllComponents();
-        }
-    };
-    private Command<T, Integer> removeComponentByIndexCommand = new Command<T, Integer>() {
-
-        public void execute(T c, Integer value, Object data) {
-            Component child = getComponentAtIndex(c, value);
-            c.removeComponent(child);
-
-        }
-    };
-    private Command<T, Boolean> componentAttachListenerCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((ComponentAttachListener) AbstractComponentContainerTest.this);
-            } else {
-                c.removeListener((ComponentAttachListener) AbstractComponentContainerTest.this);
-            }
-        }
-    };
-
-    private Command<T, Boolean> componentDetachListenerCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((ComponentDetachListener) AbstractComponentContainerTest.this);
-            } else {
-                c.removeListener((ComponentDetachListener) AbstractComponentContainerTest.this);
-            }
-        }
-    };
-
-    private Command<T, Integer> setComponentHeight = new Command<T, Integer>() {
-
-        public void execute(T c, Integer value, Object data) {
-            Component child = getComponentAtIndex(c, value);
-            child.setHeight((String) data);
-
-        }
-    };
-
-    private Command<T, Integer> setComponentWidth = new Command<T, Integer>() {
-
-        public void execute(T c, Integer value, Object data) {
-            Component child = getComponentAtIndex(c, value);
-            child.setWidth((String) data);
-
-        }
-    };
-
-    protected static class ComponentSize {
-        private String width, height;
-
-        public ComponentSize(String width, String height) {
-            this.width = width;
-            this.height = height;
-        }
-
-        public void apply(Component target) {
-            target.setWidth(width);
-            target.setHeight(height);
-        }
-
-        public String getWidth() {
-            return width;
-        }
-
-        public String getHeight() {
-            return height;
-        }
-
-        @Override
-        public String toString() {
-            String s = "";
-            s += width == null ? "auto" : width;
-            s += " x ";
-            s += height == null ? "auto" : height;
-            return s;
-        }
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-
-        createAddComponentActions(CATEGORY_COMPONENT_CONTAINER_FEATURES);
-        createRemoveComponentActions(CATEGORY_COMPONENT_CONTAINER_FEATURES);
-        createChangeComponentSizeActions(CATEGORY_COMPONENT_CONTAINER_FEATURES);
-        createComponentAttachListener(CATEGORY_LISTENERS);
-        createComponentDetachListener(CATEGORY_LISTENERS);
-    }
-
-    protected Component getComponentAtIndex(T container, int value) {
-        Iterator<Component> iter = container.getComponentIterator();
-        for (int i = 0; i < value; i++) {
-            iter.next();
-        }
-
-        return iter.next();
-    }
-
-    protected Table createTable() {
-        Table t = new Table();
-        t.addContainerProperty("property 1", String.class, "");
-        t.addContainerProperty("property 2", String.class, "");
-        t.addContainerProperty("property 3", String.class, "");
-        for (int i = 1; i < 10; i++) {
-            t.addItem(new Object[] { "row/col " + i + "/1",
-                    "row/col " + i + "/2", "row/col " + i + "/3" },
-                    String.valueOf(i));
-        }
-        return t;
-    }
-
-    protected TabSheet createTabSheet() {
-        TabSheet ts = new TabSheet();
-        Table t = createTable();
-        t.setSizeFull();
-        ts.addTab(t, "Size full Table", ICON_16_USER_PNG_UNCACHEABLE);
-        ts.addTab(new Button("A button"), "Button", null);
-        return ts;
-    }
-
-    private void createComponentAttachListener(String category) {
-        createBooleanAction("Component attach listener", category, false,
-                componentAttachListenerCommand);
-
-    }
-
-    private void createComponentDetachListener(String category) {
-        createBooleanAction("Component detach listener", category, false,
-                componentDetachListenerCommand);
-
-    }
-
-    private void createRemoveComponentActions(String category) {
-        String subCategory = "Remove component";
-        String byIndexCategory = "By index";
-
-        createCategory(subCategory, category);
-        createCategory(byIndexCategory, subCategory);
-        createClickAction("Remove all components", subCategory,
-                removeAllComponentsCommand, null);
-        for (int i = 0; i < 20; i++) {
-            createClickAction("Remove component " + i, byIndexCategory,
-                    removeComponentByIndexCommand, Integer.valueOf(i));
-        }
-
-    }
-
-    private void createAddComponentActions(String category) {
-        String subCategory = "Add component";
-        createCategory(subCategory, category);
-
-        LinkedHashMap<String, Command<T, ComponentSize>> addCommands = new LinkedHashMap<String, AbstractComponentTestCase.Command<T, ComponentSize>>();
-        addCommands.put("Button", addButtonCommand);
-        addCommands.put("NativeButton", addNativeButtonCommand);
-        addCommands.put("TextField", addTextFieldCommand);
-        addCommands.put("TextArea", addTextAreaCommand);
-        addCommands.put("RichTextArea", addRichTextAreaCommand);
-        addCommands.put("TabSheet", addTabSheetCommand);
-        addCommands.put("Table", addTableCommand);
-        addCommands.put("InlineDateField", addInlineDateFieldCommand);
-        addCommands.put("PopupDateField", addPopupDateFieldCommand);
-        addCommands.put("VerticalSplitPanel", addVerticalSplitPanelCommand);
-        addCommands.put("HorizontalSplitPanel", addHorizontalSplitPanelCommand);
-        // addCommands.put("AbsoluteLayout", addAbsoluteLayoutCommand);
-        // addCommands.put("HorizontalLayout", addHorizontalLayoutCommand);
-        // addCommands.put("VerticalLayout", addVerticalLayoutCommand);
-
-        ComponentSize[] sizes = new ComponentSize[] {
-                new ComponentSize(null, null),
-                new ComponentSize("200px", null),
-                new ComponentSize("100%", null),
-                new ComponentSize(null, "200px"),
-                new ComponentSize(null, "100%"),
-                new ComponentSize("300px", "300px"),
-                new ComponentSize("100%", "100%"),
-
-        };
-
-        for (String componentCategory : addCommands.keySet()) {
-            createCategory(componentCategory, subCategory);
-
-            for (ComponentSize size : sizes) {
-                createClickAction(size.toString(), componentCategory,
-                        addCommands.get(componentCategory), size);
-            }
-        }
-
-    }
-
-    private void createChangeComponentSizeActions(String category) {
-        String widthCategory = "Change component width";
-        createCategory(widthCategory, category);
-        String heightCategory = "Change component height";
-        createCategory(heightCategory, category);
-
-        String[] options = new String[] { "100px", "200px", "50%", "100%" };
-        for (int i = 0; i < 20; i++) {
-            String componentWidthCategory = "Component " + i + " width";
-            String componentHeightCategory = "Component " + i + " height";
-            createCategory(componentWidthCategory, widthCategory);
-            createCategory(componentHeightCategory, heightCategory);
-
-            createClickAction("auto", componentHeightCategory,
-                    setComponentHeight, Integer.valueOf(i), null);
-            createClickAction("auto", componentWidthCategory,
-                    setComponentWidth, Integer.valueOf(i), null);
-            for (String option : options) {
-                createClickAction(option, componentHeightCategory,
-                        setComponentHeight, Integer.valueOf(i), option);
-                createClickAction(option, componentWidthCategory,
-                        setComponentWidth, Integer.valueOf(i), option);
-            }
-
-        }
-
-    }
-
-    public void componentDetachedFromContainer(ComponentDetachEvent event) {
-        log(event.getClass().getSimpleName() + ": "
-                + event.getDetachedComponent().getClass().getSimpleName()
-                + " detached from "
-                + event.getContainer().getClass().getSimpleName());
-    }
-
-    public void componentAttachedToContainer(ComponentAttachEvent event) {
-        log(event.getClass().getSimpleName() + ": "
-                + event.getAttachedComponent().getClass().getSimpleName()
-                + " attached to "
-                + event.getContainer().getClass().getSimpleName());
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/AbstractComponentTest.java b/tests/src/com/vaadin/tests/components/AbstractComponentTest.java
deleted file mode 100644
index 8344ed216a..0000000000
--- a/tests/src/com/vaadin/tests/components/AbstractComponentTest.java
+++ /dev/null
@@ -1,671 +0,0 @@
-package com.vaadin.tests.components;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-
-import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.util.Log;
-import com.vaadin.tests.util.LoremIpsum;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.MenuBar;
-import com.vaadin.ui.MenuBar.MenuItem;
-
-public abstract class AbstractComponentTest<T extends AbstractComponent>
-        extends AbstractComponentTestCase<T> {
-
-    protected static final String TEXT_SHORT = "Short";
-    protected static final String TEXT_MEDIUM = "This is a semi-long text that might wrap.";
-    protected static final String TEXT_LONG = "This is a long text. "
-            + LoremIpsum.get(500);
-    protected static final String TEXT_VERY_LONG = "This is a very, very long text. "
-            + LoremIpsum.get(5000);
-
-    private static final Resource SELECTED_ICON = new ThemeResource(
-            "../runo/icons/16/ok.png");
-
-    private static final LinkedHashMap<String, String> sizeOptions = new LinkedHashMap<String, String>();
-    static {
-        sizeOptions.put("auto", null);
-        sizeOptions.put("50%", "50%");
-        sizeOptions.put("100%", "100%");
-        for (int w = 200; w < 1000; w += 100) {
-            sizeOptions.put(w + "px", w + "px");
-        }
-    }
-
-    // Menu related
-
-    private MenuItem mainMenu;
-
-    private MenuBar menu;
-
-    private MenuItem settingsMenu;
-
-    private T component;
-
-    // Used to determine if a menuItem should be selected and the other
-    // unselected on click
-    private Set<MenuItem> parentOfSelectableMenuItem = new HashSet<MenuItem>();
-
-    /**
-     * Maps the category name to a menu item
-     */
-    private Map<String, MenuItem> categoryToMenuItem = new HashMap<String, MenuItem>();
-    private Map<MenuItem, String> menuItemToCategory = new HashMap<MenuItem, String>();
-
-    // Logging
-    private Log log;
-
-    protected static final String CATEGORY_STATE = "State";
-    protected static final String CATEGORY_SIZE = "Size";
-    protected static final String CATEGORY_SELECTION = "Selection";
-    protected static final String CATEGORY_LISTENERS = "Listeners";
-    protected static final String CATEGORY_FEATURES = "Features";
-    protected static final String CATEGORY_ACTIONS = "Actions";
-    protected static final String CATEGORY_DECORATIONS = "Decorations";
-
-    @Override
-    protected final void setup() {
-        setTheme("tests-components");
-
-        // Create menu here so it appears before the components
-        addComponent(createMainMenu());
-
-        getLayout().setSizeFull();
-        createLog();
-        super.setup();
-
-        // Create menu actions and trigger default actions
-        createActions();
-
-        // Clear initialization log messages
-        log.clear();
-    }
-
-    private MenuBar createMainMenu() {
-        menu = new MenuBar();
-        menu.setDebugId("menu");
-        mainMenu = menu.addItem("Component", null);
-        settingsMenu = menu.addItem("Settings", null);
-        populateSettingsMenu(settingsMenu);
-
-        return menu;
-    }
-
-    /**
-     * Override to add items to the "settings" menu.
-     * 
-     * NOTE, Call super class first to preserve current order. If you override
-     * this in a class and another class overrides it you might break tests
-     * because the wrong items will be selected.
-     * 
-     * @param settingsMenu
-     */
-    protected void populateSettingsMenu(MenuItem settingsMenu) {
-
-        MenuItem showEventLog = settingsMenu.addItem("Show event log",
-                new MenuBar.Command() {
-
-                    public void menuSelected(MenuItem selectedItem) {
-                        boolean selected = !isSelected(selectedItem);
-                        setLogVisible(selected);
-                        setSelected(selectedItem, selected);
-                    }
-
-                });
-        setSelected(showEventLog, true);
-
-        settingsMenu.addItem("Clear log", new MenuBar.Command() {
-
-            public void menuSelected(MenuItem selectedItem) {
-                log.clear();
-            }
-        });
-        MenuItem layoutSize = settingsMenu.addItem("Parent layout size", null);
-        MenuItem layoutWidth = layoutSize.addItem("Width", null);
-        MenuItem layoutHeight = layoutSize.addItem("Height", null);
-        for (final String name : sizeOptions.keySet()) {
-            layoutWidth.addItem(name, new MenuBar.Command() {
-                public void menuSelected(MenuItem selectedItem) {
-                    getTestComponents().get(0).getParent()
-                            .setWidth(sizeOptions.get(name));
-                    log("Parent layout width set to " + name);
-                }
-            });
-            layoutHeight.addItem(name, new MenuBar.Command() {
-                public void menuSelected(MenuItem selectedItem) {
-                    getTestComponents().get(0).getParent()
-                            .setHeight(sizeOptions.get(name));
-                    log("Parent layout height set to " + name);
-                }
-            });
-        }
-
-    }
-
-    protected void setLogVisible(boolean visible) {
-        log.setVisible(visible);
-    }
-
-    private void createLog() {
-        log = new Log(5).setNumberLogRows(true);
-        getLayout().addComponent(log, 1);
-    }
-
-    /**
-     * By default initializes just one instance of {@link #getTestClass()} using
-     * {@link #constructComponent()}.
-     */
-    @Override
-    protected void initializeComponents() {
-        component = constructComponent();
-        component.setDebugId("testComponent");
-        addTestComponent(component);
-    }
-
-    public T getComponent() {
-        return component;
-    }
-
-    @Override
-    protected void addTestComponent(T c) {
-        super.addTestComponent(c);
-        getLayout().setExpandRatio(c, 1);
-
-    };
-
-    /**
-     * Construct the component that is to be tested. This method uses a no-arg
-     * constructor by default. Override to customize.
-     * 
-     * @return Instance of the component that is to be tested.
-     * @throws IllegalAccessException
-     * @throws InstantiationException
-     */
-    protected T constructComponent() {
-        try {
-            return getTestClass().newInstance();
-        } catch (Exception e) {
-            throw new RuntimeException("Failed to instantiate "
-                    + getTestClass(), e);
-        }
-    }
-
-    /**
-     * Create actions for the component. Remember to call super.createActions()
-     * when overriding.
-     */
-    protected void createActions() {
-        createBooleanAction("Immediate", CATEGORY_STATE, true, immediateCommand);
-        createBooleanAction("Enabled", CATEGORY_STATE, true, enabledCommand);
-        createBooleanAction("Readonly", CATEGORY_STATE, false, readonlyCommand);
-        createBooleanAction("Visible", CATEGORY_STATE, true, visibleCommand);
-        createBooleanAction("Error indicator", CATEGORY_STATE, false,
-                errorIndicatorCommand);
-        createLocaleSelect(CATEGORY_STATE);
-        createErrorMessageSelect(CATEGORY_DECORATIONS);
-
-        createDescriptionSelect(CATEGORY_DECORATIONS);
-        createCaptionSelect(CATEGORY_DECORATIONS);
-        createIconSelect(CATEGORY_DECORATIONS);
-
-        createWidthAndHeightActions(CATEGORY_SIZE);
-
-        createStyleNameSelect(CATEGORY_DECORATIONS);
-
-    }
-
-    private void createStyleNameSelect(String category) {
-        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
-        options.put("-", null);
-        options.put("Light blue background (background-lightblue)",
-                "background-lightblue");
-        options.put("1px red border (border-red-1px)", "border-red-1px");
-        options.put("2px blue border (border-blue-2px)", "border-blue-2px");
-        createComponentStyleNames(options);
-        createSelectAction("Style name", category, options, "-",
-                styleNameCommand);
-
-    }
-
-    protected void createComponentStyleNames(
-            LinkedHashMap<String, String> options) {
-
-    }
-
-    private void createErrorMessageSelect(String category) {
-        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
-        options.put("-", null);
-        options.put(TEXT_SHORT, TEXT_SHORT);
-        options.put("Medium", TEXT_MEDIUM);
-        options.put("Long", TEXT_LONG);
-        options.put("Very long", TEXT_VERY_LONG);
-        createSelectAction("Error message", category, options, "-",
-                errorMessageCommand);
-
-    }
-
-    private void createDescriptionSelect(String category) {
-        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
-        options.put("-", null);
-        options.put(TEXT_SHORT, TEXT_SHORT);
-        options.put("Medium", TEXT_MEDIUM);
-        options.put("Long", TEXT_LONG);
-        options.put("Very long", TEXT_VERY_LONG);
-        createSelectAction("Description / tooltip", category, options, "-",
-                descriptionCommand);
-
-    }
-
-    private void createCaptionSelect(String category) {
-        createSelectAction("Caption", category, createCaptionOptions(),
-                "Short", captionCommand);
-
-    }
-
-    protected LinkedHashMap<String, String> createCaptionOptions() {
-        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
-        options.put("-", null);
-        options.put("Short", TEXT_SHORT);
-        options.put("Medium", TEXT_MEDIUM);
-        options.put("Long", TEXT_LONG);
-        options.put("Very long", TEXT_VERY_LONG);
-        return options;
-    }
-
-    private void createWidthAndHeightActions(String category) {
-        String widthCategory = "Width";
-        String heightCategory = "Height";
-
-        createCategory(widthCategory, category);
-        createCategory(heightCategory, category);
-
-        for (String name : sizeOptions.keySet()) {
-            createClickAction(name, widthCategory, widthCommand,
-                    sizeOptions.get(name));
-            createClickAction(name, heightCategory, heightCommand,
-                    sizeOptions.get(name));
-        }
-
-        // Default to undefined size
-        for (T c : getTestComponents()) {
-            c.setWidth(null);
-            c.setHeight(null);
-        }
-    }
-
-    private void createIconSelect(String category) {
-        LinkedHashMap<String, Resource> options = new LinkedHashMap<String, Resource>();
-        options.put("-", null);
-        options.put("16x16", ICON_16_USER_PNG_CACHEABLE);
-        options.put("32x32", ICON_32_ATTENTION_PNG_CACHEABLE);
-        options.put("64x64", ICON_64_EMAIL_REPLY_PNG_CACHEABLE);
-
-        createSelectAction("Icon", category, options, "-", iconCommand, null);
-    }
-
-    private void createLocaleSelect(String category) {
-        LinkedHashMap<String, Locale> options = new LinkedHashMap<String, Locale>();
-        options.put("-", null);
-        options.put("fi_FI", new Locale("fi", "FI"));
-        options.put("en_US", Locale.US);
-        options.put("zh_CN", Locale.SIMPLIFIED_CHINESE);
-        options.put("fr_FR", Locale.FRANCE);
-
-        createSelectAction("Locale", category, options, "en_US", localeCommand,
-                null);
-    }
-
-    protected void createBooleanAction(String caption, String category,
-            boolean initialState, final Command<T, Boolean> command) {
-        createBooleanAction(caption, category, initialState, command, null);
-    }
-
-    protected <DATATYPE> void createBooleanAction(String caption,
-            String category, boolean initialState,
-            final Command<T, Boolean> command, Object data) {
-        MenuItem categoryItem = getCategoryMenuItem(category);
-        MenuItem item = categoryItem.addItem(caption,
-                menuBooleanCommand(command, data));
-        setSelected(item, initialState);
-        doCommand(caption, command, initialState, data);
-    }
-
-    protected <DATATYPE> void createClickAction(String caption,
-            String category, final Command<T, DATATYPE> command, DATATYPE value) {
-        createClickAction(caption, category, command, value, null);
-    }
-
-    protected <DATATYPE> void createClickAction(String caption,
-            String category, final Command<T, DATATYPE> command,
-            DATATYPE value, Object data) {
-        MenuItem categoryItem = getCategoryMenuItem(category);
-        categoryItem.addItem(caption, menuClickCommand(command, value, data));
-    }
-
-    private MenuItem getCategoryMenuItem(String category) {
-        if (category == null) {
-            return getCategoryMenuItem("Misc");
-        }
-
-        MenuItem item = categoryToMenuItem.get(category);
-        if (item != null) {
-            return item;
-        }
-
-        return createCategory(category, null);
-    }
-
-    /**
-     * Creates category named "category" with id "categoryId" in parent category
-     * "parentCategory". Each categoryId must be globally unique.
-     * 
-     * @param category
-     * @param categoryId
-     * @param parentCategory
-     * @return
-     */
-    protected MenuItem createCategory(String category, String parentCategory) {
-        if (hasCategory(category)) {
-            return categoryToMenuItem.get(category);
-        }
-        MenuItem item;
-        if (parentCategory == null) {
-            item = mainMenu.addItem(category, null);
-        } else {
-            item = getCategoryMenuItem(parentCategory).addItem(category, null);
-        }
-        categoryToMenuItem.put(category, item);
-        menuItemToCategory.put(item, category);
-        return item;
-    }
-
-    protected boolean hasCategory(String categoryId) {
-        return categoryToMenuItem.containsKey(categoryId);
-    }
-
-    protected void removeCategory(String categoryId) {
-        if (!hasCategory(categoryId)) {
-            throw new IllegalArgumentException("Category '" + categoryId
-                    + "' does not exist");
-        }
-
-        MenuItem item = getCategoryMenuItem(categoryId);
-        Object[] children = item.getChildren().toArray();
-        for (Object child : children) {
-            if (menuItemToCategory.containsKey(child)) {
-                removeCategory(menuItemToCategory.get(child));
-            }
-        }
-        // Detach from parent
-        item.getParent().removeChild(item);
-        // Clean mappings
-        categoryToMenuItem.remove(categoryId);
-        menuItemToCategory.remove(item);
-
-    }
-
-    private MenuBar.Command menuBooleanCommand(
-            final com.vaadin.tests.components.ComponentTestCase.Command<T, Boolean> booleanCommand,
-            final Object data) {
-
-        return new MenuBar.Command() {
-            public void menuSelected(MenuItem selectedItem) {
-                boolean selected = !isSelected(selectedItem);
-                doCommand(getText(selectedItem), booleanCommand, selected, data);
-                setSelected(selectedItem, selected);
-            }
-
-        };
-    }
-
-    private <DATATYPE> MenuBar.Command menuClickCommand(
-            final com.vaadin.tests.components.ComponentTestCase.Command<T, DATATYPE> command,
-            final DATATYPE value, final Object data) {
-
-        return new MenuBar.Command() {
-            public void menuSelected(MenuItem selectedItem) {
-                doCommand(getText(selectedItem), command, value, data);
-            }
-
-        };
-    }
-
-    protected void setSelected(MenuItem item, boolean selected) {
-        if (selected) {
-            item.setIcon(SELECTED_ICON);
-        } else {
-            item.setIcon(null);
-        }
-    }
-
-    protected boolean isSelected(MenuItem item) {
-        return (item.getIcon() != null);
-    }
-
-    private <VALUETYPE> MenuBar.Command singleSelectMenuCommand(
-            final com.vaadin.tests.components.ComponentTestCase.Command<T, VALUETYPE> cmd,
-            final VALUETYPE object, final Object data) {
-        return new MenuBar.Command() {
-            public void menuSelected(MenuItem selectedItem) {
-                doCommand(getText(selectedItem), cmd, object, data);
-
-                if (parentOfSelectableMenuItem.contains(selectedItem
-                        .getParent())) {
-                    unselectChildren(selectedItem.getParent());
-                    setSelected(selectedItem, true);
-                }
-            }
-
-        };
-
-    }
-
-    /**
-     * Unselect all child menu items
-     * 
-     * @param parent
-     */
-    protected void unselectChildren(MenuItem parent) {
-        List<MenuItem> children = parent.getChildren();
-        if (children == null) {
-            return;
-        }
-
-        for (MenuItem child : children) {
-            setSelected(child, false);
-        }
-    }
-
-    protected String getText(MenuItem item) {
-        String path = "";
-        MenuItem parent = item.getParent();
-        while (!isCategory(parent)) {
-            path = parent.getText() + "/" + path;
-            parent = parent.getParent();
-        }
-
-        return path + "/" + item.getText();
-    }
-
-    private boolean isCategory(MenuItem item) {
-        return item.getParent() == mainMenu;
-    }
-
-    protected <TYPE> void createSelectAction(
-            String caption,
-            String category,
-            LinkedHashMap<String, TYPE> options,
-            String initialValue,
-            com.vaadin.tests.components.ComponentTestCase.Command<T, TYPE> command) {
-        createSelectAction(caption, category, options, initialValue, command,
-                null);
-
-    }
-
-    protected <TYPE> void createMultiClickAction(
-            String caption,
-            String category,
-            LinkedHashMap<String, TYPE> options,
-            com.vaadin.tests.components.ComponentTestCase.Command<T, TYPE> command,
-            Object data) {
-
-        MenuItem categoryItem = getCategoryMenuItem(category);
-        MenuItem mainItem = categoryItem.addItem(caption, null);
-
-        for (String option : options.keySet()) {
-            MenuBar.Command cmd = menuClickCommand(command,
-                    options.get(option), data);
-            mainItem.addItem(option, cmd);
-        }
-    }
-
-    protected <TYPE> void createMultiToggleAction(
-            String caption,
-            String category,
-            LinkedHashMap<String, TYPE> options,
-            com.vaadin.tests.components.ComponentTestCase.Command<T, Boolean> command,
-            boolean defaultValue) {
-
-        LinkedHashMap<String, Boolean> defaultValues = new LinkedHashMap<String, Boolean>();
-
-        for (String option : options.keySet()) {
-            defaultValues.put(option, defaultValue);
-        }
-
-        createMultiToggleAction(caption, category, options, command,
-                defaultValues);
-    }
-
-    protected <TYPE> void createMultiToggleAction(
-            String caption,
-            String category,
-            LinkedHashMap<String, TYPE> options,
-            com.vaadin.tests.components.ComponentTestCase.Command<T, Boolean> command,
-            LinkedHashMap<String, Boolean> defaultValues) {
-
-        createCategory(caption, category);
-
-        for (String option : options.keySet()) {
-            createBooleanAction(option, caption, defaultValues.get(option),
-                    command, options.get(option));
-
-        }
-    }
-
-    protected <TYPE> void createSelectAction(
-            String caption,
-            String category,
-            LinkedHashMap<String, TYPE> options,
-            String initialValue,
-            com.vaadin.tests.components.ComponentTestCase.Command<T, TYPE> command,
-            Object data) {
-
-        MenuItem parentItem = getCategoryMenuItem(category);
-        MenuItem mainItem = parentItem.addItem(caption, null);
-
-        parentOfSelectableMenuItem.add(mainItem);
-        for (String option : options.keySet()) {
-            MenuBar.Command cmd = singleSelectMenuCommand(command,
-                    options.get(option), data);
-            MenuItem item = mainItem.addItem(option, cmd);
-            if (option.equals(initialValue)) {
-                cmd.menuSelected(item);
-            }
-        }
-    }
-
-    protected LinkedHashMap<String, Integer> createIntegerOptions(int max) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        for (int i = 0; i <= 9 && i <= max; i++) {
-            options.put(String.valueOf(i), i);
-        }
-        for (int i = 10; i <= max; i *= 10) {
-            options.put(String.valueOf(i), i);
-            if (2 * i <= max) {
-                options.put(String.valueOf(2 * i), 2 * i);
-            }
-            if (5 * i <= max) {
-                options.put(String.valueOf(5 * i), 5 * i);
-            }
-        }
-
-        return options;
-    }
-
-    protected LinkedHashMap<String, Double> createDoubleOptions(double max) {
-        LinkedHashMap<String, Double> options = new LinkedHashMap<String, Double>();
-        for (double d = 0; d <= max && d < 10; d += 0.5) {
-            options.put(String.valueOf(d), d);
-        }
-        for (double d = 10; d <= max; d *= 10) {
-            options.put(String.valueOf(d), d);
-            if (2.5 * d <= max) {
-                options.put(String.valueOf(2 * d), 2 * d);
-            }
-            if (5 * d <= max) {
-                options.put(String.valueOf(5 * d), 5 * d);
-            }
-        }
-
-        return options;
-    }
-
-    protected LinkedHashMap<String, Resource> createIconOptions(
-            boolean cacheable) {
-        LinkedHashMap<String, Resource> options = new LinkedHashMap<String, Resource>();
-        options.put("-", null);
-        if (cacheable) {
-            options.put("16x16", ICON_16_USER_PNG_CACHEABLE);
-            options.put("32x32", ICON_32_ATTENTION_PNG_CACHEABLE);
-            options.put("64x64", ICON_64_EMAIL_REPLY_PNG_CACHEABLE);
-        } else {
-            options.put("16x16", ICON_16_USER_PNG_UNCACHEABLE);
-            options.put("32x32", ICON_32_ATTENTION_PNG_UNCACHEABLE);
-            options.put("64x64", ICON_64_EMAIL_REPLY_PNG_UNCACHEABLE);
-
-        }
-        return options;
-    }
-
-    protected void log(String msg) {
-        log.log(msg);
-    }
-
-    protected boolean hasLog() {
-        return log != null;
-    }
-
-    @Override
-    protected <VALUET> void doCommand(String commandName,
-            AbstractComponentTestCase.Command<T, VALUET> command, VALUET value,
-            Object data) {
-        if (hasLog()) {
-            log("Command: " + commandName + "(" + value + ")");
-        }
-        super.doCommand(commandName, command, value, data);
-    }
-
-    @Override
-    public void terminalError(com.vaadin.terminal.Terminal.ErrorEvent event) {
-        String logMsg = "Exception occured, "
-                + event.getThrowable().getClass().getName();
-
-        String exceptionMsg = event.getThrowable().getMessage();
-        if (exceptionMsg != null && exceptionMsg.length() > 0) {
-            logMsg += exceptionMsg;
-        }
-        log.log(logMsg);
-        final Throwable t = event.getThrowable();
-        if (t != null) {
-            t.printStackTrace();
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/AbstractComponentTestCase.java b/tests/src/com/vaadin/tests/components/AbstractComponentTestCase.java
deleted file mode 100644
index 1b04198da0..0000000000
--- a/tests/src/com/vaadin/tests/components/AbstractComponentTestCase.java
+++ /dev/null
@@ -1,219 +0,0 @@
-package com.vaadin.tests.components;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
-
-import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.terminal.UserError;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.Layout.SpacingHandler;
-
-public abstract class AbstractComponentTestCase<T extends AbstractComponent>
-        extends TestBase {
-
-    protected static final ThemeResource ICON_16_HELP_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/16/help.png");
-    protected static final ThemeResource ICON_16_FOLDER_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/16/folder.png");
-    protected static final ThemeResource ICON_16_ERROR_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/16/error.png");
-    protected static final ThemeResource ICON_16_USER_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/16/user.png");
-    protected static final ThemeResource ICON_16_USER_PNG_UNCACHEABLE = uncacheableThemeResource("../runo/icons/16/user.png");
-    protected static final ThemeResource ICON_32_ATTENTION_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/32/attention.png");
-    protected static final ThemeResource ICON_32_ATTENTION_PNG_UNCACHEABLE = uncacheableThemeResource("../runo/icons/32/attention.png");
-    protected static final ThemeResource ICON_64_EMAIL_REPLY_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/64/email-reply.png");
-    protected static final ThemeResource ICON_64_EMAIL_REPLY_PNG_UNCACHEABLE = uncacheableThemeResource("../runo/icons/64/email-reply.png");
-
-    private List<T> testComponents = new ArrayList<T>();
-
-    abstract protected Class<T> getTestClass();
-
-    protected static ThemeResource uncacheableThemeResource(
-            String resourceLocation) {
-        return new ThemeResource(resourceLocation + "?" + new Date().getTime());
-    }
-
-    protected static ThemeResource cacheableThemeResource(
-            String resourceLocation) {
-        return new ThemeResource(resourceLocation);
-    }
-
-    abstract protected void initializeComponents();
-
-    @Override
-    protected void setup() {
-        ((SpacingHandler) getLayout()).setSpacing(true);
-
-        // Create Components
-        initializeComponents();
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-    protected void addTestComponent(T c) {
-        testComponents.add(c);
-        addComponent(c);
-    }
-
-    protected List<T> getTestComponents() {
-        return testComponents;
-    }
-
-    public interface Command<T, VALUETYPE extends Object> {
-        public void execute(T c, VALUETYPE value, Object data);
-    }
-
-    /* COMMANDS */
-
-    protected Command<T, String> widthCommand = new Command<T, String>() {
-
-        public void execute(T t, String value, Object data) {
-            t.setWidth(value);
-        }
-    };
-    protected Command<T, String> heightCommand = new Command<T, String>() {
-
-        public void execute(T t, String value, Object data) {
-            t.setHeight(value);
-        }
-    };
-
-    protected Command<T, Boolean> enabledCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean enabled, Object data) {
-            c.setEnabled(enabled);
-        }
-    };
-
-    protected Command<T, Boolean> immediateCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean immediate, Object data) {
-            c.setImmediate(immediate);
-        }
-    };
-
-    protected Command<T, Boolean> errorIndicatorCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean enabled, Object data) {
-            if (enabled) {
-                c.setComponentError(new UserError(errorMessage));
-            } else {
-                c.setComponentError(null);
-
-            }
-        }
-    };
-    private String errorMessage = null;
-
-    protected Command<T, String> errorMessageCommand = new Command<T, String>() {
-
-        public void execute(T c, String value, Object data) {
-            errorMessage = value;
-            if (c.getComponentError() != null) {
-                errorIndicatorCommand.execute(c, true, null);
-            }
-
-        }
-
-    };
-
-    // TODO Move to AbstractFieldTestCase
-    protected Command<T, Boolean> requiredCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean enabled, Object data) {
-            if (c instanceof Field) {
-                ((Field) c).setRequired(enabled);
-            } else {
-                throw new IllegalArgumentException(c.getClass().getName()
-                        + " is not a field and cannot be set to required");
-            }
-        }
-    };
-    protected Command<T, String> requiredErrorMessageCommand = new Command<T, String>() {
-
-        public void execute(T c, String value, Object data) {
-            ((Field) c).setRequiredError(value);
-        }
-
-    };
-
-    protected Command<T, String> descriptionCommand = new Command<T, String>() {
-        public void execute(T c, String value, Object data) {
-            c.setDescription(value);
-        }
-    };
-
-    protected Command<T, Boolean> readonlyCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean enabled, Object data) {
-            c.setReadOnly(enabled);
-        }
-    };
-
-    protected Command<T, Boolean> visibleCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean enabled, Object data) {
-            c.setVisible(enabled);
-        }
-    };
-
-    protected Command<T, Resource> iconCommand = new Command<T, Resource>() {
-
-        public void execute(T c, Resource value, Object data) {
-            c.setIcon(value);
-        }
-
-    };
-    protected Command<T, String> captionCommand = new Command<T, String>() {
-
-        public void execute(T c, String value, Object data) {
-            c.setCaption(value);
-        }
-
-    };
-
-    protected Command<T, Locale> localeCommand = new Command<T, Locale>() {
-
-        public void execute(T c, Locale value, Object data) {
-            c.setLocale(value);
-        }
-
-    };
-
-    protected <VALUET> void doCommand(Command<T, VALUET> command, VALUET value) {
-        doCommand(command, value, null);
-    }
-
-    protected <VALUET> void doCommand(Command<T, VALUET> command, VALUET value,
-            Object data) {
-        for (T c : getTestComponents()) {
-            command.execute(c, value, data);
-        }
-    }
-
-    protected <VALUET> void doCommand(String commandName,
-            Command<T, VALUET> command, VALUET value) {
-        doCommand(commandName, command, value, null);
-    }
-
-    protected <VALUET> void doCommand(String commandName,
-            Command<T, VALUET> command, VALUET value, Object data) {
-        doCommand(command, value, data);
-    }
-
-    protected Command<T, String> styleNameCommand = new Command<T, String>() {
-        public void execute(T c, String value, Object data) {
-            c.setStyleName(value);
-        }
-    };
-
-    @Override
-    protected String getDescription() {
-        return "Generic test case for " + getTestClass().getSimpleName();
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/AbstractLayoutTest.java b/tests/src/com/vaadin/tests/components/AbstractLayoutTest.java
deleted file mode 100644
index f6b979c698..0000000000
--- a/tests/src/com/vaadin/tests/components/AbstractLayoutTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package com.vaadin.tests.components;
-
-import java.util.LinkedHashMap;
-
-import com.vaadin.ui.AbstractLayout;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Layout.AlignmentHandler;
-import com.vaadin.ui.Layout.MarginInfo;
-import com.vaadin.ui.Layout.SpacingHandler;
-
-public abstract class AbstractLayoutTest<T extends AbstractLayout> extends
-        AbstractComponentContainerTest<T> {
-
-    protected static final String CATEGORY_LAYOUT_FEATURES = "Layout features";
-    private Command<T, MarginInfo> marginCommand = new Command<T, MarginInfo>() {
-
-        public void execute(T c, MarginInfo value, Object data) {
-            c.setMargin(value);
-
-        }
-    };
-
-    protected Command<T, Boolean> spacingCommand = new Command<T, Boolean>() {
-        public void execute(T c, Boolean value, Object data) {
-            ((SpacingHandler) c).setSpacing(value);
-        }
-    };
-
-    private Command<T, Integer> setComponentAlignment = new Command<T, Integer>() {
-
-        public void execute(T c, Integer value, Object alignment) {
-            Component child = getComponentAtIndex(c, value);
-            ((AlignmentHandler) c).setComponentAlignment(child,
-                    (Alignment) alignment);
-        }
-    };
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-        createMarginsSelect(CATEGORY_LAYOUT_FEATURES);
-        if (SpacingHandler.class.isAssignableFrom(getTestClass())) {
-            createSpacingSelect(CATEGORY_LAYOUT_FEATURES);
-        }
-        if (AlignmentHandler.class.isAssignableFrom(getTestClass())) {
-            createChangeComponentAlignmentAction(CATEGORY_LAYOUT_FEATURES);
-        }
-
-    }
-
-    private void createMarginsSelect(String category) {
-        LinkedHashMap<String, MarginInfo> options = new LinkedHashMap<String, MarginInfo>();
-        options.put("off", new MarginInfo(false));
-        options.put("all", new MarginInfo(true));
-        options.put("left", new MarginInfo(false, false, false, true));
-        options.put("right", new MarginInfo(false, true, false, false));
-        options.put("top", new MarginInfo(true, false, false, false));
-        options.put("bottom", new MarginInfo(false, false, true, false));
-        options.put("left-right", new MarginInfo(false, true, false, true));
-        options.put("top-bottom", new MarginInfo(true, false, true, false));
-
-        createSelectAction("Margins", category, options, "off", marginCommand);
-    }
-
-    private void createSpacingSelect(String category) {
-        createBooleanAction("Spacing", category, false, spacingCommand);
-    }
-
-    private void createChangeComponentAlignmentAction(String category) {
-        String alignmentCategory = "Component alignment";
-        createCategory(alignmentCategory, category);
-
-        LinkedHashMap<String, Alignment> options = new LinkedHashMap<String, Alignment>();
-        options.put("Top left", Alignment.TOP_LEFT);
-        options.put("Top center", Alignment.TOP_CENTER);
-        options.put("Top right", Alignment.TOP_RIGHT);
-
-        options.put("Middle left", Alignment.MIDDLE_LEFT);
-        options.put("Middle center", Alignment.MIDDLE_CENTER);
-        options.put("Middle right", Alignment.MIDDLE_RIGHT);
-
-        options.put("Bottom left", Alignment.BOTTOM_LEFT);
-        options.put("Bottom center", Alignment.BOTTOM_CENTER);
-        options.put("Bottom right", Alignment.BOTTOM_RIGHT);
-
-        for (int i = 0; i < 20; i++) {
-            String componentAlignmentCategory = "Component " + i + " alignment";
-            createCategory(componentAlignmentCategory, alignmentCategory);
-
-            for (String option : options.keySet()) {
-                createClickAction(option, componentAlignmentCategory,
-                        setComponentAlignment, Integer.valueOf(i),
-                        options.get(option));
-            }
-
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/AbstractOrderedLayoutTest.java b/tests/src/com/vaadin/tests/components/AbstractOrderedLayoutTest.java
deleted file mode 100644
index d6cbe8590d..0000000000
--- a/tests/src/com/vaadin/tests/components/AbstractOrderedLayoutTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.vaadin.tests.components;
-
-import java.util.LinkedHashMap;
-
-import com.vaadin.event.LayoutEvents.LayoutClickEvent;
-import com.vaadin.event.LayoutEvents.LayoutClickListener;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Component;
-
-public abstract class AbstractOrderedLayoutTest<T extends AbstractOrderedLayout>
-        extends AbstractLayoutTest<T> implements LayoutClickListener {
-
-    private Command<T, Boolean> layoutClickListenerCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((LayoutClickListener) AbstractOrderedLayoutTest.this);
-            } else {
-
-            }
-
-        }
-    };
-
-    private Command<T, Integer> setComponentExpandRatio = new Command<T, Integer>() {
-
-        public void execute(T c, Integer value, Object ratio) {
-            Component child = getComponentAtIndex(c, value);
-            c.setExpandRatio(child, (Float) ratio);
-        }
-    };
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-
-        createLayoutClickListenerAction(CATEGORY_LISTENERS);
-        createChangeComponentExpandRatioAction(CATEGORY_LAYOUT_FEATURES);
-        // Set a root style so we can see the component. Can be overridden by
-        // setting the style name in the UI
-        for (T c : getTestComponents()) {
-            c.setStyleName("background-lightblue");
-        }
-    }
-
-    private void createLayoutClickListenerAction(String category) {
-        createBooleanAction("Layout click listener", category, false,
-                layoutClickListenerCommand);
-    }
-
-    private void createChangeComponentExpandRatioAction(String category) {
-        String expandRatioCategory = "Component expand ratio";
-        createCategory(expandRatioCategory, category);
-
-        LinkedHashMap<String, Float> options = new LinkedHashMap<String, Float>();
-        options.put("0", 0f);
-        options.put("0.5", 0.5f);
-        for (float f = 1; f <= 5; f++) {
-            options.put(String.valueOf(f), f);
-        }
-
-        for (int i = 0; i < 20; i++) {
-            String componentExpandRatioCategory = "Component " + i
-                    + " expand ratio";
-            createCategory(componentExpandRatioCategory, expandRatioCategory);
-
-            for (String option : options.keySet()) {
-                createClickAction(option, componentExpandRatioCategory,
-                        setComponentExpandRatio, Integer.valueOf(i),
-                        options.get(option));
-            }
-
-        }
-
-    }
-
-    public void layoutClick(LayoutClickEvent event) {
-        log(event.getClass().getSimpleName() + ": button="
-                + event.getButtonName() + ", childComponent="
-                + event.getChildComponent().getClass().getSimpleName()
-                + ", relativeX=" + event.getRelativeX() + ", relativeY="
-                + event.getRelativeY());
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/AbstractTestCase.java b/tests/src/com/vaadin/tests/components/AbstractTestCase.java
deleted file mode 100644
index ded579f58c..0000000000
--- a/tests/src/com/vaadin/tests/components/AbstractTestCase.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.vaadin.tests.components;
-
-import com.vaadin.Application;
-import com.vaadin.service.ApplicationContext;
-import com.vaadin.terminal.gwt.server.AbstractWebApplicationContext;
-import com.vaadin.terminal.gwt.server.WebBrowser;
-
-public abstract class AbstractTestCase extends Application {
-
-    protected abstract String getDescription();
-
-    protected abstract Integer getTicketNumber();
-
-    protected WebBrowser getBrowser() {
-        ApplicationContext context = getContext();
-        if (context instanceof AbstractWebApplicationContext) {
-            WebBrowser webBrowser = ((AbstractWebApplicationContext) context)
-                    .getBrowser();
-            return webBrowser;
-        }
-
-        return null;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/ComponentTestCase.java b/tests/src/com/vaadin/tests/components/ComponentTestCase.java
deleted file mode 100644
index 1e15f7a47b..0000000000
--- a/tests/src/com/vaadin/tests/components/ComponentTestCase.java
+++ /dev/null
@@ -1,189 +0,0 @@
-package com.vaadin.tests.components;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.NativeSelect;
-
-public abstract class ComponentTestCase<T extends AbstractComponent> extends
-        AbstractComponentTestCase<T> {
-
-    protected static final Object CAPTION = "caption";
-
-    private HorizontalLayout actionLayout;
-
-    @Override
-    protected final void setup() {
-        // Create action layout so it appears before the components
-        actionLayout = createActionLayout();
-        addComponent(actionLayout);
-
-        super.setup();
-
-        // Create actions and add to layout
-        populateActionLayout();
-    }
-
-    protected void populateActionLayout() {
-        for (Component c : createActions()) {
-            addAction(c);
-        }
-
-    }
-
-    private void addAction(Component c) {
-        actionLayout.addComponent(c);
-        actionLayout.setComponentAlignment(c, Alignment.BOTTOM_LEFT);
-    }
-
-    /**
-     * Override to provide custom actions for the test case.
-     * 
-     * @param actions
-     *            Array with default actions. Add custom actions to this. Never
-     *            null.
-     */
-    protected void createCustomActions(List<Component> actions) {
-
-    }
-
-    /**
-     * Method that creates the "actions" shown in the upper part of the screen.
-     * Override this only if you do not want the default actions. Custom actions
-     * can be added through #createCustomActions();
-     * 
-     * @return A List with actions to which more actions can be added.
-     */
-    protected List<Component> createActions() {
-        ArrayList<Component> actions = new ArrayList<Component>();
-
-        actions.add(createEnabledAction(true));
-        actions.add(createReadonlyAction(false));
-
-        actions.add(createErrorIndicatorAction(false));
-        if (Field.class.isAssignableFrom(getTestClass())) {
-            actions.add(createRequiredAction(false));
-        }
-
-        createCustomActions(actions);
-
-        return actions;
-    }
-
-    private HorizontalLayout createActionLayout() {
-        HorizontalLayout actionLayout = new HorizontalLayout();
-        actionLayout.setSpacing(true);
-        actionLayout.setMargin(true);
-
-        return actionLayout;
-    }
-
-    protected Component createErrorIndicatorAction(boolean initialState) {
-        return createBooleanAction("Error indicators", initialState,
-                errorIndicatorCommand);
-    }
-
-    protected Component createEnabledAction(boolean initialState) {
-        return createBooleanAction("Enabled", initialState, enabledCommand);
-    }
-
-    protected Component createReadonlyAction(boolean initialState) {
-        return createBooleanAction("Readonly", initialState, readonlyCommand);
-    }
-
-    protected Component createRequiredAction(boolean initialState) {
-        return createBooleanAction("Required", initialState, requiredCommand);
-    }
-
-    protected Component createBooleanAction(String caption,
-            boolean initialState, final Command<T, Boolean> command) {
-
-        CheckBox checkBox = new CheckBox(caption);
-        checkBox.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                boolean enabled = (Boolean) event.getButton().getValue();
-                doCommand(command, enabled);
-            }
-        });
-
-        checkBox.setValue(initialState);
-        checkBox.setImmediate(true);
-
-        checkBox.setDebugId("checkboxaction-" + caption);
-        // Set default value for all components
-        doCommand(command, initialState);
-
-        return checkBox;
-    }
-
-    protected Component createButtonAction(String caption,
-            final Command<T, Boolean> command) {
-
-        Button button = new Button(caption);
-        button.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                boolean enabled = (Boolean) event.getButton().getValue();
-                doCommand(command, enabled);
-            }
-        });
-
-        button.setDebugId("buttonaction-" + caption);
-        button.setImmediate(true);
-
-        return button;
-    }
-
-    protected <TYPE> Component createSelectAction(String caption,
-            LinkedHashMap<String, TYPE> options, String initialValue,
-            final Command<T, TYPE> command) {
-        final String CAPTION = "caption";
-        final String VALUE = "value";
-
-        final NativeSelect select = new NativeSelect(caption);
-        select.addContainerProperty(CAPTION, String.class, "");
-        select.addContainerProperty(VALUE, Object.class, "");
-        select.setItemCaptionPropertyId(CAPTION);
-        select.setNullSelectionAllowed(false);
-        select.addListener(new Property.ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                Object itemId = event.getProperty().getValue();
-                Item item = select.getItem(itemId);
-                @SuppressWarnings("unchecked")
-                TYPE value = (TYPE) item.getItemProperty(VALUE).getValue();
-                doCommand(command, value);
-
-            }
-        });
-
-        for (String itemCaption : options.keySet()) {
-            Object itemId = new Object();
-            Item i = select.addItem(itemId);
-            i.getItemProperty(CAPTION).setValue(itemCaption);
-            i.getItemProperty(VALUE).setValue(options.get(itemCaption));
-            if (itemCaption.equals(initialValue)) {
-                select.setValue(itemId);
-            }
-
-        }
-
-        select.setDebugId("selectaction-" + caption);
-
-        select.setImmediate(true);
-
-        return select;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/CustomComponentwithUndefinedSize.java b/tests/src/com/vaadin/tests/components/CustomComponentwithUndefinedSize.java
deleted file mode 100644
index 57b81ddecc..0000000000
--- a/tests/src/com/vaadin/tests/components/CustomComponentwithUndefinedSize.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.vaadin.tests.components;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.VerticalLayout;
-
-public class CustomComponentwithUndefinedSize extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "A custom component with no size definition should not prevent scrollbars from being shown when its contents is larger than its parent";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2459;
-    }
-
-    @Override
-    protected void setup() {
-
-        TabSheet tabs = new TabSheet();
-        tabs.setSizeFull();
-        MyCustomComponent mcc = new MyCustomComponent();
-        mcc.setSizeUndefined();
-
-        // Doesn't work
-        tabs.addTab(mcc, "Doesn't work (CustomComponent)", null);
-
-        // Works:
-        tabs.addTab(mcc.buildLayout(),
-                "Works (no CustomComponent, same layout)", null);
-
-        addComponent(tabs);
-        getLayout().setSizeFull();
-    }
-
-    private int step = 0;
-
-    public class MyCustomComponent extends CustomComponent {
-        public MyCustomComponent() {
-            setCompositionRoot(buildLayout());
-        }
-
-        public Layout buildLayout() {
-            VerticalLayout layout = new VerticalLayout();
-            final Panel widePanel = new Panel("too big");
-            widePanel.setSizeUndefined();
-            widePanel.setWidth("2000px");
-            widePanel.setHeight("200px");
-            layout.addComponent(widePanel);
-            Button button = new Button("Change panel size",
-                    new ClickListener() {
-
-                        public void buttonClick(ClickEvent event) {
-                            switch (step++ % 4) {
-                            case 0:
-                                widePanel.setWidth("200px");
-                                break;
-                            case 1:
-                                widePanel.setHeight("2000px");
-                                break;
-                            case 2:
-                                widePanel.setWidth("2000px");
-                                break;
-                            case 3:
-                                widePanel.setHeight("200px");
-                                break;
-                            }
-
-                        }
-                    });
-            widePanel.addComponent(button);
-            layout.setSizeUndefined();
-            return layout;
-        }
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/ErrorMessages.html b/tests/src/com/vaadin/tests/components/ErrorMessages.html
deleted file mode 100644
index a33cb484f9..0000000000
--- a/tests/src/com/vaadin/tests/components/ErrorMessages.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.ErrorMessages</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsErrorMessages::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip1</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsErrorMessages::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip2</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsErrorMessages::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip3</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/ErrorMessages.java b/tests/src/com/vaadin/tests/components/ErrorMessages.java
deleted file mode 100644
index d4008a4dfb..0000000000
--- a/tests/src/com/vaadin/tests/components/ErrorMessages.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.vaadin.tests.components;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.vaadin.terminal.CompositeErrorMessage;
-import com.vaadin.terminal.UserError;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.TextField;
-
-public class ErrorMessages extends TestBase {
-
-    @Override
-    protected void setup() {
-        Button bb = new Button("Button with CompositeError");
-        List<UserError> errors = new ArrayList<UserError>();
-        errors.add(new UserError("Error 1"));
-        errors.add(new UserError("Error 2"));
-        bb.setComponentError(new CompositeErrorMessage(errors));
-        addComponent(bb);
-
-        TextField tf = new TextField("", "Textfield with UserError");
-        tf.setComponentError(new UserError("This is a failure"));
-        addComponent(tf);
-
-        ComboBox cb = new ComboBox("ComboBox with description and UserError");
-        cb.setDescription("This is a combobox");
-        cb.setComponentError(new UserError("This is a failure"));
-        addComponent(cb);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The components all have error messages that should appear when hovering them";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3712;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/FocusAndBlurListeners.java b/tests/src/com/vaadin/tests/components/FocusAndBlurListeners.java
deleted file mode 100644
index 267807b16b..0000000000
--- a/tests/src/com/vaadin/tests/components/FocusAndBlurListeners.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package com.vaadin.tests.components;
-
-import java.util.Date;
-
-import com.vaadin.event.FieldEvents.BlurEvent;
-import com.vaadin.event.FieldEvents.BlurListener;
-import com.vaadin.event.FieldEvents.FocusEvent;
-import com.vaadin.event.FieldEvents.FocusListener;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.NativeButton;
-import com.vaadin.ui.OptionGroup;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-public class FocusAndBlurListeners extends TestBase {
-
-    private FocusListener focusListener = new FocusListener() {
-
-        public void focus(FocusEvent event) {
-            Label msg = new Label(new Date() + " Focused "
-                    + event.getComponent().getCaption());
-            messages.addComponentAsFirst(msg);
-        }
-    };
-    private BlurListener blurListener = new BlurListener() {
-
-        public void blur(BlurEvent event) {
-            Label msg = new Label(new Date() + " Blurred "
-                    + event.getComponent().getCaption());
-            messages.addComponentAsFirst(msg);
-
-        }
-    };
-    private VerticalLayout messages = new VerticalLayout();
-
-    @Override
-    protected void setup() {
-        Layout l = getLayout();
-
-        TextField tf = new TextField("TextField");
-        l.addComponent(tf);
-
-        DateField df = new DateField("DateField");
-        l.addComponent(df);
-
-        ComboBox cb = new ComboBox("ComboBox");
-        l.addComponent(cb);
-
-        Button btn = new Button("Button");
-        l.addComponent(btn);
-
-        NativeButton nbtn = new NativeButton("NativeButton");
-        l.addComponent(nbtn);
-
-        CheckBox chkb = new CheckBox("CheckBox");
-        l.addComponent(chkb);
-
-        OptionGroup og = createOptionGroup("OptionGroup");
-        og.setMultiSelect(false);
-        l.addComponent(og);
-
-        final OptionGroup ogm = createOptionGroup("OptionGroup (multiselect)");
-        ogm.setMultiSelect(true);
-        l.addComponent(ogm);
-
-        btn.addListener(new ClickListener() {
-
-            private int i;
-
-            public void buttonClick(ClickEvent event) {
-                ogm.addItem("newItem" + i++);
-
-            }
-        });
-
-        tf.addListener(focusListener);
-        tf.addListener(blurListener);
-        df.addListener(focusListener);
-        df.addListener(blurListener);
-        cb.addListener(focusListener);
-        cb.addListener(blurListener);
-        btn.addListener(focusListener);
-        btn.addListener(blurListener);
-        nbtn.addListener(focusListener);
-        nbtn.addListener(blurListener);
-        chkb.addListener(focusListener);
-        chkb.addListener(blurListener);
-        og.addListener(focusListener);
-        og.addListener(blurListener);
-        ogm.addListener(focusListener);
-        ogm.addListener(blurListener);
-
-        l.addComponent(messages);
-
-    }
-
-    private OptionGroup createOptionGroup(String caption) {
-        OptionGroup og = new OptionGroup(caption);
-        og.addItem("Option 0");
-        og.addItem("Option 1");
-        og.addItem("Option 2");
-        return og;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Testing blur and focus listeners added in 6.2";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/FocusFromShortcutAction.java b/tests/src/com/vaadin/tests/components/FocusFromShortcutAction.java
deleted file mode 100644
index 124f2b9cdf..0000000000
--- a/tests/src/com/vaadin/tests/components/FocusFromShortcutAction.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.vaadin.tests.components;
-
-import java.util.Arrays;
-
-import com.vaadin.event.ShortcutAction.KeyCode;
-import com.vaadin.event.ShortcutAction.ModifierKey;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.TextField;
-
-public class FocusFromShortcutAction extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Select select = new Select("Select", Arrays.asList("Option 1",
-                "Option 2"));
-        final TextField text = new TextField("Text");
-
-        addComponent(select);
-        addComponent(text);
-        Button focusText = new Button("Focus text", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                text.focus();
-            }
-        });
-        focusText.setClickShortcut(KeyCode.T, ModifierKey.ALT);
-
-        addComponent(focusText);
-        Button focusSelect = new Button("Focus select",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        select.focus();
-                    }
-                });
-        focusSelect.setClickShortcut(KeyCode.S, ModifierKey.ALT);
-        addComponent(focusSelect);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The option drop down of the Focus select should not be opened when the \"Focus select\" button is triggered by clicking it with the mouse or with the associated shortcut key Alt + S";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return Integer.valueOf(7539);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/HierarchicalContainerSorting.java b/tests/src/com/vaadin/tests/components/HierarchicalContainerSorting.java
deleted file mode 100644
index 1f0f1bd923..0000000000
--- a/tests/src/com/vaadin/tests/components/HierarchicalContainerSorting.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package com.vaadin.tests.components;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Tree;
-
-public class HierarchicalContainerSorting extends TestBase {
-    IndexedContainer hierarchicalContainer = new HierarchicalContainer();
-
-    IndexedContainer indexedContainer = new IndexedContainer();
-
-    @Override
-    public void setup() {
-
-        populateContainer(indexedContainer);
-        populateContainer(hierarchicalContainer);
-
-        sort(indexedContainer);
-        sort(hierarchicalContainer);
-
-        HorizontalLayout hl = new HorizontalLayout();
-
-        Tree tree1 = new Tree("Tree with IndexedContainer");
-        tree1.setContainerDataSource(indexedContainer);
-        tree1.setItemCaptionPropertyId("name");
-        hl.addComponent(tree1);
-
-        Tree tree2 = new Tree("Tree with HierarchicalContainer");
-        tree2.setContainerDataSource(hierarchicalContainer);
-        tree2.setItemCaptionPropertyId("name");
-        for (Object id : tree2.rootItemIds()) {
-            tree2.expandItemsRecursively(id);
-        }
-        hl.addComponent(tree2);
-
-        addComponent(hl);
-    }
-
-    private static void sort(IndexedContainer container) {
-        Object[] properties = new Object[1];
-        properties[0] = "name";
-
-        boolean[] ascending = new boolean[1];
-        ascending[0] = true;
-
-        container.sort(properties, ascending);
-    }
-
-    private static void populateContainer(IndexedContainer container) {
-        container.addContainerProperty("name", String.class, null);
-
-        addItem(container, "Games", null);
-        addItem(container, "Call of Duty", "Games");
-        addItem(container, "Might and Magic", "Games");
-        addItem(container, "Fallout", "Games");
-        addItem(container, "Red Alert", "Games");
-
-        addItem(container, "Cars", null);
-        addItem(container, "Toyota", "Cars");
-        addItem(container, "Volvo", "Cars");
-        addItem(container, "Audi", "Cars");
-        addItem(container, "Ford", "Cars");
-
-        addItem(container, "Natural languages", null);
-        addItem(container, "Swedish", "Natural languages");
-        addItem(container, "English", "Natural languages");
-        addItem(container, "Finnish", "Natural languages");
-
-        addItem(container, "Programming languages", null);
-        addItem(container, "C++", "Programming languages");
-        addItem(container, "PHP", "Programming languages");
-        addItem(container, "Java", "Programming languages");
-        addItem(container, "Python", "Programming languages");
-
-    }
-
-    private static int index = 0;
-    private static Map<String, Integer> nameToId = new HashMap<String, Integer>();
-
-    public static void addItem(IndexedContainer container, String string,
-            String parent) {
-        nameToId.put(string, index);
-        Item item = container.addItem(index);
-        item.getItemProperty("name").setValue(string);
-
-        if (parent != null && container instanceof HierarchicalContainer) {
-            ((HierarchicalContainer) container).setParent(index,
-                    nameToId.get(parent));
-        }
-
-        index++;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The two trees contain the same data, one uses IndexedContainer, one uses HierarchicalContainer. Both should be sorted, both the root nodes and the children.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3095;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/LayoutAttachListenerInfo.html b/tests/src/com/vaadin/tests/components/LayoutAttachListenerInfo.html
deleted file mode 100644
index 10dd21d240..0000000000
--- a/tests/src/com/vaadin/tests/components/LayoutAttachListenerInfo.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.LayoutAttachListenerInfo?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsLayoutAttachListenerInfo::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>Top50pxLeft50px</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsLayoutAttachListenerInfo::Root/VNotification[0]/HTML[0]/domChild[0]</td>
-	<td>351,23</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>1000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsLayoutAttachListenerInfo::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VOptionGroup[0]/domChild[1]/domChild[0]</td>
-	<td>8,7</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsLayoutAttachListenerInfo::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>AttachedToIndex0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsLayoutAttachListenerInfo::Root/VNotification[0]/HTML[0]/domChild[0]</td>
-	<td>351,23</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>1000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsLayoutAttachListenerInfo::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VOptionGroup[0]/domChild[2]/domChild[0]</td>
-	<td>3,5</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsLayoutAttachListenerInfo::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>1000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>AttachedTo23</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/LayoutAttachListenerInfo.java b/tests/src/com/vaadin/tests/components/LayoutAttachListenerInfo.java
deleted file mode 100644
index 7ed44768fd..0000000000
--- a/tests/src/com/vaadin/tests/components/LayoutAttachListenerInfo.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package com.vaadin.tests.components;
-
-import java.util.Arrays;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.ui.AbsoluteLayout;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.ComponentContainer.ComponentAttachEvent;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.OptionGroup;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window.Notification;
-
-
-public class LayoutAttachListenerInfo extends TestBase {
-
-    private VerticalLayout content = new VerticalLayout();
-
-    @Override
-    protected void setup() {
-
-        OptionGroup layouts = new OptionGroup("Layouts", Arrays.asList(
-                "AbsoluteLayout", "OrderedLayout", "GridLayout"));
-        layouts.select("AbsoluteLayout");
-        layouts.setImmediate(true);
-        layouts.addListener(new ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                if (event.getProperty().getValue().equals("AbsoluteLayout")) {
-                    testAbsoluteLayout();
-                } else if (event.getProperty().getValue()
-                        .equals("OrderedLayout")) {
-                    testOrderedLayout();
-                } else if (event.getProperty().getValue().equals("GridLayout")) {
-                    testGridLayout();
-                }
-            }
-        });
-
-        addComponent(layouts);
-        addComponent(content);
-
-        testAbsoluteLayout();
-    }
-
-    @Override
-    protected String getDescription() {
-        return "When pressing the attach button a Label with the value \"X\" "
-                + "should get added to the selected layout and a notification of the position"
-                + " of the component should be visible";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6368;
-    }
-
-    private void testAbsoluteLayout() {
-        content.removeAllComponents();
-
-        final AbsoluteLayout a = new AbsoluteLayout();
-        a.setWidth("300px");
-        a.setHeight("300px");
-        a.addListener(new ComponentContainer.ComponentAttachListener() {
-            public void componentAttachedToContainer(ComponentAttachEvent event) {
-                AbsoluteLayout layout = (AbsoluteLayout) event.getContainer();
-                AbsoluteLayout.ComponentPosition position = layout
-                        .getPosition(event.getAttachedComponent());
-
-                getMainWindow().showNotification(
-                        "Attached to " + position.getCSSString(),
-                        Notification.TYPE_ERROR_MESSAGE);
-            }
-        });
-        content.addComponent(a);
-
-        content.addComponent(new Button("Attach label to layout",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        a.addComponent(new Label("X"), "top:50px;left:50px");
-                    }
-                }));
-    }
-
-    private void testOrderedLayout(){
-        content.removeAllComponents();
-        
-        final VerticalLayout v = new VerticalLayout();
-        v.setWidth("300px");
-        v.setHeight("300px");
-        v.addListener(new ComponentContainer.ComponentAttachListener() {
-            public void componentAttachedToContainer(ComponentAttachEvent event) {
-                VerticalLayout layout = (VerticalLayout) event.getContainer();
-                getMainWindow().showNotification(
-                        "Attached to index "
-                                + layout.getComponentIndex(event
-                                        .getAttachedComponent()),
-                        Notification.TYPE_ERROR_MESSAGE);
-            }
-        });
-        content.addComponent(v);
-
-        content.addComponent(new Button("Attach label to layout",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        v.addComponent(new Label("X"));
-
-                    }
-                }));
-    }
-
-    private void testGridLayout() {
-        content.removeAllComponents();
-
-        final GridLayout g = new GridLayout(4, 4);
-        g.setWidth("300px");
-        g.setHeight("300px");
-        g.addListener(new ComponentContainer.ComponentAttachListener() {
-            public void componentAttachedToContainer(ComponentAttachEvent event) {
-                GridLayout layout = (GridLayout) event.getContainer();
-                GridLayout.Area area = layout.getComponentArea(event
-                        .getAttachedComponent());
-                getMainWindow().showNotification(
-                        "Attached to " + area.getColumn1() + ","
-                                + area.getRow1(),
-                        Notification.TYPE_ERROR_MESSAGE);
-            }
-        });
-
-        content.addComponent(g);
-
-        content.addComponent(new Button("Attach label to layout",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        g.addComponent(new Label("X"), 2, 3);
-                    }
-                }));
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/LongTooltip.html b/tests/src/com/vaadin/tests/components/LongTooltip.html
deleted file mode 100644
index ac317380b8..0000000000
--- a/tests/src/com/vaadin/tests/components/LongTooltip.html
+++ /dev/null
@@ -1,325 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<!--Lower-right-->
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.LongTooltip?restartApplication</td>
-	<td></td>
-</tr>
-<!--Show tooltip, which should be on screen-->
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VTextField[0]</td>
-	<td>0,0</td>
-</tr>
-<!--Wait for tooltip to appear-->
-<tr>
-	<td>waitForVisible</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip-lower-right-1</td>
-</tr>
-<!--Hide tooltip-->
-<tr>
-	<td>mouseOut</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>55,43</td>
-</tr>
-<!--Wait for tooltip to disappear. Cannot for some reason use waitForNotVisible-->
-<tr>
-	<td>pause</td>
-	<td>500</td>
-	<td></td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VTextField[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>waitForVisible</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip-lower-right-2</td>
-</tr>
-<!--Hide tooltip-->
-<tr>
-	<td>mouseOut</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>55,43</td>
-</tr>
-<!--Wait for tooltip to disappear. Cannot for some reason use waitForNotVisible-->
-<tr>
-	<td>pause</td>
-	<td>500</td>
-	<td></td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VTextField[0]</td>
-	<td>100,20</td>
-</tr>
-<tr>
-	<td>waitForVisible</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip-lower-right-3</td>
-</tr>
-<!--Upper-right-->
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.LongTooltip?restartApplication</td>
-	<td></td>
-</tr>
-<!--Show tooltip, which should be on screen-->
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>0,0</td>
-</tr>
-<!--Wait for tooltip to appear-->
-<tr>
-	<td>waitForVisible</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip-upper-right-1</td>
-</tr>
-<!--Hide tooltip-->
-<tr>
-	<td>mouseOut</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>55,43</td>
-</tr>
-<!--Wait for tooltip to disappear. Cannot for some reason use waitForNotVisible-->
-<tr>
-	<td>pause</td>
-	<td>500</td>
-	<td></td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>waitForVisible</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip-upper-right-2</td>
-</tr>
-<!--Hide tooltip-->
-<tr>
-	<td>mouseOut</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>55,43</td>
-</tr>
-<!--Wait for tooltip to disappear. Cannot for some reason use waitForNotVisible-->
-<tr>
-	<td>pause</td>
-	<td>500</td>
-	<td></td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>100,20</td>
-</tr>
-<tr>
-	<td>waitForVisible</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip-upper-right-3</td>
-</tr>
-<!--Lower-left-->
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.LongTooltip?restartApplication</td>
-	<td></td>
-</tr>
-<!--Show tooltip, which should be on screen-->
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[2]/VTextField[0]</td>
-	<td>0,0</td>
-</tr>
-<!--Wait for tooltip to appear-->
-<tr>
-	<td>waitForVisible</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip-lower-left-1</td>
-</tr>
-<!--Hide tooltip-->
-<tr>
-	<td>mouseOut</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>55,43</td>
-</tr>
-<!--Wait for tooltip to disappear. Cannot for some reason use waitForNotVisible-->
-<tr>
-	<td>pause</td>
-	<td>500</td>
-	<td></td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[2]/VTextField[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>waitForVisible</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip-lower-left-2</td>
-</tr>
-<!--Hide tooltip-->
-<tr>
-	<td>mouseOut</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>55,43</td>
-</tr>
-<!--Wait for tooltip to disappear. Cannot for some reason use waitForNotVisible-->
-<tr>
-	<td>pause</td>
-	<td>500</td>
-	<td></td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[2]/VTextField[0]</td>
-	<td>100,20</td>
-</tr>
-<tr>
-	<td>waitForVisible</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip-lower-left-3</td>
-</tr>
-<!--Upper-left-->
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.LongTooltip?restartApplication</td>
-	<td></td>
-</tr>
-<!--Show tooltip, which should be on screen-->
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>0,0</td>
-</tr>
-<!--Wait for tooltip to appear-->
-<tr>
-	<td>waitForVisible</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip-upper-left-1</td>
-</tr>
-<!--Hide tooltip-->
-<tr>
-	<td>mouseOut</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>55,43</td>
-</tr>
-<!--Wait for tooltip to disappear. Cannot for some reason use waitForNotVisible-->
-<tr>
-	<td>pause</td>
-	<td>500</td>
-	<td></td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>waitForVisible</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip-upper-left-2</td>
-</tr>
-<!--Hide tooltip-->
-<tr>
-	<td>mouseOut</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>55,43</td>
-</tr>
-<!--Wait for tooltip to disappear. Cannot for some reason use waitForNotVisible-->
-<tr>
-	<td>pause</td>
-	<td>500</td>
-	<td></td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>100,20</td>
-</tr>
-<tr>
-	<td>waitForVisible</td>
-	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip-upper-left-3</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/LongTooltip.java b/tests/src/com/vaadin/tests/components/LongTooltip.java
deleted file mode 100644
index 87adaa673b..0000000000
--- a/tests/src/com/vaadin/tests/components/LongTooltip.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.vaadin.tests.components;
-
-import com.vaadin.tests.util.LoremIpsum;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.TextField;
-
-public class LongTooltip extends TestBase {
-
-    @Override
-    public void setup() {
-
-        GridLayout gl = new GridLayout(2, 2);
-        gl.setSizeFull();
-        TextField f1 = createField();
-        TextField f2 = createField();
-        TextField f3 = createField();
-        TextField f4 = createField();
-        gl.addComponent(f1);
-        gl.addComponent(f2);
-        gl.addComponent(f3);
-        gl.addComponent(f4);
-
-        gl.setComponentAlignment(f1, Alignment.TOP_LEFT);
-        gl.setComponentAlignment(f2, Alignment.TOP_RIGHT);
-        gl.setComponentAlignment(f3, Alignment.BOTTOM_LEFT);
-        gl.setComponentAlignment(f4, Alignment.BOTTOM_RIGHT);
-
-        getLayout().setSizeFull();
-        getLayout().addComponent(gl);
-
-    }
-
-    private TextField createField() {
-        final TextField field = new TextField();
-        field.setDescription(LoremIpsum.get(1000));
-        return field;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "For a given cursor position the tooltip should always appear with the same size in the same position. The tooltip should also always be completely on screen and not cause any scrollbars to appear.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 7100;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/MultipleDebugIds.java b/tests/src/com/vaadin/tests/components/MultipleDebugIds.java
deleted file mode 100644
index ebfa29b9e9..0000000000
--- a/tests/src/com/vaadin/tests/components/MultipleDebugIds.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.vaadin.tests.components;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.TextField;
-
-public class MultipleDebugIds extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "An exception should be thrown if the same debugId is assigned to several components";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2796;
-    }
-
-    @Override
-    protected void setup() {
-        TextField textField = new TextField();
-        TextField textField2 = new TextField();
-        Button button = new Button();
-        Button button2 = new Button();
-        textField.setDebugId("textfield");
-        button.setDebugId("button");
-        textField2.setDebugId("textfield2");
-        button2.setDebugId("textfield");
-
-        addComponent(textField);
-        addComponent(textField2);
-        addComponent(button);
-        addComponent(button2);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/TestBase.java b/tests/src/com/vaadin/tests/components/TestBase.java
deleted file mode 100644
index 2156c512ce..0000000000
--- a/tests/src/com/vaadin/tests/components/TestBase.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.vaadin.tests.components;
-
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public abstract class TestBase extends AbstractTestCase {
-
-    @Override
-    public final void init() {
-        window = new Window(getClass().getName());
-        setMainWindow(window);
-        window.getContent().setSizeFull();
-
-        Label label = new Label(getDescription(), Label.CONTENT_XHTML);
-        label.setWidth("100%");
-        window.getContent().addComponent(label);
-
-        layout = new VerticalLayout();
-        window.getContent().addComponent(layout);
-        ((VerticalLayout) window.getContent()).setExpandRatio(layout, 1);
-
-        setup();
-    }
-
-    private Window window;
-    private VerticalLayout layout;
-
-    public TestBase() {
-
-    }
-
-    protected VerticalLayout getLayout() {
-        return layout;
-    }
-
-    protected abstract void setup();
-
-    protected void addComponent(Component c) {
-        getLayout().addComponent(c);
-    }
-
-    protected void removeComponent(Component c) {
-        getLayout().removeComponent(c);
-    }
-
-    protected void replaceComponent(Component oldComponent,
-            Component newComponent) {
-        getLayout().replaceComponent(oldComponent, newComponent);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutClipping.html b/tests/src/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutClipping.html
deleted file mode 100644
index ff5c890abf..0000000000
--- a/tests/src/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutClipping.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>AbsoluteLayoutClipping</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">AbsoluteLayoutClipping</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.absolutelayout.AbsoluteLayoutClipping</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutClipping.java b/tests/src/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutClipping.java
deleted file mode 100644
index f6bff579a3..0000000000
--- a/tests/src/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutClipping.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.components.absolutelayout;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbsoluteLayout;
-import com.vaadin.ui.Label;
-
-public class AbsoluteLayoutClipping extends TestBase {
-
-    @Override
-    protected void setup() {
-        setTheme("tests-tickets");
-        AbsoluteLayout abs = new AbsoluteLayout();
-        abs.setStyleName("borders");
-        abs.setWidth("100px");
-        abs.setHeight("100px");
-
-        Label l = new Label("This should be clipped at 100px");
-        l.setSizeUndefined();
-        abs.addComponent(l, "top:50px;left:50px");
-
-        Label l2 = new Label("This should not be visible");
-        l2.setSizeUndefined();
-        abs.addComponent(l2, "top:80px;left:150px");
-
-        Label l3 = new Label("This should be clipped vertically at 100px");
-        l3.setWidth("50px");
-        abs.addComponent(l3, "top:20px;left:0px");
-
-        addComponent(abs);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "An AbsoluteLayout with fixed size should clip at its borders. Nothing outside the black square should be visible.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2913;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/absolutelayout/MoveComponentFromAbsoluteLayoutToInnerLayout.html b/tests/src/com/vaadin/tests/components/absolutelayout/MoveComponentFromAbsoluteLayoutToInnerLayout.html
deleted file mode 100644
index e1fbf29b37..0000000000
--- a/tests/src/com/vaadin/tests/components/absolutelayout/MoveComponentFromAbsoluteLayoutToInnerLayout.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.absolutelayout.MoveComponentsFromAbsoluteLayoutToInnerLayout?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsabsolutelayoutMoveComponentsFromAbsoluteLayoutToInnerLayout::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VAbsoluteLayout[0]/VAbsoluteLayout$AbsoluteWrapper[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsabsolutelayoutMoveComponentsFromAbsoluteLayoutToInnerLayout::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>buttons-with-captions</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/absolutelayout/MoveComponentsFromAbsoluteLayoutToInnerLayout.java b/tests/src/com/vaadin/tests/components/absolutelayout/MoveComponentsFromAbsoluteLayoutToInnerLayout.java
deleted file mode 100644
index 9082842b1c..0000000000
--- a/tests/src/com/vaadin/tests/components/absolutelayout/MoveComponentsFromAbsoluteLayoutToInnerLayout.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.vaadin.tests.components.absolutelayout;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbsoluteLayout;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.VerticalLayout;
-
-public class MoveComponentsFromAbsoluteLayoutToInnerLayout extends TestBase {
-
-    protected Button testButton;
-    private AbsoluteLayout al;
-    protected ComponentContainer vl;
-
-    @Override
-    protected void setup() {
-        al = new AbsoluteLayout();
-        al.setWidth("200px");
-        al.setHeight("200px");
-
-        testButton = new Button("Click to move to inner layout",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        vl.addComponent(testButton);
-                    }
-                });
-
-        al.addComponent(testButton);
-
-        vl = new VerticalLayout();
-        al.addComponent(vl, "top: 100px");
-
-        addComponent(al);
-
-        Button b = new Button("Repaint inner layout",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        vl.requestRepaint();
-                    }
-                });
-
-        addComponent(b);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Click the first button to move it from an outer layout to an inner. Then click the second button to repaint the inner layout.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6061;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/abstractcomponent/EnableState.html b/tests/src/com/vaadin/tests/components/abstractcomponent/EnableState.html
deleted file mode 100644
index f4bebcf859..0000000000
--- a/tests/src/com/vaadin/tests/components/abstractcomponent/EnableState.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.abstractcomponent.EnableState</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractcomponentEnableState::/VVerticalLayout[0]/ChildComponentContainer[3]/VCheckBox[0]/domChild[0]</td>
-	<td>58,5</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disable-cascade</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractcomponentEnableState::/VVerticalLayout[0]/ChildComponentContainer[3]/VCheckBox[0]/domChild[0]</td>
-	<td>49,7</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractcomponentEnableState::/VVerticalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
-	<td>55,7</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractcomponentEnableState::/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
-	<td>76,8</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractcomponentEnableState::/VVerticalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
-	<td>58,8</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>button-disabled</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/abstractcomponent/EnableState.java b/tests/src/com/vaadin/tests/components/abstractcomponent/EnableState.java
deleted file mode 100644
index 5d4f0f2acf..0000000000
--- a/tests/src/com/vaadin/tests/components/abstractcomponent/EnableState.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.vaadin.tests.components.abstractcomponent;
-
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Window;
-
-public class EnableState extends AbstractTestCase {
-    @Override
-    public void init() {
-        Window mainWindow = new Window("Helloworld Application");
-
-        final Panel panel = new Panel("Test");
-        final Button button = new Button("ablebutton");
-        panel.addComponent(button);
-
-        CheckBox enable = new CheckBox("Toggle button enabled", true);
-        enable.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                boolean enabled = (Boolean) event.getButton().getValue();
-                button.setEnabled(enabled);
-                // button.requestRepaint();
-            }
-        });
-        enable.setImmediate(true);
-
-        CheckBox caption = new CheckBox("Toggle button caption", true);
-        caption.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                button.setCaption(button.getCaption() + "+");
-            }
-        });
-        caption.setImmediate(true);
-
-        CheckBox visible = new CheckBox("Toggle panel visibility", true);
-        visible.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                boolean visible = (Boolean) event.getButton().getValue();
-
-                panel.setVisible(visible);
-            }
-        });
-        visible.setImmediate(true);
-
-        CheckBox panelEnable = new CheckBox("Toggle panel enabled", true);
-        panelEnable.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                boolean enabled = (Boolean) event.getButton().getValue();
-                panel.setEnabled(enabled);
-            }
-        });
-        panelEnable.setImmediate(true);
-
-        mainWindow.addComponent(enable);
-        mainWindow.addComponent(caption);
-        mainWindow.addComponent(visible);
-        mainWindow.addComponent(panelEnable);
-        mainWindow.addComponent(panel);
-
-        setMainWindow(mainWindow);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "This tests the enabled/disabled propagation and that enabled/disabled state is updated"
-                + " properly even when the parent is invisible. Disabling the Button while the panel is"
-                + " invisible should be reflected on the screen when the panel is set visible"
-                + " again.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3609;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldCommitWithInvalidValues.html b/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldCommitWithInvalidValues.html
deleted file mode 100644
index 6a47032545..0000000000
--- a/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldCommitWithInvalidValues.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>AbstractFieldCommitWithInvalidValues</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">AbstractFieldCommitWithInvalidValues</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.abstractfield.AbstractFieldCommitWithInvalidValues</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>focus</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldAbstractFieldCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldAbstractFieldCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>clickAt</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldAbstractFieldCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldAbstractFieldCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>long</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldAbstractFieldCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldCommitWithInvalidValues.java b/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldCommitWithInvalidValues.java
deleted file mode 100644
index a08f8999a6..0000000000
--- a/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldCommitWithInvalidValues.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.vaadin.tests.components.abstractfield;
-
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.data.validator.StringLengthValidator;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window.Notification;
-
-public class AbstractFieldCommitWithInvalidValues extends TestBase {
-
-    private TextField tf;
-
-    @Override
-    protected String getDescription() {
-        return "Commiting a field with invalid values should throw an exception";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2532;
-    }
-
-    @Override
-    protected void setup() {
-        tf = new TextField("A field, must contain 1-2 chars",
-                new ObjectProperty<String>("a"));
-        tf.addValidator(new StringLengthValidator("Invalid length", 1, 2, false));
-        tf.setWriteThrough(false);
-        tf.setRequired(true);
-
-        Button b = new Button("Commit", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                try {
-                    tf.commit();
-                    if (tf.isValid()) {
-                        getMainWindow().showNotification(
-                                "OK! Form validated and no error was thrown",
-                                Notification.TYPE_HUMANIZED_MESSAGE);
-                    } else {
-                        getMainWindow().showNotification(
-                                "Form is invalid but no exception was thrown",
-                                Notification.TYPE_ERROR_MESSAGE);
-                    }
-                } catch (Exception e) {
-                    if (tf.isValid()) {
-                        getMainWindow().showNotification(
-                                "Form is valid but an exception was thrown",
-                                Notification.TYPE_ERROR_MESSAGE);
-                    } else {
-                        getMainWindow().showNotification(
-                                "OK! Error was thrown for an invalid input",
-                                Notification.TYPE_HUMANIZED_MESSAGE);
-
-                    }
-                }
-            }
-
-        });
-
-        addComponent(tf);
-        addComponent(b);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.html b/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.html
deleted file mode 100644
index f99bdea946..0000000000
--- a/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/run/com.vaadin.tests.components.abstractfield.AbstractFieldDataSourceReadOnly" />
-<title>AbstractFieldDataSourceReadOnly</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">AbstractFieldDataSourceReadOnly</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.abstractfield.AbstractFieldDataSourceReadOnly</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldAbstractFieldDataSourceReadOnly::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.java b/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.java
deleted file mode 100644
index 2a2fc0153a..0000000000
--- a/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.vaadin.tests.components.abstractfield;
-
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component.Event;
-import com.vaadin.ui.Component.Listener;
-import com.vaadin.ui.TextField;
-
-public class AbstractFieldDataSourceReadOnly extends TestBase {
-
-    private static class StateHolder {
-        private ObjectProperty<String> textField = new ObjectProperty<String>(
-                "");
-
-        public ObjectProperty<String> getTextField() {
-            return textField;
-        }
-
-        @SuppressWarnings("unused")
-        public void setTextField(ObjectProperty<String> textField) {
-            this.textField = textField;
-        }
-
-        public void buttonClicked() {
-            textField.setReadOnly(true);
-        }
-    }
-
-    @Override
-    protected void setup() {
-        final StateHolder stateHolder = new StateHolder();
-
-        // Button
-        Button button = new Button("Make data source read-only");
-        button.addListener(new Listener() {
-            public void componentEvent(Event event) {
-                stateHolder.buttonClicked();
-            }
-        });
-
-        // Input field
-        TextField input = new TextField("Field");
-        input.setPropertyDataSource(stateHolder.getTextField());
-
-        addComponent(button);
-        addComponent(input);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Read-only status changes in data sources are not rendered immediately";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5013;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldTest.java b/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldTest.java
deleted file mode 100644
index 1c8e728908..0000000000
--- a/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldTest.java
+++ /dev/null
@@ -1,234 +0,0 @@
-package com.vaadin.tests.components.abstractfield;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ReadOnlyStatusChangeEvent;
-import com.vaadin.data.Property.ReadOnlyStatusChangeListener;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.event.FieldEvents.BlurEvent;
-import com.vaadin.event.FieldEvents.BlurListener;
-import com.vaadin.event.FieldEvents.BlurNotifier;
-import com.vaadin.event.FieldEvents.FocusEvent;
-import com.vaadin.event.FieldEvents.FocusListener;
-import com.vaadin.event.FieldEvents.FocusNotifier;
-import com.vaadin.tests.components.AbstractComponentTest;
-import com.vaadin.ui.AbstractField;
-import com.vaadin.ui.MenuBar;
-import com.vaadin.ui.MenuBar.MenuItem;
-
-public abstract class AbstractFieldTest<T extends AbstractField> extends
-        AbstractComponentTest<T> implements ValueChangeListener,
-        ReadOnlyStatusChangeListener, FocusListener, BlurListener {
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-        createBooleanAction("Required", CATEGORY_STATE, false, requiredCommand);
-        createRequiredErrorSelect(CATEGORY_DECORATIONS);
-
-        createValueChangeListener(CATEGORY_LISTENERS);
-        createReadOnlyStatusChangeListener(CATEGORY_LISTENERS);
-
-        // * invalidcommitted
-        // * commit()
-        // * discard()
-        // * writethrough
-        // * readthrough
-        // * addvalidator
-        // * isvalid
-        // * invalidallowed
-        // * error indicator
-        //
-        // * tabindex
-        // * validation visible
-        // * ShortcutListener
-
-    }
-
-    @Override
-    protected void populateSettingsMenu(MenuItem settingsMenu) {
-        super.populateSettingsMenu(settingsMenu);
-
-        if (AbstractField.class.isAssignableFrom(getTestClass())) {
-            MenuItem abstractField = settingsMenu
-                    .addItem("AbstractField", null);
-            abstractField.addItem("Show value", new MenuBar.Command() {
-
-                public void menuSelected(MenuItem selectedItem) {
-                    for (T a : getTestComponents()) {
-                        log(a.getClass().getSimpleName() + " value: "
-                                + getValue(a));
-                    }
-                }
-            });
-        }
-    }
-
-    private void createRequiredErrorSelect(String category) {
-        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
-        options.put("-", null);
-        options.put(TEXT_SHORT, TEXT_SHORT);
-        options.put("Medium", TEXT_MEDIUM);
-        options.put("Long", TEXT_LONG);
-        options.put("Very long", TEXT_VERY_LONG);
-        createSelectAction("Required error message", category, options, "-",
-                requiredErrorMessageCommand);
-
-        if (FocusNotifier.class.isAssignableFrom(getTestClass())) {
-            createFocusListener(CATEGORY_LISTENERS);
-        }
-
-        if (BlurNotifier.class.isAssignableFrom(getTestClass())) {
-            createBlurListener(CATEGORY_LISTENERS);
-        }
-
-    }
-
-    private void createValueChangeListener(String category) {
-
-        createBooleanAction("Value change listener", category, false,
-                valueChangeListenerCommand);
-    }
-
-    private void createReadOnlyStatusChangeListener(String category) {
-
-        createBooleanAction("Read only status change listener", category,
-                false, readonlyStatusChangeListenerCommand);
-    }
-
-    private void createFocusListener(String category) {
-        createBooleanAction("Focus listener", category, false,
-                focusListenerCommand);
-
-    }
-
-    private void createBlurListener(String category) {
-        createBooleanAction("Blur listener", category, false,
-                blurListenerCommand);
-
-    }
-
-    protected Command<T, Boolean> valueChangeListenerCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((ValueChangeListener) AbstractFieldTest.this);
-            } else {
-                c.removeListener((ValueChangeListener) AbstractFieldTest.this);
-            }
-        }
-    };
-    protected Command<T, Boolean> readonlyStatusChangeListenerCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((ReadOnlyStatusChangeListener) AbstractFieldTest.this);
-            } else {
-                c.removeListener((ReadOnlyStatusChangeListener) AbstractFieldTest.this);
-            }
-        }
-    };
-    protected Command<T, Boolean> focusListenerCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            if (value) {
-                ((FocusNotifier) c).addListener(AbstractFieldTest.this);
-            } else {
-                ((FocusNotifier) c).removeListener(AbstractFieldTest.this);
-            }
-        }
-    };
-    protected Command<T, Boolean> blurListenerCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            if (value) {
-                ((BlurNotifier) c).addListener(AbstractFieldTest.this);
-            } else {
-                ((BlurNotifier) c).removeListener(AbstractFieldTest.this);
-            }
-        }
-    };
-    protected Command<T, Object> setValueCommand = new Command<T, Object>() {
-
-        public void execute(T c, Object value, Object data) {
-            c.setValue(value);
-        }
-    };
-
-    public void valueChange(com.vaadin.data.Property.ValueChangeEvent event) {
-        log(event.getClass().getSimpleName() + ", new value: "
-                + getValue(event.getProperty()));
-    };
-
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    private String getValue(Property property) {
-        Object o = property.getValue();
-        if (o instanceof Collection) {
-            // Sort collections to avoid problems with values printed in
-            // different order
-            try {
-                ArrayList<Comparable> c = new ArrayList<Comparable>(
-                        (Collection) o);
-                Collections.sort(c);
-                o = c;
-            } catch (Exception e) {
-                // continue with unsorted if sorting fails for some reason
-                log("Exception while sorting value: " + e.getMessage());
-            }
-        }
-
-        // Distinguish between null and 'null'
-        String value = "null";
-        if (o != null) {
-            if (o instanceof Date) {
-                Date d = (Date) o;
-                // Dec 31, 2068 23:09:26.531
-                String pattern = "MMM d, yyyy HH:mm:ss.SSS";
-                SimpleDateFormat format = new SimpleDateFormat(pattern,
-                        new Locale("en", "US"));
-                value = format.format(d);
-            } else {
-                value = "'" + o.toString() + "'";
-            }
-        }
-
-        return value;
-
-    }
-
-    public void readOnlyStatusChange(ReadOnlyStatusChangeEvent event) {
-        log(event.getClass().getSimpleName());
-    }
-
-    public void focus(FocusEvent event) {
-        log(event.getClass().getSimpleName());
-    }
-
-    public void blur(BlurEvent event) {
-        log(event.getClass().getSimpleName());
-    }
-
-    protected void createSetTextValueAction(String category) {
-        String subCategory = "Set text value";
-        createCategory(subCategory, category);
-        List<String> values = new ArrayList<String>();
-        values.add("Test");
-        values.add("A little longer value");
-        values.add("A very long value with very much text. All in all it is 74 characters long");
-
-        createClickAction("(empty string)", subCategory, setValueCommand, "");
-        createClickAction("(null)", subCategory, setValueCommand, null);
-        for (String value : values) {
-            createClickAction(value, subCategory, setValueCommand, value);
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/abstractfield/AbstractTextFieldTest.java b/tests/src/com/vaadin/tests/components/abstractfield/AbstractTextFieldTest.java
deleted file mode 100644
index eb9adef8d2..0000000000
--- a/tests/src/com/vaadin/tests/components/abstractfield/AbstractTextFieldTest.java
+++ /dev/null
@@ -1,241 +0,0 @@
-package com.vaadin.tests.components.abstractfield;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-
-import com.vaadin.event.FieldEvents.TextChangeEvent;
-import com.vaadin.event.FieldEvents.TextChangeListener;
-import com.vaadin.ui.AbstractTextField;
-import com.vaadin.ui.AbstractTextField.TextChangeEventMode;
-
-public abstract class AbstractTextFieldTest<T extends AbstractTextField>
-        extends AbstractFieldTest<T> implements TextChangeListener {
-
-    private Command<T, Integer> maxlengthCommand = new Command<T, Integer>() {
-
-        public void execute(T c, Integer value, Object data) {
-            c.setMaxLength(value);
-        }
-    };
-    private Command<T, Boolean> nullSelectionAllowedCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            c.setNullSettingAllowed(value);
-
-        }
-    };
-    private Command<T, String> nullRepresentationCommand = new Command<T, String>() {
-
-        public void execute(T c, String value, Object data) {
-            c.setNullRepresentation(value);
-        }
-    };
-
-    private Command<T, String> inputPromptCommand = new Command<T, String>() {
-        public void execute(T c, String value, Object data) {
-            c.setInputPrompt(value);
-        }
-    };
-
-    private Command<T, Boolean> textChangeListenerCommand = new Command<T, Boolean>() {
-        public void execute(T c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((TextChangeListener) AbstractTextFieldTest.this);
-            } else {
-                c.removeListener((TextChangeListener) AbstractTextFieldTest.this);
-            }
-        }
-    };
-
-    private Command<T, Integer> colsCommand = new Command<T, Integer>() {
-        public void execute(T c, Integer value, Object data) {
-            c.setColumns(value);
-        }
-    };
-
-    private Command<T, TextChangeEventMode> textChangeEventModeCommand = new Command<T, TextChangeEventMode>() {
-        public void execute(T c, TextChangeEventMode value, Object data) {
-            c.setTextChangeEventMode(value);
-        }
-    };
-
-    private Command<T, Integer> textChangeTimeoutCommand = new Command<T, Integer>() {
-        public void execute(T c, Integer value, Object data) {
-            c.setTextChangeTimeout(value);
-        }
-    };
-
-    private Command<T, Range> selectionRangeCommand = new Command<T, Range>() {
-        public void execute(T c, Range value, Object data) {
-            c.setSelectionRange(value.getStart(),
-                    value.getEnd() - value.getStart());
-
-        }
-    };
-    private Command<T, Object> selectAllCommand = new Command<T, Object>() {
-        public void execute(T c, Object value, Object data) {
-            c.selectAll();
-        }
-    };
-
-    private Command<T, Integer> setCursorPositionCommand = new Command<T, Integer>() {
-
-        public void execute(T c, Integer value, Object data) {
-            c.setCursorPosition(value);
-        }
-    };
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-
-        createSetTextValueAction(CATEGORY_ACTIONS);
-
-        createNullSettingAllowedAction(CATEGORY_FEATURES);
-        createNullRepresentationAction(CATEGORY_FEATURES);
-        createMaxLengthAction(CATEGORY_FEATURES);
-
-        createInputPromptAction(CATEGORY_FEATURES);
-        createColsAction(CATEGORY_STATE);
-
-        createTextChangeListener(CATEGORY_LISTENERS);
-        createTextChangeEventModeAction(CATEGORY_FEATURES);
-        createTextChangeEventTimeoutAction(CATEGORY_FEATURES);
-
-        createSetTextValueAction(CATEGORY_ACTIONS);
-        createCursorPositionAction(CATEGORY_ACTIONS);
-        createSelectionRangeAction(CATEGORY_ACTIONS);
-
-    }
-
-    private void createNullSettingAllowedAction(String category) {
-        createBooleanAction("Null selection allowed", category, true,
-                nullSelectionAllowedCommand);
-    }
-
-    private void createNullRepresentationAction(String category) {
-        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
-        options.put("-", null);
-        options.put("null", "null");
-        options.put("This is empty", "This is empty");
-        options.put("- Nothing -", "- Nothing -");
-        createSelectAction("Null representation", category, options, "null",
-                nullRepresentationCommand);
-    }
-
-    private void createMaxLengthAction(String category) {
-        LinkedHashMap<String, Integer> options = createIntegerOptions(100);
-        options.put("-", -1);
-        createSelectAction("Max length", category, options, "-",
-                maxlengthCommand);
-
-    }
-
-    public class Range {
-        private int start;
-        private int end;
-
-        public Range(int start, int end) {
-            this.start = start;
-            this.end = end;
-        }
-
-        public int getStart() {
-            return start;
-        }
-
-        public int getEnd() {
-            return end;
-        }
-
-        @Override
-        public String toString() {
-            return start + "-" + end;
-        }
-    }
-
-    private void createSelectionRangeAction(String category) {
-        List<Range> options = new ArrayList<Range>();
-        options.add(new Range(0, 10));
-        options.add(new Range(0, 1));
-        options.add(new Range(0, 2));
-        options.add(new Range(1, 2));
-        options.add(new Range(2, 5));
-        options.add(new Range(5, 10));
-
-        createCategory("Select range", category);
-
-        createClickAction("All", "Select range", selectAllCommand, null);
-        for (Range range : options) {
-            createClickAction(range.toString(), "Select range",
-                    selectionRangeCommand, range);
-        }
-
-    }
-
-    private void createCursorPositionAction(String category) {
-        String subCategory = "Set cursor position";
-        createCategory(subCategory, category);
-        for (int i = 0; i < 20; i++) {
-            createClickAction(String.valueOf(i), subCategory,
-                    setCursorPositionCommand, Integer.valueOf(i));
-        }
-
-    }
-
-    private void createTextChangeEventTimeoutAction(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("0", 0);
-        options.put("100ms", 100);
-        options.put("500ms", 500);
-        options.put("1s", 1000);
-        options.put("2s", 2000);
-        options.put("5s", 5000);
-
-        createSelectAction("TextChange timeout", category, options, "0",
-                textChangeTimeoutCommand);
-    }
-
-    private void createTextChangeEventModeAction(String category) {
-        LinkedHashMap<String, TextChangeEventMode> options = new LinkedHashMap<String, AbstractTextField.TextChangeEventMode>();
-        for (TextChangeEventMode m : TextChangeEventMode.values()) {
-            options.put(m.toString(), m);
-        }
-
-        createSelectAction("TextChange event mode", category, options,
-                TextChangeEventMode.EAGER.toString(),
-                textChangeEventModeCommand);
-
-    }
-
-    private void createTextChangeListener(String category) {
-        createBooleanAction("Text change listener", category, false,
-                textChangeListenerCommand);
-
-    }
-
-    private void createColsAction(String category) {
-        LinkedHashMap<String, Integer> options = createIntegerOptions(20);
-        createSelectAction("Columns", category, options, "0", colsCommand);
-    }
-
-    private void createInputPromptAction(String category) {
-        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
-        options.put("-", null);
-        options.put("Enter a value", "Enter a value");
-        options.put("- Click here -", "- Click here -");
-        createSelectAction("Input prompt", category, options, "-",
-                inputPromptCommand);
-
-    }
-
-    public void textChange(TextChangeEvent event) {
-        AbstractTextField tf = (AbstractTextField) event.getComponent();
-        log("TextChangeEvent: text='" + event.getText() + "', cursor position="
-                + event.getCursorPosition() + " (field cursor pos: "
-                + tf.getCursorPosition() + ")");
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/abstractfield/ShortcutAddAndRemove.html b/tests/src/com/vaadin/tests/components/abstractfield/ShortcutAddAndRemove.html
deleted file mode 100644
index e61f227939..0000000000
--- a/tests/src/com/vaadin/tests/components/abstractfield/ShortcutAddAndRemove.html
+++ /dev/null
@@ -1,209 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.abstractfield.ShortcutAddAndRemove?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
-	<td>316,58</td>
-</tr>
-<!--Enter on background - should cause event-->
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>1. Log button was clicked</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
-	<td>102,51</td>
-</tr>
-<!--Enter in textfield - should cause event-->
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>2. Log button was clicked</td>
-</tr>
-<!--Remove shortcut-->
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
-	<td>110,62</td>
-</tr>
-<!--Enter in field - should not cause event-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
-	<td>97,26</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
-	<td>up</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
-	<td>row1</td>
-</tr>
-<tr>
-	<td>keyPress</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
-	<td>13</td>
-</tr>
-<tr>
-	<td>keyPress</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
-	<td>r</td>
-</tr>
-<tr>
-	<td>keyPress</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
-	<td>o</td>
-</tr>
-<tr>
-	<td>keyPress</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
-	<td>w</td>
-</tr>
-<tr>
-	<td>keyPress</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
-	<td>2</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>2. Log button was clicked</td>
-</tr>
-<!-- Commented out because TestBench does not enter the text correctly using keyPress in any browser except Firefox -->
-<!-- <tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
-	<td>row1<br />row2</td>
-</tr>-->
-<!--Add shortcut again-->
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
-	<td>85,46</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. Log button was clicked</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>625,2</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>4. Log button was clicked</td>
-</tr>
-<!--Remove shortcut once more-->
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
-	<td>631,52</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
-	<td>597,57</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>4. Log button was clicked</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/abstractfield/ShortcutAddAndRemove.java b/tests/src/com/vaadin/tests/components/abstractfield/ShortcutAddAndRemove.java
deleted file mode 100644
index 837256ff65..0000000000
--- a/tests/src/com/vaadin/tests/components/abstractfield/ShortcutAddAndRemove.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.vaadin.tests.components.abstractfield;
-
-import com.vaadin.event.ShortcutAction.KeyCode;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.TextArea;
-
-public class ShortcutAddAndRemove extends TestBase {
-
-    private Log log;
-    private TextArea textArea;
-
-    @Override
-    protected void setup() {
-        log = new Log(4);
-
-        final Button logButton = new Button("Log a row (enter shortcut)");
-        logButton.setClickShortcut(KeyCode.ENTER);
-        logButton.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                log.log("Log button was clicked");
-            }
-        });
-
-        final Button removeShortcut = new Button("Remove shortcut");
-        removeShortcut.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                logButton.removeClickShortcut();
-                logButton.setCaption("Log a row (no shortcut)");
-            }
-        });
-        final Button addShortcut = new Button("Add shortcut");
-        addShortcut.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                logButton.setClickShortcut(KeyCode.ENTER);
-                logButton.setCaption("Log a row (enter shortcut)");
-            }
-        });
-        addComponent(log);
-        addComponent(logButton);
-        textArea = new TextArea("Enter key does not break lines ...");
-        textArea.setRows(5);
-        textArea.setColumns(20);
-        addComponent(textArea);
-        addComponent(removeShortcut);
-        addComponent(addShortcut);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return null;
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/accordion/AccordionInactiveTabSize.html b/tests/src/com/vaadin/tests/components/accordion/AccordionInactiveTabSize.html
deleted file mode 100644
index e4bb6c36be..0000000000
--- a/tests/src/com/vaadin/tests/components/accordion/AccordionInactiveTabSize.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head profile="http://selenium-ide.openqa.org/profiles/test-case"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><link rel="selenium.base" href="" /><title>com.vaadin.tests.components.accordion.AccordionInactiveTabSize</title></head><body><table cellpadding="1" cellspacing="1" border="1"><thead><tr><td rowspan="1" colspan="3">com.vaadin.tests.components.accordion.AccordionInactiveTabSize</td></tr></thead><tbody><tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.accordion.AccordionInactiveTabSize?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsaccordionAccordionInactiveTabSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VAccordion[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>285,11</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>center-second-tab</td>
-</tr>
-<tr>
-	<td>dragAndDrop</td>
-	<td>vaadin=runcomvaadintestscomponentsaccordionAccordionInactiveTabSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>150,-36</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>splitter-right-second-tab</td>
-</tr>
-<tr>
-	<td>dragAndDrop</td>
-	<td>vaadin=runcomvaadintestscomponentsaccordionAccordionInactiveTabSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>-300,-36</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>splitter-left-second-tab</td>
-</tr>
-
-<!--back to original pos-->
-<tr>
-	<td>dragAndDrop</td>
-	<td>vaadin=runcomvaadintestscomponentsaccordionAccordionInactiveTabSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>150,-36</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>center-second-tab</td>
-</tr>
-</tbody></table></body></html>
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/accordion/AccordionInactiveTabSize.java b/tests/src/com/vaadin/tests/components/accordion/AccordionInactiveTabSize.java
deleted file mode 100644
index 387ec7857f..0000000000
--- a/tests/src/com/vaadin/tests/components/accordion/AccordionInactiveTabSize.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.vaadin.tests.components.accordion;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Accordion;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.TabSheet.Tab;
-import com.vaadin.ui.TextField;
-
-public class AccordionInactiveTabSize extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Select the second tab and move the splitter to the right. Both the inactive and the active tab should be resized.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3065;
-    }
-
-    @Override
-    protected void setup() {
-        HorizontalSplitPanel sp = new HorizontalSplitPanel();
-        sp.setWidth("100%");
-        sp.setHeight("70px");
-
-        Accordion acc = new Accordion();
-
-        Tab tab1 = acc.addTab(new TextField("first field"));
-        tab1.setCaption("First tab");
-
-        Tab tab2 = acc.addTab(new TextField("second field"));
-        tab2.setCaption("Second tab");
-
-        acc.setSizeFull();
-
-        sp.addComponent(acc);
-        addComponent(sp);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/accordion/AccordionTest.java b/tests/src/com/vaadin/tests/components/accordion/AccordionTest.java
deleted file mode 100644
index 5c47610ae5..0000000000
--- a/tests/src/com/vaadin/tests/components/accordion/AccordionTest.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.vaadin.tests.components.accordion;
-
-import com.vaadin.tests.components.tabsheet.TabSheetTest;
-import com.vaadin.ui.Accordion;
-
-public class AccordionTest extends TabSheetTest<Accordion> {
-
-    @Override
-    protected Class<Accordion> getTestClass() {
-        return Accordion.class;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/accordion/RemoveTabs.html b/tests/src/com/vaadin/tests/components/accordion/RemoveTabs.html
deleted file mode 100644
index ec24ade8ce..0000000000
--- a/tests/src/com/vaadin/tests/components/accordion/RemoveTabs.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>RemoveTabsTest</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">RemoveTabsTest</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.accordion.RemoveTabs</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsaccordionRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsaccordionRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VAccordion[0]/domChild[2]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsaccordionRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsaccordionRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsaccordionRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsaccordionRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/accordion/RemoveTabs.java b/tests/src/com/vaadin/tests/components/accordion/RemoveTabs.java
deleted file mode 100644
index bc8bea1c56..0000000000
--- a/tests/src/com/vaadin/tests/components/accordion/RemoveTabs.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package com.vaadin.tests.components.accordion;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractComponentContainer;
-import com.vaadin.ui.Accordion;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Label;
-
-public class RemoveTabs extends TestBase {
-
-    private Accordion accordion;
-
-    protected Component[] tab = new Component[5];
-
-    private Button closeCurrent;
-    private Button closeFirst;
-    private Button closeLast;
-    private Button reorderTabs;
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2425;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tests the removal of individual tabs from an Accordion. No matter what is done in this test the tab caption \"Tab X\" should always match the content \"Tab X\". Use \"remove first\" and \"remove active\" buttons to remove the first or the active tab. The \"reorder\" button reverses the order by adding and removing all components.";
-    }
-
-    @Override
-    protected void setup() {
-        accordion = new Accordion();
-        for (int i = 1; i <= tab.length; i++) {
-            tab[i - 1] = new Label("This is the contents of tab " + i);
-            tab[i - 1].setCaption("Tab " + i);
-
-            accordion.addComponent(tab[i - 1]);
-        }
-
-        getLayout().addComponent(accordion);
-
-        closeCurrent = new Button("Close current tab");
-        closeCurrent.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                closeCurrentTab();
-
-            }
-        });
-
-        closeFirst = new Button("close first tab");
-        closeFirst.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                closeFirstTab();
-
-            }
-        });
-
-        closeLast = new Button("close last tab");
-        closeLast.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                closeLastTab();
-
-            }
-        });
-
-        reorderTabs = new Button("reorder");
-        reorderTabs.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                reorder();
-
-            }
-        });
-
-        getLayout().addComponent(closeFirst);
-        getLayout().addComponent(closeLast);
-        getLayout().addComponent(closeCurrent);
-        getLayout().addComponent(reorderTabs);
-
-    }
-
-    private void closeCurrentTab() {
-        Component c = accordion.getSelectedTab();
-        if (c != null) {
-            accordion.removeComponent(c);
-        }
-    }
-
-    private void closeFirstTab() {
-        accordion.removeComponent(accordion.getComponentIterator().next());
-    }
-
-    private void closeLastTab() {
-        Iterator<Component> i = accordion.getComponentIterator();
-        Component last = null;
-        while (i.hasNext()) {
-            last = i.next();
-
-        }
-        accordion.removeComponent(last);
-    }
-
-    private void reorder() {
-        AbstractComponentContainer container = accordion;
-
-        if (container != null) {
-            List<Component> c = new ArrayList<Component>();
-            Iterator<Component> i = container.getComponentIterator();
-            while (i.hasNext()) {
-                Component comp = i.next();
-                c.add(comp);
-            }
-            container.removeAllComponents();
-
-            for (int j = c.size() - 1; j >= 0; j--) {
-                container.addComponent(c.get(j));
-            }
-
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerGenerator.java b/tests/src/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerGenerator.java
deleted file mode 100644
index 254779f872..0000000000
--- a/tests/src/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerGenerator.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.vaadin.tests.components.beanitemcontainer;
-
-import java.util.Date;
-
-import com.vaadin.data.util.BeanItemContainer;
-import com.vaadin.tests.util.PortableRandom;
-
-public class BeanItemContainerGenerator {
-
-    public static BeanItemContainer<TestBean> createContainer(int size) {
-        return createContainer(size, new Date().getTime());
-    }
-
-    public static BeanItemContainer<TestBean> createContainer(int size,
-            long seed) {
-
-        BeanItemContainer<TestBean> container = new BeanItemContainer<TestBean>(
-                TestBean.class);
-        PortableRandom r = new PortableRandom(seed);
-        for (int i = 0; i < size; i++) {
-            container.addBean(new TestBean(r));
-        }
-
-        return container;
-
-    }
-
-    public static class TestBean {
-        private String name, address, city, country;
-        private int age, shoesize;
-
-        public int getAge() {
-            return age;
-        }
-
-        public void setAge(int age) {
-            this.age = age;
-        }
-
-        public int getShoesize() {
-            return shoesize;
-        }
-
-        public void setShoesize(int shoesize) {
-            this.shoesize = shoesize;
-        }
-
-        public TestBean(PortableRandom r) {
-            age = r.nextInt(100) + 5;
-            shoesize = r.nextInt(10) + 35;
-            name = createRandomString(r, r.nextInt(5) + 5);
-            address = createRandomString(r, r.nextInt(15) + 5) + " "
-                    + r.nextInt(100) + 1;
-            city = createRandomString(r, r.nextInt(7) + 3);
-            if (r.nextBoolean()) {
-                country = createRandomString(r, r.nextInt(4) + 4);
-            }
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public String getAddress() {
-            return address;
-        }
-
-        public void setAddress(String address) {
-            this.address = address;
-        }
-
-        public String getCity() {
-            return city;
-        }
-
-        public void setCity(String city) {
-            this.city = city;
-        }
-
-        public String getCountry() {
-            return country;
-        }
-
-        public void setCountry(String country) {
-            this.country = country;
-        }
-
-    }
-
-    public static String createRandomString(PortableRandom r, int len) {
-        StringBuilder b = new StringBuilder();
-        for (int i = 0; i < len; i++) {
-            b.append((char) (r.nextInt('z' - 'a') + 'a'));
-        }
-
-        return b.toString();
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.html b/tests/src/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.html
deleted file mode 100644
index e40be7dc15..0000000000
--- a/tests/src/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head profile="http://selenium-ide.openqa.org/profiles/test-case"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><link rel="selenium.base" href="" /><title>com.vaadin.tests.components.beanitemcontainer.BeanItemContainerNullValues</title></head><body><table cellpadding="1" cellspacing="1" border="1"><thead><tr><td rowspan="1" colspan="3">com.vaadin.tests.components.beanitemcontainer.BeanItemContainerNullValues</td></tr></thead><tbody><tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.beanitemcontainer.BeanItemContainerNullValues?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>85,9</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[1]</td>
-	<td>40,9</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>sort-country-asc</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[1]</td>
-	<td>29,9</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>sort-country-desc</td>
-</tr>
-<!--  Disable sorting -->
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<!--  Try to sort -->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[1]</td>
-	<td>39,8</td>
-</tr>
-<!--  Enable sorting to get the same screenshot as before -->
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>79,4</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>sort-country-desc</td>
-</tr>
-</tbody></table></body></html>
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.java b/tests/src/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.java
deleted file mode 100644
index 9045d18940..0000000000
--- a/tests/src/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.vaadin.tests.components.beanitemcontainer;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Table;
-
-public class BeanItemContainerNullValues extends TestBase {
-
-    private Table table;
-
-    @Override
-    protected String getDescription() {
-        return "Null values should be sorted first (ascending sort) in a BeanItemContainer. Sort the 'country' column to see that the empty values come first.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2917;
-    }
-
-    @Override
-    protected void setup() {
-        table = new Table();
-        table.setSortDisabled(false);
-        table.setContainerDataSource(BeanItemContainerGenerator
-                .createContainer(100, 1));
-        table.setColumnCollapsingAllowed(true);
-
-        Button b = new Button("Disable sorting", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                table.setSortDisabled(!table.isSortDisabled());
-                if (table.isSortDisabled()) {
-                    event.getButton().setCaption("Enable sorting");
-                } else {
-                    event.getButton().setCaption("Disable sorting");
-                }
-            }
-
-        });
-
-        addComponent(table);
-        addComponent(b);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/beanitemcontainer/TestBeanItemContainerUsage.html b/tests/src/com/vaadin/tests/components/beanitemcontainer/TestBeanItemContainerUsage.html
deleted file mode 100644
index a37e8ea662..0000000000
--- a/tests/src/com/vaadin/tests/components/beanitemcontainer/TestBeanItemContainerUsage.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TestBeanItemContainerUsage</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TestBeanItemContainerUsage</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.beanitemcontainer.TestBeanItemContainerUsage</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/beanitemcontainer/TestBeanItemContainerUsage.java b/tests/src/com/vaadin/tests/components/beanitemcontainer/TestBeanItemContainerUsage.java
deleted file mode 100644
index 20becea974..0000000000
--- a/tests/src/com/vaadin/tests/components/beanitemcontainer/TestBeanItemContainerUsage.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.vaadin.tests.components.beanitemcontainer;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.vaadin.data.util.BeanItemContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-
-public class TestBeanItemContainerUsage extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "A test for the BeanItemContainer. The table should contain three persons and show their first and last names and their age.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 1061;
-    }
-
-    @Override
-    protected void setup() {
-        Table t = new Table("Table containing Persons");
-        t.setPageLength(5);
-        t.setWidth("100%");
-        List<Person> persons = new ArrayList<Person>();
-        persons.add(new Person("Jones", "Birchman", 35));
-        persons.add(new Person("Marc", "Smith", 30));
-        persons.add(new Person("Greg", "Sandman", 75));
-
-        BeanItemContainer<Person> bic = new BeanItemContainer<Person>(persons);
-        t.setContainerDataSource(bic);
-
-        addComponent(t);
-    }
-
-    public static class Person {
-        private String firstName;
-        private String lastName;
-        private int age;
-
-        public String getFirstName() {
-            return firstName;
-        }
-
-        public void setFirstName(String firstName) {
-            this.firstName = firstName;
-        }
-
-        public String getLastName() {
-            return lastName;
-        }
-
-        public void setLastName(String lastName) {
-            this.lastName = lastName;
-        }
-
-        public int getAge() {
-            return age;
-        }
-
-        public void setAge(int age) {
-            this.age = age;
-        }
-
-        public Person(String firstName, String lastName, int age) {
-            super();
-            this.firstName = firstName;
-            this.lastName = lastName;
-            this.age = age;
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/button/ButtonDisableOnClick.html b/tests/src/com/vaadin/tests/components/button/ButtonDisableOnClick.html
deleted file mode 100644
index 850d553b5b..0000000000
--- a/tests/src/com/vaadin/tests/components/button/ButtonDisableOnClick.html
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.button.Buttons2?restartApplication</td>
-	<td></td>
-</tr>
-<!--value change listener-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_Smenu#item0</td>
-	<td>37,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>28,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>35,8</td>
-</tr>
-<!--disable on click-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_Smenu#item0</td>
-	<td>39,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>33,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>22,4</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_SLog_row_0</td>
-	<td>1. Command: /Disable on click(true)</td>
-</tr>
-<!--click button-->
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_StestComponent/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_StestComponent</td>
-	<td>v-disabled</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_SLog_row_0</td>
-	<td>2. ClickEvent</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_StestComponent/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_SLog_row_0</td>
-	<td>2. ClickEvent</td>
-</tr>
-<!--re-enable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_Smenu#item0</td>
-	<td>35,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>34,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>15,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_Smenu#item0</td>
-	<td>43,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>37,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>33,6</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_SLog_row_0</td>
-	<td>4. Command: /Enabled(true)</td>
-</tr>
-<tr>
-	<td>assertNotCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_StestComponent</td>
-	<td>v-disabled</td>
-</tr>
-<!--no longer disable on click-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_Smenu#item0</td>
-	<td>25,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>39,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>36,3</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_StestComponent/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_SLog_row_0</td>
-	<td>6. ClickEvent</td>
-</tr>
-<tr>
-	<td>assertNotCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_StestComponent</td>
-	<td>v-disabled</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/button/ButtonErrorMessage.java b/tests/src/com/vaadin/tests/components/button/ButtonErrorMessage.java
deleted file mode 100644
index b543c69c51..0000000000
--- a/tests/src/com/vaadin/tests/components/button/ButtonErrorMessage.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.vaadin.tests.components.button;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-
-public class ButtonErrorMessage extends TestBase {
-
-    @Override
-    protected void setup() {
-        Button b = new Button("Click for error");
-        b.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                throw new NullPointerException();
-            }
-        });
-        addComponent(b);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Click the button for an exception. The exception should not contain any extra ',' characters";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3303;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/button/ButtonMouseDetails.java b/tests/src/com/vaadin/tests/components/button/ButtonMouseDetails.java
deleted file mode 100644
index 40caf620a8..0000000000
--- a/tests/src/com/vaadin/tests/components/button/ButtonMouseDetails.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.vaadin.tests.components.button;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Label;
-
-public class ButtonMouseDetails extends TestBase {
-
-    private Label out = new Label("", Label.CONTENT_PREFORMATTED);
-
-    private int clickCounter = 1;
-
-    private Button.ClickListener clickListener = new Button.ClickListener() {
-
-        public void buttonClick(ClickEvent event) {
-            StringBuilder str = new StringBuilder(out.getValue().toString());
-            str.append(clickCounter + ":\t");
-
-            // Modifier keys
-            str.append("ctrl=" + event.isCtrlKey() + ",\t");
-            str.append("alt=" + event.isAltKey() + ",\t");
-            str.append("meta=" + event.isMetaKey() + ",\t");
-            str.append("shift=" + event.isShiftKey() + ",\t");
-
-            // Coordinates
-            str.append("X=" + event.getRelativeX() + ",\t");
-            str.append("Y=" + event.getRelativeY() + ",\t");
-            str.append("clientX=" + event.getClientX() + ",\t");
-            str.append("clientY=" + event.getClientY());
-
-            str.append("\n");
-
-            out.setValue(str.toString());
-            clickCounter++;
-        }
-    };
-
-    @Override
-    protected void setup() {
-
-        getLayout().setSpacing(true);
-
-        Button button = new Button("CLICK ME!", clickListener);
-        button.setImmediate(true);
-        addComponent(button);
-
-        CheckBox cb = new CheckBox("CHECK ME!", clickListener);
-        cb.setImmediate(true);
-        addComponent(cb);
-
-        addComponent(out);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Clicking a button should returns some additional information about the click";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6605;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/button/ButtonUndefinedWidth.html b/tests/src/com/vaadin/tests/components/button/ButtonUndefinedWidth.html
deleted file mode 100644
index 28fe12f5a2..0000000000
--- a/tests/src/com/vaadin/tests/components/button/ButtonUndefinedWidth.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>ButtonUndefinedWidth</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ButtonUndefinedWidth</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.button.ButtonUndefinedWidth</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtonUndefinedWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtonUndefinedWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeButton[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtonUndefinedWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtonUndefinedWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VNativeButton[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsbuttonButtonUndefinedWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
-	<td>636,149</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>1</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/button/ButtonUndefinedWidth.java b/tests/src/com/vaadin/tests/components/button/ButtonUndefinedWidth.java
deleted file mode 100644
index 852e41bd05..0000000000
--- a/tests/src/com/vaadin/tests/components/button/ButtonUndefinedWidth.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.vaadin.tests.components.button;
-
-import com.vaadin.data.Item;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.NativeButton;
-import com.vaadin.ui.Table;
-
-public class ButtonUndefinedWidth extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Both the button outside the table and inside the table should be only as wide as necessary. There should be empty space in the table to the right of the button.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3257;
-    }
-
-    @Override
-    protected void setup() {
-        Button b = new Button("Undefined wide");
-        addComponent(b);
-        NativeButton b2 = new NativeButton("Undefined wide");
-        addComponent(b2);
-
-        Table t = new Table();
-        t.addContainerProperty("A", Button.class, null);
-        t.setWidth("500px");
-
-        Item i = t.addItem("1");
-        i.getItemProperty("A").setValue(new Button("Undef wide"));
-        Item i2 = t.addItem("2");
-        i2.getItemProperty("A").setValue(new NativeButton("Undef wide"));
-
-        addComponent(t);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/button/Buttons.html b/tests/src/com/vaadin/tests/components/button/Buttons.html
deleted file mode 100644
index 43e554bec5..0000000000
--- a/tests/src/com/vaadin/tests/components/button/Buttons.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>com.vaadin.tests.components.button.Buttons</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">com.vaadin.tests.components.button.Buttons</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.button.Buttons</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/button/Buttons.java b/tests/src/com/vaadin/tests/components/button/Buttons.java
deleted file mode 100644
index afbc90d197..0000000000
--- a/tests/src/com/vaadin/tests/components/button/Buttons.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.vaadin.tests.components.button;
-
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.tests.util.LoremIpsum;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.NativeButton;
-
-public class Buttons extends ComponentTestCase<Button> {
-
-    @Override
-    protected Class<Button> getTestClass() {
-        return Button.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-
-        Button l;
-        for (boolean nat : new boolean[] { false, true }) {
-            l = createButton("This is an undefined wide button", nat);
-            l.setWidth(null);
-            addTestComponent(l);
-
-            l = createButton(
-                    "This is an undefined wide button with fixed 100px height",
-                    nat);
-            l.setWidth(null);
-            l.setHeight("100px");
-            addTestComponent(l);
-
-            l = createButton(
-                    "This is a 200px wide simple button with a much longer caption",
-                    nat);
-            l.setWidth("200px");
-            addTestComponent(l);
-
-            l = createButton(
-                    "This is a 100% wide simple button " + LoremIpsum.get(1500),
-                    nat);
-            l.setWidth("100%");
-            addTestComponent(l);
-
-            l = createButton(
-                    "This is a 100% wide button with fixed 65px height. "
-                            + LoremIpsum.get(5000), nat);
-            l.setWidth("100%");
-            l.setHeight("65px");
-
-            boolean ie6 = (getBrowser().isIE() && getBrowser()
-                    .getBrowserMajorVersion() == 6);
-            if (!ie6 || !nat) {
-                // Skip this NativeButton for IE6 as it can't decide how to
-                // render it
-                addTestComponent(l);
-            }
-        }
-
-    }
-
-    private Button createButton(String text, boolean nativeButton) {
-        Button b;
-        if (nativeButton) {
-            b = new NativeButton(text);
-        } else {
-            b = new Button(text);
-        }
-
-        return b;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A generic test for Buttons in different configurations";
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/button/Buttons2.java b/tests/src/com/vaadin/tests/components/button/Buttons2.java
deleted file mode 100644
index c18e736082..0000000000
--- a/tests/src/com/vaadin/tests/components/button/Buttons2.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package com.vaadin.tests.components.button;
-
-import java.util.LinkedHashMap;
-
-import com.vaadin.tests.components.abstractfield.AbstractFieldTest;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.themes.Reindeer;
-
-public class Buttons2<T extends Button> extends AbstractFieldTest<T> implements
-        ClickListener {
-
-    private Command<T, Boolean> switchModeCommand = new Command<T, Boolean>() {
-
-        @SuppressWarnings("deprecation")
-        public void execute(T c, Boolean value, Object data) {
-            c.setSwitchMode(value);
-        }
-    };
-
-    private Command<T, Boolean> disableOnClickCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            c.setDisableOnClick(value);
-        }
-    };
-
-    private Command<T, Boolean> clickListenerCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((Button.ClickListener) Buttons2.this);
-            } else {
-                c.removeListener((Button.ClickListener) Buttons2.this);
-            }
-
-        }
-    };
-
-    @Override
-    protected Class<T> getTestClass() {
-        return (Class<T>) Button.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-
-        createBooleanAction("Switch mode", CATEGORY_FEATURES, false,
-                switchModeCommand);
-        createBooleanAction("Disable on click", CATEGORY_FEATURES, false,
-                disableOnClickCommand);
-        addClickListener(CATEGORY_LISTENERS);
-    }
-
-    @Override
-    protected void createComponentStyleNames(
-            LinkedHashMap<String, String> options) {
-        options.put("Reindeer default", Reindeer.BUTTON_DEFAULT);
-        options.put("Reindeer small", Reindeer.BUTTON_SMALL);
-        options.put("Reindeer link", Reindeer.BUTTON_LINK);
-    }
-
-    private void addClickListener(String category) {
-        createBooleanAction("Click listener", category, false,
-                clickListenerCommand);
-
-    }
-
-    public void buttonClick(ClickEvent event) {
-        log(event.getClass().getSimpleName());
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/button/DisabledButtons.html b/tests/src/com/vaadin/tests/components/button/DisabledButtons.html
deleted file mode 100644
index 65584fd4d0..0000000000
--- a/tests/src/com/vaadin/tests/components/button/DisabledButtons.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>DisabledButtons</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">DisabledButtons</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.button.DisabledButtons</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/button/DisabledButtons.java b/tests/src/com/vaadin/tests/components/button/DisabledButtons.java
deleted file mode 100644
index 3e438a5d5b..0000000000
--- a/tests/src/com/vaadin/tests/components/button/DisabledButtons.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.vaadin.tests.components.button;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.VerticalLayout;
-
-public class DisabledButtons extends TestBase {
-
-    private static final ThemeResource ICON = new ThemeResource(
-            "../runo/icons/16/ok.png");
-    private String CAPTION = "Caption";
-
-    @Override
-    protected String getDescription() {
-        return "The disabled buttons should be identical to the enabled buttons but grayed out.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3110;
-    }
-
-    @Override
-    protected void setup() {
-        HorizontalLayout hl = new HorizontalLayout();
-        hl.addComponent(createButtons(true));
-        hl.addComponent(createButtons(false));
-
-        addComponent(hl);
-
-    }
-
-    private Component createButtons(boolean enabled) {
-        VerticalLayout vl = new VerticalLayout();
-        Button b;
-
-        // Button w/ text
-        b = new Button(CAPTION);
-        b.setEnabled(enabled);
-        vl.addComponent(b);
-
-        // Button w/ text, icon
-        b = new Button(CAPTION);
-        b.setEnabled(enabled);
-        b.setIcon(ICON);
-        vl.addComponent(b);
-
-        // Button w/ icon
-        b = new Button();
-        b.setEnabled(enabled);
-        b.setIcon(ICON);
-        vl.addComponent(b);
-
-        return vl;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/button/IE7ButtonWithIcon.html b/tests/src/com/vaadin/tests/components/button/IE7ButtonWithIcon.html
deleted file mode 100644
index a05b439759..0000000000
--- a/tests/src/com/vaadin/tests/components/button/IE7ButtonWithIcon.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>IE7ButtonWithIcon</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">IE7ButtonWithIcon</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.button.IE7ButtonWithIcon</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/button/IE7ButtonWithIcon.java b/tests/src/com/vaadin/tests/components/button/IE7ButtonWithIcon.java
deleted file mode 100644
index c6a0ae96a9..0000000000
--- a/tests/src/com/vaadin/tests/components/button/IE7ButtonWithIcon.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.vaadin.tests.components.button;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-
-public class IE7ButtonWithIcon extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The button should contain the text \"Normal\" and an 16x16 icon and have padding to the left and the right";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3031;
-    }
-
-    @Override
-    protected void setup() {
-        Button b = new Button("Normal");
-        b.setIcon(new ThemeResource("../runo/icons/16/ok.png"));
-
-        addComponent(b);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/button/ShortCutListenerModification.java b/tests/src/com/vaadin/tests/components/button/ShortCutListenerModification.java
deleted file mode 100644
index 3d4dfeda04..0000000000
--- a/tests/src/com/vaadin/tests/components/button/ShortCutListenerModification.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.vaadin.tests.components.button;
-
-import com.vaadin.event.ShortcutAction.KeyCode;
-import com.vaadin.event.ShortcutAction.ModifierKey;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Window.Notification;
-
-@SuppressWarnings("serial")
-public class ShortCutListenerModification extends TestBase implements
-        ClickListener {
-
-    @Override
-    protected String getDescription() {
-        return "Modifiying listeners in shortcuthandler should succeed. Hitting CTRL-C should close windows one by one.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5350;
-    }
-
-    @Override
-    protected void setup() {
-
-        Button prev = null;
-
-        for (int j = 0; j < 20; j++) {
-
-            Window window = new Window();
-            getMainWindow().addWindow(window);
-
-            Button button1 = new Button("b1 (CTRL-C)");
-            Button button2 = new Button("b2 (CTRL-V)");
-
-            button1.addListener(this);
-            button2.addListener(this);
-
-            button1.setClickShortcut(KeyCode.C, ModifierKey.CTRL);
-            button2.setClickShortcut(KeyCode.V, ModifierKey.CTRL);
-
-            window.addComponent(button1);
-            window.addComponent(button2);
-            button1.focus();
-            button1.setData(prev);
-            prev = button1;
-        }
-
-    }
-
-    @Override
-    public void terminalError(com.vaadin.terminal.Terminal.ErrorEvent event) {
-        super.terminalError(event);
-        getMainWindow().showNotification("Failed!",
-                Notification.TYPE_ERROR_MESSAGE);
-
-    }
-
-    public void buttonClick(ClickEvent event) {
-        Window window2 = event.getButton().getWindow();
-        window2.getParent().removeWindow(window2);
-        Button prev = (Button) event.getButton().getData();
-        if (prev != null) {
-            prev.focus();
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/button/TooltipForDisabledButton.java b/tests/src/com/vaadin/tests/components/button/TooltipForDisabledButton.java
deleted file mode 100644
index 3fed5b9c02..0000000000
--- a/tests/src/com/vaadin/tests/components/button/TooltipForDisabledButton.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.vaadin.tests.components.button;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-
-public class TooltipForDisabledButton extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "A disabled button should show a tooltip when hovering it";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2085;
-    }
-
-    @Override
-    protected void setup() {
-        Button buttonEnabled = new Button("This is an enabled button");
-        Button buttonDisabled = new Button("This is an disabled button");
-        buttonDisabled.setEnabled(false);
-
-        buttonEnabled.setDescription("Tooltip for enabled");
-        buttonDisabled.setDescription("Tooltip for disabled");
-
-        buttonDisabled.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                getMainWindow().showNotification("Clicked Disabled");
-            }
-
-        });
-
-        buttonEnabled.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                getMainWindow().showNotification("Clicked Enabled");
-            }
-
-        });
-
-        addComponent(buttonEnabled);
-        addComponent(buttonDisabled);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/caption/EmptyCaptions.html b/tests/src/com/vaadin/tests/components/caption/EmptyCaptions.html
deleted file mode 100644
index dc98bbacbb..0000000000
--- a/tests/src/com/vaadin/tests/components/caption/EmptyCaptions.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>EmptyCaptions</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">EmptyCaptions</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.caption.EmptyCaptions</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/caption/EmptyCaptions.java b/tests/src/com/vaadin/tests/components/caption/EmptyCaptions.java
deleted file mode 100644
index 86f0bd6b9d..0000000000
--- a/tests/src/com/vaadin/tests/components/caption/EmptyCaptions.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.vaadin.tests.components.caption;
-
-import com.vaadin.terminal.UserError;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.TextField;
-
-public class EmptyCaptions extends TestBase {
-
-    @Override
-    protected void setup() {
-        TextField tf;
-
-        tf = new TextField(null, "Null caption");
-        addComponent(tf);
-
-        tf = new TextField("", "Empty caption");
-        addComponent(tf);
-
-        tf = new TextField(" ", "Space as caption");
-        addComponent(tf);
-
-        tf = new TextField(null, "Null caption, required");
-        tf.setRequired(true);
-        addComponent(tf);
-        tf = new TextField("", "Empty caption, required");
-        tf.setRequired(true);
-        addComponent(tf);
-        tf = new TextField(" ", "Space as caption, required");
-        tf.setRequired(true);
-        addComponent(tf);
-
-        tf = new TextField(null, "Null caption, error");
-        tf.setComponentError(new UserError("error"));
-        addComponent(tf);
-
-        tf = new TextField("", "Empty caption, error");
-        tf.setComponentError(new UserError("error"));
-        addComponent(tf);
-
-        tf = new TextField(" ", "Space as caption, error");
-        tf.setComponentError(new UserError("error"));
-        addComponent(tf);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Null caption should never use space while a non-null caption always should use space.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3846;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/caption/IconsInCaption.java b/tests/src/com/vaadin/tests/components/caption/IconsInCaption.java
deleted file mode 100644
index 926088ff48..0000000000
--- a/tests/src/com/vaadin/tests/components/caption/IconsInCaption.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package com.vaadin.tests.components.caption;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.VaadinClasses;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-
-public class IconsInCaption extends TestBase {
-
-    private static final String TYPE_EMBEDDED = "Embedded";
-    private static final String TYPE_CAPTION = "In caption";
-
-    private static final String[] icons = new String[] { "arrow-down.png",
-            "arrow-left.png", "arrow-right.png", "arrow-up.png",
-            "attention.png", "calendar.png", "cancel.png", "document.png",
-            "document-add.png", "document-delete.png", "document-doc.png",
-            "document-image.png", "document-pdf.png", "document-ppt.png",
-            "document-txt.png", "document-web.png", "document-xsl.png",
-            "email.png", "email-reply.png", "email-send.png", "folder.png",
-            "folder-add.png", "folder-delete.png", "globe.png", "help.png",
-            "lock.png", "note.png", "ok.png", "reload.png", "settings.png",
-            "trash.png", "trash-full.png", "user.png", "users.png" };
-
-    private static final String[] sizes = new String[] { "16", "32", "64" };
-
-    private ComponentContainer container = new VerticalLayout();
-
-    private Log log = new Log(5);
-
-    private ComboBox containerSelect;
-
-    private ComboBox iconTypeSelect;
-
-    @Override
-    protected void setup() {
-        iconTypeSelect = new ComboBox("Icon container");
-        iconTypeSelect.addItem(TYPE_EMBEDDED);
-        iconTypeSelect.addItem(TYPE_CAPTION);
-        iconTypeSelect.setImmediate(true);
-        iconTypeSelect.setNullSelectionAllowed(false);
-        iconTypeSelect.addListener(new ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                updateContainer();
-            }
-        });
-
-        containerSelect = new ComboBox("Container");
-        for (Class<? extends ComponentContainer> cc : VaadinClasses
-                .getComponentContainersSupportingUnlimitedNumberOfComponents()) {
-            containerSelect.addItem(cc);
-        }
-        containerSelect.setImmediate(true);
-        containerSelect.addListener(new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                updateContainer();
-
-            }
-        });
-
-        addComponent(log);
-        addComponent(iconTypeSelect);
-        addComponent(containerSelect);
-        addComponent(container);
-
-        iconTypeSelect.setValue(TYPE_CAPTION);
-        containerSelect.setValue(VerticalLayout.class);
-    }
-
-    protected void updateContainer() {
-        Class<? extends ComponentContainer> containerClass = (Class<? extends ComponentContainer>) containerSelect
-                .getValue();
-        if (containerClass == null) {
-            return;
-        }
-
-        Object iconType = iconTypeSelect.getValue();
-        try {
-            ComponentContainer newContainer = createContainer(containerClass,
-                    iconType);
-            replaceComponent(container, newContainer);
-            container = newContainer;
-            log.log("Container changed to " + containerClass.getName() + "/"
-                    + iconType);
-        } catch (Exception e) {
-            log.log("Create container failed for " + containerClass.getName()
-                    + ": " + e.getMessage());
-            e.printStackTrace();
-        }
-
-    }
-
-    private static ComponentContainer createContainer(
-            Class<? extends ComponentContainer> containerClass, Object iconType)
-            throws InstantiationException, IllegalAccessException {
-        ComponentContainer container = containerClass.newInstance();
-        for (String size : sizes) {
-            Label title = new Label("<h3>" + size + "x" + size + "</h3>",
-                    Label.CONTENT_XHTML);
-            container.addComponent(title);
-            for (String icon : icons) {
-                ThemeResource res = new ThemeResource("../runo/icons/" + size
-                        + "/" + icon);
-                if (TYPE_CAPTION.equals(iconType)) {
-                    Label name = new Label();
-                    name.setCaption(icon);
-                    name.setIcon(res);
-                    container.addComponent(name);
-                } else if (TYPE_EMBEDDED.equals(iconType)) {
-                    Embedded e = new Embedded(icon, res);
-                    container.addComponent(e);
-                }
-            }
-        }
-
-        return container;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Test for comparing rendering speed of icons in a caption and in an Embedded component in different component containers.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6578;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/caption/LargeCaptionIcon.html b/tests/src/com/vaadin/tests/components/caption/LargeCaptionIcon.html
deleted file mode 100644
index 7c94821e7f..0000000000
--- a/tests/src/com/vaadin/tests/components/caption/LargeCaptionIcon.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>LargeCaptionIcon</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">LargeCaptionIcon</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.caption.LargeCaptionIcon</td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>750</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>refresh</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>750</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/caption/LargeCaptionIcon.java b/tests/src/com/vaadin/tests/components/caption/LargeCaptionIcon.java
deleted file mode 100644
index 603fdf458b..0000000000
--- a/tests/src/com/vaadin/tests/components/caption/LargeCaptionIcon.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.vaadin.tests.components.caption;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-
-public class LargeCaptionIcon extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The icon should be completely visible on both initial load and after subsequent refreshes.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2902;
-    }
-
-    @Override
-    protected void setup() {
-        GridLayout gl = new GridLayout();
-        gl.setWidth("100%");
-
-        Label l = new Label("This is a label");
-        l.setCaption("This is its caption, it also has a large icon");
-        l.setIcon(new ThemeResource("../runo/icons/64/ok.png"));
-        gl.addComponent(l);
-        addComponent(gl);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/checkbox/CheckBoxNullValue.html b/tests/src/com/vaadin/tests/components/checkbox/CheckBoxNullValue.html
deleted file mode 100644
index 9717ccec78..0000000000
--- a/tests/src/com/vaadin/tests/components/checkbox/CheckBoxNullValue.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>CheckBoxNullValue</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">CheckBoxNullValue</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.checkbox.CheckBoxNullValue?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxNullValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>bothnull</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxNullValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
-	<td>6,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxNullValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
-	<td>7,4</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxNullValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>bothtrue</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxNullValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
-	<td>6,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxNullValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
-	<td>9,9</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxNullValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>bothfalse</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/checkbox/CheckBoxNullValue.java b/tests/src/com/vaadin/tests/components/checkbox/CheckBoxNullValue.java
deleted file mode 100644
index a961b48426..0000000000
--- a/tests/src/com/vaadin/tests/components/checkbox/CheckBoxNullValue.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.vaadin.tests.components.checkbox;
-
-import com.vaadin.data.Validator.InvalidValueException;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Label;
-
-public class CheckBoxNullValue extends TestBase {
-
-    @Override
-    protected void setup() {
-        // workaround for #6919
-        getLayout().setWidth("100%");
-
-        final CheckBox checkbox = new CheckBox("A checkbox");
-        checkbox.setValue(null);
-        addComponent(checkbox);
-
-        final CheckBox requiredCheckbox = new CheckBox("A required checkbox");
-        requiredCheckbox.setRequired(true);
-        requiredCheckbox.setValue(null);
-        addComponent(requiredCheckbox);
-
-        final Label valueLabel = new Label("");
-
-        final Button button = new Button("Validate");
-        addComponent(button);
-        button.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                checkbox.setComponentError(null);
-                requiredCheckbox.setComponentError(null);
-                try {
-                    checkbox.validate();
-                } catch (InvalidValueException e) {
-                    checkbox.setComponentError(e);
-                }
-                try {
-                    requiredCheckbox.validate();
-                } catch (InvalidValueException e) {
-                    requiredCheckbox.setComponentError(e);
-                }
-                valueLabel.setValue("Checkbox: " + checkbox.getValue()
-                        + "; Required checkbox: " + requiredCheckbox.getValue());
-            }
-        });
-        addComponent(valueLabel);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "CheckBox should support null values.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6918;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/checkbox/CheckBoxes.html b/tests/src/com/vaadin/tests/components/checkbox/CheckBoxes.html
deleted file mode 100644
index 40596a49fd..0000000000
--- a/tests/src/com/vaadin/tests/components/checkbox/CheckBoxes.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.checkbox.CheckBoxes?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Error indicators/domChild[0]</td>
-	<td>31,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-error</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Required/domChild[0]</td>
-	<td>38,13</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-error-required</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Readonly/domChild[0]</td>
-	<td>7,9</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-error-required-readonly</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Error indicators/domChild[0]</td>
-	<td>6,4</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-required-readonly</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Required/domChild[0]</td>
-	<td>8,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-readonly</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Enabled/domChild[0]</td>
-	<td>8,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled-readonly</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Required/domChild[0]</td>
-	<td>12,4</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled-required-readonly</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Error indicators/domChild[0]</td>
-	<td>10,11</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled-error-required-readonly</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Required/domChild[0]</td>
-	<td>6,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled-error-readonly</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Readonly/domChild[0]</td>
-	<td>9,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled-error</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Required/domChild[0]</td>
-	<td>9,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled-error-required</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Error indicators/domChild[0]</td>
-	<td>10,3</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled-required</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Required/domChild[0]</td>
-	<td>10,7</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/checkbox/CheckBoxes.java b/tests/src/com/vaadin/tests/components/checkbox/CheckBoxes.java
deleted file mode 100644
index 0efa8bc818..0000000000
--- a/tests/src/com/vaadin/tests/components/checkbox/CheckBoxes.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.vaadin.tests.components.checkbox;
-
-import java.util.Date;
-
-import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.ui.CheckBox;
-
-public class CheckBoxes extends ComponentTestCase<CheckBox> {
-
-    private ThemeResource SMALL_ICON = new ThemeResource(
-            "../runo/icons/16/ok.png");
-    private ThemeResource LARGE_ICON = new ThemeResource(
-            "../runo/icons/64/document.png");
-    private ThemeResource LARGE_ICON_NOCACHE = new ThemeResource(
-            "../runo/icons/64/document.png?" + new Date().getTime());
-
-    @Override
-    protected Class<CheckBox> getTestClass() {
-        return CheckBox.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-
-        setTheme("tests-tickets");
-        CheckBox cb;
-
-        cb = createCheckBox("CheckBox with normal text");
-        addTestComponent(cb);
-
-        cb = createCheckBox("CheckBox with large text");
-        cb.setStyleName("large");
-        addTestComponent(cb);
-
-        cb = createCheckBox("CheckBox with normal text and small icon",
-                SMALL_ICON);
-        addTestComponent(cb);
-        cb = createCheckBox("CheckBox with large text and small icon",
-                SMALL_ICON);
-        cb.setStyleName("large");
-        addTestComponent(cb);
-
-        cb = createCheckBox("CheckBox with normal text and large icon",
-                LARGE_ICON);
-        addTestComponent(cb);
-        cb = createCheckBox("CheckBox with large text and large icon",
-                LARGE_ICON_NOCACHE);
-        cb.setStyleName("large");
-        addTestComponent(cb);
-
-    }
-
-    private CheckBox createCheckBox(String caption, Resource icon) {
-        CheckBox cb = createCheckBox(caption);
-        cb.setIcon(icon);
-
-        return cb;
-    }
-
-    private CheckBox createCheckBox(String caption) {
-        return new CheckBox(caption);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A generic test for CheckBoxes in different configurations";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/checkbox/CheckBoxes2.java b/tests/src/com/vaadin/tests/components/checkbox/CheckBoxes2.java
deleted file mode 100644
index 20f1ece65e..0000000000
--- a/tests/src/com/vaadin/tests/components/checkbox/CheckBoxes2.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.vaadin.tests.components.checkbox;
-
-import com.vaadin.tests.components.abstractfield.AbstractFieldTest;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CheckBox;
-
-public class CheckBoxes2 extends AbstractFieldTest<CheckBox> implements
-        ClickListener {
-
-    // cannot extend Buttons2 because of Switch mode problems
-
-    @Override
-    protected Class<CheckBox> getTestClass() {
-        return CheckBox.class;
-    }
-
-    private Command<CheckBox, Boolean> switchModeCommand = new Command<CheckBox, Boolean>() {
-
-        @SuppressWarnings("deprecation")
-        public void execute(CheckBox c, Boolean value, Object data) {
-            c.setSwitchMode(value);
-        }
-    };
-
-    private Command<CheckBox, Boolean> clickListenerCommand = new Command<CheckBox, Boolean>() {
-
-        public void execute(CheckBox c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((ClickListener) CheckBoxes2.this);
-            } else {
-                c.removeListener((ClickListener) CheckBoxes2.this);
-            }
-
-        }
-    };
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-
-        createBooleanAction("Switch mode", CATEGORY_FEATURES, true,
-                switchModeCommand);
-        addClickListener(CATEGORY_LISTENERS);
-    }
-
-    private void addClickListener(String category) {
-        createBooleanAction("Click listener", category, false,
-                clickListenerCommand);
-
-    }
-
-    public void buttonClick(ClickEvent event) {
-        log(event.getClass().getSimpleName());
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/checkbox/CheckboxCaptionWrapping.html b/tests/src/com/vaadin/tests/components/checkbox/CheckboxCaptionWrapping.html
deleted file mode 100644
index 26ecc95721..0000000000
--- a/tests/src/com/vaadin/tests/components/checkbox/CheckboxCaptionWrapping.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>CheckboxCaptionWrapping</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">CheckboxCaptionWrapping</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.checkbox.CheckboxCaptionWrapping</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/checkbox/CheckboxCaptionWrapping.java b/tests/src/com/vaadin/tests/components/checkbox/CheckboxCaptionWrapping.java
deleted file mode 100644
index 540af083c4..0000000000
--- a/tests/src/com/vaadin/tests/components/checkbox/CheckboxCaptionWrapping.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.vaadin.tests.components.checkbox;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-
-public class CheckboxCaptionWrapping extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The checkbox caption consists of 10 words which should all be shown. There should be no extra white space between the checkbox caption and the label below it.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3263;
-    }
-
-    @Override
-    protected void setup() {
-        setTheme("tests-tickets");
-        VerticalLayout mainLayout = new VerticalLayout();
-        CheckBox cb = new CheckBox(
-                "Checkbox with some Incididunt ut labore et dolore magna aliqua.");
-        cb.setStyleName("wrap");
-        cb.setWidth("100%");
-        mainLayout.setStyleName("borders");
-        mainLayout.setWidth("300px");
-        mainLayout.addComponent(cb);
-        mainLayout.addComponent(new Label(
-                "Lorem ipsum dolor sit amet, consectetur adipisicing"
-                        + " elit, sed do eiusmod tempor."));
-
-        addComponent(mainLayout);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/checkbox/CheckboxIcon.java b/tests/src/com/vaadin/tests/components/checkbox/CheckboxIcon.java
deleted file mode 100644
index 1f96a05084..0000000000
--- a/tests/src/com/vaadin/tests/components/checkbox/CheckboxIcon.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.vaadin.tests.components.checkbox;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.CheckBox;
-
-public class CheckboxIcon extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The icon of a Checkbox component should have the same cursor as the text and should be clickable. The tooltip should appear when hovering the checkbox, the icon or the caption.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    protected void setup() {
-        CheckBox checkbox = new CheckBox("A checkbox");
-        checkbox.setIcon(new ThemeResource("../runo/icons/32/calendar.png"));
-        checkbox.setDescription("Tooltip for checkbox");
-
-        addComponent(checkbox);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxClosePopupRetainText.html b/tests/src/com/vaadin/tests/components/combobox/ComboBoxClosePopupRetainText.html
deleted file mode 100644
index 9248938b28..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxClosePopupRetainText.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title></title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3"></td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.ComboBoxes2?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
-	<td>47,8</td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
-	<td>I</td>
-</tr>
-<!--Open popup-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[1]</td>
-	<td>14,10</td>
-</tr>
-<!--Close poup-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[1]</td>
-	<td>14,10</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
-	<td>I</td>
-</tr>
-<!--Select a value-->
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.ComboBoxes2?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[1]</td>
-	<td>14,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item2</td>
-	<td>47,9</td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
-	<td>I</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[1]</td>
-	<td>14,10</td>
-</tr>
-<!--Entered value should remain in the text field even though the popup is opened-->
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
-	<td>I</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.html b/tests/src/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.html
deleted file mode 100644
index 1689c7c1fc..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.ComboBoxCombinedWithEnterShortcut?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxCombinedWithEnterShortcut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
-	<td>81,11</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxCombinedWithEnterShortcut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxCombinedWithEnterShortcut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxCombinedWithEnterShortcut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxCombinedWithEnterShortcut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
-	<td>enter</td>
-</tr>
-<!--Enter in the popup should not send a shortcut event-->
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxCombinedWithEnterShortcut::PID_SLog_row_0</td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxCombinedWithEnterShortcut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
-	<td>enter</td>
-</tr>
-<!--Enter again in the combobox SHOULD send a shortcut event-->
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxCombinedWithEnterShortcut::PID_SLog_row_0</td>
-	<td>1. Button clicked. ComboBox value: Berlin</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.java
deleted file mode 100644
index 88a403b1b6..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import com.vaadin.event.ShortcutAction.KeyCode;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.AbstractSelect.Filtering;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.ComboBox;
-
-public class ComboBoxCombinedWithEnterShortcut extends TestBase {
-    final String[] cities = new String[] { "Berlin", "Brussels", "Helsinki",
-            "Madrid", "Oslo", "Paris", "Stockholm" };
-
-    private Log log = new Log(5);
-
-    @Override
-    protected void setup() {
-        final ComboBox l = new ComboBox("Please select a city");
-        for (int i = 0; i < cities.length; i++) {
-            l.addItem(cities[i]);
-        }
-
-        l.setFilteringMode(Filtering.FILTERINGMODE_OFF);
-        l.setImmediate(true);
-        l.setNewItemsAllowed(true);
-
-        Button aButton = new Button("Show Value");
-        aButton.setClickShortcut(KeyCode.ENTER);
-        aButton.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                log.log("Button clicked. ComboBox value: " + l.getValue());
-
-            }
-
-        });
-
-        addComponent(log);
-        addComponent(l);
-        addComponent(aButton);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Button has Enter as click shortcut key. The shortcut should not be triggered when selecting an item in the dropdown";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6686;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxDataSourceChange.html b/tests/src/com/vaadin/tests/components/combobox/ComboBoxDataSourceChange.html
deleted file mode 100644
index cab8bbc996..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxDataSourceChange.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>ComboBoxDataSourceChange</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ComboBoxDataSourceChange</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.ComboBoxDataSourceChange?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>4,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item4</td>
-	<td>108,0</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>value-should-be-ds1-3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>11,15</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::Root/VFilterSelect$SuggestionPopup[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>84,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/domChild[0]/domChild[0]</td>
-	<td>260,245</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>combo-should-have-ds1-3-text</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>container-changed-value-null</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>12,18</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item3</td>
-	<td>106,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>10,22</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::Root/VFilterSelect$SuggestionPopup[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>91,4</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>value-ds2-2</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxDataSourceChange.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxDataSourceChange.java
deleted file mode 100644
index adeaede187..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxDataSourceChange.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-
-@SuppressWarnings("serial")
-public class ComboBoxDataSourceChange extends TestBase {
-
-    private ComboBox cb2;
-
-    @Override
-    protected void setup() {
-        final IndexedContainer ds1 = new IndexedContainer();
-        // ds1.addContainerProperty("caption", String.class, "");
-        for (int i = 0; i < 32; i++) {
-            ds1.addItem("ds1-" + i);
-        }
-
-        final IndexedContainer ds2 = new IndexedContainer();
-        // ds2.addContainerProperty("caption", String.class, "");
-        for (int i = 0; i < 32; i++) {
-            ds2.addItem("ds2-" + i);
-        }
-
-        HorizontalLayout hl = new HorizontalLayout();
-        hl.setWidth("100%");
-
-        cb2 = new ComboBox();
-        cb2.setImmediate(true);
-        hl.addComponent(cb2);
-        HorizontalLayout state = new HorizontalLayout();
-        state.setSpacing(true);
-        hl.addComponent(state);
-
-        final Label currentValue = new Label();
-        currentValue.setCaption("Current Value:");
-        currentValue.setSizeUndefined();
-        final Label currentDS = new Label();
-        currentDS.setCaption("Current DS:");
-        currentDS.setSizeUndefined();
-        state.addComponent(currentValue);
-        state.addComponent(currentDS);
-
-        Table t = new Table("ds1");
-        t.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-        t.setContainerDataSource(ds1);
-        state.addComponent(t);
-
-        Button b = new Button("Use ds1");
-        b.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                cb2.setContainerDataSource(ds1);
-                currentDS.setValue("ds1");
-            }
-        });
-        state.addComponent(b);
-
-        t = new Table("ds2");
-        t.setContainerDataSource(ds2);
-        t.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-        state.addComponent(t);
-
-        b = new Button("Use ds2");
-        b.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                cb2.setContainerDataSource(ds2);
-                currentDS.setValue("ds2");
-            }
-        });
-        state.addComponent(b);
-
-        addComponent(hl);
-
-        cb2.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                currentValue.setValue(event.getProperty().getValue());
-            }
-        });
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A test for combobox and its container changes.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        // TODO should be list of integers applies for #5279
-        return 4607;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxEnablesComboBox.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxEnablesComboBox.java
deleted file mode 100644
index 6178d25a2a..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxEnablesComboBox.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.ComboBox;
-
-public class ComboBoxEnablesComboBox extends TestBase {
-
-    private ComboBox cb2;
-
-    @Override
-    protected void setup() {
-        ComboBox cb = new ComboBox("Always enabled");
-        cb.setImmediate(true);
-        populate(cb);
-        cb.addListener(new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                cb2.setEnabled(true);
-            }
-
-        });
-        cb2 = new ComboBox("Initially disabled");
-        cb2.setImmediate(true);
-        cb2.setEnabled(false);
-        populate(cb2);
-
-        addComponent(cb);
-        addComponent(cb2);
-    }
-
-    private void populate(ComboBox cb) {
-        for (int i = 1; i < 10; i++) {
-            cb.addItem("Item " + i);
-        }
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Selecting an item in the first combobox enables the second.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4632;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxInPopupView.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxInPopupView.java
deleted file mode 100644
index 5a488e5dc5..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxInPopupView.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import java.util.Map;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.PopupView;
-
-public class ComboBoxInPopupView extends TestBase {
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2508;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Testcase for ComboBox in PopupView. Make the window narrower than the popup: the focused (2) one wraps button to second row AND seems narrower than (1), the unfocused one (1) works as expected.";
-    }
-
-    @Override
-    protected void setup() {
-        final ComboBox cb1 = new ComboBox();
-        cb1.setWidth("260px");
-        // cb.focus();
-        PopupView pv1 = new PopupView("<u>1. expected (click)</u>", cb1);
-        getLayout().addComponent(pv1);
-
-        final ComboBox cb2 = new ComboBox();
-        cb2.setWidth("260px");
-        PopupView pv2 = new PopupView("<u>2. focused (click)</u>", cb2) {
-            @Override
-            public void changeVariables(Object source,
-                    Map<String, Object> variables) {
-                super.changeVariables(source, variables);
-                cb2.focus();
-            }
-
-        };
-        getLayout().addComponent(pv2);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxInvalidNullSelection.html b/tests/src/com/vaadin/tests/components/combobox/ComboBoxInvalidNullSelection.html
deleted file mode 100644
index bbe5d5d717..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxInvalidNullSelection.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>ComboBoxInvalidNullSelection</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ComboBoxInvalidNullSelection</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.ComboBoxInvalidNullSelection?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxInvalidNullSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxInvalidNullSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[1]</td>
-	<td>10,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxInvalidNullSelection::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item3</td>
-	<td>101,11</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxInvalidNullSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxInvalidNullSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
-	<td>100,14</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxInvalidNullSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxInvalidNullSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
-	<td>80,11</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxInvalidNullSelection::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. Value is now: Item 3</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxInvalidNullSelection.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxInvalidNullSelection.java
deleted file mode 100644
index 2fcb44d4f2..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxInvalidNullSelection.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.ComboBox;
-
-public class ComboBoxInvalidNullSelection extends TestBase {
-
-    private static final Object CAPTION = "C";
-    private IndexedContainer ds1;
-    private IndexedContainer ds2;
-    private ComboBox combo;
-    private Log log = new Log(5);
-
-    @Override
-    protected void setup() {
-
-        createDataSources();
-
-        Button b = new Button("Swap data source");
-        b.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                if (combo.getContainerDataSource() == ds1) {
-                    combo.setContainerDataSource(ds2);
-                } else {
-                    combo.setContainerDataSource(ds1);
-                }
-                combo.setValue("Item 3");
-            }
-        });
-
-        combo = new ComboBox();
-        combo.setImmediate(true);
-        combo.setContainerDataSource(ds1);
-        combo.addListener(new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                log.log("Value is now: " + combo.getValue());
-            }
-        });
-        addComponent(log);
-        addComponent(b);
-        addComponent(combo);
-        addComponent(new Button("Dummy for TestBench"));
-    }
-
-    private void createDataSources() {
-        ds1 = new IndexedContainer();
-        ds1.addContainerProperty(CAPTION, String.class, "");
-        ds1.addItem("Item 1");
-        ds1.addItem("Item 2");
-        ds1.addItem("Item 3");
-        ds1.addItem("Item 4");
-
-        ds2 = new IndexedContainer();
-        ds2.addContainerProperty(CAPTION, String.class, "");
-        ds2.addItem("Item 3");
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Select \"Item 3\" in the ComboBox, change the data source, focus and blur the ComboBox. The value should temporarily change to null when changing data source but not when focusing and blurring the ComboBox";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6170;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxItemIcon.html b/tests/src/com/vaadin/tests/components/combobox/ComboBoxItemIcon.html
deleted file mode 100644
index 6e6e87bc7e..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxItemIcon.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>ComboBoxItemIcon</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ComboBoxItemIcon</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.ComboBoxItemIcon?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxItemIcon::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>first-combobox-open</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[2]/td</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>fi-hu-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxItemIcon::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[2]</td>
-	<td>12,17</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>second-combobox-open</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxItemIcon::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item2</td>
-	<td>32,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>fi-au-selected</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxItemIcon.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxItemIcon.java
deleted file mode 100644
index 75325b798f..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxItemIcon.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import com.vaadin.data.Item;
-import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.ComboBox;
-
-public class ComboBoxItemIcon extends TestBase {
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2455;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "All items in the ComboBoxes should have icons.";
-    }
-
-    @Override
-    protected void setup() {
-        {
-            ComboBox cb = new ComboBox();
-            cb.addContainerProperty("icon", Resource.class, null);
-            cb.setItemIconPropertyId("icon");
-
-            Item item = cb.addItem("FI");
-            item.getItemProperty("icon").setValue(
-                    new ThemeResource("../tests-tickets/icons/fi.gif"));
-            item = cb.addItem("SE");
-            item.getItemProperty("icon").setValue(
-                    new ThemeResource("../tests-tickets/icons/se.gif"));
-
-            addComponent(cb);
-        }
-        {
-            ComboBox cb = new ComboBox();
-            cb.addContainerProperty("icon", Resource.class, null);
-            cb.setItemIconPropertyId("icon");
-
-            Item item = cb.addItem("Finland");
-            item.getItemProperty("icon").setValue(
-                    new ThemeResource("../tests-tickets/icons/fi.gif"));
-            item = cb.addItem("Australia");
-            item.getItemProperty("icon").setValue(
-                    new ThemeResource("../tests-tickets/icons/au.gif"));
-            item = cb.addItem("Hungary");
-            item.getItemProperty("icon").setValue(
-                    new ThemeResource("../tests-tickets/icons/hu.gif"));
-
-            cb.setValue("Hungary");
-            addComponent(cb);
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxLargeIcons.html b/tests/src/com/vaadin/tests/components/combobox/ComboBoxLargeIcons.html
deleted file mode 100644
index a46f48fcfc..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxLargeIcons.html
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.Comboboxes?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::PID_Sselectaction-Icon/domChild[0]</td>
-	<td>label=16x16</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VFilterSelect[0]/domChild[1]</td>
-	<td>13,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::Root/VFilterSelect$SuggestionPopup[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>116,6</td>
-</tr>
-<!--  Open twice to avoid IE6 css issues -->
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.Comboboxes?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::PID_Sselectaction-Icon/domChild[0]</td>
-	<td>label=16x16</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VFilterSelect[0]/domChild[1]</td>
-	<td>13,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>icons-16x16-page1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::Root/VFilterSelect$SuggestionPopup[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>116,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>icons-16x16-page2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item0</td>
-	<td>378,1</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>icons-16x16-selected-1-3-5-9</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::PID_Sselectaction-Icon/domChild[0]</td>
-	<td>label=32x32</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VFilterSelect[0]/domChild[2]</td>
-	<td>8,13</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>icons-32x32-page2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
-	<td>409,27</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::PID_Sselectaction-Icon/domChild[0]</td>
-	<td>label=64x64</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[9]/VFilterSelect[0]/domChild[1]</td>
-	<td>11,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
-	<td>213,57</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[4]</td>
-	<td>535,43</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[8]/VFilterSelect[0]/domChild[1]</td>
-	<td>7,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
-	<td>158,25</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VFilterSelect[0]/domChild[0]</td>
-	<td>16,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VFilterSelect[0]/domChild[0]</td>
-	<td>80,7</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>icons-64x64-page1-highlight-first</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[6]/domChild[0]</td>
-	<td>510,1</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxLargeIcons.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxLargeIcons.java
deleted file mode 100644
index 0f8124ca20..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxLargeIcons.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import java.util.Date;
-
-import com.vaadin.data.Item;
-import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.ComboBox;
-
-public class ComboBoxLargeIcons extends TestBase {
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "<p>All items in the Combobox has large icons. The size of the dropdown should fit the contents, also when changing pages. The height of the dropdown shouldn't exceed the browser's viewport, but fewer items should be visible then.</p><p>The size of the shadow behind the dropdown must also be correctly sized.</p><p>Note that the image URL change for every restart to keep the browser from using cached images.</p>";
-    }
-
-    @Override
-    protected void setup() {
-        ComboBox cb = new ComboBox();
-        cb.addContainerProperty("icon", Resource.class, null);
-        cb.setItemIconPropertyId("icon");
-        getLayout().addComponent(cb);
-        cb.setNullSelectionAllowed(false);
-        String[] icons = new String[] { "folder-add", "folder-delete",
-                "arrow-down", "arrow-left", "arrow-right", "arrow-up",
-                "document-add", "document-delete", "document-doc",
-                "document-edit", "document-image", "document-pdf",
-                "document-ppt", "document-txt", "document-web", "document" };
-        for (String icon : icons) {
-            Item item = cb.addItem(icon);
-            item.getItemProperty("icon").setValue(
-                    new ThemeResource("../runo/icons/32/" + icon + ".png?"
-                            + new Date().getTime()));
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxNavigation.html b/tests/src/com/vaadin/tests/components/combobox/ComboBoxNavigation.html
deleted file mode 100644
index 03de00a6f1..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxNavigation.html
+++ /dev/null
@@ -1,397 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>ComboBoxNavigation</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ComboBoxNavigation</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.ComboBoxNavigation</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>setSpeed</td>
-	<td>200</td>
-	<td>Needed because of #3409</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>41,10</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>e</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>up</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>up</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>up</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>up</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>up</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>up</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>up</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>up</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>up</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>up</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>up</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>up</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>up</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyValue</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>Item 7</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxNavigation.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxNavigation.java
deleted file mode 100644
index 245fc123df..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxNavigation.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.ComboBox;
-
-public class ComboBoxNavigation extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Entering e in the field and scrolling down with the arrow keys should always select the next item, also when the page changes. Scrolling back up should always select the previous item, also when changing pages.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2214;
-    }
-
-    @Override
-    protected void setup() {
-        ComboBox cb = new ComboBox();
-        for (int i = 1; i < 100; i++) {
-            cb.addItem("Item " + i);
-        }
-
-        cb.setFilteringMode(ComboBox.FILTERINGMODE_CONTAINS);
-        addComponent(cb);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxNoTextInput.html b/tests/src/com/vaadin/tests/components/combobox/ComboBoxNoTextInput.html
deleted file mode 100644
index 2066da47c1..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxNoTextInput.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8080/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.ComboBoxes2?restartApplication</td>
-	<td></td>
-</tr>
-<!--Disabled text input-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_Smenu#item0</td>
-	<td>34,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>21,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[1]/VMenuBar[0]#item8</td>
-	<td>52,7</td>
-</tr>
-<!--Check that clicking the text field opens the popup-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
-	<td>37,8</td>
-</tr>
-<tr>
-	<td>assertElementPresent</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item0</td>
-	<td></td>
-</tr>
-<!--Enabled text input again-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_Smenu#item0</td>
-	<td>35,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>14,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[1]/VMenuBar[0]#item8</td>
-	<td>34,6</td>
-</tr>
-<!--Check that clicking the text field does not open the popup-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
-	<td>42,9</td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item0</td>
-	<td></td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.html b/tests/src/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.html
deleted file mode 100644
index 50b95bfdc2..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.html
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>Ticket4607</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">Ticket4607</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.ComboBoxReapperingOldValue?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxReapperingOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
-	<td>7,8</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[2]/td</td>
-	<td>176,10</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxReapperingOldValue::/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[1]</td>
-	<td>12,15</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[6]/td</td>
-	<td>163,13</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxReapperingOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
-	<td>7,17</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[3]/td</td>
-	<td>186,5</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxReapperingOldValue::/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[1]</td>
-	<td>10,15</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxReapperingOldValue::/VVerticalLayout[0]</td>
-	<td>10,15</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.java
deleted file mode 100644
index 0e295231c5..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import com.vaadin.Application;
-import com.vaadin.data.Container;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.ui.AbstractSelect;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-@SuppressWarnings("serial")
-public class ComboBoxReapperingOldValue extends Application implements
-        ValueChangeListener {
-
-    ComboBox cbox1 = new ComboBox();
-    ComboBox cbox2 = new ComboBox();
-
-    @Override
-    public void init() {
-        Window mainWindow = new Window("ComboBoxCacheTest");
-        setMainWindow(mainWindow);
-
-        VerticalLayout layout = new VerticalLayout();
-
-        Label lbl = new Label(
-                "try selecting value 1 from the first combo box, so that the second combo box will be populated. select a value in second combo box."
-                        + "then select a new value from combo box one, after that click on the second combo box. The old selected value appears.");
-        layout.addComponent(lbl);
-
-        cbox1.setCaption("Com Box 1");
-        cbox1.setFilteringMode(AbstractSelect.Filtering.FILTERINGMODE_CONTAINS);
-        cbox1.setContainerDataSource(getContainer());
-        cbox1.setImmediate(true);
-        cbox1.setNullSelectionAllowed(false);
-        cbox1.addListener(this);
-
-        layout.addComponent(cbox1);
-        layout.addComponent(cbox2);
-
-        cbox2.setCaption("Com Box 2");
-        cbox2.setEnabled(false);
-        cbox2.setNullSelectionAllowed(false);
-
-        mainWindow.setContent(layout);
-
-    }
-
-    private Container getContainer() {
-        IndexedContainer container = new IndexedContainer();
-        container.addContainerProperty("na", String.class, null);
-
-        for (int i = 0; i < 10; i++) {
-            container.addItem(i);
-        }
-        return container;
-    }
-
-    public void valueChange(ValueChangeEvent event) {
-        cbox2.removeAllItems();
-        if ("1".equals(event.getProperty().getValue().toString())) {
-            cbox2.setEnabled(true);
-            cbox2.setContainerDataSource(getContainer());
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxRemoveAllItems.html b/tests/src/com/vaadin/tests/components/combobox/ComboBoxRemoveAllItems.html
deleted file mode 100644
index eec15d0b40..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxRemoveAllItems.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.ComboBoxes2?restartApplication</td>
-	<td></td>
-</tr>
-<!--Disable event log-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_Smenu#item1</td>
-	<td>18,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>49,12</td>
-</tr>
-<!--16x16 icons-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_Smenu#item0</td>
-	<td>46,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>46,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>45,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>31,2</td>
-</tr>
-<!--select item 5-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[1]</td>
-	<td>12,15</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item4</td>
-	<td>64,8</td>
-</tr>
-<!--remove all items from the combobox-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_Smenu#item0</td>
-	<td>11,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>60,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>53,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>62,4</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>no-selection</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxSlowInFF.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxSlowInFF.java
deleted file mode 100644
index 5c1dad4a30..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxSlowInFF.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import com.vaadin.data.Item;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-
-@SuppressWarnings("serial")
-public class ComboBoxSlowInFF extends TestBase {
-
-    @Override
-    protected void setup() {
-        VerticalLayout lo = new VerticalLayout();
-        lo.setSizeFull();
-        final Table t = new Table();
-        t.setSizeFull();
-        for (int i = 0; i < 5; i++) {
-            t.addContainerProperty("test" + i, Component.class, null);
-        }
-
-        Button fill = new Button("fill it");
-        fill.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                t.removeAllItems();
-                for (int i = 0; i < 200; i++) {
-                    Item item = t.addItem(i);
-                    for (int j = 0; j < 5; j++) {
-                        item.getItemProperty("test" + j).setValue(
-                                createComponent(i, j));
-                    }
-                }
-            }
-        });
-        lo.addComponent(fill);
-        lo.addComponent(t);
-        lo.setExpandRatio(t, 1.0F);
-        addComponent(lo);
-    }
-
-    private Component createComponent(int x, int y) {
-        ComboBox box = new ComboBox();
-        // box.setMultiSelect(true);
-        box.addContainerProperty("name", String.class, "");
-        box.setItemCaptionPropertyId("name");
-        for (int ix = 0; ix < 20; ix++) {
-            box.addItem(x + 20 * y + ix).getItemProperty("name")
-                    .setValue("" + x + ", " + y + " " + ix);
-        }
-        box.setValue(x + 20 * y);
-        return box;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "FF is very slow when rendering many ComboBoxes in a table";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3663;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxSuggestionOnDetach.html b/tests/src/com/vaadin/tests/components/combobox/ComboBoxSuggestionOnDetach.html
deleted file mode 100644
index ba251e5cc0..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxSuggestionOnDetach.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.ComboBoxSuggestionOnDetach?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxSuggestionOnDetach::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>11,12</td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxSuggestionOnDetach::Root/VFilterSelect$SuggestionPopup[0]</td>
-	<td></td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxSuggestionOnDetach.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxSuggestionOnDetach.java
deleted file mode 100644
index 134e13e49c..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxSuggestionOnDetach.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import java.util.Arrays;
-
-import com.vaadin.event.FieldEvents;
-import com.vaadin.event.FieldEvents.FocusEvent;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Window;
-
-public class ComboBoxSuggestionOnDetach extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Window popup = new Window();
-        ComboBox comboBox = new ComboBox("Combo box", Arrays.asList("Option 1",
-                "Option 2", "Option 3"));
-        comboBox.addListener(new FieldEvents.FocusListener() {
-            public void focus(FocusEvent event) {
-                popup.getParent().removeWindow(popup);
-            }
-        });
-        popup.addComponent(comboBox);
-
-        popup.setSizeUndefined();
-        popup.getContent().setSizeUndefined();
-        popup.center();
-
-        getMainWindow().addWindow(popup);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Click the arrow to open the combo box suggestion list. When the box is focused, the window is closed and the suggestion popup of the combo box should also be closed";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return Integer.valueOf(7536);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxTextFieldEventOrder.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxTextFieldEventOrder.java
deleted file mode 100644
index 31979a6a90..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxTextFieldEventOrder.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.vaadin.tests.components.combobox;
-import java.util.Arrays;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.TextField;
-
-public class ComboBoxTextFieldEventOrder extends TestBase {
-
-    @Override
-    protected void setup() {
-        TextField textField = new TextField("text field");
-        textField.setImmediate(true);
-        final Select select = new Select("select", Arrays.asList("1", "2", "3",
-                "4"));
-        textField.addListener(new ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                select.addItem(Long.valueOf(select.size() + 1).toString()); // or
-                                                                            // just
-                                                                            // select.requestRepaint();
-            }
-        });
-        addComponent(textField);
-        addComponent(select);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Entering a text in a TextField and then clicking on the button in a ComboBox should cause the TextField value change to be sent first and the ComboBox filtering afterwards. Failure to do so will cause errors if the value change listener modifies the ComboBox";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 7481;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxUndefinedWidthAndIcon.html b/tests/src/com/vaadin/tests/components/combobox/ComboBoxUndefinedWidthAndIcon.html
deleted file mode 100644
index ae0dfec828..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxUndefinedWidthAndIcon.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.ComboBoxUndefinedWidthAndIcon?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>13,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
-	<td>32,5</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>item1-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[2]</td>
-	<td>12,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::Root/VFilterSelect$SuggestionPopup[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>81,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>page2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::Root/VFilterSelect$SuggestionPopup[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>78,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>page3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::Root/VFilterSelect$SuggestionPopup[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>78,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>page4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item3</td>
-	<td>68,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>item33-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[2]</td>
-	<td>8,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::Root/VFilterSelect$SuggestionPopup[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>116,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::</td>
-	<td>338,241</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>item33-selected-after-popup-opened-and-closed</td>
-</tr>
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxUndefinedWidthAndIcon.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxUndefinedWidthAndIcon.java
deleted file mode 100644
index fd5f7d47f8..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxUndefinedWidthAndIcon.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import com.vaadin.data.Item;
-import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.ComboBox;
-
-public class ComboBoxUndefinedWidthAndIcon extends TestBase {
-    @Override
-    protected void setup() {
-        ComboBox cb = new ComboBox();
-        cb.addContainerProperty("caption", String.class, null);
-        cb.addContainerProperty("icon", Resource.class, null);
-        for (int i = 1; i < 200 + 1; i++) {
-            Item item = cb.addItem(i);
-            item.getItemProperty("caption").setValue("Item " + i);
-            item.getItemProperty("icon").setValue(
-                    new ThemeResource("../runo/icons/16/users.png"));
-        }
-        cb.setItemIconPropertyId("icon");
-        cb.setItemCaptionPropertyId("caption");
-
-        addComponent(cb);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The width of the ComboBox should be fixed even though it is set to undefined width. The width should not change when changing pages in the dropdown.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 7013;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxValueInput.html b/tests/src/com/vaadin/tests/components/combobox/ComboBoxValueInput.html
deleted file mode 100644
index 2aab40f13f..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxValueInput.html
+++ /dev/null
@@ -1,292 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>ComboBoxValueInput</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ComboBoxValueInput</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.ComboBoxValueInput</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[3]/td</td>
-	<td>58,6</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
-	<td>96,14</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[4]/td/span</td>
-	<td>29,6</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[3]/td</td>
-	<td>99,13</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[1]/td</td>
-	<td>97,14</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
-	<td>68,17</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
-	<td>value</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
-	<td>76,17</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VFilterSelect[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[2]/td</td>
-	<td>71,11</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VFilterSelect[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[1]/td</td>
-	<td>58,9</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VFilterSelect[0]/domChild[0]</td>
-	<td>73,12</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VFilterSelect[0]/domChild[0]</td>
-	<td>43,7</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxValueInput.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxValueInput.java
deleted file mode 100644
index 177b3542a4..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxValueInput.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.ComboBox;
-
-public class ComboBoxValueInput extends TestBase {
-
-    @Override
-    protected void setup() {
-        (getLayout()).setSpacing(true);
-
-        ComboBox cb = getComboBox("A combobox", false);
-        addComponent(cb);
-
-        cb = getComboBox("A combobox with input prompt", false);
-        cb.setInputPrompt("Please select");
-        addComponent(cb);
-
-        cb = getComboBox("A combobox with null item", true);
-        addComponent(cb);
-
-        cb = getComboBox("A combobox with null item and input prompt", true);
-        cb.setInputPrompt("Please select");
-        addComponent(cb);
-
-        cb = getComboBox("A disabled combobox", true);
-        cb.setEnabled(false);
-        addComponent(cb);
-
-        cb = getComboBox("A read-only combobox", true);
-        cb.setReadOnly(true);
-        addComponent(cb);
-
-        cb = getComboBox("A combobox with filteringMode off", false);
-        cb.setFilteringMode(ComboBox.FILTERINGMODE_OFF);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A combobox should always show the selected value when it is not focused. Entering a text when nothing is selected and blurring the combobox should reset the value. The same should happen when a value is selected";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3268;
-    }
-
-    private ComboBox getComboBox(String caption, boolean addNullItem) {
-        ComboBox cb = new ComboBox(caption);
-        cb.setImmediate(true);
-        if (addNullItem) {
-            cb.addItem("Null item");
-            cb.setNullSelectionItemId("Null item");
-        }
-        cb.addItem("Value 1");
-        cb.addItem("Value 2");
-        cb.addItem("Value 3");
-
-        return cb;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxValueUpdate.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxValueUpdate.java
deleted file mode 100644
index b8f7a9758d..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxValueUpdate.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Label;
-
-public class ComboBoxValueUpdate extends TestBase {
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2451;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Testcase for ComboBox. Test especially edge values(of page changes) when selecting items with keyboard only.";
-    }
-
-    @Override
-    protected void setup() {
-        ComboBox select = new ComboBox("");
-        select.setImmediate(true);
-        for (int i = 0; i < 100; i++) {
-            select.addItem("item " + i);
-        }
-
-        final Label value = new Label();
-
-        select.addListener(new ComboBox.ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                System.err
-                        .println("Selected " + event.getProperty().getValue());
-                value.setValue("Selected " + event.getProperty().getValue());
-
-            }
-        });
-
-        getLayout().addComponent(select);
-        getLayout().addComponent(value);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxes2.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxes2.java
deleted file mode 100644
index 8befbb4612..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboBoxes2.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import java.util.LinkedHashMap;
-
-import com.vaadin.terminal.Resource;
-import com.vaadin.tests.components.select.SelectTest;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Select;
-
-public class ComboBoxes2 extends SelectTest<ComboBox> {
-
-    private Command<ComboBox, String> inputPromptCommand = new Command<ComboBox, String>() {
-        public void execute(ComboBox c, String value, Object data) {
-            c.setInputPrompt(value);
-        }
-    };
-    private Command<ComboBox, Integer> filteringModeCommand = new Command<ComboBox, Integer>() {
-
-        public void execute(ComboBox c, Integer value, Object data) {
-            c.setFilteringMode(value);
-        }
-    };
-
-    @Override
-    protected Class<ComboBox> getTestClass() {
-        return ComboBox.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-        createItemIconSelect(CATEGORY_DATA_SOURCE);
-        createInputPromptAction(CATEGORY_FEATURES);
-        createFilteringModeAction(CATEGORY_FEATURES);
-        createNewItemsAllowedAction(CATEGORY_STATE);
-        createTextInputAlowedAction(CATEGORY_STATE);
-    }
-
-    private void createTextInputAlowedAction(String category) {
-        createBooleanAction("Text input allowed", category, true,
-                new Command<ComboBox, Boolean>() {
-                    public void execute(ComboBox c, Boolean value, Object data) {
-                        c.setTextInputAllowed(value.booleanValue());
-                    }
-                });
-    }
-
-    private void createNewItemsAllowedAction(String category) {
-        createBooleanAction("New items allowed", category, false,
-                new Command<ComboBox, Boolean>() {
-                    public void execute(ComboBox c, Boolean value, Object data) {
-                        c.setNewItemsAllowed(value.booleanValue());
-                    }
-                });
-    }
-
-    private void createFilteringModeAction(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("Off", Select.FILTERINGMODE_OFF);
-        options.put("Contains", Select.FILTERINGMODE_CONTAINS);
-        options.put("Starts with", Select.FILTERINGMODE_STARTSWITH);
-
-        createSelectAction("Filtering mode", category, options, "Contains",
-                filteringModeCommand);
-
-    }
-
-    private void createInputPromptAction(String category) {
-        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
-        options.put("-", null);
-        options.put("Enter a value", "Enter a value");
-        options.put("- Click here -", "- Click here -");
-        createSelectAction("Input prompt", category, options, "-",
-                inputPromptCommand);
-
-    }
-
-    private void createItemIconSelect(String category) {
-
-        createSelectAction("Icon", category, createIconOptions(false), "-",
-                new Command<ComboBox, Resource>() {
-
-                    public void execute(ComboBox c, Resource value, Object data) {
-                        for (Object id : c.getItemIds()) {
-                            if (value == null) {
-                                c.setItemIcon(id, null);
-                            } else {
-                                c.setItemIcon(id, value);
-                            }
-                        }
-                    }
-                });
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.html b/tests/src/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.html
deleted file mode 100644
index 4d91ce7838..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.html
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>ComboFocusBlurEvents</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ComboFocusBlurEvents</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.ComboFocusBlurEvents?restartApplication</td>
-	<td></td>
-</tr>
-<!--Testing selecting several items, the focus should stay on the combo and only one focus event should trigger-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>9,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item4</td>
-	<td>142,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>17,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item7</td>
-	<td>143,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>13,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item3</td>
-	<td>147,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>16,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item5</td>
-	<td>146,4</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VLabel[0]</td>
-	<td>exact:0: Focus event!</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>OneFocusEvent</td>
-</tr>
-<!--Test ended.-->
-<!--Testing keyboard navigation-->
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VLabel[0]</td>
-	<td>exact:0: Focus event!</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>StillOneFocusEvent</td>
-</tr>
-<!--Test ended.-->
-<!--Move focus out with mouse-->
-<tr>
-	<td>focus</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VLabel[0]</td>
-	<td>0: Focus event!<br />1: Blur event!</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>OneFocusOneBlur</td>
-</tr>
-<!--End test.-->
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.java b/tests/src/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.java
deleted file mode 100644
index 6681342ea6..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.event.FieldEvents;
-import com.vaadin.event.FieldEvents.BlurEvent;
-import com.vaadin.event.FieldEvents.FocusEvent;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-
-public class ComboFocusBlurEvents extends TestBase {
-
-    private int counter = 0;
-
-    @Override
-    protected void setup() {
-        
-        List<String> list = new ArrayList<String>();
-        for (int i = 0; i < 100; i++) {
-            list.add("Item " + i);
-        }
-        
-        ComboBox cb = new ComboBox("Combobox", list);
-        cb.setImmediate(true);
-        cb.setInputPrompt("Enter text");
-        cb.setDescription("Some Combobox");
-        addComponent(cb);
-                        
-        final ObjectProperty<String> log = new ObjectProperty<String>("");
-
-        cb.addListener(new FieldEvents.FocusListener() {
-            public void focus(FocusEvent event) {
-                log.setValue(log.getValue().toString() + "<br>" + counter
-                        + ": Focus event!");
-                counter++;
-            }
-        });
-
-        cb.addListener(new FieldEvents.BlurListener() {
-            public void blur(BlurEvent event) {
-                log.setValue(log.getValue().toString() + "<br>" + counter
-                        + ": Blur event!");
-                counter++;
-            }
-        });
-        
-        TextField field = new TextField("Some textfield");
-        field.setImmediate(true);
-        addComponent(field);
-
-        Label output = new Label(log);
-        output.setCaption("Events:");
-
-        output.setContentMode(Label.CONTENT_XHTML);
-        addComponent(output);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6536;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/Comboboxes.html b/tests/src/com/vaadin/tests/components/combobox/Comboboxes.html
deleted file mode 100644
index 1affc9a8a9..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/Comboboxes.html
+++ /dev/null
@@ -1,279 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>Comboboxes</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">Comboboxes</td></tr>
-</thead><tbody>
-<tr>
-	<td>setSpeed</td>
-	<td>200</td>
-	<td>To avoid sporadic failures</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.combobox.Comboboxes?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
-	<td>14,14</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>empty-open</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[1]</td>
-	<td>14,11</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VFilterSelect[0]/domChild[1]</td>
-	<td>10,9</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>undefined-wide-open</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VFilterSelect[0]/domChild[1]</td>
-	<td>12,19</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>undefined-wide-select-wide-popup</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[3]/span</td>
-	<td>163,4</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[3]/span</td>
-	<td>163,4</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>undefined-wide-select-wide-popup-page-3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VFilterSelect[0]/domChild[1]</td>
-	<td>5,11</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[6]/VFilterSelect[0]/domChild[1]</td>
-	<td>9,9</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VFilterSelect[0]/domChild[1]</td>
-	<td>13,10</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[8]/VFilterSelect[0]/domChild[1]</td>
-	<td>11,12</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>fixed-select-wide-popup</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[3]/span</td>
-	<td>184,2</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[3]/span</td>
-	<td>184,2</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>fixed-select-wide-popup-page-3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[8]/VFilterSelect[0]/domChild[1]</td>
-	<td>11,12</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<!--Open pagelength 0 combobox and capture-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[9]/VFilterSelect[0]/domChild[1]</td>
-	<td>9,13</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>pagelength-0-popup-open</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<!--Start testing modes-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::PID_Scheckboxaction-Readonly/domChild[0]</td>
-	<td>23,5</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>readonly</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::PID_Scheckboxaction-Error indicators/domChild[0]</td>
-	<td>35,3</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>readonly-error</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::PID_Scheckboxaction-Readonly/domChild[0]</td>
-	<td>26,10</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>error</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::PID_Scheckboxaction-Error indicators/domChild[0]</td>
-	<td>67,8</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/combobox/Comboboxes.java b/tests/src/com/vaadin/tests/components/combobox/Comboboxes.java
deleted file mode 100644
index 94ab20df43..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/Comboboxes.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.List;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Select;
-
-public class Comboboxes extends ComponentTestCase<ComboBox> {
-
-    private static final Object CAPTION = "caption";
-
-    @Override
-    protected Class<ComboBox> getTestClass() {
-        return ComboBox.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-        ComboBox s;
-
-        s = createSelect(null);
-        s.setWidth(null);
-        addTestComponent(s);
-
-        s = createSelect("Undefined wide, empty select");
-        s.setWidth(null);
-        addTestComponent(s);
-
-        s = createSelect("Undefined wide select with 5 items");
-        s.setWidth(null);
-        addItem(s, "The first item");
-        addItem(s, "The second item");
-        addItem(s, "The third item");
-        addItem(s, "The fourth item");
-        addItem(s, "The fifth item");
-        addTestComponent(s);
-
-        s = createSelect("Undefined wide select with 50 items");
-        s.setWidth(null);
-        populate(s, 50);
-        addTestComponent(s);
-
-        s = createSelect(null);
-        s.setWidth("100px");
-        addTestComponent(s);
-
-        s = createSelect("100px wide, empty select");
-        s.setWidth("100px");
-        addTestComponent(s);
-
-        s = createSelect("150px wide select with 5 items");
-        s.setWidth("150px");
-        addItem(s, "The first item");
-        addItem(s, "The second item");
-        addItem(s, "The third item");
-        addItem(s, "The fourth item");
-        addItem(s, "The fifth item");
-        addTestComponent(s);
-
-        s = createSelect("200px wide select with 50 items");
-        s.setWidth("200px");
-        populate(s, 50);
-        addTestComponent(s);
-
-        s = new PageLength0ComboBox();
-        s.setImmediate(true);
-        s.addContainerProperty(CAPTION, String.class, "");
-        s.setItemCaptionPropertyId(CAPTION);
-        s.setCaption("Pagelength 0");
-        populate(s, 15);
-        addTestComponent(s);
-    }
-
-    public class PageLength0ComboBox extends ComboBox {
-        public PageLength0ComboBox() {
-            super();
-            pageLength = 0;
-        }
-    }
-
-    private void populate(Select s, int nr) {
-        String text = " an item ";
-
-        String caption = "";
-        for (int i = 0; i < nr; i++) {
-            if (i % 2 == 0) {
-                caption += text;
-            } else {
-                caption += i;
-            }
-
-            addItem(s, caption);
-        }
-
-    }
-
-    private void addItem(Select s, String string) {
-        Object id = s.addItem();
-        s.getItem(id).getItemProperty(CAPTION).setValue(string);
-
-    }
-
-    private ComboBox createSelect(String caption) {
-        ComboBox cb = new ComboBox();
-        cb.setImmediate(true);
-        cb.addContainerProperty(CAPTION, String.class, "");
-        cb.setItemCaptionPropertyId(CAPTION);
-        cb.setCaption(caption);
-
-        return cb;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A generic test for ComboBoxes in different configurations";
-    }
-
-    @Override
-    protected void createCustomActions(List<Component> actions) {
-        actions.add(createIconSelect());
-    }
-
-    private Component createIconSelect() {
-
-        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
-        options.put("<None>", null);
-        options.put("16x16", "../runo/icons/16/user.png");
-        options.put("32x32", "../runo/icons/32/attention.png");
-        options.put("64x64", "../runo/icons/64/email-reply.png");
-
-        return createSelectAction("Icon", options, "<None>",
-                new Command<ComboBox, String>() {
-
-                    public void execute(ComboBox c, String value, Object data) {
-                        for (Object id : c.getItemIds()) {
-                            if (value == null) {
-                                c.setItemIcon(id, null);
-                            } else {
-                                c.setItemIcon(id, new ThemeResource(value + "?"
-                                        + new Date().getTime()));
-                            }
-                        }
-                    }
-                });
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboxBoxErrorMessage.java b/tests/src/com/vaadin/tests/components/combobox/ComboxBoxErrorMessage.java
deleted file mode 100644
index a6eaf7d3e6..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/ComboxBoxErrorMessage.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.ComboBox;
-
-public class ComboxBoxErrorMessage extends TestBase {
-
-    @Override
-    protected void setup() {
-        ComboBox cb = new ComboBox("");
-        cb.setRequired(true);
-        cb.setRequiredError("You must select something");
-        addComponent(cb);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The ComboBox should show an \"You must select something\" tooltip when the cursor is hovering it. Both when hovering the textfield and the dropdown button.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3345;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/NewItemsESCPress.java b/tests/src/com/vaadin/tests/components/combobox/NewItemsESCPress.java
deleted file mode 100644
index d93db563e3..0000000000
--- a/tests/src/com/vaadin/tests/components/combobox/NewItemsESCPress.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.vaadin.tests.components.combobox;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractSelect.NewItemHandler;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.TextArea;
-
-@SuppressWarnings("serial")
-public class NewItemsESCPress extends TestBase {
-
-    @Override
-    protected void setup() {
-        final TextArea addedItems = new TextArea("Last added items:");
-        addedItems.setRows(10);
-        addComponent(addedItems);
-
-        final ComboBox box = new ComboBox("New items are allowed");
-        box.setNewItemsAllowed(true);
-        box.setNewItemHandler(new NewItemHandler() {
-            public void addNewItem(String newItemCaption) {
-                String value = (String) addedItems.getValue();
-                addedItems.setValue(value + newItemCaption + "\n");
-                box.addItem(newItemCaption);
-            }
-        });
-        box.setImmediate(true);
-        addComponent(box);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Firefox flashes the previously entered value when holding the ESC-key.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5694;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/combobox/fi.gif b/tests/src/com/vaadin/tests/components/combobox/fi.gif
deleted file mode 100755
index 8d3a191828..0000000000
Binary files a/tests/src/com/vaadin/tests/components/combobox/fi.gif and /dev/null differ
diff --git a/tests/src/com/vaadin/tests/components/combobox/se.gif b/tests/src/com/vaadin/tests/components/combobox/se.gif
deleted file mode 100755
index 80f6285228..0000000000
Binary files a/tests/src/com/vaadin/tests/components/combobox/se.gif and /dev/null differ
diff --git a/tests/src/com/vaadin/tests/components/customcomponent/ClipContent.java b/tests/src/com/vaadin/tests/components/customcomponent/ClipContent.java
deleted file mode 100644
index cc7320ad03..0000000000
--- a/tests/src/com/vaadin/tests/components/customcomponent/ClipContent.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.vaadin.tests.components.customcomponent;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-
-public class ClipContent extends TestBase {
-
-    @Override
-    protected void setup() {
-
-        Label text = new Label(
-                "1_long_line_that_should_be_clipped<br/>2_long_line_that_should_be_clipped<br/>3_long_line_that_should_be_clipped<br/>4_long_line_that_should_be_clipped<br/>",
-                Label.CONTENT_XHTML);
-
-        final CustomComponent cc = new CustomComponent(text);
-        cc.setWidth("20px");
-        cc.setHeight("20px");
-
-        final TextField w = new TextField("Width");
-        w.setValue("20px");
-        w.addListener(new TextField.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                cc.setWidth((String) w.getValue());
-            }
-        });
-        addComponent(w);
-        final TextField h = new TextField("Height");
-        h.setValue("20px");
-        h.addListener(new TextField.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                cc.setHeight((String) h.getValue());
-            }
-        });
-        addComponent(h);
-        Button b = new Button("apply");
-        addComponent(b);
-
-        addComponent(cc);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The text in CustomComponent should be clipped if it has size defined.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/customcomponent/CustomComponentGrowingContent.html b/tests/src/com/vaadin/tests/components/customcomponent/CustomComponentGrowingContent.html
deleted file mode 100644
index 0a1b7212c9..0000000000
--- a/tests/src/com/vaadin/tests/components/customcomponent/CustomComponentGrowingContent.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.customcomponent.CustomComponentGrowingContent?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentscustomcomponentCustomComponentGrowingContent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/customcomponent/CustomComponentGrowingContent.java b/tests/src/com/vaadin/tests/components/customcomponent/CustomComponentGrowingContent.java
deleted file mode 100644
index 9a559f7414..0000000000
--- a/tests/src/com/vaadin/tests/components/customcomponent/CustomComponentGrowingContent.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.components.customcomponent;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-
-public class CustomComponentGrowingContent extends TestBase {
-    @Override
-    protected void setup() {
-        final Label label = new Label("Short content");
-        label.setWidth(null);
-
-        addComponent(new CustomComponent() {
-            {
-                GridLayout mainLayout = new GridLayout(1, 1);
-                mainLayout.addComponent(label);
-                mainLayout.setSizeUndefined();
-                setSizeUndefined();
-                setCompositionRoot(mainLayout);
-            }
-        });
-
-        addComponent(new Button("Set long content", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                label.setValue("Longer content that should be fully visible");
-            }
-        }));
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The width of the custom component should increase when its content grows";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return Integer.valueOf(7326);
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/customcomponent/CustomComponentSizeUpdate.java b/tests/src/com/vaadin/tests/components/customcomponent/CustomComponentSizeUpdate.java
deleted file mode 100644
index 575a1651e3..0000000000
--- a/tests/src/com/vaadin/tests/components/customcomponent/CustomComponentSizeUpdate.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.vaadin.tests.components.customcomponent;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.NativeButton;
-
-public class CustomComponentSizeUpdate extends TestBase {
-
-    @Override
-    protected void setup() {
-        NativeButton nb = new NativeButton(
-                "100%x100% button. Click to reduce CustomComponent size");
-        nb.setSizeFull();
-
-        final CustomComponent cc = new CustomComponent(nb);
-        cc.setWidth("500px");
-        cc.setHeight("500px");
-
-        nb.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                cc.setWidth((cc.getWidth() - 20) + "px");
-                cc.setHeight((cc.getHeight() - 20) + "px");
-
-            }
-        });
-
-        addComponent(cc);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Click the button to reduce the size of the parent. The button should be resized to fit the parent.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3705;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/customcomponent/EmbeddedInCustomComponent.html b/tests/src/com/vaadin/tests/components/customcomponent/EmbeddedInCustomComponent.html
deleted file mode 100644
index 268d3074f7..0000000000
--- a/tests/src/com/vaadin/tests/components/customcomponent/EmbeddedInCustomComponent.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.customcomponent.EmbeddedInCustomComponent?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.customcomponent.EmbeddedInCustomComponent?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>after-refresh</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/customcomponent/EmbeddedInCustomComponent.java b/tests/src/com/vaadin/tests/components/customcomponent/EmbeddedInCustomComponent.java
deleted file mode 100644
index 8a37d85b31..0000000000
--- a/tests/src/com/vaadin/tests/components/customcomponent/EmbeddedInCustomComponent.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.vaadin.tests.components.customcomponent;
-
-import java.util.Date;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.HorizontalLayout;
-
-public class EmbeddedInCustomComponent extends TestBase {
-
-    @Override
-    protected void setup() {
-        HorizontalLayout hl = new HorizontalLayout();
-
-        hl.addComponent(wrap("An uncached image",
-                "ok.png?random=" + new Date().getTime()));
-        hl.addComponent(wrap("A cached image", "cancel.png"));
-        addComponent(hl);
-    }
-
-    private CustomComponent wrap(String caption, String themeImage) {
-        Embedded image = new Embedded(caption, new ThemeResource(
-                "../runo/icons/64/" + themeImage));
-        CustomComponent cc = new CustomComponent(image);
-        return cc;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Two embedded images are shown below, side-by-side. The first one has a random url so it is not cached, the second one is cached.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6304;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/CommitInvalid.html b/tests/src/com/vaadin/tests/components/datefield/CommitInvalid.html
deleted file mode 100644
index 9c498f1df2..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/CommitInvalid.html
+++ /dev/null
@@ -1,251 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>CommitInvalid</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">CommitInvalid</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.CommitInvalid?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_1</td>
-	<td>2. Date. Field: 2009-04-01 Property: 2009-04-01</td>
-</tr>
-<!--change date, make integer invalid, commit-->
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
-	<td>2.4.2009</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_IF</td>
-	<td>27,12</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_IF</td>
-	<td>42f</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_commit/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_2</td>
-	<td>4. Commit failed : Not an integer</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/domChild[0]/domChild[3]/domChild[0]</td>
-	<td>Not an integer</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_1</td>
-	<td>5. Date. Field: 2009-04-02 Property: 2009-04-01</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_0</td>
-	<td>6. Integer: Field: 42f Property: 42</td>
-</tr>
-<!--set sane value for integer, invalid for date, commit-->
-<tr>
-	<td>drag</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_IF</td>
-	<td></td>
-</tr>
-<tr>
-	<td>drop</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/domChild[0]/domChild[1]/domChild[1]/domChild[0]</td>
-	<td>68,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_IF</td>
-	<td>-15,-2</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_IF</td>
-	<td>22</td>
-</tr>
-<tr>
-	<td>drag</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
-	<td></td>
-</tr>
-<tr>
-	<td>drop</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/domChild[0]/domChild[1]/domChild[0]/domChild[1]</td>
-	<td>7,18</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
-	<td>-5,2</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
-	<td>asdfgh</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_commit</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_2</td>
-	<td>7. Commit failed : Date format not recognized</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_1</td>
-	<td>8. Date. Field: null Property: 2009-04-01</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_0</td>
-	<td>9. Integer: Field: 22 Property: 42</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/domChild[0]/domChild[3]/domChild[0]</td>
-	<td>Date format not recognized</td>
-</tr>
-<!--null date field, commit-->
-<tr>
-	<td>drag</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
-	<td></td>
-</tr>
-<tr>
-	<td>drop</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>47,18</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
-	<td>-36,2</td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_commit</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_2</td>
-	<td>10. Commit succeeded</td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>11. Date. Field: null Property: null</td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>12. Integer: Field: 22 Property: 22</td>
-	<td></td>
-</tr>
-<!--bad date, validate, correct date, commit-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
-	<td>44,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
-	<td>44,7</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
-	<td>ddd</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_validate</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_2</td>
-	<td>13. Validation failed:Date format not recognized</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_1</td>
-	<td>14. Date. Field: null Property: null</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/domChild[0]/domChild[3]/domChild[0]</td>
-	<td>Date format not recognized</td>
-</tr>
-<tr>
-	<td>drag</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
-	<td></td>
-</tr>
-<tr>
-	<td>drop</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/domChild[0]/domChild[1]/domChild[0]/domChild[1]</td>
-	<td>3,19</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
-	<td>-9,3</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
-	<td>7.1.2011</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_commit</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_2</td>
-	<td>16. Commit succeeded</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_1</td>
-	<td>17. Date. Field: 2011-01-07 Property: 2011-01-07</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_0</td>
-	<td>18. Integer: Field: 22 Property: 22</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/CommitInvalid.java b/tests/src/com/vaadin/tests/components/datefield/CommitInvalid.java
deleted file mode 100644
index 36ee068af4..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/CommitInvalid.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-
-import com.vaadin.data.Validator.InvalidValueException;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.data.validator.IntegerValidator;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.TextField;
-
-public class CommitInvalid extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "DateField with parsing error is committed regardless "
-                + "of the invalidity. Parsing error should be handled"
-                + " as a builtin validator, similar to isRequired()"
-                + " in AbstractField.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5927;
-    }
-
-    ObjectProperty<Date> dateProperty;
-    private DateField dateField;
-    private ObjectProperty<Integer> integerProperty;
-    private TextField integerField;
-    private Log log;
-
-    @Override
-    protected void setup() {
-        /*
-         * Create and configure form.
-         */
-        final Form form = new Form();
-        form.setWriteThrough(false); // set write buffering on
-        form.setImmediate(true); // make form (and especially its fields
-                                 // immediate)
-
-        /*
-         * Create and configure Date Field, the actual component to be tested.
-         */
-        dateProperty = new ObjectProperty<Date>(new Date(2009 - 1900, 4 - 1, 1));
-
-        dateField = new DateField("Year", dateProperty);
-        dateField.setLocale(new Locale("fi", "FI"));
-        dateField.setResolution(DateField.RESOLUTION_DAY);
-        dateField.setDebugId("_DF");
-        form.addField("date", dateField);
-
-        /*
-         * Create a TextField with integer property (and integer validator,
-         * preventing invalid typed values to be pushded to property) as a
-         * reference component.
-         */
-        integerProperty = new ObjectProperty<Integer>(42);
-        integerField = new TextField("Another Field", integerProperty);
-        integerField.addValidator(new IntegerValidator("Not an integer"));
-        integerField.setDebugId("_IF");
-        form.addField("text", integerField);
-
-        /*
-         * Action buttons.
-         */
-        Button validate = new Button("Validate");
-        validate.setDebugId("_validate");
-        validate.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                try {
-                    form.validate();
-                    log.log("Form is valid");
-                } catch (InvalidValueException e) {
-                    log.log("Validation failed:" + e.getLocalizedMessage());
-                } finally {
-                    printState();
-                }
-            }
-        });
-        form.getFooter().addComponent(validate);
-
-        Button commit = new Button("Commit");
-        commit.setDebugId("_commit");
-        commit.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                try {
-                    form.commit();
-                    log.log("Commit succeeded");
-                } catch (InvalidValueException e) {
-                    log.log("Commit failed : " + e.getLocalizedMessage());
-                } finally {
-                    printState();
-                }
-            }
-        });
-
-        form.getFooter().addComponent(commit);
-        Button printState = new Button("printState");
-        printState.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                printState();
-            }
-
-        });
-        form.getFooter().addComponent(printState);
-
-        log = new Log(7);
-        log.log("Test app started");
-        printState();
-
-        addComponent(form);
-        addComponent(log);
-
-    }
-
-    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-
-    private String f(Date date) {
-        if (date == null) {
-            return "null";
-        }
-        return dateFormat.format(date);
-    }
-
-    private void printState() {
-        log.log("Date. Field: " + f((Date) dateField.getValue())
-                + " Property: " + f(dateProperty.getValue()));
-        log.log("Integer: Field: " + integerField.getValue() + " Property: "
-                + integerProperty.getValue());
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/CustomDateFormat.html b/tests/src/com/vaadin/tests/components/datefield/CustomDateFormat.html
deleted file mode 100644
index 5561fd37cb..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/CustomDateFormat.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.CustomDateFormat?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormat::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupCalendar[0]/domChild[0]</td>
-	<td>1. tammikuuta 2010 0:00:00 UTC+2</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/CustomDateFormat.java b/tests/src/com/vaadin/tests/components/datefield/CustomDateFormat.java
deleted file mode 100644
index 8b4bca5fde..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/CustomDateFormat.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Locale;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.DateField;
-
-public class CustomDateFormat extends TestBase {
-
-    @Override
-    protected void setup() {
-
-        Locale locale = new Locale("fi", "FI");
-        Calendar cal = Calendar.getInstance();
-        cal.set(2010, 0, 1);
-
-        DateField df = new DateField();
-        df.setResolution(DateField.RESOLUTION_DAY);
-        df.setLocale(locale);
-        df.setWidth("300px");
-
-        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,
-                DateFormat.LONG, locale);
-
-        if (dateFormat instanceof SimpleDateFormat) {
-            String pattern = ((SimpleDateFormat) dateFormat).toPattern();
-            df.setDateFormat(pattern);
-        }
-
-        df.setValue(cal.getTime());
-
-        addComponent(df);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Month name should be visible in text box if format pattern includes it";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3490;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/CustomDateFormats.html b/tests/src/com/vaadin/tests/components/datefield/CustomDateFormats.html
deleted file mode 100644
index 2c2dc1bd42..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/CustomDateFormats.html
+++ /dev/null
@@ -1,524 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.CustomDateFormats?restartApplication</td>
-	<td></td>
-</tr>
-<!--fr_FR-->
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MM yyyy/domChild[0]</td>
-	<td>1 02 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
-	<td>1 févr. 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
-	<td>1 février 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sdd M yyyy/domChild[0]</td>
-	<td>01 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sddd M yyyy/domChild[0]</td>
-	<td>001 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M y/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yy/domChild[0]</td>
-	<td>1 2 10</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyy/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy-/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy-/domChild[0]</td>
-	<td>1 février 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy-/domChild[0]</td>
-	<td>1 févr. 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_SddXMMXyy/domChild[0]</td>
-	<td>01/02/10</td>
-</tr>
-<!--Test parsing-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
-	<td>109,12</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
-	<td>26 sept. 2010</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
-	<td>15,8</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
-	<td>26 septembre 2010</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[1]</td>
-	<td>10,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]</td>
-	<td>10,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[1]</td>
-	<td>9,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]</td>
-	<td>9,12</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
-	<td>26 sept. 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
-	<td>26 septembre 2010</td>
-</tr>
-<!--Parsing for fi_FI-->
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=fi_FI</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
-	<td>109,12</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
-	<td>10 maalis 1999</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
-	<td>15,8</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
-	<td>26 syyskuu 1980</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[11]/VLabel[0]</td>
-	<td>10 maalis 1999</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[15]/VLabel[0]</td>
-	<td>26 syyskuu 1980</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[1]</td>
-	<td>10,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[1]</td>
-	<td>10,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[1]</td>
-	<td>9,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[1]</td>
-	<td>9,12</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
-	<td>10 maalis 1999</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
-	<td>26 syyskuu 1980</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd. MMMM'ta 'yyyy/domChild[0]</td>
-	<td>124,13</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd. MMMM'ta 'yyyy/domChild[0]</td>
-	<td>10. tammikuuta 2011</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[43]/VLabel[0]</td>
-	<td>10. tammikuuta 2011</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd. MMMM'ta 'yyyy/domChild[1]</td>
-	<td>5,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>tammikuu 2011</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]</td>
-	<td>5,10</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd. MMMM'ta 'yyyy/domChild[0]</td>
-	<td>10. tammikuuta 2011</td>
-</tr>
-<!--zh-->
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=zh</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MM yyyy/domChild[0]</td>
-	<td>1 02 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
-	<td>1 二月 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
-	<td>1 二月 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sdd M yyyy/domChild[0]</td>
-	<td>01 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sddd M yyyy/domChild[0]</td>
-	<td>001 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M y/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yy/domChild[0]</td>
-	<td>1 2 10</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyy/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy-/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Syyyy'年'M'月'd'日'/domChild[0]</td>
-	<td>2010年2月1日</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Syyyy-M-d/domChild[0]</td>
-	<td>2010-2-1</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Syy-M-d/domChild[0]</td>
-	<td>10-2-1</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=en_US</td>
-</tr>
-<!--en_US-->
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MM yyyy/domChild[0]</td>
-	<td>1 02 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
-	<td>1 Feb 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
-	<td>1 February 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sdd M yyyy/domChild[0]</td>
-	<td>01 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sddd M yyyy/domChild[0]</td>
-	<td>001 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M y/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yy/domChild[0]</td>
-	<td>1 2 10</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyy/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy-/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_SMMMM d, yyyy/domChild[0]</td>
-	<td>February 1, 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_SMMM d, yyyy/domChild[0]</td>
-	<td>Feb 1, 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_SMXdXyy/domChild[0]</td>
-	<td>2/1/10</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=en_GB</td>
-</tr>
-<!--en_GB-->
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MM yyyy/domChild[0]</td>
-	<td>1 02 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
-	<td>1 Feb 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
-	<td>1 February 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sdd M yyyy/domChild[0]</td>
-	<td>01 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sddd M yyyy/domChild[0]</td>
-	<td>001 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M y/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yy/domChild[0]</td>
-	<td>1 2 10</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyy/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy-/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sdd MMMM yyyy/domChild[0]</td>
-	<td>01 February 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sdd-MMM-yyyy/domChild[0]</td>
-	<td>01-Feb-2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_SddXMMXyy/domChild[0]</td>
-	<td>01/02/10</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=fi_FI</td>
-</tr>
-<!--fi_FI-->
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MM yyyy/domChild[0]</td>
-	<td>1 02 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
-	<td>1 helmi 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
-	<td>1 helmikuu 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sdd M yyyy/domChild[0]</td>
-	<td>01 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sddd M yyyy/domChild[0]</td>
-	<td>001 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M y/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yy/domChild[0]</td>
-	<td>1 2 10</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyy/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy-/domChild[0]</td>
-	<td>1 2 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd. MMMM'ta 'yyyy/domChild[0]</td>
-	<td>1. helmikuuta 2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd.M.yyyy/domChild[0]</td>
-	<td>1.2.2010</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd.M.yyyy-/domChild[0]</td>
-	<td>1.2.2010</td>
-</tr>
-<!---->
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/CustomDateFormats.java b/tests/src/com/vaadin/tests/components/datefield/CustomDateFormats.java
deleted file mode 100644
index 7f67af1adc..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/CustomDateFormats.java
+++ /dev/null
@@ -1,207 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.HashSet;
-import java.util.Locale;
-import java.util.Set;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.NativeSelect;
-
-public class CustomDateFormats extends TestBase {
-
-    private static final Object CAPTION = "C";
-
-    private Component customFormats = null;
-
-    @Override
-    protected void setup() {
-        final NativeSelect s = new NativeSelect("Locale");
-        s.setImmediate(true);
-        s.setNullSelectionAllowed(false);
-        s.addContainerProperty(CAPTION, String.class, "");
-        addLocale(Locale.FRANCE, s);
-        addLocale(Locale.CHINESE, s);
-        addLocale(Locale.US, s);
-        addLocale(Locale.UK, s);
-        addLocale(new Locale("fi", "FI"), s);
-
-        s.addListener(new Property.ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                setDateFieldLocale((Locale) s.getValue());
-            }
-        });
-        addComponent(s);
-        s.setValue(Locale.FRANCE);
-    }
-
-    private void addLocale(Locale locale, NativeSelect s) {
-        Item i = s.addItem(locale);
-        i.getItemProperty(CAPTION).setValue(locale.toString());
-
-    }
-
-    protected void setDateFieldLocale(Locale value) {
-        Component n = getCustomFormats(value);
-        if (customFormats == null) {
-            addComponent(n);
-        } else {
-            replaceComponent(customFormats, n);
-        }
-        customFormats = n;
-
-    }
-
-    private GridLayout getCustomFormats(Locale locale) {
-        GridLayout gridLayout = createGridLayout();
-        usedDebugIds.clear();
-        addDateFields(gridLayout, locale);
-
-        return gridLayout;
-    }
-
-    private GridLayout createGridLayout() {
-        GridLayout gridLayout = new GridLayout(4, 4);
-        gridLayout.setMargin(true);
-        gridLayout.addComponent(new Label("FORMAT"));
-        gridLayout.addComponent(new Label("DATEFIELD"));
-        gridLayout.addComponent(new Label("SERVER SIDE VALUE"));
-        gridLayout.addComponent(new Label("EXPECTED"));
-
-        return gridLayout;
-    }
-
-    private void addDateFields(GridLayout gridLayout, Locale locale) {
-        addDateField(gridLayout, "d M yyyy", locale);
-        addDateField(gridLayout, "d MM yyyy", locale);
-        addDateField(gridLayout, "d MMM yyyy", locale);
-        addDateField(gridLayout, "d MMMM yyyy", locale);
-
-        addDateField(gridLayout, "dd M yyyy", locale);
-        addDateField(gridLayout, "ddd M yyyy", locale);
-
-        addDateField(gridLayout, "d M y", locale, "d M yyyy");
-        addDateField(gridLayout, "d M yy", locale);
-        addDateField(gridLayout, "d M yyy", locale, "d M yyyy");
-        addDateField(gridLayout, "d M yyyy", locale);
-
-        addDateField(gridLayout, getDatePattern(locale, DateFormat.FULL),
-                locale);
-        addDateField(gridLayout, getDatePattern(locale, DateFormat.LONG),
-                locale);
-        addDateField(gridLayout, getDatePattern(locale, DateFormat.MEDIUM),
-                locale);
-        addDateField(gridLayout, getDatePattern(locale, DateFormat.SHORT),
-                locale);
-
-    }
-
-    private String getDatePattern(Locale locale, int dateStyle) {
-        DateFormat dateFormat = DateFormat.getDateInstance(dateStyle, locale);
-
-        if (dateFormat instanceof SimpleDateFormat) {
-            String pattern = ((SimpleDateFormat) dateFormat).toPattern();
-            return pattern;
-        }
-        return null;
-
-    }
-
-    public class Data {
-
-        private Label label;
-        private String pattern;
-
-        public Data(Label label, String pattern) {
-            this.label = label;
-            this.pattern = pattern;
-        }
-
-    }
-
-    private Set<String> usedDebugIds = new HashSet<String>();
-
-    private void addDateField(GridLayout gridLayout, String pattern,
-            Locale locale, String expectedDateFormat) {
-        Calendar cal = Calendar.getInstance();
-        cal.set(2010, 1, 1);
-
-        Label serversideValueLabel = new Label();
-
-        DateField df = new DateField();
-        df.setResolution(DateField.RESOLUTION_DAY);
-        df.setLocale(locale);
-        df.setWidth("300px");
-        df.setDateFormat(pattern);
-        df.setImmediate(true);
-        String debugId = pattern.replace('/', 'X');
-        while (usedDebugIds.contains(debugId)) {
-            debugId = debugId + "-";
-        }
-        df.setDebugId(debugId);
-        usedDebugIds.add(debugId);
-
-        df.setData(new Data(serversideValueLabel, pattern));
-        df.setValue(cal.getTime());
-        df.addListener(new Property.ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                updateServerSideLabel((DateField) event.getProperty());
-            }
-        });
-
-        Label patternLabel = new Label(pattern);
-        patternLabel.setWidth(null);
-        SimpleDateFormat expDateFormat = new SimpleDateFormat(
-                expectedDateFormat, locale);
-
-        Label expectedLabel = new Label(expDateFormat.format(cal.getTime()));
-        if (!pattern.equals(expectedDateFormat)) {
-            expectedLabel.setValue(expectedLabel.getValue()
-                    + " (differs from JDK)");
-        }
-        expectedLabel.setWidth(null);
-
-        gridLayout.addComponent(patternLabel);
-        gridLayout.addComponent(df);
-        gridLayout.addComponent(serversideValueLabel);
-        gridLayout.addComponent(expectedLabel);
-
-        updateServerSideLabel(df);
-    }
-
-    private void updateServerSideLabel(DateField df) {
-        Data data = (Data) df.getData();
-        String pattern = data.pattern;
-        Locale locale = df.getLocale();
-        SimpleDateFormat formatter = new SimpleDateFormat(pattern, locale);
-
-        String newValue = formatter.format(df.getValue());
-        data.label.setValue(newValue);
-    }
-
-    private void addDateField(GridLayout gridLayout, String pattern,
-            Locale locale) {
-        addDateField(gridLayout, pattern, locale, pattern);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Test that DateField renders custom date formats the same way as SimpleDateFormat formats them";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5465;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/datefield/DateFieldEmptyValid.html b/tests/src/com/vaadin/tests/components/datefield/DateFieldEmptyValid.html
deleted file mode 100644
index 751c7ba9bd..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DateFieldEmptyValid.html
+++ /dev/null
@@ -1,252 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>DateFieldEmptyValid</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">DateFieldEmptyValid</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.DateFieldEmptyValid?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
-	<td>2. isEmpty: false, isValid: true</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
-	<td>1. DateField value is now March 3, 1973 11:46:40 AM</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
-	<td>3.3.1973</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
-	<td>62,12</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VPopupCalendar[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::Root/VOverlay[0]/VCalendarPanel[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::Root/VOverlay[0]/VCalendarPanel[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::Root/VOverlay[0]/VCalendarPanel[0]</td>
-	<td>left</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::Root/VOverlay[0]/VCalendarPanel[0]</td>
-	<td>left</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::Root/VOverlay[0]/VCalendarPanel[0]</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
-	<td>5. isEmpty: false, isValid: true</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
-	<td>4. DateField value is now March 15, 1973 11:46:40 AM</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
-	<td>15.3.1973</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
-	<td>64,13</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
-	<td>15.3.1973d</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>InvalidDateIcon</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
-	<td>208,5</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_Scheck-value/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
-	<td>11. isEmpty: true, isValid: false</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
-	<td>10. DateField value is now null</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
-	<td>64,10</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
-	<td>15.3.1973dd</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
-	<td>186,10</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_Scheck-value/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
-	<td>14. isEmpty: true, isValid: false</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
-	<td>13. DateField value is now null</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_Sclear/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_Scheck-value/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<!--Note, no value change should happen, value was and is null, validity would have changed if the test had the required flag off-->
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
-	<td>17. DateField value is now null</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
-	<td>18. isEmpty: true, isValid: false</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_Sset4.5.1990/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
-	<td>22. isEmpty: false, isValid: true</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
-	<td>21. DateField value is now May 4, 1990 12:00:00 AM</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
-	<td>4.5.1990</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
-	<td>26. isEmpty: false, isValid: true</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
-	<td>25. DateField value is now June 5, 2000 12:00:00 AM</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_Sclear/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
-	<td>30. isEmpty: true, isValid: false</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_Sset-by-ds/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
-	<td>34. isEmpty: false, isValid: true</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
-	<td>33. DateField value is now June 5, 2000 12:00:00 AM</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_Sset-via-ds/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
-	<td>40. DateField value is now August 27, 2005 12:00:00 AM</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
-	<td>41. isEmpty: false, isValid: true</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/DateFieldEmptyValid.java b/tests/src/com/vaadin/tests/components/datefield/DateFieldEmptyValid.java
deleted file mode 100644
index 53b1d253ab..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DateFieldEmptyValid.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.PopupDateField;
-
-@SuppressWarnings("serial")
-public class DateFieldEmptyValid extends TestBase {
-
-    private Log log;
-
-    private MyDateField df;
-
-    private SimpleDateFormat formatter = new SimpleDateFormat(
-            "MMMM d, yyyy hh:mm:ss aaa", Locale.US);
-
-    public class MyDateField extends PopupDateField {
-        @Override
-        public boolean isEmpty() {
-            return super.isEmpty();
-        }
-
-    }
-
-    @Override
-    protected void setup() {
-        addComponent(new Label("<br/><br/>", Label.CONTENT_XHTML));
-        log = new Log(8);
-        addComponent(log);
-        df = new MyDateField();
-        df.setDebugId("DateField");
-        df.setRequired(true);
-        df.setLocale(new Locale("fi", "FI"));
-        df.setValue(new Date(100000000000L));
-        df.setImmediate(true);
-        df.setResolution(DateField.RESOLUTION_DAY);
-        df.addListener(new ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                log.log("Value changeEvent");
-                checkEmpty();
-            }
-        });
-        addComponent(df);
-        checkEmpty();
-        Button b = new Button("Clear date");
-        b.setDebugId("clear");
-        b.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                log.log("Clearing date aka setValue(null)");
-                df.setValue(null);
-            }
-        });
-        addComponent(b);
-
-        b = new Button("Set date to 4.5.1990");
-        b.setDebugId("set4.5.1990");
-        b.addListener(new ClickListener() {
-
-            @SuppressWarnings("deprecation")
-            public void buttonClick(ClickEvent event) {
-                log.log("Setting new value to datefield (4.5.1990)");
-                df.setValue(new Date(1990 - 1900, 5 - 1, 4));
-            }
-        });
-        addComponent(b);
-
-        b = new Button("Set date to 5.6.2000 using a property data source");
-        b.addListener(new ClickListener() {
-
-            @SuppressWarnings("deprecation")
-            public void buttonClick(ClickEvent event) {
-                log.log("Setting new object property (5.6.2000) to datefield");
-                ObjectProperty<Date> dfProp = new ObjectProperty<Date>(
-                        new Date(2000 - 1900, 6 - 1, 5), Date.class);
-                df.setPropertyDataSource(dfProp);
-            }
-        });
-        b.setDebugId("set-by-ds");
-        addComponent(b);
-
-        b = new Button(
-                "Set date to 27.8.2005 by changing a new property data source from null, ds attached before value setting.");
-        b.setDebugId("set-via-ds");
-        b.addListener(new ClickListener() {
-
-            @SuppressWarnings("deprecation")
-            public void buttonClick(ClickEvent event) {
-                log.log("Setting object property (with value null) to datefield and set value of property to 27.8.2005");
-                ObjectProperty<Date> dfProp = new ObjectProperty<Date>(null,
-                        Date.class);
-                df.setPropertyDataSource(dfProp);
-                dfProp.setValue(new Date(2005 - 1900, 8 - 1, 27));
-            }
-        });
-        addComponent(b);
-
-        b = new Button("Check value");
-        b.setDebugId("check-value");
-        b.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                log.log("Checking state");
-                checkEmpty();
-            }
-        });
-        addComponent(b);
-    }
-
-    private void checkEmpty() {
-        Object value = df.getValue();
-        if (value instanceof Date) {
-            value = formatter.format(df.getValue());
-        }
-
-        log.log("DateField value is now " + value);
-        // log.log("DateField value is now " + df.getValue());
-        log.log("isEmpty: " + df.isEmpty() + ", isValid: " + df.isValid());
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tests the isEmpty() and isValid() functionality of a DateField. The field is required and has no other validators."
-                + "IsEmpty() should return true when the field is truly empty i.e. contains no text, no matter how the field has been made empty. If the field contains any text, isEmpty() should return false."
-                + "IsValid() should in this case return true if the field is not empty and vice versa.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5277;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/DateFieldInSubWindow.html b/tests/src/com/vaadin/tests/components/datefield/DateFieldInSubWindow.html
deleted file mode 100644
index f2ef2123f6..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DateFieldInSubWindow.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>DateFieldInSubWindow</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">DateFieldInSubWindow</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.DateFieldInSubWindow?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldInSubWindow::/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/DateFieldInSubWindow.java b/tests/src/com/vaadin/tests/components/datefield/DateFieldInSubWindow.java
deleted file mode 100644
index 18bc719850..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DateFieldInSubWindow.java
+++ /dev/null
@@ -1,143 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.util.Date;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.BeanItem;
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.DefaultFieldFactory;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class DateFieldInSubWindow extends AbstractTestCase {
-
-    @SuppressWarnings("serial")
-    public class TestCaseWindow extends Window {
-
-        public class MyBean {
-            private Date myDate;
-            private String myString;
-
-            public Date getMyDate() {
-                return myDate;
-            }
-
-            public void setMyDate(Date myDate) {
-                this.myDate = myDate;
-            }
-
-            public String getMyString() {
-                return myString;
-            }
-
-            public void setMyString(String myString) {
-                this.myString = myString;
-            }
-
-        }
-
-        private MyBean myBean;
-
-        public TestCaseWindow() {
-            super("Test Case Window");
-            setModal(true);
-            setWidth("400px");
-            myBean = new MyBean();
-
-            initWindow();
-        }
-
-        protected class CustomerFieldFactory extends DefaultFieldFactory {
-
-            public static final String COMMON_FIELD_WIDTH = "12em";
-
-            @Override
-            public Field createField(Item item, Object propertyId,
-                    Component uiContext) {
-                Field f = super.createField(item, propertyId, uiContext);
-
-                if ("myDate".equals(propertyId)) {
-                    ((DateField) f).setResolution(DateField.RESOLUTION_MIN);
-                    ((DateField) f).setCaption("This is my date");
-
-                }
-
-                return f;
-            }
-        }
-
-        protected void initWindow() {
-            VerticalLayout layout = (VerticalLayout) getContent();
-            layout.setMargin(true);
-            layout.setSpacing(true);
-
-            /**
-             * This causes the window to add the .v-readonly style!
-             */
-            setClosable(false);
-
-            CustomerFieldFactory fieldFactory = new CustomerFieldFactory();
-            final Form generalForm = new Form();
-            {
-                generalForm.setCaption("My form");
-                generalForm.setWriteThrough(true);
-                generalForm.setFormFieldFactory(fieldFactory);
-
-                BeanItem<MyBean> myBeanItem = new BeanItem<MyBean>(myBean);
-                generalForm.setItemDataSource(myBeanItem);
-
-                generalForm.setVisibleItemProperties(new String[] { "myDate",
-                        "myString" });
-                generalForm.setValidationVisible(true);
-                addComponent(generalForm);
-            }
-
-            HorizontalLayout buttons = new HorizontalLayout();
-            {
-                buttons.setSpacing(true);
-
-                Button b = new Button("Close", new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        (getParent()).removeWindow(TestCaseWindow.this);
-                    }
-                });
-                buttons.addComponent(b);
-                layout.addComponent(buttons);
-
-            }
-        }
-    }
-
-    @Override
-    public void init() {
-        Window mainWindow = new Window();
-        setMainWindow(mainWindow);
-        Button open = new Button("Open window", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                getMainWindow().addWindow(new TestCaseWindow());
-            }
-        });
-
-        mainWindow.addComponent(open);
-    }
-
-    @Override
-    protected String getDescription() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4582;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/DateFieldLocale.java b/tests/src/com/vaadin/tests/components/datefield/DateFieldLocale.java
deleted file mode 100644
index fbeeb872d7..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DateFieldLocale.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.util.Date;
-import java.util.Locale;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.DateField;
-
-public class DateFieldLocale extends TestBase {
-
-    @Override
-    public void setup() {
-        final DateField dateField = new DateField("DateField");
-        dateField.setLocale(new Locale("fi", "FI"));
-        dateField.setCaption(dateField.getLocale().toString());
-        dateField.setValue(new Date());
-        dateField.setResolution(DateField.RESOLUTION_DAY);
-
-        addComponent(new Button("Change locale", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                if (dateField.getLocale().getCountry().equalsIgnoreCase("fi")) {
-                    dateField.setLocale(new Locale("zh", "CN"));
-                } else {
-                    dateField.setLocale(new Locale("fi", "FI"));
-                }
-                dateField.setCaption(dateField.getLocale().toString());
-            }
-        }));
-
-        addComponent(dateField);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Click change locale to switch between Finnish and Chinese locale for the DateField. The date string should be updated in addition to the caption.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3935;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/DateFieldMinResolution.java b/tests/src/com/vaadin/tests/components/datefield/DateFieldMinResolution.java
deleted file mode 100644
index e7c3442060..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DateFieldMinResolution.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.InlineDateField;
-import com.vaadin.ui.Label;
-
-public class DateFieldMinResolution extends TestBase {
-
-    @Override
-    protected void setup() {
-
-        final SimpleDateFormat dformat = new SimpleDateFormat(
-                "dd/MM/yyyy HH:mm");
-
-        Calendar cal = Calendar.getInstance();
-        cal.set(2019, 1, 1, 1, 1);
-
-        DateField df = new DateField("foo");
-        df.setResolution(DateField.RESOLUTION_MIN);
-        df.setDateFormat(dformat.toPattern());
-        df.setValue(cal.getTime());
-        df.setImmediate(true);
-
-        addComponent(df);
-
-        final Label lbl = new Label(dformat.format(cal.getTime()));
-        lbl.setCaption("Selected date");
-
-        InlineDateField idf = new InlineDateField("bar");
-        idf.setResolution(DateField.RESOLUTION_MIN);
-        idf.setDateFormat(dformat.toPattern());
-        idf.setValue(cal.getTime());
-        idf.setImmediate(true);
-
-        idf.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                lbl.setValue(dformat.format(event.getProperty().getValue()));
-            }
-        });
-
-        addComponent(idf);
-        addComponent(lbl);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "When the time controls are visible the time should be directed directly to the textfield";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5387;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.html b/tests/src/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.html
deleted file mode 100644
index 6bc285ee72..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.html
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.DateFieldPopupOffScreen</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldPopupOffScreen::/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[2]/VPopupCalendar[0]/domChild[1]</td>
-	<td>10,10</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldPopupOffScreen::/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VPopupCalendar[0]/domChild[1]</td>
-	<td>10,12</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldPopupOffScreen::/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[4]/VPopupCalendar[0]/domChild[1]</td>
-	<td>8,10</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldPopupOffScreen::/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VPopupCalendar[0]/domChild[1]</td>
-	<td>7,13</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldPopupOffScreen::/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VPopupCalendar[0]/domChild[1]</td>
-	<td>11,14</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.java b/tests/src/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.java
deleted file mode 100644
index cb3fc1f916..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.sql.Date;
-
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Window;
-
-public class DateFieldPopupOffScreen extends AbstractTestCase {
-
-    @Override
-    protected String getDescription() {
-        return "Test for the popup position from a DateField. The popup should always be on-screen even if the DateField is close the the edge of the browser.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3639;
-    }
-
-    @Override
-    public void init() {
-        Window mainWindow = new Window(getClass().getName());
-
-        GridLayout mainLayout = new GridLayout(3, 3);
-        mainLayout.setSizeFull();
-
-        DateField df;
-
-        df = createDateField();
-        mainLayout.addComponent(df, 2, 0);
-        mainLayout.setComponentAlignment(df, Alignment.TOP_RIGHT);
-
-        df = createDateField();
-        mainLayout.addComponent(df, 2, 1);
-        mainLayout.setComponentAlignment(df, Alignment.MIDDLE_RIGHT);
-
-        df = createDateField();
-        mainLayout.addComponent(df, 2, 2);
-        mainLayout.setComponentAlignment(df, Alignment.BOTTOM_RIGHT);
-
-        df = createDateField();
-        mainLayout.addComponent(df, 0, 2);
-        mainLayout.setComponentAlignment(df, Alignment.BOTTOM_LEFT);
-
-        df = createDateField();
-        mainLayout.addComponent(df, 1, 2);
-        mainLayout.setComponentAlignment(df, Alignment.BOTTOM_CENTER);
-
-        mainWindow.setContent(mainLayout);
-        setMainWindow(mainWindow);
-    }
-
-    private DateField createDateField() {
-        DateField df = new DateField();
-        df.setDescription("This is a long, multiline tooltip.<br/>It should always be on screen so it can be read.");
-        df.setValue(new Date(1000000L));
-        return df;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/DateFieldReadOnly.html b/tests/src/com/vaadin/tests/components/datefield/DateFieldReadOnly.html
deleted file mode 100644
index ee19b52324..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DateFieldReadOnly.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>DateFieldReadOnly</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">DateFieldReadOnly</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.DateFieldReadOnly?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>focus</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldReadOnly::/VVerticalLayout[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>readonly</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldReadOnly::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldReadOnly::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupCalendar[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>focus</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldReadOnly::Root/VOverlay[0]/VCalendarPanel[0]/VCalendarPanel$VTime[0]/ListBox[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>readwrite-popup</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldReadOnly::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>focus</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldReadOnly::/VVerticalLayout[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>readonly</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/DateFieldReadOnly.java b/tests/src/com/vaadin/tests/components/datefield/DateFieldReadOnly.java
deleted file mode 100644
index 3084eab32b..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DateFieldReadOnly.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.util.Calendar;
-import java.util.Locale;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.DateField;
-
-public class DateFieldReadOnly extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "A read-only DateField should not show the popup button and not be editable.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3163;
-    }
-
-    @Override
-    protected void setup() {
-        final DateField timeField = new DateField("A read-only datefield");
-        timeField.setResolution(DateField.RESOLUTION_SEC);
-        timeField.setDateFormat("HH:mm:ss");
-        timeField.setCaption(null);
-        timeField.setIcon(null);
-        timeField.setWidth("8em");
-        timeField.addStyleName("timeField");
-
-        // Set date so that testing always has same time
-        Calendar c = Calendar.getInstance(Locale.ENGLISH);
-        c.set(2009, 05, 12, 0, 0, 0);
-
-        timeField.setValue(c.getTime());
-        timeField.setReadOnly(true);
-
-        addComponent(timeField);
-
-        Button b = new Button("Switch read-only");
-        b.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                timeField.setReadOnly(!timeField.isReadOnly());
-            }
-        });
-
-        addComponent(b);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/DateFieldTest.java b/tests/src/com/vaadin/tests/components/datefield/DateFieldTest.java
deleted file mode 100644
index cf433257bb..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DateFieldTest.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.Locale;
-
-import com.vaadin.tests.components.abstractfield.AbstractFieldTest;
-import com.vaadin.ui.DateField;
-
-public class DateFieldTest<T extends DateField> extends AbstractFieldTest<T> {
-
-    @Override
-    protected Class<T> getTestClass() {
-        return (Class<T>) DateField.class;
-    }
-
-    private Command<T, Date> setValue = new Command<T, Date>() {
-
-        public void execute(T c, Date value, Object data) {
-            c.setValue(value);
-        }
-    };
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-        createResolutionSelectAction(CATEGORY_FEATURES);
-        createBooleanAction("Lenient", CATEGORY_FEATURES, false, lenientCommand);
-        createBooleanAction("Show week numbers", CATEGORY_FEATURES, false,
-                weekNumberCommand);
-        createDateFormatSelectAction(CATEGORY_FEATURES);
-        createSetValueAction(CATEGORY_FEATURES);
-
-    };
-
-    private void createSetValueAction(String category) {
-        LinkedHashMap<String, Date> options = new LinkedHashMap<String, Date>();
-        options.put("(null)", null);
-        options.put("(current time)", new Date());
-        Calendar c = Calendar.getInstance(new Locale("fi", "FI"));
-        c.clear();
-        c.set(2010, 12 - 1, 12, 12, 0, 0);
-        c.set(Calendar.MILLISECOND, 0);
-        options.put("2010-12-12 12:00:00.000", c.getTime());
-        c.clear();
-        c.set(2000, 1 - 1, 2, 3, 4, 5);
-        c.set(Calendar.MILLISECOND, 6);
-        options.put("2000-01-02 03:04:05.006", c.getTime());
-        createMultiClickAction("Set value", category, options, setValue, null);
-    }
-
-    private void createDateFormatSelectAction(String category) {
-        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
-
-        options.put("-", null);
-        options.put("d M yyyy", "d M yyyy");
-        options.put("d MM yyyy", "d MM yyyy");
-        options.put("d MMM yyyy", "d MMM yyyy");
-        options.put("d MMMM yyyy", "d MMMM yyyy");
-        options.put("dd M yyyy", "dd M yyyy");
-        options.put("ddd M yyyy", "ddd M yyyy");
-        options.put("d M y", "d M y");
-        options.put("d M yy", "d M yy");
-        options.put("d M yyy", "d M yyy");
-        options.put("d M yyyy", "d M yyyy");
-        options.put("d M 'custom text' yyyy", "d M 'custom text' yyyy");
-        options.put("'day:'d', month:'M', year: 'yyyy",
-                "'day:'d', month:'M', year: 'yyyy");
-        options.put(getDatePattern(new Locale("fi", "FI"), DateFormat.LONG),
-                getDatePattern(new Locale("fi", "FI"), DateFormat.LONG));
-        options.put(getDatePattern(new Locale("fi", "FI"), DateFormat.MEDIUM),
-                getDatePattern(new Locale("fi", "FI"), DateFormat.MEDIUM));
-        options.put(getDatePattern(new Locale("fi", "FI"), DateFormat.SHORT),
-                getDatePattern(new Locale("fi", "FI"), DateFormat.SHORT));
-
-        createSelectAction("Date format", category, options, "-",
-                dateFormatCommand);
-
-    }
-
-    private String getDatePattern(Locale locale, int dateStyle) {
-        DateFormat dateFormat = DateFormat.getDateInstance(dateStyle, locale);
-
-        if (dateFormat instanceof SimpleDateFormat) {
-            String pattern = ((SimpleDateFormat) dateFormat).toPattern();
-            return pattern;
-        }
-        return null;
-
-    }
-
-    private void createResolutionSelectAction(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("Year", DateField.RESOLUTION_YEAR);
-        options.put("Month", DateField.RESOLUTION_MONTH);
-        options.put("Day", DateField.RESOLUTION_DAY);
-        options.put("Hour", DateField.RESOLUTION_HOUR);
-        options.put("Min", DateField.RESOLUTION_MIN);
-        options.put("Sec", DateField.RESOLUTION_SEC);
-        options.put("Msec", DateField.RESOLUTION_MSEC);
-
-        createSelectAction("Resolution", category, options, "Year",
-                resolutionCommand);
-    }
-
-    private Command<T, Integer> resolutionCommand = new Command<T, Integer>() {
-
-        public void execute(T c, Integer value, Object data) {
-            c.setResolution(value);
-
-        }
-    };
-    private Command<T, Boolean> lenientCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            c.setLenient(false);
-
-        }
-    };
-    private Command<T, Boolean> weekNumberCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            c.setShowISOWeekNumbers(value);
-
-        }
-    };
-    private Command<T, String> dateFormatCommand = new Command<T, String>() {
-
-        public void execute(T c, String value, Object data) {
-            c.setDateFormat(value);
-        }
-    };
-
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/DateFieldTimezone.html b/tests/src/com/vaadin/tests/components/datefield/DateFieldTimezone.html
deleted file mode 100644
index ca354dd240..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DateFieldTimezone.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>DateFieldTimezone</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">DateFieldTimezone</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.DateFieldTimezone?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldTimezone::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>6,10</td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldTimezone::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>Europe/Helsinki (Eastern European Time)</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldTimezone::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td></td>
-	<td>250</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldTimezone::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VPopupCalendar[0]#field</td>
-	<td>1/1/10 02:00:00.000 AM</td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldTimezone::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VPopupCalendar[0]#field</td>
-	<td>1/1/10 01:00:00.000 AM</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldTimezone::PID_SLog_row_0</td>
-	<td>2. Date changed to 12/31/09 11:00:00 PM UTC</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/DateFieldTimezone.java b/tests/src/com/vaadin/tests/components/datefield/DateFieldTimezone.java
deleted file mode 100644
index 6562e5412e..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DateFieldTimezone.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.text.DateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Locale;
-import java.util.TimeZone;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.DateField;
-
-public class DateFieldTimezone extends TestBase {
-
-    private static final TimeZone UTC = TimeZone.getTimeZone("UTC");
-    private static final Locale EN = Locale.ENGLISH;
-    private final Log log = new Log(5);
-    private final DateField dateField = new DateField();
-    private static final String nullValue = "";
-
-    @Override
-    protected void setup() {
-        ArrayList<String> timeZoneCodes = new ArrayList<String>();
-        timeZoneCodes.add(nullValue);
-        timeZoneCodes.addAll(Arrays.asList(TimeZone.getAvailableIDs()));
-        ComboBox timezoneSelector = new ComboBox("Select time zone",
-                timeZoneCodes) {
-            @Override
-            public String getItemCaption(Object itemId) {
-                if (itemId == nullValue || itemId == null) {
-                    TimeZone timeZone = TimeZone.getDefault();
-                    return "Default time zone (" + timeZone.getDisplayName()
-                            + ")";
-                } else {
-                    TimeZone timeZone = TimeZone.getTimeZone((String) itemId);
-                    return itemId + " (" + timeZone.getDisplayName() + ")";
-                }
-            }
-        };
-        timezoneSelector.setValue("UTC");
-        timezoneSelector.setImmediate(true);
-        timezoneSelector.setNullSelectionAllowed(true);
-        timezoneSelector.setNullSelectionItemId(nullValue);
-        timezoneSelector.setFilteringMode(ComboBox.FILTERINGMODE_CONTAINS);
-        timezoneSelector.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                Object value = event.getProperty().getValue();
-                TimeZone timeZone;
-                if (value == nullValue || value == null) {
-                    timeZone = null;
-                    log.log("Change to default time zone "
-                            + TimeZone.getDefault().getID());
-                } else {
-                    timeZone = TimeZone.getTimeZone((String) value);
-                    log.log("Changed to time zone " + timeZone.getID());
-                }
-                dateField.setTimeZone(timeZone);
-            }
-        });
-
-        Calendar cal = Calendar.getInstance(UTC);
-        cal.set(2010, 0, 1, 0, 0, 0);
-        cal.set(Calendar.MILLISECOND, 0);
-
-        dateField.setValue(cal.getTime());
-        dateField.setImmediate(true);
-        dateField.setTimeZone(cal.getTimeZone());
-        dateField.setLocale(EN);
-        dateField.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                Date date = (Date) dateField.getValue();
-                DateFormat format = DateFormat.getDateTimeInstance(
-                        DateFormat.SHORT, DateFormat.LONG, EN);
-                format.setTimeZone(UTC);
-                log.log("Date changed to " + format.format(date));
-            }
-        });
-
-        addComponent(timezoneSelector);
-        addComponent(log);
-        addComponent(dateField);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tests the operation of the date field with different time zones";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return Integer.valueOf(6066);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/DateFieldUnparsableDate.java b/tests/src/com/vaadin/tests/components/datefield/DateFieldUnparsableDate.java
deleted file mode 100644
index 32456e34c5..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DateFieldUnparsableDate.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.util.Date;
-
-import com.vaadin.data.Property;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.DateField;
-
-public class DateFieldUnparsableDate extends TestBase {
-
-    public class MyDateField extends DateField {
-        Date oldDate = null;
-
-        public MyDateField(String caption) {
-            super(caption);
-            addListener(new Property.ValueChangeListener() {
-                public void valueChange(
-                        com.vaadin.data.Property.ValueChangeEvent event) {
-                    oldDate = (Date) getValue();
-                }
-            });
-        }
-
-        @Override
-        protected Date handleUnparsableDateString(String dateString)
-                throws ConversionException {
-            return oldDate;
-        }
-    }
-
-    public class MyDateField2 extends DateField {
-        public MyDateField2(String caption) {
-            super(caption);
-        }
-
-        @Override
-        protected Date handleUnparsableDateString(String dateString)
-                throws ConversionException {
-            return null;
-        }
-    }
-
-    public class MyDateField3 extends DateField {
-        public MyDateField3(String caption) {
-            super(caption);
-        }
-
-        @Override
-        protected Date handleUnparsableDateString(String dateString)
-                throws ConversionException {
-            throw new ConversionException("You should not enter invalid dates!");
-        }
-    }
-
-    public class MyDateField4 extends DateField {
-        public MyDateField4(String caption) {
-            super(caption);
-        }
-
-        @Override
-        protected Date handleUnparsableDateString(String dateString)
-                throws ConversionException {
-            if (dateString != null && dateString.equals("today")) {
-                return new Date();
-            }
-            throw new ConversionException("You should not enter invalid dates!");
-        }
-    }
-
-    @Override
-    protected void setup() {
-        MyDateField df = new MyDateField(
-                "Returns the old value for invalid dates");
-        df.setImmediate(true);
-        addComponent(df);
-
-        MyDateField2 df2 = new MyDateField2("Returns empty for invalid dates");
-        df2.setImmediate(true);
-        addComponent(df2);
-
-        MyDateField3 df3 = new MyDateField3(
-                "Throws an exception for invalid dates");
-        df3.setImmediate(true);
-        addComponent(df3);
-
-        MyDateField4 df4 = new MyDateField4("Can convert 'today'");
-        df4.setImmediate(true);
-        addComponent(df4);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "DateFields in various configurations (according to caption). All handle unparsable dates differently";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4236;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/DefaultHandleUnparsableDateField.java b/tests/src/com/vaadin/tests/components/datefield/DefaultHandleUnparsableDateField.java
deleted file mode 100644
index bcdc8260b0..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DefaultHandleUnparsableDateField.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.validator.NullValidator;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.DateField;
-
-@SuppressWarnings("serial")
-public class DefaultHandleUnparsableDateField extends TestBase {
-
-    @Override
-    protected void setup() {
-        final DateField date = new DateField("Default DateField");
-        date.setImmediate(true);
-        addComponent(date);
-        date.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                if (date.isValid()) {
-                    getMainWindow().showNotification(date.toString());
-                }
-
-            }
-        });
-
-        final DateField validated = new DateField("Validated Default DateField");
-        validated.setImmediate(true);
-        validated.addValidator(new NullValidator("Validator: Date is NULL",
-                false));
-        addComponent(validated);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "By default the DateField should handle an unparsable date field without throwing an exception";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4311;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/DisabledDateFieldWidth b/tests/src/com/vaadin/tests/components/datefield/DisabledDateFieldWidth
deleted file mode 100644
index 48b11e1f7c..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DisabledDateFieldWidth
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>DisabledDateFieldWidth</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">DisabledDateFieldWidth</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.DisabledDateFieldWidth</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDisabledDateFieldWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldDisabledDateFieldWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/DisabledDateFieldWidth.java b/tests/src/com/vaadin/tests/components/datefield/DisabledDateFieldWidth.java
deleted file mode 100644
index 33156b9a75..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/DisabledDateFieldWidth.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.GridLayout;
-
-public class DisabledDateFieldWidth extends TestBase {
-    @Override
-    public void setup() {
-
-        final DateField dateField1 = new DateField("DateField");
-        dateField1.setResolution(DateField.RESOLUTION_YEAR);
-        dateField1.setEnabled(false);
-
-        Button button = new Button("Repaint datefield",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        dateField1.requestRepaint();
-                    }
-                });
-
-        GridLayout gl = new GridLayout(3, 1);
-        gl.addComponent(dateField1);
-        gl.addComponent(button);
-
-        addComponent(gl);
-    }
-
-    @Override
-    protected String getDescription() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/InlineDateFieldResolutionMsec.html b/tests/src/com/vaadin/tests/components/datefield/InlineDateFieldResolutionMsec.html
deleted file mode 100644
index 58809a1836..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/InlineDateFieldResolutionMsec.html
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.InlineDateFieldTest?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
-	<td>29,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>51,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>71,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>65,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
-	<td>31,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>33,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>79,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item6</td>
-	<td>29,2</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>December 2010</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[1]/domChild[0]/domChild[0]/domChild[1]/domChild[3]/domChild[1]/domChild[0]</td>
-	<td>v-datefield-calendarpanel-day-selected</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>12</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>00</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[4]</td>
-	<td>00</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[6]</td>
-	<td>000</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[8]</td>
-	<td>PM</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
-	<td>39,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>37,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>41,4</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[8]</td>
-	<td>label=AM</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. ValueChangeEvent, new value: Dec 12, 2010 00:00:00.000</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
-	<td>31,19</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>55,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>57,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item3</td>
-	<td>49,8</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>January 2000</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[1]/domChild[0]/domChild[0]/domChild[1]/domChild[2]/domChild[1]/domChild[0]</td>
-	<td>v-datefield-calendarpanel-day-selected</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>03</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>04</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[4]</td>
-	<td>05</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[6]</td>
-	<td>006</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[8]</td>
-	<td>AM</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[6]</td>
-	<td>label=002</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>6. ValueChangeEvent, new value: Jan 2, 2000 03:04:05.002</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[6]</td>
-	<td>002</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/InlineDateFieldTest.java b/tests/src/com/vaadin/tests/components/datefield/InlineDateFieldTest.java
deleted file mode 100644
index c2384584e2..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/InlineDateFieldTest.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import com.vaadin.ui.InlineDateField;
-
-public class InlineDateFieldTest extends DateFieldTest<InlineDateField> {
-
-    @Override
-    protected Class<InlineDateField> getTestClass() {
-        return InlineDateField.class;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/InlineDateFieldValueChange.html b/tests/src/com/vaadin/tests/components/datefield/InlineDateFieldValueChange.html
deleted file mode 100644
index 9e6b9ae75e..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/InlineDateFieldValueChange.html
+++ /dev/null
@@ -1,231 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">InlineDateFieldValueChange</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.InlineDateFieldTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--Day resolution-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
-	<td>8,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>30,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>72,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>23,12</td>
-</tr>
-<!--value=2010-12-12 12:00:00-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
-	<td>42,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>46,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>58,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>96,13</td>
-</tr>
-<!--Value change listener-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
-	<td>29,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>43,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>68,2</td>
-</tr>
-<!--Start actual test-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#day14</td>
-	<td>15,11</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog_row_0</td>
-	<td>3. ValueChangeEvent, new value: Dec 14, 2010 12:00:00.000</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#day13</td>
-	<td>20,6</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog_row_0</td>
-	<td>4. ValueChangeEvent, new value: Dec 13, 2010 12:00:00.000</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>11,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#day14</td>
-	<td>18,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog_row_0</td>
-	<td>145,9</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog_row_0</td>
-	<td>5. ValueChangeEvent, new value: Dec 14, 2009 12:00:00.000</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[0]</td>
-	<td>11,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#day12</td>
-	<td>20,9</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog_row_0</td>
-	<td>6. ValueChangeEvent, new value: Jan 12, 2010 12:00:00.000</td>
-</tr>
-<!--Set value to null and ensure nothing is selected-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
-	<td>46,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>49,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>41,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>62,3</td>
-</tr>
-<!--Null should show the current year/month without anything selected but with current day highlighted-->
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>DATE(MMMM YYYY)</td>
-</tr>
-<!--Show value-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item1</td>
-	<td>27,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>65,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>37,10</td>
-</tr>
-<!--assert current year/month/day is selected-->
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog_row_0</td>
-	<td>9. InlineDateField value: null</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#dayDATE(D)</td>
-	<td>v-datefield-calendarpanel-day-today</td>
-</tr>
-<!--select 1st and assert that the value changes (today should still be the same)-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#day1</td>
-	<td>11,10</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#day1</td>
-	<td>v-datefield-calendarpanel-day-selected</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#dayDATE(D)</td>
-	<td>v-datefield-calendarpanel-day-today</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog_row_0</td>
-	<td>10. ValueChangeEvent, new value: DATE(MMM) 1, DATE(YYYY) *</td>
-</tr>
-<!--select 2nd and assert that the value changes (today should still be the same)-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#day2</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#dayDATE(D)</td>
-	<td>v-datefield-calendarpanel-day-today</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#day2</td>
-	<td>v-datefield-calendarpanel-day-selected</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog_row_0</td>
-	<td>11. ValueChangeEvent, new value: DATE(MMM) 2, DATE(YYYY) *</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/InlineDateFields.java b/tests/src/com/vaadin/tests/components/datefield/InlineDateFields.java
deleted file mode 100644
index 083e8f0190..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/InlineDateFields.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.sql.Date;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.InlineDateField;
-
-@SuppressWarnings("serial")
-public class InlineDateFields extends ComponentTestCase<InlineDateField> {
-
-    private static final Locale[] LOCALES = new Locale[] { Locale.US,
-            Locale.TAIWAN, new Locale("fi", "FI") };
-
-    @Override
-    protected Class<InlineDateField> getTestClass() {
-        return InlineDateField.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-
-        Locale locale = LOCALES[0];
-
-        InlineDateField pd = createInlineDateField("Undefined width", "-1",
-                locale);
-        pd.setDebugId("Locale-" + locale.toString() + "-undefined-wide");
-        addTestComponent(pd);
-        pd = createInlineDateField("300px width", "300px", locale);
-        pd.setDebugId("Locale-" + locale.toString() + "-300px-wide");
-        addTestComponent(pd);
-        pd = createInlineDateField("Initially empty", "", locale);
-        pd.setValue(null);
-        pd.setDebugId("Locale-" + locale.toString() + "-initially-empty");
-        addTestComponent(pd);
-
-    }
-
-    private InlineDateField createInlineDateField(String caption, String width,
-            Locale locale) {
-        InlineDateField pd = new InlineDateField(caption + "("
-                + locale.toString() + ")");
-        pd.setWidth(width);
-        pd.setValue(new Date(12312312313L));
-        pd.setLocale(locale);
-        pd.setResolution(DateField.RESOLUTION_YEAR);
-
-        return pd;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A generic test for InlineDateFields in different configurations";
-    }
-
-    @Override
-    protected List<Component> createActions() {
-        List<Component> actions = super.createActions();
-        actions.add(createResolutionSelectAction());
-        actions.add(createLocaleSelectAction());
-        return actions;
-    }
-
-    private Component createResolutionSelectAction() {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("Year", DateField.RESOLUTION_YEAR);
-        options.put("Month", DateField.RESOLUTION_MONTH);
-        options.put("Day", DateField.RESOLUTION_DAY);
-        options.put("Hour", DateField.RESOLUTION_HOUR);
-        options.put("Min", DateField.RESOLUTION_MIN);
-        options.put("Sec", DateField.RESOLUTION_SEC);
-        options.put("Msec", DateField.RESOLUTION_MSEC);
-        return createSelectAction("Resolution", options, "Year",
-                new Command<InlineDateField, Integer>() {
-
-                    public void execute(InlineDateField c, Integer value,
-                            Object data) {
-                        c.setResolution(value);
-
-                    }
-                });
-    }
-
-    private Component createLocaleSelectAction() {
-        LinkedHashMap<String, Locale> options = new LinkedHashMap<String, Locale>();
-        for (Locale locale : LOCALES) {
-            options.put(locale.toString(), locale);
-        }
-        return createSelectAction("Locale", options, LOCALES[0].toString(),
-                new Command<InlineDateField, Locale>() {
-
-                    public void execute(InlineDateField c, Locale value,
-                            Object data) {
-                        c.setCaption(c.getCaption().replaceAll(
-                                c.getLocale().toString(), value.toString()));
-                        c.setLocale(value);
-
-                    }
-                });
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/LenientMode.java b/tests/src/com/vaadin/tests/components/datefield/LenientMode.java
deleted file mode 100644
index cbe9ac613f..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/LenientMode.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.util.Date;
-import java.util.Locale;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.DateField;
-
-public class LenientMode extends TestBase implements ValueChangeListener {
-
-    private static final long serialVersionUID = -9064553409580072387L;
-
-    @Override
-    protected String getDescription() {
-        return "In lenien mode DateField should accept date input from user like '32/12/09'. In normal mode, an exception should be thrown. ";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3175;
-    }
-
-    @Override
-    protected void setup() {
-
-        @SuppressWarnings("deprecation")
-        Date d = new Date(2009 - 1900, 12 - 1, 31, 23, 59, 59);
-
-        DateField df = new DateField("Lenient ");
-        df.setLocale(new Locale("fi"));
-        df.setResolution(DateField.RESOLUTION_DAY);
-        df.setLenient(true);
-        df.setImmediate(true);
-        df.setValue(d);
-
-        DateField df2 = new DateField("Normal ");
-        df2.setLocale(new Locale("fi"));
-        df2.setResolution(DateField.RESOLUTION_DAY);
-        // df2.setLenient(false);
-        df2.setValue(null);
-        df2.setImmediate(true);
-        df2.setValue(d);
-
-        addComponent(df);
-        addComponent(df2);
-
-        df.addListener(this);
-        df2.addListener(this);
-
-        df = new DateField("Lenient with time");
-        df.setLocale(new Locale("fi"));
-        df.setLenient(true);
-        df.setImmediate(true);
-        df.setValue(d);
-
-        df2 = new DateField("Normal with time");
-        df2.setLocale(new Locale("fi"));
-        // df2.setLenient(false);
-        df2.setValue(null);
-        df2.setImmediate(true);
-        df2.setValue(d);
-
-        addComponent(df);
-        addComponent(df2);
-
-        df.addListener(this);
-        df2.addListener(this);
-
-        addComponent(new Button("Visit server"));
-
-    }
-
-    public void valueChange(ValueChangeEvent event) {
-        getMainWindow().showNotification(
-                "New value" + event.getProperty().getValue());
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/LowResolution.java b/tests/src/com/vaadin/tests/components/datefield/LowResolution.java
deleted file mode 100644
index 1c1994cbe5..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/LowResolution.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.InlineDateField;
-import com.vaadin.ui.PopupDateField;
-
-@SuppressWarnings("serial")
-public class LowResolution extends TestBase {
-
-    @Override
-    protected void setup() {
-        final PopupDateField dateField = new PopupDateField();
-        dateField.setValue(new java.util.Date());
-        dateField.setResolution(PopupDateField.RESOLUTION_MONTH);
-        dateField.addListener(new PopupDateField.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                getMainWindow().showNotification(
-                        "Date now" + event.getProperty());
-            }
-        });
-        dateField.setImmediate(true);
-        getLayout().addComponent(dateField);
-
-        final PopupDateField dateField3 = new PopupDateField();
-        // dateField.setValue(new java.util.Date());
-        dateField3.setResolution(PopupDateField.RESOLUTION_YEAR);
-        dateField3.addListener(new PopupDateField.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                getMainWindow().showNotification(
-                        "Date now" + event.getProperty());
-            }
-        });
-        dateField3.setImmediate(true);
-        getLayout().addComponent(dateField3);
-
-        final InlineDateField dateField2 = new InlineDateField();
-        dateField2.setValue(new java.util.Date());
-        dateField2.setResolution(PopupDateField.RESOLUTION_MONTH);
-        dateField2.addListener(new PopupDateField.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                getMainWindow().showNotification(
-                        "Date now" + event.getProperty());
-            }
-        });
-        dateField2.setImmediate(true);
-        getLayout().addComponent(dateField2);
-
-        CheckBox immediate = new CheckBox(
-                "Immediate (use sync button to change fields) ");
-        immediate.setValue(true);
-        immediate.addListener(new CheckBox.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                boolean immediate = !dateField.isImmediate();
-                dateField.setImmediate(immediate);
-                dateField2.setImmediate(immediate);
-                dateField3.setImmediate(immediate);
-            }
-        });
-
-        getLayout().addComponent(immediate);
-        getLayout().addComponent(new Button("sync"));
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Date field should work and update its value to the server.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5567;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/NarrowPopupDateFieldInTable.html b/tests/src/com/vaadin/tests/components/datefield/NarrowPopupDateFieldInTable.html
deleted file mode 100644
index fe95c2476c..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/NarrowPopupDateFieldInTable.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.NarrowPopupDateFieldInTable?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/NarrowPopupDateFieldInTable.java b/tests/src/com/vaadin/tests/components/datefield/NarrowPopupDateFieldInTable.java
deleted file mode 100644
index 73ec3b659e..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/NarrowPopupDateFieldInTable.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.PopupDateField;
-import com.vaadin.ui.Table;
-
-public class NarrowPopupDateFieldInTable extends TestBase {
-
-    private final Object DATE = "Date";
-
-    @Override
-    public void setup() {
-        PopupDateField df = new PopupDateField();
-        df.setWidth("100%");
-
-        Table t = new Table();
-        t.setWidth("100px");
-        t.addContainerProperty(DATE, Component.class, null);
-        t.addItem(new Object[] { df }, "1");
-        addComponent(t);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Simple test to ensure a narrow PopupDateField can be used in a Table.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6166;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/datefield/PopupDateFieldDisabledReadonly.html b/tests/src/com/vaadin/tests/components/datefield/PopupDateFieldDisabledReadonly.html
deleted file mode 100644
index fe7edad28c..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/PopupDateFieldDisabledReadonly.html
+++ /dev/null
@@ -1,158 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.PopupDateFields?restartApplication</td>
-	<td></td>
-</tr>
-<!--Ensure no popups appear when DateField is disabled-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Scheckboxaction-Enabled/domChild[0]</td>
-	<td>6,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide/domChild[1]</td>
-	<td>10,15</td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[4]</td>
-	<td>759,5</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
-	<td>label=Month</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide/domChild[1]</td>
-	<td>15,11</td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>566,9</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
-	<td>label=Day</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide/domChild[1]</td>
-	<td>3,10</td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/FlexTable[0]/domChild[1]/domChild[0]/domChild[3]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[4]</td>
-	<td>699,43</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
-	<td>label=Hour</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide/domChild[1]</td>
-	<td>15,17</td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/VCalendarPanel$VTime[0]/ListBox[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[3]</td>
-	<td>630,30</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
-	<td>label=Min</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide/domChild[1]</td>
-	<td>8,11</td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td></td>
-</tr>
-<!--Ensure no popups appear when DateField is enabled but readonly-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Scheckboxaction-Enabled/domChild[0]</td>
-	<td>3,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Scheckboxaction-Readonly/domChild[0]</td>
-	<td>5,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>readonly</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Scheckboxaction-Enabled/domChild[0]</td>
-	<td>3,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>readonly-disabled</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/PopupDateFieldMonth.html b/tests/src/com/vaadin/tests/components/datefield/PopupDateFieldMonth.html
deleted file mode 100644
index 7e27d44dbb..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/PopupDateFieldMonth.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.CustomDateFormats?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=en_US</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[2]/VPopupCalendar[0]/domChild[1]</td>
-	<td>10,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::Root/VOverlay[0]/VCalendarPanel[0]/FlexTable[0]/VCalendarPanel$Day[1]</td>
-	<td>17,11</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[2]/VPopupCalendar[0]/domChild[0]</td>
-	<td>1 1 2010</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[2]/VPopupCalendar[0]/domChild[1]</td>
-	<td>14,13</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>January 2010</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/PopupDateFieldResolutions.html b/tests/src/com/vaadin/tests/components/datefield/PopupDateFieldResolutions.html
deleted file mode 100644
index 6600adafd2..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/PopupDateFieldResolutions.html
+++ /dev/null
@@ -1,1093 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.PopupDateFields?restartApplication</td>
-	<td></td>
-</tr>
-<!--Resolution: year-->
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
-	<td>label=Year</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-year</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>9,15</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>1970</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>year-popup-us</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>9,15</td>
-</tr>
-<!--Resolution: month-->
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
-	<td>label=Month</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-month</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>10,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>May 1970</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>month-popup-us</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>10,12</td>
-</tr>
-<!--Resolution: day-->
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
-	<td>label=Day</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-day</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>10,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>May 1970</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day23</td>
-	<td>23</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>day-popup-us</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>10,12</td>
-</tr>
-<!--Resolution: hour-->
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
-	<td>label=Hour</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-hour</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>10,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>May 1970</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day23</td>
-	<td>23</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#h</td>
-	<td>02</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#ampm</td>
-	<td>PM</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[1]</td>
-	<td>exact::00</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>hour-popup-us</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>10,12</td>
-</tr>
-<!--Resolution: min-->
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
-	<td>label=Min</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-min</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>10,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>May 1970</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day23</td>
-	<td>23</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#h</td>
-	<td>02</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#m</td>
-	<td>05</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#ampm</td>
-	<td>PM</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>min-popup-us</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>10,12</td>
-</tr>
-<!--Resolution: sec-->
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
-	<td>label=Sec</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-sec</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>10,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>May 1970</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day23</td>
-	<td>23</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#h</td>
-	<td>02</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#m</td>
-	<td>05</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#s</td>
-	<td>12</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#ampm</td>
-	<td>PM</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>sec-popup-us</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>10,12</td>
-</tr>
-<!--Resolution: msec-->
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
-	<td>label=Msec</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-msec</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>10,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>May 1970</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day23</td>
-	<td>23</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#h</td>
-	<td>02</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#m</td>
-	<td>05</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#s</td>
-	<td>12</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#ms</td>
-	<td>313</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#ampm</td>
-	<td>PM</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>msec-popup-us</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>10,12</td>
-</tr>
-<!--Check resolution year functionality-->
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
-	<td>label=Year</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>11,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>1970</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
-	<td>37,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>1971</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
-	<td>37,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
-	<td>37,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
-	<td>37,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>1974</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>37,12</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>1974</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>38,8</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>2010</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
-	<td>202,40</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>16,11</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>2010</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#prevy</td>
-	<td>37,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>2009</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
-	<td>37,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>2010</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
-	<td>37,12</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>2011</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
-	<td>129,26</td>
-</tr>
-<!--Check resolution month functionality-->
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
-	<td>label=Month</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>5/11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>7,8</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>May 2011</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
-	<td>37,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>June 2011</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
-	<td>37,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>June 2012</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>37,15</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>6/12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>-54,8</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>1/09</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>8,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>January 2009</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
-	<td>37,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>February 2009</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]/domChild[0]</td>
-	<td>174,3</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>2/09</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
-	<td>129,26</td>
-</tr>
-<!--Check resolution day functionality-->
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
-	<td>label=Day</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>5/23/70</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
-	<td>478,1</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>5/23/70</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>11,16</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>May 1970</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day23</td>
-	<td>v-datefield-calendarpanel-day-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
-	<td>37,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>June 1970</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
-	<td>37,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>June 1971</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]/domChild[0]</td>
-	<td>193,12</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>5/23/70</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>12,9</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>May 1970</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
-	<td>37,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
-	<td>12,15</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day30</td>
-	<td>14,12</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>6/30/71</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>5,13</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>June 1971</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day30</td>
-	<td>v-datefield-calendarpanel-day-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#prevmon</td>
-	<td>15,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day31</td>
-	<td>18,8</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>5/31/71</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>11,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#prevmon</td>
-	<td>12,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day30</td>
-	<td>13,14</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>4/30/71</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>12,13</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>April 1971</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day30</td>
-	<td>v-datefield-calendarpanel-day-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
-	<td>8,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day1</td>
-	<td>17,9</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>4/1/72</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>11,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#prevmon</td>
-	<td>10,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day1</td>
-	<td>15,4</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>3/1/72</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>8,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#prevmon</td>
-	<td>10,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day29</td>
-	<td>17,9</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>2/29/72</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>-13,8</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>1/15/02</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>11,14</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>January 2002</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day15</td>
-	<td>v-datefield-calendarpanel-day-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
-	<td>11,8</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>February 2002</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
-	<td>10,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>February 2003</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]/domChild[0]</td>
-	<td>185,8</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
-	<td>1/15/02</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
-	<td>8,7</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>January 2002</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day15</td>
-	<td>v-datefield-calendarpanel-day-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
-	<td>364,32</td>
-</tr>
-<!--Also check finnish locale-->
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-fi_FI-undefined-wide#field</td>
-	<td>23.5.1970</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-fi_FI-undefined-wide#popupButton</td>
-	<td>14,11</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>toukokuu 1970</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day23</td>
-	<td>v-datefield-calendarpanel-day-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
-	<td>15,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[7]/domChild[0]</td>
-	<td>286,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-fi_FI-undefined-wide#field</td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-fi_FI-undefined-wide#popupButton</td>
-	<td>13,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
-	<td>11,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
-	<td>11,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day17</td>
-	<td>13,9</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-fi_FI-undefined-wide#field</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-zh_TW-undefined-wide#field</td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-zh_TW-undefined-wide#popupButton</td>
-	<td>9,14</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
-	<td>五月 1970</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day23</td>
-	<td>v-datefield-calendarpanel-day-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
-	<td>8,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day2</td>
-	<td>16,9</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-zh_TW-undefined-wide#field</td>
-	<td></td>
-</tr>
-<!--Back to resolution: s-->
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
-	<td>label=Sec</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-fi_FI-undefined-wide#field</td>
-	<td>17.7.1970 14:05:12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-fi_FI-undefined-wide#popupButton</td>
-	<td>11,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>heinäkuu 1970</td>
-</tr>
-<tr>
-	<td>assertElementPresent</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day17</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#h</td>
-	<td>14</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#m</td>
-	<td>05</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#s</td>
-	<td>12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
-	<td>8,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
-	<td>8,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
-	<td>16,15</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
-	<td>16,15</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#h</td>
-	<td>label=03</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#m</td>
-	<td>label=04</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#s</td>
-	<td>label=05</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[7]</td>
-	<td>291,3</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-fi_FI-undefined-wide#field</td>
-	<td>17.7.1970 03:04:05</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/PopupDateFieldTest.java b/tests/src/com/vaadin/tests/components/datefield/PopupDateFieldTest.java
deleted file mode 100644
index ae238b2a91..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/PopupDateFieldTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.util.LinkedHashMap;
-
-import com.vaadin.ui.PopupDateField;
-
-public class PopupDateFieldTest extends DateFieldTest<PopupDateField> {
-
-    @Override
-    protected Class<PopupDateField> getTestClass() {
-        return PopupDateField.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-
-        createInputPromptSelectAction(CATEGORY_FEATURES);
-    }
-
-    private void createInputPromptSelectAction(String category) {
-        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
-        options.put("<none>", null);
-        options.put("Please enter date", "Please enter date");
-        options.put("åäöÅÄÖ", "åäöÅÄÖ");
-
-        createSelectAction("Input prompt", category, options, "<none>",
-                new Command<PopupDateField, String>() {
-
-                    public void execute(PopupDateField c, String value,
-                            Object data) {
-                        c.setInputPrompt(value);
-
-                    }
-                });
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/PopupDateFields.java b/tests/src/com/vaadin/tests/components/datefield/PopupDateFields.java
deleted file mode 100644
index 8b9cb68d7b..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/PopupDateFields.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.sql.Date;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.PopupDateField;
-
-@SuppressWarnings("serial")
-public class PopupDateFields extends ComponentTestCase<PopupDateField> {
-
-    private static final Locale[] LOCALES = new Locale[] { Locale.US,
-            Locale.TAIWAN, new Locale("fi", "FI") };
-
-    @Override
-    protected Class<PopupDateField> getTestClass() {
-        return PopupDateField.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-
-        for (Locale locale : LOCALES) {
-            PopupDateField pd = createPopupDateField("Undefined width", "-1",
-                    locale);
-            pd.setDebugId("Locale-" + locale.toString() + "-undefined-wide");
-            addTestComponent(pd);
-            pd = createPopupDateField("500px width", "500px", locale);
-            pd.setDebugId("Locale-" + locale.toString() + "-500px-wide");
-            addTestComponent(pd);
-            pd = createPopupDateField("Initially empty", "", locale);
-            pd.setValue(null);
-            pd.setDebugId("Locale-" + locale.toString() + "-initially-empty");
-            addTestComponent(pd);
-        }
-
-    }
-
-    private PopupDateField createPopupDateField(String caption, String width,
-            Locale locale) {
-        PopupDateField pd = new PopupDateField(caption + "("
-                + locale.toString() + ")");
-        pd.setWidth(width);
-        pd.setValue(new Date(12312312313L));
-        pd.setLocale(locale);
-        pd.setResolution(DateField.RESOLUTION_YEAR);
-
-        return pd;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A generic test for PopupDateFields in different configurations";
-    }
-
-    @Override
-    protected List<Component> createActions() {
-        List<Component> actions = super.createActions();
-        actions.add(createResolutionSelectAction());
-        actions.add(createInputPromptSelectAction());
-        return actions;
-    }
-
-    private Component createResolutionSelectAction() {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("Year", DateField.RESOLUTION_YEAR);
-        options.put("Month", DateField.RESOLUTION_MONTH);
-        options.put("Day", DateField.RESOLUTION_DAY);
-        options.put("Hour", DateField.RESOLUTION_HOUR);
-        options.put("Min", DateField.RESOLUTION_MIN);
-        options.put("Sec", DateField.RESOLUTION_SEC);
-        options.put("Msec", DateField.RESOLUTION_MSEC);
-        return createSelectAction("Resolution", options, "Year",
-                new Command<PopupDateField, Integer>() {
-
-                    public void execute(PopupDateField c, Integer value,
-                            Object data) {
-                        c.setResolution(value);
-
-                    }
-                });
-    }
-
-    private Component createInputPromptSelectAction() {
-        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
-        options.put("<none>", null);
-        options.put("Please enter date", "Please enter date");
-        options.put("åäöÅÄÖ", "åäöÅÄÖ");
-
-        return createSelectAction("Input prompt", options, "<none>",
-                new Command<PopupDateField, String>() {
-
-                    public void execute(PopupDateField c, String value,
-                            Object data) {
-                        c.setInputPrompt(value);
-
-                    }
-                });
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/RequiredInvalidDateField.html b/tests/src/com/vaadin/tests/components/datefield/RequiredInvalidDateField.html
deleted file mode 100644
index 6dc46e4eec..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/RequiredInvalidDateField.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>RequiredInvalidDateField</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">RequiredInvalidDateField</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.RequiredInvalidDateField?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>validatorFails</td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldRequiredInvalidDateField::PID_S_DF1#field</td>
-	<td></td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldRequiredInvalidDateField::PID_S_DF2#field</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>empty</td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldRequiredInvalidDateField::PID_S_DF1#field</td>
-	<td>abc</td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldRequiredInvalidDateField::PID_S_DF2#field</td>
-	<td>abc</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>invalidDateString</td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldRequiredInvalidDateField::PID_S_DF1#field</td>
-	<td>2.9.2011</td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldRequiredInvalidDateField::PID_S_DF2#field</td>
-	<td>2.9.2011</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>validated</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/RequiredInvalidDateField.java b/tests/src/com/vaadin/tests/components/datefield/RequiredInvalidDateField.java
deleted file mode 100644
index 7176dae48b..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/RequiredInvalidDateField.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.util.Date;
-import java.util.Locale;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Validator;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.data.validator.AbstractValidator;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.DateField;
-
-public class RequiredInvalidDateField extends TestBase {
-
-    @Override
-    protected void setup() {
-        // StringLengthValidator textValidator = new StringLengthValidator(
-        // "String length must be 2-4");
-        // textValidator.setMinLength(2);
-        // textValidator.setMaxLength(4);
-        //
-        // // not required
-        // TextField tf1 = new TextField();
-        // tf1.addValidator(textValidator);
-        // tf1.setImmediate(true);
-        // addComponent(tf1);
-        //
-        // // required
-        // TextField tf2 = new TextField();
-        // tf2.addValidator(textValidator);
-        // tf2.setRequired(true);
-        // tf2.setImmediate(true);
-        // addComponent(tf2);
-
-        Date date = new Date(2011 - 1900, 9 - 1, 1);
-
-        Validator dateValidator = new AbstractValidator(
-                "Day of month must be an even number") {
-
-            public boolean isValid(Object value) {
-                if (!(value instanceof Date)) {
-                    return false;
-                }
-                Date date = (Date) value;
-                return (date.getDate() % 2 == 0);
-            }
-        };
-
-        // not required
-        Property dateProperty1 = new ObjectProperty<Date>(date);
-        DateField dateField1 = new DateField("Not required", dateProperty1);
-        dateField1.setLocale(new Locale("fi", "FI"));
-        dateField1.setResolution(DateField.RESOLUTION_DAY);
-        dateField1.setDebugId("_DF1");
-        dateField1.setImmediate(true);
-        dateField1.addValidator(dateValidator);
-        addComponent(dateField1);
-
-        // required
-        Property dateProperty2 = new ObjectProperty<Date>(date);
-        DateField dateField2 = new DateField("Required", dateProperty2);
-        dateField2.setLocale(new Locale("fi", "FI"));
-        dateField2.setResolution(DateField.RESOLUTION_DAY);
-        dateField2.setDebugId("_DF2");
-        dateField2.setRequired(true);
-        dateField2.setImmediate(true);
-        dateField2.addValidator(dateValidator);
-        addComponent(dateField2);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Error indicator should be shown for a DateField with an "
-                + "invalid value, also when the field is required";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6770;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.html b/tests/src/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.html
deleted file mode 100644
index df6faa7228..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.ShowSelectedDateAfterInvalid?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VPopupCalendar[0]/domChild[0]</td>
-	<td>46,8</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VPopupCalendar[0]/domChild[0]</td>
-	<td>test</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VPopupCalendar[0]/domChild[1]</td>
-	<td>9,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::Root/VOverlay[0]/VCalendarPanel[0]#day7</td>
-	<td>19,5</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VPopupCalendar[0]/domChild[0]</td>
-	<td>07/DATE(MM)/DATE(YYYY)</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VLabel[0]</td>
-	<td>Valid!</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VPopupCalendar[0]/domChild[0]</td>
-	<td>07/DATE(MM)/DATE(YYYY)</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.java b/tests/src/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.java
deleted file mode 100644
index fde3d4e56b..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.PopupDateField;
-
-/**
- * First entering an invalid date, forcing a server roundtrip and then selecting
- * a valid date from the popup in a non-immediate {@link PopupDateField} caused
- * the invalid date string to continue to show.
- */
-public class ShowSelectedDateAfterInvalid extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Label result = new Label();
-
-        final Form form = new Form();
-
-        PopupDateField datefield = new PopupDateField();
-        datefield.setResolution(PopupDateField.RESOLUTION_DAY);
-        datefield.setDateFormat("dd/MM/yyyy");
-
-        form.addField("datefield", datefield);
-
-        Button button = new Button("Validate");
-
-        button.addListener(new Button.ClickListener() {
-            public void buttonClick(Button.ClickEvent event) {
-                form.setValidationVisible(true);
-                if (form.isValid()) {
-                    result.setValue("Valid!");
-                } else {
-                    result.setValue("Invalid");
-                }
-            }
-
-        });
-
-        addComponent(form);
-        addComponent(button);
-        addComponent(result);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "DateField doesn't show selected value after invalid and then selecting a value";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5369;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/TestDatefieldYear.html b/tests/src/com/vaadin/tests/components/datefield/TestDatefieldYear.html
deleted file mode 100644
index 71c246593a..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/TestDatefieldYear.html
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TestDatefieldYear</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TestDatefieldYear</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.TestDatefieldYear?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldTestDatefieldYear::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupCalendar[0]/domChild[0]</td>
-	<td>4/09</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldTestDatefieldYear::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupCalendar[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[3]/span</td>
-	<td>April 2009</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[1]/button</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[2]/button</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[2]/button</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[2]/button</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[2]/button</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldTestDatefieldYear::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupCalendar[0]/domChild[0]</td>
-	<td>12/07</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[3]/span</td>
-	<td>December 2007</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[4]/button</td>
-	<td>16,7</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[4]/button</td>
-	<td>-287,-85</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[5]/button</td>
-	<td>10,9</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldTestDatefieldYear::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupCalendar[0]/domChild[0]</td>
-	<td>2/09</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[3]/span</td>
-	<td>February 2009</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/TestDatefieldYear.java b/tests/src/com/vaadin/tests/components/datefield/TestDatefieldYear.java
deleted file mode 100644
index 4fa7a6811a..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/TestDatefieldYear.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.util.Date;
-import java.util.Locale;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.DateField;
-
-public class TestDatefieldYear extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "A popup with resolution year or month should update the textfield when browsing. The value displayed in the textfield should always be the same as the popup shows.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2813;
-    }
-
-    @Override
-    protected void setup() {
-        @SuppressWarnings("deprecation")
-        DateField df = new DateField("Year", new Date(2009 - 1900, 4 - 1, 1));
-        df.setLocale(new Locale("en", "US"));
-        df.setResolution(DateField.RESOLUTION_YEAR);
-        df.setResolution(DateField.RESOLUTION_MONTH);
-        addComponent(df);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/datefield/TestSettingTimeOnInitiallyNullInlineDateField.html b/tests/src/com/vaadin/tests/components/datefield/TestSettingTimeOnInitiallyNullInlineDateField.html
deleted file mode 100644
index 40d50f0328..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/TestSettingTimeOnInitiallyNullInlineDateField.html
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TestSettingTimeOnInitiallyNullInlineDateField</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TestSettingTimeOnInitiallyNullInlineDateField</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.InlineDateFieldTest?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
-	<td>42,20</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
-	<td>42,20</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
-	<td>42,20</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>27,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item5</td>
-	<td>39,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>34,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
-	<td>14,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>33,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>27,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item6</td>
-	<td>27,5</td>
-</tr>
-<tr>
-	<td>scroll</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[6]</td>
-	<td>7539</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
-	<td>49,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>15,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>37,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>12,8</td>
-</tr>
-<tr>
-	<td>scroll</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[6]</td>
-	<td>3542</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
-	<td>35,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>38,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>41,3</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>index=0</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>index=0</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[4]</td>
-	<td>index=0</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[6]</td>
-	<td>index=0</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[8]</td>
-	<td>index=1</td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>12:00:00.000</td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/TestSettingTimeOnInitiallyNullPopupDateField.html b/tests/src/com/vaadin/tests/components/datefield/TestSettingTimeOnInitiallyNullPopupDateField.html
deleted file mode 100644
index b7f63591f9..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/TestSettingTimeOnInitiallyNullPopupDateField.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TestSettingTimeOnInitiallyNullPopupDateField</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TestSettingTimeOnInitiallyNullPopupDateField</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.PopupDateFieldTest?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::PID_Smenu#item0</td>
-	<td>32,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::PID_Smenu#item0</td>
-	<td>32,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::PID_Smenu#item0</td>
-	<td>32,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>31,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item5</td>
-	<td>46,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>38,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::PID_Smenu#item0</td>
-	<td>43,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>27,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>11,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::PID_Smenu#item0</td>
-	<td>12,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>27,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>18,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item6</td>
-	<td>30,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::PID_StestComponent#popupButton</td>
-	<td>19,15</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[0]/VCalendarPanel[0]#m</td>
-	<td>index=0</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[0]/VCalendarPanel[0]#s</td>
-	<td>index=0</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[0]/VCalendarPanel[0]#ms</td>
-	<td>index=0</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[0]/VCalendarPanel[0]#h</td>
-	<td>index=0</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[0]/VCalendarPanel[0]#ampm</td>
-	<td>index=1</td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>12:00:00.000</td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/ValueThroughProperty.html b/tests/src/com/vaadin/tests/components/datefield/ValueThroughProperty.html
deleted file mode 100644
index ce74f8941e..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/ValueThroughProperty.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.datefield.ValueThroughProperty?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldValueThroughProperty::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPopupCalendar[0]#field</td>
-	<td>30,7</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldValueThroughProperty::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPopupCalendar[0]#field</td>
-	<td>asdf</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldValueThroughProperty::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
-	<td>246,18</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldValueThroughProperty::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsdatefieldValueThroughProperty::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPopupCalendar[0]#field</td>
-	<td>12/14/10</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/datefield/ValueThroughProperty.java b/tests/src/com/vaadin/tests/components/datefield/ValueThroughProperty.java
deleted file mode 100644
index 1f9735b543..0000000000
--- a/tests/src/com/vaadin/tests/components/datefield/ValueThroughProperty.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package com.vaadin.tests.components.datefield;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Locale;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.PopupDateField;
-
-public class ValueThroughProperty extends TestBase {
-    private final Property dateProperty = new ObjectProperty<Date>(null,
-            Date.class);
-
-    @Override
-    protected void setup() {
-        addComponent(new Label(
-                "Try to input an invalid value to the DateField, for example \"asdf\".<br />"
-                        + "Then try to set DateField's value using the first button. It sets the value "
-                        + "correctly (as we can see from the Label) but the client-side is not updated.<br/>"
-                        + "Using second button updates value correctly on the client-side too.",
-                Label.CONTENT_XML));
-
-        final PopupDateField df = new PopupDateField(dateProperty);
-        df.setLocale(new Locale("en", "US"));
-        df.setImmediate(true);
-        df.setResolution(DateField.RESOLUTION_DAY);
-        addComponent(df);
-
-        Label valueLabel = new Label(df.getPropertyDataSource());
-        valueLabel.setCaption("DateField's value");
-        addComponent(valueLabel);
-
-        final Calendar cal = Calendar.getInstance();
-        cal.set(Calendar.YEAR, 2010);
-        cal.set(Calendar.MONTH, 11);
-        cal.set(Calendar.DAY_OF_MONTH, 14);
-        Button setDateButton1 = new Button(
-                "Set value to 12/14/10 using property", new ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        dateProperty.setValue(cal.getTime());
-                    }
-
-                });
-        addComponent(setDateButton1);
-
-        Button setDateButton2 = new Button(
-                "Set value to 12/14/10 using setValue", new ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        df.setValue(cal.getTime());
-                    }
-
-                });
-        addComponent(setDateButton2);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Setting a value through a property should update the"
-                + " client-side even if it contains an invalid value.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5810;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/embedded/EmbeddedClickListenerRelativeCoordinates.html b/tests/src/com/vaadin/tests/components/embedded/EmbeddedClickListenerRelativeCoordinates.html
deleted file mode 100644
index 3afb322a22..0000000000
--- a/tests/src/com/vaadin/tests/components/embedded/EmbeddedClickListenerRelativeCoordinates.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>EmbeddedClickListenerRelativeCoordinates</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">EmbeddedClickListenerRelativeCoordinates</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.embedded.EmbeddedClickListenerRelativeCoordinates?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsembeddedEmbeddedClickListenerRelativeCoordinates::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VEmbedded[0]/domChild[0]</td>
-	<td>41,22</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>click-41-22</td>
-</tr>
-<!-- Should really be 41,22 but due to v-view border-top it is not always... <tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsembeddedEmbeddedClickListenerRelativeCoordinates::Root/VNotification[0]/HTML[0]/domChild[0]</td>
-	<td>41, 22</td>
-</tr>-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsembeddedEmbeddedClickListenerRelativeCoordinates::Root/VNotification[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsembeddedEmbeddedClickListenerRelativeCoordinates::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VEmbedded[0]/domChild[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<!-- Should really be 0,0 but due to v-view border-top it is not always... <tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsembeddedEmbeddedClickListenerRelativeCoordinates::Root/VNotification[0]/HTML[0]/domChild[0]</td>
-	<td>0, 0</td>
-</tr>-->
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>click-0-0</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/embedded/EmbeddedClickListenerRelativeCoordinates.java b/tests/src/com/vaadin/tests/components/embedded/EmbeddedClickListenerRelativeCoordinates.java
deleted file mode 100644
index 96b1d36901..0000000000
--- a/tests/src/com/vaadin/tests/components/embedded/EmbeddedClickListenerRelativeCoordinates.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.vaadin.tests.components.embedded;
-
-import com.vaadin.event.MouseEvents.ClickEvent;
-import com.vaadin.event.MouseEvents.ClickListener;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Embedded;
-
-public class EmbeddedClickListenerRelativeCoordinates extends TestBase {
-
-    @Override
-    protected void setup() {
-        Embedded e = new Embedded("Embedded caption", new ThemeResource(
-                "../runo/icons/64/ok.png"));
-        e.addListener(new ClickListener() {
-
-            public void click(ClickEvent event) {
-                getMainWindow()
-                        .showNotification(
-                                "" + event.getRelativeX() + ", "
-                                        + event.getRelativeY());
-            }
-        });
-        addComponent(e);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Click the image to get coordinates relative to the top-left corder of the embedded image.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/embedded/EmbeddedFlash.java b/tests/src/com/vaadin/tests/components/embedded/EmbeddedFlash.java
deleted file mode 100644
index 87e0714545..0000000000
--- a/tests/src/com/vaadin/tests/components/embedded/EmbeddedFlash.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.vaadin.tests.components.embedded;
-
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Embedded;
-
-public class EmbeddedFlash extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The embedded flash should have the movie parameter set to \"someRandomValue\" and an allowFullScreen parameter set to \"true\".";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3367;
-    }
-
-    @Override
-    public void setup() {
-        Embedded player = new Embedded();
-        player.setType(Embedded.TYPE_OBJECT);
-        player.setWidth("400px");
-        player.setHeight("300px");
-        player.setMimeType("application/x-shockwave-flash");
-        String url = "http://www.youtube.com/v/qQ9N742QB4g&autoplay=1";
-        player.setSource(new ExternalResource(url));
-        player.setParameter("movie", "someRandomValue");
-        player.setParameter("allowFullScreen", "true");
-
-        addComponent(player);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/embedded/EmbeddedImageRefresh.java b/tests/src/com/vaadin/tests/components/embedded/EmbeddedImageRefresh.java
deleted file mode 100644
index 1a5327c8b9..0000000000
--- a/tests/src/com/vaadin/tests/components/embedded/EmbeddedImageRefresh.java
+++ /dev/null
@@ -1,148 +0,0 @@
-package com.vaadin.tests.components.embedded;
-
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Date;
-
-import javax.imageio.ImageIO;
-
-import com.vaadin.terminal.StreamResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Embedded;
-
-public class EmbeddedImageRefresh extends TestBase {
-    @Override
-    protected String getDescription() {
-        return "Tests if requestRepaint() makes the browser reload a dynamic resource.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2470;
-    }
-
-    @Override
-    protected void setup() {
-        // Create the embedded.
-        final Embedded embedded = new Embedded();
-        embedded.setDescription("Click on the grid cells to switch them.");
-        addComponent(embedded);
-
-        // Attach it to a resource.
-        final MyImageSource imageSource = new MyImageSource();
-        final StreamResource imageResource = new StreamResource(imageSource,
-                "testimage.png", this);
-        imageResource.setCacheTime(0);
-        embedded.setSource(imageResource);
-
-        // The button requests repainting the embedded.
-        Button button = new Button("refr");
-        button.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                embedded.requestRepaint();
-            }
-        });
-        addComponent(button);
-        button = new Button("refr name");
-        button.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                ((StreamResource) embedded.getSource()).setFilename(new Date()
-                        .getTime() + ".png");
-                embedded.requestRepaint();
-            }
-        });
-        addComponent(button);
-        button = new Button("200x200");
-        button.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                embedded.setWidth("200px");
-                embedded.setHeight("200px");
-            }
-        });
-        addComponent(button);
-        button = new Button("undef");
-        button.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                embedded.setSizeUndefined();
-            }
-        });
-        addComponent(button);
-
-    }
-
-    public class MyImageSource implements StreamResource.StreamSource {
-        public MyImageSource() {
-        }
-
-        int intervalPos(int pos, int resolution, int cells) {
-            return (int) Math.round(pos * resolution / (cells * 1.0));
-        }
-
-        public InputStream getStream() {
-            // Create an image and draw some background on it.
-            BufferedImage image = new BufferedImage(640, 480,
-                    BufferedImage.TYPE_INT_RGB);
-            Graphics drawable = image.getGraphics();
-
-            // Background
-            drawable.setColor(Color.white);
-            drawable.fillRect(0, 0, 640, 480);
-
-            final int rows = 10;
-            final int cols = 10;
-
-            // Grid
-            for (int row = 0; row < rows; row++) {
-                int gridy = intervalPos(row, 480, rows);
-                int gridynext = intervalPos(row + 1, 480, rows);
-
-                // Horizontal grid line
-                if (row > 0) {
-                    drawable.setColor(Color.lightGray);
-                    drawable.drawLine(0, gridy, 640 - 1, gridy);
-                }
-
-                for (int col = 0; col < cols; col++) {
-                    int gridx = intervalPos(col, 640, cols);
-                    int gridxnext = intervalPos(col + 1, 640, cols);
-
-                    // Vertical grid line
-                    if (row == 0 && col > 0) {
-                        drawable.setColor(Color.lightGray);
-                        drawable.drawLine(gridx, 0, gridx, 480 - 1);
-                    }
-
-                    // Cell
-                    if (Math.random() < 0.5f) {
-                        drawable.setColor(Color.white);
-                    } else {
-                        drawable.setColor(Color.black);
-                    }
-                    drawable.fillRect(gridx + 1, gridy + 1, gridxnext - gridx
-                            - 1, gridynext - gridy - 1);
-                }
-            }
-
-            try {
-                // Write the image to a buffer.
-                ByteArrayOutputStream imagebuffer = new ByteArrayOutputStream();
-                ImageIO.write(image, "png", imagebuffer);
-
-                // Return a stream from the buffer.
-                ByteArrayInputStream istream = new ByteArrayInputStream(
-                        imagebuffer.toByteArray());
-                return istream; // new DownloadStream (istream,null,null);
-            } catch (IOException e) {
-                return null;
-            }
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/embedded/EmbeddedPdf.java b/tests/src/com/vaadin/tests/components/embedded/EmbeddedPdf.java
deleted file mode 100644
index bea25a2122..0000000000
--- a/tests/src/com/vaadin/tests/components/embedded/EmbeddedPdf.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.vaadin.tests.components.embedded;
-
-import com.vaadin.terminal.ClassResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.Window;
-
-public class EmbeddedPdf extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The embedded flash should have the movie parameter set to \"someRandomValue\" and an allowFullScreen parameter set to \"true\".";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3367;
-    }
-
-    @Override
-    public void setup() {
-        Embedded player = new Embedded();
-        player.setType(Embedded.TYPE_BROWSER);
-        player.setWidth("400px");
-        player.setHeight("300px");
-        player.setSource(new ClassResource(getClass(), "test.pdf", this));
-        addComponent(player);
-
-        player.getWindow().addWindow(new Window("Testwindow"));
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/embedded/EmbeddedTooltip.java b/tests/src/com/vaadin/tests/components/embedded/EmbeddedTooltip.java
deleted file mode 100644
index 2ac39c05a0..0000000000
--- a/tests/src/com/vaadin/tests/components/embedded/EmbeddedTooltip.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.vaadin.tests.components.embedded;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Embedded;
-
-public class EmbeddedTooltip extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The tooltip for an Embedded image should be visible also when hovering the image";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2853;
-    }
-
-    @Override
-    protected void setup() {
-        Embedded e = new Embedded("Embedded caption", new ThemeResource(
-                "../runo/icons/64/ok.png"));
-        e.setDescription("Embedded tooltip, only shown on caption, not on the image");
-        addComponent(e);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/embedded/FlashIsVisible.html b/tests/src/com/vaadin/tests/components/embedded/FlashIsVisible.html
deleted file mode 100644
index d3debf3417..0000000000
--- a/tests/src/com/vaadin/tests/components/embedded/FlashIsVisible.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.embedded.FlashIsVisible</td>
-	<td></td>
-</tr>
-<!--Allow the flash plugin to load before taking the screenshot-->
-<tr>
-	<td>pause</td>
-	<td>5000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/embedded/FlashIsVisible.java b/tests/src/com/vaadin/tests/components/embedded/FlashIsVisible.java
deleted file mode 100644
index 5d626cfc0b..0000000000
--- a/tests/src/com/vaadin/tests/components/embedded/FlashIsVisible.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.vaadin.tests.components.embedded;
-
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Embedded;
-
-public class FlashIsVisible extends TestBase {
-
-    @Override
-    protected void setup() {
-        Embedded player = new Embedded();
-        player.setType(Embedded.TYPE_OBJECT);
-        player.setMimeType("application/x-shockwave-flash");
-        player.setWidth("400px");
-        player.setHeight("300px");
-        String url = "http://www.youtube.com/v/qQ9N742QB4g&autoplay=0";
-        player.setSource(new ExternalResource(url));
-        addComponent(player);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Flash plugin should load and be visible on all browsers";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6501;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/embedded/test.pdf b/tests/src/com/vaadin/tests/components/embedded/test.pdf
deleted file mode 100644
index e44a87e9ad..0000000000
Binary files a/tests/src/com/vaadin/tests/components/embedded/test.pdf and /dev/null differ
diff --git a/tests/src/com/vaadin/tests/components/form/FormCaptionClickFocusing.html b/tests/src/com/vaadin/tests/components/form/FormCaptionClickFocusing.html
deleted file mode 100644
index ab0aa25c44..0000000000
--- a/tests/src/com/vaadin/tests/components/form/FormCaptionClickFocusing.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://192.168.2.78:8080/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.form.FormCaptionClickFocusing</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormCaptionClickFocusing::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFormLayout[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>15,7</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormCaptionClickFocusing::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
-	<td>some text</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormCaptionClickFocusing::/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
-	<td>161,159</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>TextAddedByClickingCaption</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/form/FormCaptionClickFocusing.java b/tests/src/com/vaadin/tests/components/form/FormCaptionClickFocusing.java
deleted file mode 100644
index 4afe289825..0000000000
--- a/tests/src/com/vaadin/tests/components/form/FormCaptionClickFocusing.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.vaadin.tests.components.form;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.FormLayout;
-import com.vaadin.ui.TextField;
-
-public class FormCaptionClickFocusing extends TestBase {
-
-    @Override
-    protected void setup() {
-        FormLayout layout = new FormLayout();
-
-        TextField field = new TextField("Field 1");
-        layout.addComponent(field);
-
-        addComponent(layout);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Formlayout should focus the field if the layout is clicked and the field is focusable.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4567;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/form/FormClearDatasourceRepaint.html b/tests/src/com/vaadin/tests/components/form/FormClearDatasourceRepaint.html
deleted file mode 100644
index 200ddb547d..0000000000
--- a/tests/src/com/vaadin/tests/components/form/FormClearDatasourceRepaint.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.form.FormClearDatasourceRepaint?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormClearDatasourceRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>Form0height</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormClearDatasourceRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>FormAutoHeight</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormClearDatasourceRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>Form0height</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormClearDatasourceRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>FormAutoHeight</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/form/FormClearDatasourceRepaint.java b/tests/src/com/vaadin/tests/components/form/FormClearDatasourceRepaint.java
deleted file mode 100644
index 39305d5638..0000000000
--- a/tests/src/com/vaadin/tests/components/form/FormClearDatasourceRepaint.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.vaadin.tests.components.form;
-
-import com.vaadin.data.util.BeanItem;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Form;
-
-public class FormClearDatasourceRepaint extends TestBase {
-
-    public static class MyBean {
-
-        private String value;
-
-        public String getValue() {
-            return value;
-        }
-
-        public void setValue(String value) {
-            this.value = value;
-        }
-    }
-
-    public static class MySecondBean extends MyBean {
-
-        private String value2;
-
-        public String getValue2() {
-            return value2;
-        }
-
-        public void setValue2(String value) {
-            this.value2 = value;
-        }
-    }
-
-    @Override
-    protected void setup() {
-
-
-        final Form form = new Form();
-        form.setItemDataSource(new BeanItem<MySecondBean>(new MySecondBean()));
-        addComponent(form);
-
-        addComponent(new Button("Clear datasource", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                form.setItemDataSource(null);
-            }
-        }));
-
-        addComponent(new Button("Change data source",
-                new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                        form.setItemDataSource(new BeanItem<MyBean>(
-                                new MyBean()));
-            }
-                }));
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The form should adjust its size when clearing and setting data sources";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 7626;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/form/FormCommitWithInvalidValues.html b/tests/src/com/vaadin/tests/components/form/FormCommitWithInvalidValues.html
deleted file mode 100644
index 0d5b435609..0000000000
--- a/tests/src/com/vaadin/tests/components/form/FormCommitWithInvalidValues.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>FormCommitWithInvalidValues</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">FormCommitWithInvalidValues</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.form.FormCommitWithInvalidValues</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>focus</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
-	<td>1</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
-	<td>123</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/form/FormCommitWithInvalidValues.java b/tests/src/com/vaadin/tests/components/form/FormCommitWithInvalidValues.java
deleted file mode 100644
index 0a3054b0e4..0000000000
--- a/tests/src/com/vaadin/tests/components/form/FormCommitWithInvalidValues.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.vaadin.tests.components.form;
-
-import com.vaadin.data.validator.StringLengthValidator;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window.Notification;
-
-public class FormCommitWithInvalidValues extends TestBase {
-
-    private Form form;
-
-    @Override
-    protected String getDescription() {
-        return "Commiting a form with invalid values should throw an exception";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2466;
-    }
-
-    @Override
-    protected void setup() {
-        form = new Form();
-        TextField tf = new TextField("A field, must contain 1-2 chars");
-        tf.addValidator(new StringLengthValidator("Invalid length", 1, 2, false));
-        tf.setRequired(true);
-
-        form.addField("a", tf);
-
-        Button b = new Button("Commit", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                try {
-                    form.commit();
-                    if (form.isValid()) {
-                        getMainWindow().showNotification(
-                                "OK! Form validated and no error was thrown",
-                                Notification.TYPE_HUMANIZED_MESSAGE);
-                    } else {
-                        getMainWindow().showNotification(
-                                "Form is invalid but no exception was thrown",
-                                Notification.TYPE_ERROR_MESSAGE);
-                    }
-                } catch (Exception e) {
-                    if (form.isValid()) {
-                        getMainWindow().showNotification(
-                                "Form is valid but an exception was thrown",
-                                Notification.TYPE_ERROR_MESSAGE);
-                    } else {
-                        getMainWindow().showNotification(
-                                "OK! Error was thrown for an invalid input",
-                                Notification.TYPE_HUMANIZED_MESSAGE);
-
-                    }
-                }
-            }
-
-        });
-
-        addComponent(form);
-        addComponent(b);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/form/FormDescription.html b/tests/src/com/vaadin/tests/components/form/FormDescription.html
deleted file mode 100644
index a8de9b3ad2..0000000000
--- a/tests/src/com/vaadin/tests/components/form/FormDescription.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8080/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.form.FormDescription?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormDescription::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/domChild[0]/domChild[0]</td>
-	<td>v-form-description</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormDescription::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertNotCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormDescription::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/domChild[0]/domChild[0]</td>
-	<td>v-form-description</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormDescription::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormDescription::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/domChild[0]/domChild[0]</td>
-	<td>v-form-description</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/form/FormDescription.java b/tests/src/com/vaadin/tests/components/form/FormDescription.java
deleted file mode 100644
index d05d179ac8..0000000000
--- a/tests/src/com/vaadin/tests/components/form/FormDescription.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.components.form;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.TextField;
-
-public class FormDescription extends TestBase {
-
-    @Override
-    protected void setup() {
-       final Form form = new Form();
-       form.setDescription("Some description");
-        form.addField("AAAA", new TextField());
-       addComponent(form);
-       
-        addComponent(new Button("Toggle description",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        if (form.getDescription() == null) {
-                            form.setDescription("Form description");
-                        } else {
-                            form.setDescription(null);
-                        }
-                    }
-                }));
-       
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Description element should be removed from DOM when not used";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3725;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/form/FormFieldCaptions.java b/tests/src/com/vaadin/tests/components/form/FormFieldCaptions.java
deleted file mode 100644
index b4dee985f4..0000000000
--- a/tests/src/com/vaadin/tests/components/form/FormFieldCaptions.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package com.vaadin.tests.components.form;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.BeanItem;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.HorizontalLayout;
-
-public class FormFieldCaptions extends TestBase {
-
-    @Override
-    protected void setup() {
-        // Method 1
-        Form form1 = new Form();
-        Item item1 = createItem();
-        for (Object propertyId : item1.getItemPropertyIds()) {
-            form1.addItemProperty(propertyId, item1.getItemProperty(propertyId));
-        }
-
-        // Method 2
-
-        Form form2 = new Form();
-        Item item2 = createItem();
-        form2.setItemDataSource(item2);
-
-        // Layout
-        HorizontalLayout hl = new HorizontalLayout();
-        hl.addComponent(form1);
-        hl.addComponent(form2);
-
-        addComponent(hl);
-    }
-
-    private Item createItem() {
-        return new BeanItem<Person>(new Person("John", "Doe", 38));
-    }
-
-    public class Person {
-        private String firstName;
-        private String lastName;
-
-        public Person(String firstName, String lastName, int age) {
-            super();
-            this.firstName = firstName;
-            this.lastName = lastName;
-            this.age = age;
-        }
-
-        public String getFirstName() {
-            return firstName;
-        }
-
-        public void setFirstName(String firstName) {
-            this.firstName = firstName;
-        }
-
-        public String getLastName() {
-            return lastName;
-        }
-
-        public void setLastName(String lastName) {
-            this.lastName = lastName;
-        }
-
-        public int getAge() {
-            return age;
-        }
-
-        public void setAge(int age) {
-            this.age = age;
-        }
-
-        private int age;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The two forms generated using different methods should have the same captions for all fields";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3554;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/form/FormFieldCaptionsStyles.html b/tests/src/com/vaadin/tests/components/form/FormFieldCaptionsStyles.html
deleted file mode 100644
index 10ebb37529..0000000000
--- a/tests/src/com/vaadin/tests/components/form/FormFieldCaptionsStyles.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.form.FormFieldCaptionsStyles</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>FirstFieldRedRestBlue</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/form/FormFieldCaptionsStyles.java b/tests/src/com/vaadin/tests/components/form/FormFieldCaptionsStyles.java
deleted file mode 100644
index 863d4b5b80..0000000000
--- a/tests/src/com/vaadin/tests/components/form/FormFieldCaptionsStyles.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.vaadin.tests.components.form;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.FormLayout;
-import com.vaadin.ui.TextField;
-
-public class FormFieldCaptionsStyles extends TestBase {
-
-    @Override
-    protected void setup() {
-
-        setTheme("tests-tickets");
-
-        FormLayout layout = new FormLayout();
-
-        TextField field1 = new TextField("Red style");
-        field1.setStyleName("ticket4997-red");
-        layout.addComponent(field1);
-
-        TextField field2 = new TextField("Blue style");
-        field2.setStyleName("ticket4997-blue");
-        layout.addComponent(field2);
-
-        TextField field3 = new TextField("Red-Blue style");
-        field3.addStyleName("ticket4997-red");
-        field3.addStyleName("ticket4997-blue");
-        layout.addComponent(field3);
-
-        TextField field4 = new TextField("Disabled");
-        field4.setEnabled(false);
-        field4.addStyleName("foobar"); // no visible change, but points out
-        // a regression #5377
-        layout.addComponent(field4);
-
-        addComponent(layout);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The field captions should have the same style names as the field";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4997;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/form/FormNotGettingSmaller.java b/tests/src/com/vaadin/tests/components/form/FormNotGettingSmaller.java
deleted file mode 100644
index a47ab944a2..0000000000
--- a/tests/src/com/vaadin/tests/components/form/FormNotGettingSmaller.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vaadin.tests.components.form;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.data.util.PropertysetItem;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-
-public class FormNotGettingSmaller extends TestBase {
-
-    @Override
-    protected void setup() {
-        Item item = new PropertysetItem();
-        item.addItemProperty("name", new ObjectProperty<String>(
-                "Charles Anthony"));
-        item.addItemProperty("city", new ObjectProperty<String>("London"));
-        item.addItemProperty("isTallPerson", new ObjectProperty<Boolean>(
-                Boolean.FALSE));
-
-        Label spacer = new Label();
-        HorizontalLayout buttons = new HorizontalLayout();
-        buttons.setSpacing(true);
-        buttons.setWidth("100%");
-        buttons.addComponent(spacer);
-        buttons.addComponent(new Button("OK"));
-        buttons.addComponent(new Button("Cancel"));
-        buttons.setExpandRatio(spacer, 1f);
-
-        Form form = new Form();
-        form.setDescription("Ooh. Just a demonstration of things, really. Some long lorem ipsum dolor sit amet.Some very long lorem ipsum dolor sit amet.Some very long lorem ipsum dolor sit amet.Some very long lorem ipsum dolor sit amet.");
-
-        form.setItemDataSource(item);
-        form.setFooter(buttons);
-
-        getLayout().addComponent(form);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "When resizing window buttons should stay on "
-                + "right edge of the screent. Form should also get narrower.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3365;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/form/FormRenderingFlicker.java b/tests/src/com/vaadin/tests/components/form/FormRenderingFlicker.java
deleted file mode 100644
index 5858366a63..0000000000
--- a/tests/src/com/vaadin/tests/components/form/FormRenderingFlicker.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.vaadin.tests.components.form;
-
-import com.vaadin.data.Item;
-import com.vaadin.event.ItemClickEvent;
-import com.vaadin.event.ItemClickEvent.ItemClickListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-
-public class FormRenderingFlicker extends TestBase {
-
-    private VerticalLayout tableLayout;
-    private Table table;
-    private Panel tablePanel;
-    private Form form;
-
-    @Override
-    protected String getDescription() {
-        return "Clicking on an item in the table will replace the panel (surrounding the table) with a form. This should not cause the table rows to move downwards or cause any other visible flicker";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2816;
-    }
-
-    @Override
-    protected void setup() {
-        createTableLayout();
-        form = new Form();
-
-        tablePanel = new Panel();
-        tablePanel.setContent(tableLayout);
-
-        addComponent(tablePanel);
-    }
-
-    private void createTableLayout() {
-        tableLayout = new VerticalLayout();
-        table = new Table();
-        table.addContainerProperty("name", String.class, "");
-        table.addContainerProperty("age", String.class, "");
-        for (int i = 0; i < 100; i++) {
-            table.addItem(new Object[] { "Name " + i, String.valueOf(i) },
-                    new Object());
-        }
-        table.setImmediate(true);
-        table.addListener(new ItemClickListener() {
-
-            public void itemClick(ItemClickEvent event) {
-                clicked(event.getItem());
-            }
-
-        });
-
-        tableLayout.addComponent(table);
-    }
-
-    protected void clicked(Item item) {
-        getLayout().replaceComponent(tablePanel, form);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/form/FormWithEnterShortCut.java b/tests/src/com/vaadin/tests/components/form/FormWithEnterShortCut.java
deleted file mode 100644
index 624d0746e9..0000000000
--- a/tests/src/com/vaadin/tests/components/form/FormWithEnterShortCut.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.vaadin.tests.components.form;
-
-import com.vaadin.event.ShortcutAction.KeyCode;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.TextField;
-
-public class FormWithEnterShortCut extends TestBase {
-    private Log log = new Log(2);
-
-    @Override
-    protected void setup() {
-
-        final Form form = new Form();
-        final Field tf = new TextField("Search");
-        form.addField("searchfield", tf);
-
-        Button button = new Button("Go");
-        button.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                log.log("search: " + tf.getValue());
-            }
-        });
-        button.setClickShortcut(KeyCode.ENTER);
-        button.setStyleName("primary");
-
-        form.getFooter().addComponent(button);
-
-        addComponent(log);
-        addComponent(form);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Focusing a button and pressing enter (which is a shortcut for button click) should only produce one click event";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5433;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/form/FormWithEnterShortcut.html b/tests/src/com/vaadin/tests/components/form/FormWithEnterShortcut.html
deleted file mode 100644
index 16c5b1cee4..0000000000
--- a/tests/src/com/vaadin/tests/components/form/FormWithEnterShortcut.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.form.FormWithEnterShortCut?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormWithEnterShortCut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
-	<td>70,4</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormWithEnterShortCut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
-	<td>abc</td>
-</tr>
-<tr>
-	<td>focus</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormWithEnterShortCut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VForm[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td>tab</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormWithEnterShortCut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VForm[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsformFormWithEnterShortCut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>1. search: abc</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/form/FormWithRelativelySizedLayout.java b/tests/src/com/vaadin/tests/components/form/FormWithRelativelySizedLayout.java
deleted file mode 100644
index 17fe4477c3..0000000000
--- a/tests/src/com/vaadin/tests/components/form/FormWithRelativelySizedLayout.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vaadin.tests.components.form;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.Label;
-
-public class FormWithRelativelySizedLayout extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Forms mainlayouts relative height should be everyting left out from footer and possible borders/paddings. ";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3488;
-    }
-
-    @Override
-    protected void setup() {
-
-        Form f = new Form();
-        f.setCaption("Form, full size");
-
-        f.setWidth("100%");
-        f.setHeight("100%");
-
-        Label l = new Label(
-                "This green label should consume all available space, pushing ok button to bottom of the view");
-        l.setSizeFull();
-
-        CssLayout lo = new CssLayout() {
-            @Override
-            protected String getCss(Component c) {
-                return "background: green;color:red;";
-            }
-        };
-        lo.setSizeFull();
-
-        f.setLayout(lo);
-        lo.addComponent(l);
-
-        f.getFooter().addComponent(new Button("OK button"));
-
-        getLayout().setSizeFull();
-        getLayout().addComponent(f);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/form/UndefinedWideFormWithRelativeWideFooter.html b/tests/src/com/vaadin/tests/components/form/UndefinedWideFormWithRelativeWideFooter.html
deleted file mode 100644
index ade84de312..0000000000
--- a/tests/src/com/vaadin/tests/components/form/UndefinedWideFormWithRelativeWideFooter.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>UndefinedWideFormWithRelativeWideFooter</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">UndefinedWideFormWithRelativeWideFooter</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.form.UndefinedWideFormWithRelativeWideFooter</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/form/UndefinedWideFormWithRelativeWideFooter.java b/tests/src/com/vaadin/tests/components/form/UndefinedWideFormWithRelativeWideFooter.java
deleted file mode 100644
index cb616d4548..0000000000
--- a/tests/src/com/vaadin/tests/components/form/UndefinedWideFormWithRelativeWideFooter.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.vaadin.tests.components.form;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-@SuppressWarnings("serial")
-public class UndefinedWideFormWithRelativeWideFooter extends Application {
-
-    @Override
-    public void init() {
-
-        Window w = new Window("Test");
-        setMainWindow(w);
-
-        final Form f = new Form();
-        w.addComponent(f);
-        f.setSizeUndefined();
-        f.getLayout().setSizeUndefined();
-
-        f.setCaption("Test form with a really long caption");
-        f.addField("foo", new TextField("Foo"));
-        f.addField("bar", new TextField("A bit longer field caption"));
-
-        HorizontalLayout hl = new HorizontalLayout();
-        hl.setWidth("100%");
-        Button b = new Button("right aligned");
-        hl.addComponent(b);
-        hl.setComponentAlignment(b, Alignment.TOP_RIGHT);
-        f.setFooter(hl);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/formlayout/FormLayoutReplaceComponent.html b/tests/src/com/vaadin/tests/components/formlayout/FormLayoutReplaceComponent.html
deleted file mode 100644
index ecac497a1b..0000000000
--- a/tests/src/com/vaadin/tests/components/formlayout/FormLayoutReplaceComponent.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.formlayout.FormLayoutReplaceComponent?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsformlayoutFormLayoutReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VCheckBox[0]/domChild[0]</td>
-	<td>6,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>textarea-visible</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsformlayoutFormLayoutReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VCheckBox[0]/domChild[0]</td>
-	<td>5,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>textarea-hidden</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/formlayout/FormLayoutReplaceComponent.java b/tests/src/com/vaadin/tests/components/formlayout/FormLayoutReplaceComponent.java
deleted file mode 100644
index e42d64201e..0000000000
--- a/tests/src/com/vaadin/tests/components/formlayout/FormLayoutReplaceComponent.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.vaadin.tests.components.formlayout;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.FormLayout;
-import com.vaadin.ui.TextField;
-
-public class FormLayoutReplaceComponent extends TestBase {
-
-    @Override
-    protected void setup() {
-        addComponent(new FL());
-
-    }
-
-    public class FL extends FormLayout implements ClickListener {
-
-        private TextField messages;
-        private CheckBox control;
-
-        @SuppressWarnings("deprecation")
-        public FL() {
-            setCaption("Test");
-            control = new CheckBox("Messages On/Off");
-            control.addListener(this);
-            control.setImmediate(true);
-            addComponent(control);
-
-            // The bug is in replaceComponent, triggered when VTextField is
-            // replaced by VTextArea so cannot replace this with TextArea.
-            messages = new TextField("Messages");
-            messages.setRows(10);
-            messages.setColumns(40);
-            messages.setVisible(false);
-            messages.setEnabled(false);
-            addComponent(messages);
-        }
-
-        public final void buttonClick(Button.ClickEvent e) {
-            if (e.getButton() == control) {
-                messages.setVisible(control.booleanValue());
-            }
-        }
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Check or uncheck the CheckBox to show/hide the messages field inside the FormLayout.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6308;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.html b/tests/src/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.html
deleted file mode 100644
index 8795ad12dc..0000000000
--- a/tests/src/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.formlayout.TableInFormLayoutCausesScrolling?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsformlayoutTableInFormLayoutCausesScrolling::/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
-	<td>12,13</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>should-be-scrolled-up</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.java b/tests/src/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.java
deleted file mode 100644
index 157772f8cd..0000000000
--- a/tests/src/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.vaadin.tests.components.formlayout;
-
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.FormLayout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class TableInFormLayoutCausesScrolling extends AbstractTestCase {
-
-    @Override
-    public void init() {
-        // Window Initialization.
-        final Window window = new Window("Main Window");
-        setMainWindow(window);
-
-        // FormLayout creation
-        final FormLayout fl = new FormLayout();
-        window.setContent(fl);
-
-        // Add 20 TextField
-        for (int i = 20; i-- > 0;) {
-            fl.addComponent(new TextField());
-        }
-
-        // Add 1 selectable table with some items
-        final Table table = new Table();
-        table.setSelectable(true);
-        table.addContainerProperty("item", String.class, "");
-        for (int i = 50; i-- > 0;) {
-            table.addItem(new String[] { "item" + i }, i);
-        }
-        window.addComponent(table);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Clicking in the Table should not cause the page to scroll";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 7309;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/gridlayout/MoveComponentFromGridLayoutToInnerLayout.html b/tests/src/com/vaadin/tests/components/gridlayout/MoveComponentFromGridLayoutToInnerLayout.html
deleted file mode 100644
index 528e3fb379..0000000000
--- a/tests/src/com/vaadin/tests/components/gridlayout/MoveComponentFromGridLayoutToInnerLayout.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.gridlayout.MoveComponentsFromGridLayoutToInnerLayout?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsgridlayoutMoveComponentsFromGridLayoutToInnerLayout::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsgridlayoutMoveComponentsFromGridLayoutToInnerLayout::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>buttons-with-captions</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/gridlayout/MoveComponentsFromGridLayoutToInnerLayout.java b/tests/src/com/vaadin/tests/components/gridlayout/MoveComponentsFromGridLayoutToInnerLayout.java
deleted file mode 100644
index 08a37dcd9a..0000000000
--- a/tests/src/com/vaadin/tests/components/gridlayout/MoveComponentsFromGridLayoutToInnerLayout.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.vaadin.tests.components.gridlayout;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.VerticalLayout;
-
-public class MoveComponentsFromGridLayoutToInnerLayout extends TestBase {
-
-    protected Button testButton;
-    private GridLayout gl;
-    protected ComponentContainer vl;
-
-    @Override
-    protected void setup() {
-        gl = new GridLayout();
-        gl.setWidth("200px");
-        gl.setHeight("200px");
-
-        testButton = new Button("Click to move to inner layout",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        vl.addComponent(testButton);
-                    }
-                });
-
-        gl.addComponent(testButton);
-
-        vl = new VerticalLayout();
-        gl.addComponent(vl);
-
-        addComponent(gl);
-
-        Button b = new Button("Repaint inner layout",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        vl.requestRepaint();
-                    }
-                });
-
-        addComponent(b);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Click the first button to move it from an outer layout to an inner. Then click the second button to repaint the inner layout.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6060;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/label/HundredPercentWideLabelResize.html b/tests/src/com/vaadin/tests/components/label/HundredPercentWideLabelResize.html
deleted file mode 100644
index 667f08ba4f..0000000000
--- a/tests/src/com/vaadin/tests/components/label/HundredPercentWideLabelResize.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>HundredPercentWideLabelResize</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">HundredPercentWideLabelResize</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.label.HundredPercentWideLabelResize</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>1</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentslabelHundredPercentWideLabelResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>2</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentslabelHundredPercentWideLabelResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>1</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/label/HundredPercentWideLabelResize.java b/tests/src/com/vaadin/tests/components/label/HundredPercentWideLabelResize.java
deleted file mode 100644
index 1d2fb2a59c..0000000000
--- a/tests/src/com/vaadin/tests/components/label/HundredPercentWideLabelResize.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.components.label;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-
-public class HundredPercentWideLabelResize extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "100% wide label re-wrap should cause re-layout; forceLayout fixes this.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2514;
-    }
-
-    @Override
-    protected void setup() {
-        getLayout().setWidth("500px");
-        Label text = new Label(
-                "This is a fairly long text that will wrap if the width of the layout is narrow enough. Directly below the text is a Button - however, when the layout changes size, the Label re-wraps w/o moving the button, causing eiter clipping or a big space.");
-        text.setWidth("100%");
-        getLayout().addComponent(text);
-
-        getLayout().addComponent(
-                new Button("toggle width", new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        if (getLayout().getWidth() == 500) {
-                            getLayout().setWidth("100px");
-                        } else {
-                            getLayout().setWidth("500px");
-                        }
-
-                    }
-
-                }));
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/label/LabelModes.html b/tests/src/com/vaadin/tests/components/label/LabelModes.html
deleted file mode 100644
index 356688b456..0000000000
--- a/tests/src/com/vaadin/tests/components/label/LabelModes.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.label.LabelModes?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>labelmodes</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/label/LabelModes.java b/tests/src/com/vaadin/tests/components/label/LabelModes.java
deleted file mode 100644
index 4b58794a87..0000000000
--- a/tests/src/com/vaadin/tests/components/label/LabelModes.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.vaadin.tests.components.label;
-
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.ui.Label;
-
-public class LabelModes extends ComponentTestCase<Label> {
-
-    @Override
-    protected Class<Label> getTestClass() {
-        return Label.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-
-        Label l;
-        l = createLabel("This is an undefined wide label with default content mode");
-        l.setWidth(null);
-        addTestComponent(l);
-
-        l = createLabel("This label                       contains\nnewlines and spaces\nbut is in\ndefault content mode");
-        l.setWidth(null);
-        addTestComponent(l);
-
-        l = createLabel("This label                       contains\nnewlines and spaces\nand is in\npreformatted mode");
-        l.setContentMode(Label.CONTENT_PREFORMATTED);
-        l.setWidth(null);
-        addTestComponent(l);
-
-        l = createLabel("This label                       contains\nnewlines and spaces\nand is in\nhtml mode");
-        l.setContentMode(Label.CONTENT_XHTML);
-        l.setWidth(null);
-        addTestComponent(l);
-
-        l = createLabel("This label                       contains\nnewlines and spaces\nand is in\nraw mode");
-        l.setContentMode(Label.CONTENT_RAW);
-        l.setWidth(null);
-        addTestComponent(l);
-
-    }
-
-    private Label createLabel(String text, String caption) {
-        Label l = new Label(text);
-        l.setCaption(caption);
-
-        return l;
-    }
-
-    private Label createLabel(String text) {
-        return createLabel(text, null);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A generic test for Labels in different configurations";
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/label/LabelTest.java b/tests/src/com/vaadin/tests/components/label/LabelTest.java
deleted file mode 100644
index 38ced67f18..0000000000
--- a/tests/src/com/vaadin/tests/components/label/LabelTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package com.vaadin.tests.components.label;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.tests.components.AbstractComponentTest;
-import com.vaadin.ui.Label;
-
-public class LabelTest extends AbstractComponentTest<Label> implements
-        ValueChangeListener {
-
-    private Command<Label, Object> setValueCommand = new Command<Label, Object>() {
-
-        public void execute(Label c, Object value, Object data) {
-            c.setValue(value);
-        }
-    };
-
-    private Command<Label, Boolean> valueChangeListenerCommand = new Command<Label, Boolean>() {
-        public void execute(Label c, Boolean value, Object data) {
-            if (value) {
-                c.addListener(LabelTest.this);
-            } else {
-                c.removeListener(LabelTest.this);
-
-            }
-        }
-    };
-
-    private Command<Label, Integer> contentModeCommand = new Command<Label, Integer>() {
-        public void execute(Label c, Integer value, Object data) {
-            c.setContentMode(value);
-        }
-    };
-
-    @Override
-    protected Class<Label> getTestClass() {
-        return Label.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-
-        createContentModeSelect(CATEGORY_FEATURES);
-        createValueSelect(CATEGORY_FEATURES);
-        createValueChangeListener(CATEGORY_LISTENERS);
-    }
-
-    private void createValueSelect(String category) {
-        String subCategory = "Set text value";
-        createCategory(subCategory, category);
-        List<String> values = new ArrayList<String>();
-        values.add("Test");
-        values.add("A little longer value");
-        values.add("A very long value with very much text. All in all it is 74 characters long");
-        values.add("<b>Bold</b>");
-        values.add("<div style=\"height: 70px; width: 15px; border: 1px dashed red\">With border</div>");
-
-        createClickAction("(empty string)", subCategory, setValueCommand, "");
-        createClickAction("(null)", subCategory, setValueCommand, null);
-        for (String value : values) {
-            createClickAction(value, subCategory, setValueCommand, value);
-        }
-    }
-
-    @SuppressWarnings("deprecation")
-    private void createContentModeSelect(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("Text", Label.CONTENT_TEXT);
-        options.put("Preformatted", Label.CONTENT_PREFORMATTED);
-        options.put("Raw", Label.CONTENT_RAW);
-        options.put("UIDL", Label.CONTENT_UIDL);
-        options.put("XHTML", Label.CONTENT_XHTML);
-        options.put("XML", Label.CONTENT_XML);
-
-        createSelectAction("Content mode", category, options, "Text",
-                contentModeCommand);
-    }
-
-    private void createValueChangeListener(String category) {
-        createBooleanAction("Value change listener", category, false,
-                valueChangeListenerCommand);
-    }
-
-    public void valueChange(com.vaadin.data.Property.ValueChangeEvent event) {
-        Object o = event.getProperty().getValue();
-
-        // Distinguish between null and 'null'
-        String value = "null";
-        if (o != null) {
-            value = "'" + o.toString() + "'";
-        }
-
-        log(event.getClass().getSimpleName() + ", new value: " + value);
-    };
-
-}
diff --git a/tests/src/com/vaadin/tests/components/label/LabelTooltip.html b/tests/src/com/vaadin/tests/components/label/LabelTooltip.html
deleted file mode 100644
index 0fbd3353c9..0000000000
--- a/tests/src/com/vaadin/tests/components/label/LabelTooltip.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.label.LabelTooltip?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>noerror-error</td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentslabelLabelTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip-upper</td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentslabelLabelTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VLabel[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip-lower</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/label/LabelTooltip.java b/tests/src/com/vaadin/tests/components/label/LabelTooltip.java
deleted file mode 100644
index aa1b357cad..0000000000
--- a/tests/src/com/vaadin/tests/components/label/LabelTooltip.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.vaadin.tests.components.label;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.terminal.UserError;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-
-public class LabelTooltip extends TestBase {
-
-    @Override
-    protected void setup() {
-        addComponent(createLayout());
-    }
-
-    private static Layout createLayout() {
-        GridLayout layout = new GridLayout(2, 1);
-        layout.setCaption("Tooltips");
-        layout.setIcon(new ThemeResource("icons/blue/16/home.png"));
-        layout.setMargin(true);
-        layout.setSpacing(true);
-        layout.setWidth("400px");
-        layout.setColumnExpandRatio(0, 1);
-
-        layout.addComponent(new Label("Default"));
-        Label tooltip = new Label("Hover over me to see the tooltip");
-        tooltip.setSizeUndefined();
-        tooltip.setDescription("Default tooltip content");
-        layout.addComponent(tooltip);
-
-        layout.addComponent(new Label("Default /w error"));
-        tooltip = new Label("Hover over me to see the tooltip");
-        tooltip.setSizeUndefined();
-        tooltip.setDescription("Default tooltip content");
-        tooltip.setComponentError(new UserError(
-                "Error inside tooltip together with the regular tooltip message."));
-        layout.addComponent(tooltip);
-
-        return layout;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The lower label should have an error indicator. The upper should not.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6911;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/label/LabelWrapping.html b/tests/src/com/vaadin/tests/components/label/LabelWrapping.html
deleted file mode 100644
index b8038a75b4..0000000000
--- a/tests/src/com/vaadin/tests/components/label/LabelWrapping.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>LabelWrapping</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">LabelWrapping</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.label.LabelWrapping</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>1</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentslabelLabelWrapping::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>2</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentslabelLabelWrapping::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>1</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/label/LabelWrapping.java b/tests/src/com/vaadin/tests/components/label/LabelWrapping.java
deleted file mode 100644
index a06d0b1351..0000000000
--- a/tests/src/com/vaadin/tests/components/label/LabelWrapping.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.vaadin.tests.components.label;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-
-public class LabelWrapping extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "A label inside a limited HorizontalLayout should strive to be as wide as possible and only wrap when the size of the layout is reached. The label should look the same if it is rendered initially with the layout or updated later on.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2478;
-    }
-
-    @Override
-    protected void setup() {
-        HorizontalLayout hl = new HorizontalLayout();
-        hl.setWidth("250px");
-
-        final String longString = "this is a somewhat long string.";
-        final Label longLabel = new Label(longString);
-
-        Button changeLength = new Button("Change length");
-        changeLength.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                if (longLabel.getValue().equals(longString)) {
-                    longLabel.setValue("");
-                } else {
-                    longLabel.setValue(longString);
-                }
-            }
-        });
-
-        hl.addComponent(longLabel);
-        hl.addComponent(changeLength);
-
-        addComponent(hl);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/label/Labels.html b/tests/src/com/vaadin/tests/components/label/Labels.html
deleted file mode 100644
index 46ff066d8c..0000000000
--- a/tests/src/com/vaadin/tests/components/label/Labels.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>Labels</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">Labels</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.label.Labels?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentslabelLabels::PID_Scheckboxaction-Error indicators/domChild[0]</td>
-	<td>9,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentslabelLabels::PID_Scheckboxaction-Readonly/domChild[0]</td>
-	<td>8,2</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>errorindicators</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentslabelLabels::PID_Scheckboxaction-Error indicators/domChild[0]</td>
-	<td>0,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentslabelLabels::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VLabel[0]</td>
-	<td>Some UTF8 characters: äöÄÖ≤≠∉Ġå2²</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentslabelLabels::PID_Scheckboxaction-Readonly/domChild[0]</td>
-	<td>2,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentslabelLabels::PID_Scheckboxaction-Enabled/domChild[0]</td>
-	<td>0,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/label/Labels.java b/tests/src/com/vaadin/tests/components/label/Labels.java
deleted file mode 100644
index ad648e7404..0000000000
--- a/tests/src/com/vaadin/tests/components/label/Labels.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.vaadin.tests.components.label;
-
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.tests.util.LoremIpsum;
-import com.vaadin.ui.Label;
-
-public class Labels extends ComponentTestCase<Label> {
-
-    @Override
-    protected Class<Label> getTestClass() {
-        return Label.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-        Label l;
-        l = createLabel("This is an undefined\nwide\nlabel               which do not wrap. It should be clipped at the end of the screen"
-                + LoremIpsum.get(1000));
-        l.setWidth(null);
-        addTestComponent(l);
-
-        l = createLabel("This is a 200px wide simple label which\n\n\nwrap");
-        l.setWidth("200px");
-        addTestComponent(l);
-
-        l = createLabel("This is a 100% wide simple label which should wrap. "
-                + LoremIpsum.get(1500));
-        l.setWidth("100%");
-        addTestComponent(l);
-
-        l = createLabel("This is a\n\n     100%\t\t\t   \twide simple with fixed 65px height. It should wrap. "
-                + LoremIpsum.get(5000));
-        l.setWidth("100%");
-        l.setHeight("65px");
-        addTestComponent(l);
-
-        l = createLabel(
-                "<div style='border: 1px solid red'><h1>Hello\n\n\n</h1><p/><h2>I am a rich Label</h3></div>",
-                "This is an XHTML label with rich content");
-        l.setContentMode(Label.CONTENT_XHTML);
-        addTestComponent(l);
-
-        l = createLabel(
-                "<div style='border: 1px solid blue'><h1>Hello</h1><p/><h2>I am a rich Label</h3></div>",
-                "This is an XHTML label with fixed 200px width and rich content");
-        l.setContentMode(Label.CONTENT_XHTML);
-        l.setWidth("200px");
-        addTestComponent(l);
-
-        l = createLabel("Some UTF8 characters: äöÄÖ≤≠∉Ġå2²");
-        addTestComponent(l);
-
-    }
-
-    private Label createLabel(String text, String caption) {
-        Label l = new Label(text);
-        l.setCaption(caption);
-
-        return l;
-    }
-
-    private Label createLabel(String text) {
-        return createLabel(text, null);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A generic test for Labels in different configurations";
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/link/LinkIcon.java b/tests/src/com/vaadin/tests/components/link/LinkIcon.java
deleted file mode 100644
index 372417a45c..0000000000
--- a/tests/src/com/vaadin/tests/components/link/LinkIcon.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.vaadin.tests.components.link;
-
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Link;
-
-public class LinkIcon extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The icon of a Link component should have the same cursor as the text and should be clickable";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    protected void setup() {
-        Link l = new Link("www.google.com", new ExternalResource(
-                "http://www.vaadin.com/"));
-        l.setIcon(new ThemeResource("../runo/icons/32/calendar.png"));
-
-        addComponent(l);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/link/LinkTargetSize.java b/tests/src/com/vaadin/tests/components/link/LinkTargetSize.java
deleted file mode 100644
index d5542cab04..0000000000
--- a/tests/src/com/vaadin/tests/components/link/LinkTargetSize.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.vaadin.tests.components.link;
-
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Link;
-
-public class LinkTargetSize extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "This link should open a small window w/o decorations";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2524;
-    }
-
-    @Override
-    protected void setup() {
-        Link l = new Link("Try it!", new ExternalResource(
-                "http://www.google.com/m"));
-        l.setTargetName("_blank");
-        l.setTargetWidth(300);
-        l.setTargetHeight(300);
-        l.setTargetBorder(Link.TARGET_BORDER_NONE);
-        addComponent(l);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/link/LinkToPercentage.html b/tests/src/com/vaadin/tests/components/link/LinkToPercentage.html
deleted file mode 100644
index 7dff317288..0000000000
--- a/tests/src/com/vaadin/tests/components/link/LinkToPercentage.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>LinkToPercentage</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">LinkToPercentage</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.link.LinkToPercentage?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertAttribute</td>
-	<td>vaadin=runcomvaadintestscomponentslinkLinkToPercentage::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLink[0]/domChild[0]@href</td>
-	<td>*/run/com.vaadin.tests.components.link.LinkToPercentage/APP/1/110%25+Vaadin</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/link/LinkToPercentage.java b/tests/src/com/vaadin/tests/components/link/LinkToPercentage.java
deleted file mode 100644
index ce8626444c..0000000000
--- a/tests/src/com/vaadin/tests/components/link/LinkToPercentage.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.vaadin.tests.components.link;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import com.vaadin.terminal.ApplicationResource;
-import com.vaadin.terminal.StreamResource;
-import com.vaadin.terminal.StreamResource.StreamSource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Link;
-
-public class LinkToPercentage extends TestBase {
-
-    @Override
-    protected void setup() {
-        String filename = "110% Vaadin";
-        ApplicationResource resource = new StreamResource(new StreamSource() {
-            public InputStream getStream() {
-                return new InputStream() {
-                    boolean first = true;
-
-                    @Override
-                    public int read() throws IOException {
-                        if (first) {
-                            first = false;
-                            return 'a';
-                        } else {
-                            return -1;
-                        }
-                    }
-                };
-            }
-        }, filename, this);
-        addResource(resource);
-
-        Link link = new Link("The link", resource);
-
-        addComponent(link);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tests using links with percentage signs in the address";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return Integer.valueOf(5488);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/listselect/ListSelectSelection.html b/tests/src/com/vaadin/tests/components/listselect/ListSelectSelection.html
deleted file mode 100644
index 9820e044f7..0000000000
--- a/tests/src/com/vaadin/tests/components/listselect/ListSelectSelection.html
+++ /dev/null
@@ -1,165 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.listselect.ListSelects?restartApplication</td>
-	<td></td>
-</tr>
-<!--Value change listener-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_Smenu#item0</td>
-	<td>31,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>48,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>54,6</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
-	<td>label=Item 1</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_SLog_row_0</td>
-	<td>1. ValueChangeEvent, new value: 'Item 1'</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
-	<td>1</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
-	<td>label=Item 5</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_SLog_row_0</td>
-	<td>2. ValueChangeEvent, new value: 'Item 5'</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
-	<td>5</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
-	<td>label=Item 2</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_SLog_row_0</td>
-	<td>3. ValueChangeEvent, new value: 'Item 2'</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
-	<td>2</td>
-</tr>
-<!---> multi select mode-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_Smenu#item0</td>
-	<td>46,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>54,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>22,2</td>
-</tr>
-<!--Value changes from String to Set-->
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_SLog_row_0</td>
-	<td>5. ValueChangeEvent, new value: '[Item 2]'</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
-	<td>2</td>
-</tr>
-<tr>
-	<td>addSelection</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
-	<td>label=Item 1</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_SLog_row_0</td>
-	<td>6. ValueChangeEvent, new value: '[Item 1, Item 2]'</td>
-</tr>
-<tr>
-	<td>removeSelection</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
-	<td>label=Item 1</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_SLog_row_0</td>
-	<td>7. ValueChangeEvent, new value: '[Item 2]'</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
-	<td>2</td>
-</tr>
-<tr>
-	<td>removeSelection</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
-	<td>label=Item 2</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_SLog_row_0</td>
-	<td>7. ValueChangeEvent, new value: '[Item 2]'</td>
-</tr>
-<!--Ensure also that the selection cannot be removed after a reload-->
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.listselect.ListSelects</td>
-	<td></td>
-</tr>
-<tr>
-	<td>removeSelection</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
-	<td>label=Item 2</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_SLog_row_0</td>
-	<td>7. ValueChangeEvent, new value: '[Item 2]'</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
-	<td>2</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/listselect/ListSelects.java b/tests/src/com/vaadin/tests/components/listselect/ListSelects.java
deleted file mode 100644
index 8a04da1bce..0000000000
--- a/tests/src/com/vaadin/tests/components/listselect/ListSelects.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.vaadin.tests.components.listselect;
-
-import java.util.LinkedHashMap;
-
-import com.vaadin.tests.components.select.AbstractSelectTestCase;
-import com.vaadin.ui.ListSelect;
-
-public class ListSelects extends AbstractSelectTestCase<ListSelect> {
-
-    private Command<ListSelect, Integer> rowsCommand = new Command<ListSelect, Integer>() {
-        public void execute(ListSelect c, Integer value, Object data) {
-            c.setRows(value);
-        }
-    };
-
-    private Command<ListSelect, Integer> colsCommand = new Command<ListSelect, Integer>() {
-        public void execute(ListSelect c, Integer value, Object data) {
-            c.setColumns(value);
-        }
-    };
-
-    @Override
-    protected Class<ListSelect> getTestClass() {
-        return ListSelect.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-        createRowsAction(CATEGORY_FEATURES);
-        createColsAction(CATEGORY_FEATURES);
-    };
-
-    private void createRowsAction(String category) {
-        LinkedHashMap<String, Integer> options = createIntegerOptions(20);
-        createSelectAction("Rows", category, options, "0", rowsCommand);
-    }
-
-    private void createColsAction(String category) {
-        LinkedHashMap<String, Integer> options = createIntegerOptions(20);
-        createSelectAction("Columns", category, options, "0", colsCommand);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/loginform/CustomizedLoginFormTest.html b/tests/src/com/vaadin/tests/components/loginform/CustomizedLoginFormTest.html
deleted file mode 100644
index 5a2a0d839a..0000000000
--- a/tests/src/com/vaadin/tests/components/loginform/CustomizedLoginFormTest.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>CustomizedLoginFormTest</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">CustomizedLoginFormTest</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.loginform.CustomizedLoginFormTest?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td>300</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>french</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/loginform/CustomizedLoginFormTest.java b/tests/src/com/vaadin/tests/components/loginform/CustomizedLoginFormTest.java
deleted file mode 100644
index 3fde281c20..0000000000
--- a/tests/src/com/vaadin/tests/components/loginform/CustomizedLoginFormTest.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.vaadin.tests.components.loginform;
-
-public class CustomizedLoginFormTest extends LoginFormTest {
-
-    @Override
-    protected void setup() {
-        super.setup();
-
-        loginForm.setUsernameCaption("Identifiant");
-        loginForm.setPasswordCaption("Mot de passe");
-        loginForm.setLoginButtonCaption("Se connecter");
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Customization of the captions on the LoginForm component. Three login forms should be visible (undefined height, undefined width, defined height and width). Entering a username+password in a login form and clicking 'login' should replace the login form with a label telling the user name as password. Also a logout button should then be shown and pressing that takes the user back to the original screen with the LoginForm";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5226;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/loginform/LoginFormTest.html b/tests/src/com/vaadin/tests/components/loginform/LoginFormTest.html
deleted file mode 100644
index daaefab48c..0000000000
--- a/tests/src/com/vaadin/tests/components/loginform/LoginFormTest.html
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>LoginFormTest</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">LoginFormTest</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.loginform.LoginFormTest?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>undefinedsize</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>username</td>
-	<td>username</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>password</td>
-	<td>password</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>//form[@id='loginf']/div[5]/div/span/span</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsloginformLoginFormTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>User 'username', password='password' logged in</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>loggedin</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsloginformLoginFormTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>undefinedsize</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsloginformLoginFormTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>fixed-height</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsloginformLoginFormTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>fixed-size</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsloginformLoginFormTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>fixed-width</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/loginform/LoginFormTest.java b/tests/src/com/vaadin/tests/components/loginform/LoginFormTest.java
deleted file mode 100644
index bbc7d2ca7e..0000000000
--- a/tests/src/com/vaadin/tests/components/loginform/LoginFormTest.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package com.vaadin.tests.components.loginform;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.LoginForm;
-import com.vaadin.ui.LoginForm.LoginEvent;
-import com.vaadin.ui.LoginForm.LoginListener;
-import com.vaadin.ui.VerticalLayout;
-
-public class LoginFormTest extends TestBase {
-
-    private HorizontalLayout loginFormLayout;
-    protected LoginForm loginForm;
-
-    @Override
-    protected void setup() {
-        loginFormLayout = new HorizontalLayout();
-
-        loginForm = new LoginForm();
-        loginForm.setSizeUndefined();
-
-        updateCaption();
-        loginForm.addListener(new LoginListener() {
-
-            /**
-             * 
-             */
-            private static final long serialVersionUID = 1L;
-
-            public void onLogin(LoginEvent event) {
-                login((LoginForm) event.getSource(),
-                        event.getLoginParameter("username"),
-                        event.getLoginParameter("password"));
-
-            }
-        });
-
-        loginFormLayout.addComponent(loginForm);
-
-        Button changeWidth = new Button("Change width", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                if (loginForm.getWidth() < 0) {
-                    loginForm.setWidth("300px");
-                } else {
-                    loginForm.setWidth(null);
-                }
-                updateCaption();
-            }
-        });
-
-        Button changeHeight = new Button("Change height", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                if (loginForm.getHeight() < 0) {
-                    loginForm.setHeight("200px");
-                } else {
-                    loginForm.setHeight(null);
-                }
-                updateCaption();
-            }
-        });
-
-        addComponent(loginFormLayout);
-        addComponent(changeWidth);
-        addComponent(changeHeight);
-
-    }
-
-    protected void updateCaption() {
-        float width = loginForm.getWidth();
-        float height = loginForm.getHeight();
-
-        String w = width < 0 ? "auto" : (int) width + "px";
-        String h = height < 0 ? "auto" : (int) height + "px";
-
-        loginForm.setCaption("LoginForm (" + w + "/" + h + ")");
-    }
-
-    protected void login(LoginForm loginForm, String user, String password) {
-        VerticalLayout infoLayout = new VerticalLayout();
-
-        Label info = new Label("User '" + user + "', password='" + password
-                + "' logged in");
-        Button logoutButton = new Button("Log out", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                Button b = event.getButton();
-                loginFormLayout.replaceComponent(b.getParent(),
-                        (LoginForm) b.getData());
-            }
-
-        });
-        logoutButton.setData(loginForm);
-
-        infoLayout.addComponent(info);
-        infoLayout.addComponent(logoutButton);
-
-        loginFormLayout.replaceComponent(loginForm, infoLayout);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Basic test for the LoginForm component. Three login forms should be visible (undefined height, undefined width, defined height and width). Entering a username+password in a login form and clicking 'login' should replace the login form with a label telling the user name as password. Also a logout button should then be shown and pressing that takes the user back to the original screen with the LoginForm";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3597;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/loginform/LoginFormWithMultipleWindows.java b/tests/src/com/vaadin/tests/components/loginform/LoginFormWithMultipleWindows.java
deleted file mode 100644
index 341caecc9f..0000000000
--- a/tests/src/com/vaadin/tests/components/loginform/LoginFormWithMultipleWindows.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.vaadin.tests.components.loginform;
-
-import com.vaadin.Application;
-import com.vaadin.ui.LoginForm;
-import com.vaadin.ui.LoginForm.LoginEvent;
-import com.vaadin.ui.LoginForm.LoginListener;
-import com.vaadin.ui.Window;
-
-@SuppressWarnings("serial")
-public class LoginFormWithMultipleWindows extends Application {
-
-    /**
-     * =======================================================================
-     * Comment out this to make the LoginForm work as expected
-     * =======================================================================
-     */
-    @Override
-    public Window getWindow(String name) {
-        Window w = super.getWindow(name);
-        if (w == null) {
-            w = new LoginFormWindow();
-            w.setName(name);
-            addWindow(w);
-        }
-        return w;
-
-    }
-
-    @Override
-    public void init() {
-        setMainWindow(new LoginFormWindow());
-    }
-
-    public class LoginFormWindow extends Window {
-        public LoginFormWindow() {
-            super();
-
-            LoginForm loginForm = new LoginForm();
-            loginForm.setSizeUndefined();
-
-            loginForm.addListener(new LoginListener() {
-
-                private static final long serialVersionUID = 1L;
-
-                public void onLogin(LoginEvent event) {
-                    showNotification(event.getLoginParameter("username") + ":"
-                            + event.getLoginParameter("password"));
-
-                }
-            });
-
-            addComponent(loginForm);
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/media/Media.java b/tests/src/com/vaadin/tests/components/media/Media.java
deleted file mode 100644
index 2df622c35f..0000000000
--- a/tests/src/com/vaadin/tests/components/media/Media.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests.components.media;
-
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Audio;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Video;
-
-public class Media extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Video v = new Video("video");
-        v.setSources(
-                new ExternalResource(
-                        "http://jonatan.virtuallypreinstalled.com/media/big_buck_bunny.mp4"),
-                new ExternalResource(
-                        "http://jonatan.virtuallypreinstalled.com/media/big_buck_bunny.ogv"));
-        v.setWidth("640px");
-        v.setHeight("360px");
-        addComponent(v);
-        addComponent(new Button("Play video", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                v.play();
-            }
-
-        }));
-        addComponent(new Button("Pause video", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                v.pause();
-            }
-
-        }));
-
-        final Audio a = new Audio("audio");
-        a.setSources(
-                new ExternalResource(
-                        "http://jonatan.virtuallypreinstalled.com/media/audio.mp3"),
-                new ExternalResource(
-                        "http://jonatan.virtuallypreinstalled.com/media/audio.ogg"));
-        addComponent(a);
-
-        addComponent(new Button("Play audio", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                a.play();
-            }
-
-        }));
-        addComponent(new Button("Pause audio", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                a.pause();
-            }
-
-        }));
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Video and audio files should play using the HTML5 elements. "
-                + "(Movie is (c) copyright 2008, Blender Foundation / www.bigbuckbunny.org)";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6909;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/menubar/HiddenAndDisabledMenus.java b/tests/src/com/vaadin/tests/components/menubar/HiddenAndDisabledMenus.java
deleted file mode 100644
index ef5d5ad395..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/HiddenAndDisabledMenus.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.vaadin.tests.components.menubar;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.MenuBar;
-import com.vaadin.ui.MenuBar.MenuItem;
-
-public class HiddenAndDisabledMenus extends TestBase {
-
-    @Override
-    protected void setup() {
-        MenuBar mb = new MenuBar();
-        mb.addItem("Item 1", null);
-        mb.addItem("Item 2 - hidden", null).setVisible(false);
-        MenuItem submenu = mb.addItem("Item 3 - sub menu", null);
-        mb.addItem("Item 4 - hidden", null).setVisible(false);
-        submenu.addItem("Sub item 1 - disabled", null).setEnabled(false);
-        submenu.addItem("Sub item 2 - enabled", null);
-        submenu.addItem("Sub item 3 - visible", null);
-        submenu.addItem("Sub item 4 - hidden", null).setVisible(false);
-
-        addComponent(mb);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The menu contains 4 items, 2 of which are hidden. The sub menu contains 4 items, the last one is hidden";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4528;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/menubar/IconsInRootMenuBar.html b/tests/src/com/vaadin/tests/components/menubar/IconsInRootMenuBar.html
deleted file mode 100644
index 91539ff359..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/IconsInRootMenuBar.html
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.menubar.MenuBarTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--Hide event log to be able to compare screenshots-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item1</td>
-	<td>30,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>27,3</td>
-</tr>
-<!--No sub menus-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
-	<td>32,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>32,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>45,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>29,4</td>
-</tr>
-<!--50 root items to fill the screen-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
-	<td>44,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>46,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>5,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item12</td>
-	<td>20,7</td>
-</tr>
-<!--Show icons on all items-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
-	<td>13,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>47,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>26,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>39,7</td>
-</tr>
-<!--Set width to 100%-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
-	<td>23,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>36,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>27,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>23,3</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>filled-with-collapse-menu</td>
-</tr>
-<!--Re-set to 50 items to get new, uncached icons-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
-	<td>13,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>68,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>44,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item12</td>
-	<td>6,5</td>
-</tr>
-<!--Compare with previous image. -->
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>filled-with-collapse-menu</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/menubar/IconsInSubMenus.html b/tests/src/com/vaadin/tests/components/menubar/IconsInSubMenus.html
deleted file mode 100644
index e1a63789ca..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/IconsInSubMenus.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.menubar.MenuBarTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--Hide event log to be able to compare screenshots-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item1</td>
-	<td>30,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>27,3</td>
-</tr>
-<!--Show icons on all items-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
-	<td>13,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>47,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>26,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>39,7</td>
-</tr>
-<!--Set width to 100%-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
-	<td>23,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>36,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>27,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>23,3</td>
-</tr>
-<!--Open sub menu 1-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_StestComponent#item0</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>3000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>submenu-1-with-icons</td>
-</tr>
-<!--Open sub menu 1-1-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>submenu-1-1-with-icons</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarHtmlItems.html b/tests/src/com/vaadin/tests/components/menubar/MenuBarHtmlItems.html
deleted file mode 100644
index 2878018752..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/MenuBarHtmlItems.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">MenuBarHtmlItems</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.menubar.MenuBarHtmlItems?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarHtmlItems::PID_Scheckboxaction-Html content allowed/domChild[0]</td>
-	<td>44,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarHtmlItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VMenuBar[0]#item0</td>
-	<td>7,6</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarHtmlItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VMenuBar[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarHtmlItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VMenuBar[0]</td>
-	<td>right</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>html</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarHtmlItems::PID_Scheckboxaction-Html content allowed/domChild[0]</td>
-	<td>37,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarHtmlItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VMenuBar[0]#item0</td>
-	<td>13,6</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarHtmlItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VMenuBar[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarHtmlItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VMenuBar[0]</td>
-	<td>right</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>plain</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarHtmlItems.java b/tests/src/com/vaadin/tests/components/menubar/MenuBarHtmlItems.java
deleted file mode 100644
index ba22bcb7a4..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/MenuBarHtmlItems.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.vaadin.tests.components.menubar;
-
-import java.util.Arrays;
-import java.util.List;
-
-import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.MenuBar;
-import com.vaadin.ui.MenuBar.MenuItem;
-
-public class MenuBarHtmlItems extends ComponentTestCase<MenuBar> {
-
-    @Override
-    protected Class<MenuBar> getTestClass() {
-        return MenuBar.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-        MenuBar m = new MenuBar();
-        MenuItem submenu = m.addItem("Item <u>1</u>", getIcon(), null);
-        MenuItem subsubmenu = submenu.addItem("<b>Bold</b> item", null);
-        subsubmenu.addItem("<i><u>I</u>talic</i> item", getIcon(), null);
-        submenu.addItem(
-                "<span style='font-size: 30px'>Big</span> <span style='font-size: 8px'>disabled</span> item",
-                null).setEnabled(false);
-
-        m.addItem("<span style='font-size: 30px'>Big</span> item", null);
-
-        addTestComponent(m);
-    }
-
-    private Resource getIcon() {
-        return new ThemeResource("../runo/icons/16/user.png");
-    }
-
-    @Override
-    protected List<Component> createActions() {
-        return Arrays.asList(createSwitchHtmlAction());
-    }
-
-    private Component createSwitchHtmlAction() {
-        return createBooleanAction("Html content allowed", false,
-                new Command<MenuBar, Boolean>() {
-                    public void execute(MenuBar c, Boolean value, Object data) {
-                        c.setHtmlContentAllowed(value.booleanValue());
-                    }
-                });
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 7187;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A menu containing items with embedded html. Items should chould either render the html or show it as plain text depending on the setting.";
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarInSplitPanel.java b/tests/src/com/vaadin/tests/components/menubar/MenuBarInSplitPanel.java
deleted file mode 100644
index 4a41f8d8dc..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/MenuBarInSplitPanel.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.vaadin.tests.components.menubar;
-
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.MenuBar;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class MenuBarInSplitPanel extends AbstractTestCase {
-
-    @Override
-    protected String getDescription() {
-        return "Move the splitter left so that some menu items are collapsed, then back right. The menu bar should always fill the available space.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6590;
-    }
-
-    @Override
-    public void init() {
-        Window mainWindow = new Window("MenuBar in SplitPanel",
-                new HorizontalSplitPanel());
-        VerticalLayout left = new VerticalLayout();
-        mainWindow.addComponent(left);
-        left.setSizeFull();
-        MenuBar menu = new MenuBar();
-        menu.setWidth("100%");
-        menu.addItem("File", null);
-        menu.addItem("Edit", null);
-        menu.addItem("Help", null);
-        left.addComponent(menu);
-        Tree tree = new Tree();
-        for (int i = 0; i < 10; i++) {
-            tree.addItem("Node " + i);
-        }
-        left.addComponent(tree);
-        left.setExpandRatio(tree, 1.0f);
-        Label label = new Label("Right");
-        mainWindow.addComponent(label);
-        setMainWindow(mainWindow);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarItemsCheckable.html b/tests/src/com/vaadin/tests/components/menubar/MenuBarItemsCheckable.html
deleted file mode 100644
index ebdfa81f20..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/MenuBarItemsCheckable.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>MenuBarItemsCheckable</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">MenuBarItemsCheckable</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.menubar.MenuBarTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--Hide event log to be able to compare screenshots-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item1</td>
-	<td>30,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>27,3</td>
-</tr>
-<!--Make some items checkable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
-	<td>43,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>47,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>48,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>90,11</td>
-</tr>
-<!--Show icons on some items-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
-	<td>13,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>47,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>26,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item3</td>
-	<td>39,7</td>
-</tr>
-<!--Set width to 100%-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
-	<td>23,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>36,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>27,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>23,3</td>
-</tr>
-<!--Open sub menu 1-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_StestComponent#item0</td>
-	<td>51,10</td>
-</tr>
-<!--Open sub menu 1-1-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>3000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>submenu-1-1-checkable-items</td>
-</tr>
-<!--Select item-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>51,10</td>
-</tr>
-<!--Open sub menu 1-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_StestComponent#item0</td>
-	<td>51,10</td>
-</tr>
-<!--Open sub menu 1-1-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>submenu-1-1-checked-items</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarLongMenus.html b/tests/src/com/vaadin/tests/components/menubar/MenuBarLongMenus.html
deleted file mode 100644
index 7170a98325..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/MenuBarLongMenus.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8080/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.menubar.MenuBarTest?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
-	<td>26,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>30,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>44,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>27,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
-	<td>24,18</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>33,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>54,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item11</td>
-	<td>18,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_StestComponent#item0</td>
-	<td>35,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item18</td>
-	<td>70,12</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>movedUp</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
-	<td>17,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>28,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>41,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item12</td>
-	<td>17,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_StestComponent#item0</td>
-	<td>32,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>39,11</td>
-</tr>
-<tr>
-	<td>scroll</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]</td>
-	<td>89</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>withScrollbars</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarNavigation.java b/tests/src/com/vaadin/tests/components/menubar/MenuBarNavigation.java
deleted file mode 100644
index 54b2f986a4..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/MenuBarNavigation.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.vaadin.tests.components.menubar;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.MenuBar;
-import com.vaadin.ui.MenuBar.Command;
-import com.vaadin.ui.MenuBar.MenuItem;
-
-public class MenuBarNavigation extends TestBase implements Command {
-
-    private MenuItem edit;
-    private MenuItem file;
-    private Log log;
-    private MenuItem export;
-
-    @Override
-    protected void setup() {
-        MenuBar mb = new MenuBar();
-        file = mb.addItem("File", null);
-        file.addItem("Open", this);
-        file.addItem("Save", this);
-        file.addItem("Save As..", this);
-        file.addSeparator();
-        export = file.addItem("Export..", null);
-        export.addItem("As PDF...", this);
-        file.addSeparator();
-        file.addItem("Exit", this);
-        edit = mb.addItem("Edit", null);
-        edit.addItem("Copy", this);
-        edit.addItem("Cut", this);
-        edit.addItem("Paste", this);
-        mb.addItem("Help", this);
-
-        addComponent(mb);
-
-        log = new Log(5);
-        log.setNumberLogRows(false);
-        addComponent(log);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Test case for mouse and keyboard navigation in MenuBar";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5174;
-    }
-
-    public void menuSelected(MenuItem selectedItem) {
-        log.log("MenuItem " + getName(selectedItem) + " selected");
-    }
-
-    private String getName(MenuItem selectedItem) {
-        String name = "";
-        if (selectedItem.getParent() != null) {
-            name = getName(selectedItem.getParent()) + "/";
-        }
-        return name + selectedItem.getText();
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarNavigationKeyboard.html b/tests/src/com/vaadin/tests/components/menubar/MenuBarNavigationKeyboard.html
deleted file mode 100644
index 172d203f50..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/MenuBarNavigationKeyboard.html
+++ /dev/null
@@ -1,212 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.menubar.MenuBarNavigation?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#menu0</td>
-	<td>3,10</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>right</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>MenuItem File/Export../As PDF... selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#menu0</td>
-	<td>0,7</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>right</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>right</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>right</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>MenuItem Help selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#menu1</td>
-	<td>4,7</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>left</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>MenuItem Edit/Cut selected</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarNavigationMouse.html b/tests/src/com/vaadin/tests/components/menubar/MenuBarNavigationMouse.html
deleted file mode 100644
index 20840993fa..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/MenuBarNavigationMouse.html
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.menubar.MenuBarNavigation?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item0</td>
-	<td>13,8</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>41,4</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>32,2</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>MenuItem File/Export../As PDF... selected</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item1</td>
-	<td>13,11</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>18,11</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>MenuItem Edit/Copy selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item2</td>
-	<td>6,5</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>MenuItem Help selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item0</td>
-	<td>8,13</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>18,9</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>MenuItem File/Exit selected</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarResize.html b/tests/src/com/vaadin/tests/components/menubar/MenuBarResize.html
deleted file mode 100644
index 97006323a2..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/MenuBarResize.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.menubar.MenuBarTest?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
-	<td>26,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>71,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>34,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>32,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item1</td>
-	<td>17,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>36,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>22,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item6</td>
-	<td>48,15</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>menubar-100pct-inside-500px</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.menubar.MenuBarTest</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>menubar-100pct-inside-500px-after-refresh</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item1</td>
-	<td>20,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>72,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>4,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item10</td>
-	<td>26,9</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>menubar-100pct-inside-900px</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
-	<td>19,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>66,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>6,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item10</td>
-	<td>43,3</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>menubar-900px-inside-900px</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarRootItemSelectWithKeyboard.html b/tests/src/com/vaadin/tests/components/menubar/MenuBarRootItemSelectWithKeyboard.html
deleted file mode 100644
index a53757a969..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/MenuBarRootItemSelectWithKeyboard.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.menubar.MenuBarRootItemSelectWithKeyboard?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarRootItemSelectWithKeyboard::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item0</td>
-	<td>22,9</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarRootItemSelectWithKeyboard::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarRootItemSelectWithKeyboard::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>up</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarRootItemSelectWithKeyboard::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>right</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarRootItemSelectWithKeyboard::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>NoItemShouldBeSelected</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarRootItemSelectWithKeyboard.java b/tests/src/com/vaadin/tests/components/menubar/MenuBarRootItemSelectWithKeyboard.java
deleted file mode 100644
index f162386336..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/MenuBarRootItemSelectWithKeyboard.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.vaadin.tests.components.menubar;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.MenuBar;
-import com.vaadin.ui.MenuBar.Command;
-import com.vaadin.ui.MenuBar.MenuItem;
-
-public class MenuBarRootItemSelectWithKeyboard extends TestBase {
-
-    @Override
-    protected void setup() {
-        Command c = new Command() {
-            public void menuSelected(MenuItem selectedItem) {
-                getMainWindow().showNotification(selectedItem.getText());
-
-            }
-        };
-
-        MenuBar root = new MenuBar();
-
-        MenuItem submenu = root.addItem("Hello", null);
-        submenu.addItem("World", c);
-
-        root.addItem("World", c);
-        addComponent(root);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "When selecting an root menu item from the menubar with the keyboard (enter) the selection should be removed";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5180;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarRunsOutOfBrowser.html b/tests/src/com/vaadin/tests/components/menubar/MenuBarRunsOutOfBrowser.html
deleted file mode 100755
index 330a92898c..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/MenuBarRunsOutOfBrowser.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.menubar.MenuBarRunsOutOfBrowser?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>menu-top-right</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarRunsOutOfBrowser.java b/tests/src/com/vaadin/tests/components/menubar/MenuBarRunsOutOfBrowser.java
deleted file mode 100644
index 314df2c8a4..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/MenuBarRunsOutOfBrowser.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.components.menubar;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.MenuBar;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class MenuBarRunsOutOfBrowser extends AbstractTestCase {
-
-    @Override
-    public void init() {
-        setTheme("runo");
-        Window main = new Window("Test");
-        main.setSizeFull();
-        setMainWindow(main);
-        main.getContent().setSizeFull();
-
-        MenuBar menuBar = new MenuBar();
-        menuBar.addItem("Test", new ThemeResource("icons/16/calendar.png"),
-                null);
-        menuBar.addItem("ABC", new ThemeResource("icons/16/document.png"), null);
-        menuBar.addItem("123", new ThemeResource("icons/16/help.png"), null);
-
-        main.getContent().addComponent(menuBar);
-        ((VerticalLayout) main.getContent()).setComponentAlignment(menuBar,
-                Alignment.TOP_RIGHT);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The menubar should be right aligned but not run out of the browser";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5894;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarTest.java b/tests/src/com/vaadin/tests/components/menubar/MenuBarTest.java
deleted file mode 100644
index e41652126d..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/MenuBarTest.java
+++ /dev/null
@@ -1,338 +0,0 @@
-package com.vaadin.tests.components.menubar;
-
-import java.util.Date;
-import java.util.LinkedHashMap;
-
-import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.AbstractComponentTest;
-import com.vaadin.ui.MenuBar;
-import com.vaadin.ui.MenuBar.MenuItem;
-
-public class MenuBarTest extends AbstractComponentTest<MenuBar> {
-
-    private static final String CATEGORY_MENU_ITEMS = "Menu items";
-    private static final String CATEGORY_MENU_ITEM_STATES = "Menu item states";
-
-    private int rootItems = -1;
-    private int subItems = -1;
-    private int subLevels = -1;
-    private int subMenuDensity = -1;
-    private Integer subMenuSeparatorDensity = null;
-    private Boolean openRootMenuOnHover = false;
-    private int iconInterval = -1;
-    private Integer iconSize;
-    private Integer disabledDensity;
-    private Integer invisibleDensity;
-    private Integer checkableDensity;
-
-    @Override
-    protected Class<MenuBar> getTestClass() {
-        return MenuBar.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-        createRootMenuItemSelect(CATEGORY_MENU_ITEMS);
-        createSubMenuItemSelect(CATEGORY_MENU_ITEMS);
-        createSubMenuLevelsSelect(CATEGORY_MENU_ITEMS);
-        createSubMenuDensitySelect(CATEGORY_MENU_ITEMS);
-        createSubMenuSeparatorDensitySelect(CATEGORY_MENU_ITEMS);
-
-        createBooleanAction("OpenRootMenuOnHover", CATEGORY_FEATURES,
-                openRootMenuOnHover, setOpenRootOnHover);
-
-        createMenuItemIconIntervalSelect(CATEGORY_MENU_ITEM_STATES);
-        createMenuIconsSizeSelect(CATEGORY_MENU_ITEM_STATES);
-        createMenuItemDisabledDensitySelect(CATEGORY_MENU_ITEM_STATES);
-        createMenuItemInvisibleDensitySelect(CATEGORY_MENU_ITEM_STATES);
-        createMenuItemCheckableDensitySelect(CATEGORY_MENU_ITEM_STATES);
-
-    }
-
-    private void createRootMenuItemSelect(String category) {
-        createSelectAction("Root menu items", category,
-                createIntegerOptions(100), "10", createRootMenuItems);
-    }
-
-    private void createSubMenuItemSelect(String category) {
-        createSelectAction("Sub menu items", category,
-                createIntegerOptions(100), "10", createSubMenuItems);
-    }
-
-    private void createSubMenuLevelsSelect(String category) {
-        createSelectAction("Sub menu levels", category,
-                createIntegerOptions(100), "2", setSubMenuLevels);
-    }
-
-    private void createMenuIconsSizeSelect(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("16x16", 16);
-        options.put("32x32", 32);
-        options.put("64x64", 64);
-        createSelectAction("Icon size", category, options, "16x16", selectIcon);
-    }
-
-    private void createMenuItemIconIntervalSelect(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("None", 0);
-        options.put("All", 1);
-        options.put("Every second", 2);
-        options.put("Every third", 3);
-
-        createSelectAction("Icons", category, options, "None", setMenuIcons);
-    }
-
-    private void createSubMenuDensitySelect(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("All", 1);
-        options.put("Every second", 2);
-        options.put("Every third", 3);
-
-        createSelectAction("Sub sub menus", category, options, "Every third",
-                setSubMenuDensity);
-    }
-
-    private void createSubMenuSeparatorDensitySelect(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("No separators", null);
-        options.put("Between all", 1);
-        options.put("Between every second", 2);
-        options.put("Between every third", 3);
-
-        createSelectAction("Sub menu separators", category, options,
-                "No separators", setSubMenuSeparatorDensity);
-    }
-
-    private void createMenuItemDisabledDensitySelect(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("All enabled", null);
-        options.put("All disabled", 1);
-        options.put("Every second", 2);
-        options.put("Every third", 3);
-
-        createSelectAction("Enabled", category, options, "All enabled",
-                setMenuItemDisabledDensity);
-    }
-
-    private void createMenuItemInvisibleDensitySelect(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("All visible", null);
-        options.put("All invisible", 1);
-        options.put("Every second", 2);
-        options.put("Every third", 3);
-
-        createSelectAction("Visible", category, options, "All visible",
-                setMenuItemInvisibleDensity);
-    }
-
-    private void createMenuItemCheckableDensitySelect(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("No items checkable", null);
-        options.put("All checkable", 1);
-        options.put("Every second", 2);
-        options.put("Every third", 3);
-
-        createSelectAction("Checkable", category, options,
-                "No items checkable", setMenuItemCheckableDensity);
-    }
-
-    /* COMMANDS */
-    Command<MenuBar, Integer> createRootMenuItems = new Command<MenuBar, Integer>() {
-
-        public void execute(MenuBar c, Integer value, Object data) {
-            rootItems = value;
-            createRootItems(c);
-        }
-    };
-
-    Command<MenuBar, Integer> createSubMenuItems = new Command<MenuBar, Integer>() {
-
-        public void execute(MenuBar c, Integer value, Object data) {
-            subItems = value;
-            createSubItems(c);
-        }
-    };
-
-    Command<MenuBar, Integer> setSubMenuLevels = new Command<MenuBar, Integer>() {
-
-        public void execute(MenuBar c, Integer value, Object data) {
-            subLevels = value;
-            createSubItems(c);
-        }
-    };
-    private Command<MenuBar, Integer> setMenuIcons = new Command<MenuBar, Integer>() {
-
-        public void execute(MenuBar c, Integer value, Object data) {
-            iconInterval = value;
-            updateIcons(c);
-        }
-    };
-
-    private Command<MenuBar, Integer> setSubMenuDensity = new Command<MenuBar, Integer>() {
-
-        public void execute(MenuBar c, Integer value, Object data) {
-            subMenuDensity = value;
-            createSubItems(c);
-        }
-    };
-
-    private Command<MenuBar, Integer> setMenuItemDisabledDensity = new Command<MenuBar, Integer>() {
-
-        public void execute(MenuBar c, Integer value, Object data) {
-            disabledDensity = value;
-            createRootItems(c);
-        }
-    };
-
-    private Command<MenuBar, Integer> setMenuItemInvisibleDensity = new Command<MenuBar, Integer>() {
-
-        public void execute(MenuBar c, Integer value, Object data) {
-            invisibleDensity = value;
-            createRootItems(c);
-        }
-    };
-
-    private Command<MenuBar, Integer> setMenuItemCheckableDensity = new Command<MenuBar, Integer>() {
-
-        public void execute(MenuBar c, Integer value, Object data) {
-            checkableDensity = value;
-            createRootItems(c);
-        }
-    };
-
-    private Command<MenuBar, Integer> setSubMenuSeparatorDensity = new Command<MenuBar, Integer>() {
-
-        public void execute(MenuBar c, Integer value, Object data) {
-            subMenuSeparatorDensity = value;
-            createSubItems(c);
-        }
-    };
-
-    private Command<MenuBar, Boolean> setOpenRootOnHover = new Command<MenuBar, Boolean>() {
-
-        public void execute(MenuBar c, Boolean value, Object data) {
-            openRootMenuOnHover = value;
-            c.setAutoOpen(value);
-        }
-
-    };
-
-    private Command<MenuBar, Integer> selectIcon = new Command<MenuBar, Integer>() {
-
-        public void execute(MenuBar c, Integer value, Object data) {
-            iconSize = value;
-            updateIcons(c);
-        }
-    };
-
-    /* End of commands */
-
-    private MenuBar.Command menuCommand = new MenuBar.Command() {
-
-        public void menuSelected(MenuItem selectedItem) {
-            log("Menu item '" + selectedItem.getText() + "' selected");
-
-        }
-    };
-
-    protected void createSubItems(MenuBar c) {
-        for (MenuItem rootItem : c.getItems()) {
-            createSubItems(rootItem, 1);
-        }
-        updateIcons(c);
-
-    }
-
-    private void createSubItems(MenuItem parent, int level) {
-        if (level > subLevels) {
-            return;
-        }
-
-        parent.removeChildren();
-        for (int i = 0; i < subItems; i++) {
-            if (subMenuSeparatorDensity != null && i > 0
-                    && i % subMenuSeparatorDensity == 0) {
-                parent.addSeparator();
-            }
-
-            MenuItem subMenuItem = parent.addItem("Sub menu " + parent.getId()
-                    + "/" + (i + 1), menuCommand);
-
-            if (disabledDensity != null && i % disabledDensity == 0) {
-                subMenuItem.setEnabled(false);
-            }
-            if (invisibleDensity != null && i % invisibleDensity == 0) {
-                subMenuItem.setVisible(false);
-            }
-
-            if (i % subMenuDensity == 0 && level < subLevels) {
-                subMenuItem.setCommand(null);
-                createSubItems(subMenuItem, level + 1);
-            }
-
-            if (!subMenuItem.hasChildren() && level > 0
-                    && checkableDensity != null && i % checkableDensity == 0) {
-                subMenuItem.setCheckable(true);
-            }
-        }
-
-    }
-
-    protected void updateIcons(MenuBar c) {
-        int idx = 0;
-        for (MenuItem rootItem : c.getItems()) {
-            updateIcons(rootItem, idx++);
-        }
-    }
-
-    private void updateIcons(MenuItem item, int idx) {
-        if (iconInterval > 0 && idx % iconInterval == 0) {
-            item.setIcon(getIcon());
-        } else {
-            item.setIcon(null);
-        }
-        if (item.getChildren() != null) {
-            int i = 0;
-            for (MenuItem child : item.getChildren()) {
-                updateIcons(child, i++);
-            }
-        }
-    }
-
-    private long iconCacheIndex = new Date().getTime();
-
-    private Resource getIcon() {
-        String resourceID = null;
-        if (iconSize == 16) {
-            resourceID = "../runo/icons/16/user.png";
-        } else if (iconSize == 32) {
-            resourceID = "../runo/icons/32/user.png";
-        } else if (iconSize == 64) {
-            resourceID = "../runo/icons/64/user.png";
-        }
-
-        if (resourceID != null) {
-            return new ThemeResource(resourceID + "?" + iconCacheIndex++);
-        }
-        return null;
-    }
-
-    protected void createRootItems(MenuBar c) {
-        // Remove all existing items
-        c.removeItems();
-        for (int i = 0; i < rootItems; i++) {
-            MenuItem rootItem = c.addItem("Root menu " + (i + 1), null);
-            if (disabledDensity != null && i % disabledDensity == 0) {
-                rootItem.setEnabled(false);
-            }
-            if (invisibleDensity != null && i % invisibleDensity == 0) {
-                rootItem.setVisible(false);
-            }
-        }
-        createSubItems(c);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarToolTips.html b/tests/src/com/vaadin/tests/components/menubar/MenuBarToolTips.html
deleted file mode 100644
index 28bcc3a221..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/MenuBarToolTips.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.menubar.MenuBarToolTips?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item0</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>1000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>File menu</td>
-</tr>
-<tr>
-	<td>mouseOut</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item0</td>
-	<td>18,11</td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>1000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>File - Foo menu</td>
-</tr>
-<tr>
-	<td>mouseOut</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
-	<td>830,200</td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item1</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>1000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>Edit menu</td>
-</tr>
-<tr>
-	<td>mouseOut</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
-	<td>625,184</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item1</td>
-	<td>9,6</td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VOverlay[0]/VMenuBar[0]#item1</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>1000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>Edit - Bar menu</td>
-</tr>
-<tr>
-	<td>mouseOut</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarToolTips.java b/tests/src/com/vaadin/tests/components/menubar/MenuBarToolTips.java
deleted file mode 100644
index 0ef31dc5dc..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/MenuBarToolTips.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.vaadin.tests.components.menubar;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.MenuBar;
-import com.vaadin.ui.MenuBar.MenuItem;
-
-public class MenuBarToolTips extends TestBase {
-
-    @Override
-    protected void setup() {
-        MenuBar bar = new MenuBar();
-        bar.setDescription("Root Menu");
-
-        // File
-        final MenuItem file = bar.addItem("File", null);
-        file.setDescription("File menu");
-
-        MenuItem foo = file.addItem("Foo", null);
-        foo.setDescription("File - Foo menu");
-
-        MenuItem foobar = foo.addItem("Foobar", null);
-        foobar.setDescription("File - Foo menu - Foobar menu");
-
-        MenuItem bar2 = file.addItem("Bar", null);
-        bar2.setDescription("File - Bar menu");
-
-        // Edit
-        MenuItem edit = bar.addItem("Edit", null);
-        edit.setDescription("Edit menu");
-
-        MenuItem foo2 = edit.addItem("Foo", null);
-        foo2.setDescription("Edit - Foo menu");
-
-        MenuItem bar3 = edit.addItem("Bar", null);
-        bar3.setDescription("Edit - Bar menu");
-
-        addComponent(bar);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "There should be tooltips on the menubar and its items";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5919;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/menubar/Menubars.html b/tests/src/com/vaadin/tests/components/menubar/Menubars.html
deleted file mode 100644
index 93d77f9f36..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/Menubars.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
-<title>com.vaadin.tests.components.menubar.Menubars</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">com.vaadin.tests.components.menubar.Menubars</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.menubar.Menubars?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenubars::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[6]/VMenuBar[0]#item26</td>
-	<td>16,9</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>more-menu-for-100pct-wide</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenubars::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VMenuBar[0]#item3</td>
-	<td>21,14</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>more-menu-for-200px-wide</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenubars::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VMenuBar[0]#item2</td>
-	<td>27,8</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenubars::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>Sub menu 3/1</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>submenu-item3-undef-wide</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenubars::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
-	<td>7,3</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>error</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenubars::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
-	<td>52,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenubars::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
-	<td>11,4</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsmenubarMenubars::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VMenuBar[0]#item0</td>
-	<td>18,12</td>
-</tr>
-<!--Ensure the sub menu was not opened-->
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/menubar/Menubars.java b/tests/src/com/vaadin/tests/components/menubar/Menubars.java
deleted file mode 100644
index 593b3b7fa5..0000000000
--- a/tests/src/com/vaadin/tests/components/menubar/Menubars.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.vaadin.tests.components.menubar;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.MenuBar;
-import com.vaadin.ui.MenuBar.MenuItem;
-
-public class Menubars extends ComponentTestCase<MenuBar> {
-
-    @Override
-    protected Class<MenuBar> getTestClass() {
-        return MenuBar.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-
-        MenuBar m;
-        m = createMenuBar("This is an undefined wide menubar with 3 items", 3);
-
-        m.setWidth(null);
-        addTestComponent(m);
-
-        m = createMenuBar(
-                "This is an undefined wide menubar with fixed 100px height (4 items)",
-                4);
-        m.setWidth(null);
-        m.setHeight("100px");
-        addTestComponent(m);
-
-        m = createMenuBar("This is a 200px wide menubar with 10 items", 10);
-        m.setWidth("200px");
-        addTestComponent(m);
-
-        m = createMenuBar("This is a 200px wide menubar with 2 items", 2);
-        m.setWidth("200px");
-        addTestComponent(m);
-
-        m = createMenuBar("This is a 100% wide menubar with 3 items ", 3);
-        m.setWidth("100%");
-        addTestComponent(m);
-
-        m = createMenuBar("This is a 100% wide menubar with 40 items ", 40);
-        m.setWidth("100%");
-        addTestComponent(m);
-
-        m = createMenuBar(
-                "This is a 100% wide menubar with fixed 65px height (5 items). ",
-                5);
-        m.setWidth("100%");
-        m.setHeight("65px");
-
-        addTestComponent(m);
-
-    }
-
-    private MenuBar createMenuBar(String text, int items) {
-        MenuBar m = new MenuBar();
-        m.setCaption(text);
-
-        for (int i = 1; i <= items; i++) {
-            MenuItem mi = m.addItem("Item " + i, null);
-            for (int j = 1; j <= items; j++) {
-                mi.addItem("Sub menu " + i + "/" + j, null);
-            }
-        }
-
-        return m;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A generic test for MenuBars in different configurations";
-    }
-
-    @Override
-    protected List<Component> createActions() {
-        ArrayList<Component> actions = new ArrayList<Component>();
-        actions.add(createErrorIndicatorAction(false));
-        actions.add(createEnabledAction(true));
-
-        return actions;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/nativebutton/NativeButtonDisableOnClick.html b/tests/src/com/vaadin/tests/components/nativebutton/NativeButtonDisableOnClick.html
deleted file mode 100644
index 75eab71892..0000000000
--- a/tests/src/com/vaadin/tests/components/nativebutton/NativeButtonDisableOnClick.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.nativebutton.NativeButtonTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--value change listener-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_Smenu#item0</td>
-	<td>37,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>28,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>35,8</td>
-</tr>
-<!--disable on click-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_Smenu#item0</td>
-	<td>39,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>33,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>22,4</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_SLog_row_0</td>
-	<td>1. Command: /Disable on click(true)</td>
-</tr>
-<!--click button-->
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_StestComponent</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_StestComponent</td>
-	<td>v-disabled</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_SLog_row_0</td>
-	<td>2. ClickEvent</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_StestComponent</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_SLog_row_0</td>
-	<td>2. ClickEvent</td>
-</tr>
-<!--re-enable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_Smenu#item0</td>
-	<td>35,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>34,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>15,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_Smenu#item0</td>
-	<td>43,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>37,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>33,6</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_SLog_row_0</td>
-	<td>4. Command: /Enabled(true)</td>
-</tr>
-<tr>
-	<td>assertNotCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_StestComponent</td>
-	<td>v-disabled</td>
-</tr>
-<!--no longer disable on click-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_Smenu#item0</td>
-	<td>25,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>39,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>36,3</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_StestComponent</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_SLog_row_0</td>
-	<td>6. ClickEvent</td>
-</tr>
-<tr>
-	<td>assertNotCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_StestComponent</td>
-	<td>v-disabled</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/nativebutton/NativeButtonTest.java b/tests/src/com/vaadin/tests/components/nativebutton/NativeButtonTest.java
deleted file mode 100644
index d806790f4d..0000000000
--- a/tests/src/com/vaadin/tests/components/nativebutton/NativeButtonTest.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.vaadin.tests.components.nativebutton;
-
-import com.vaadin.tests.components.button.Buttons2;
-import com.vaadin.ui.NativeButton;
-
-public class NativeButtonTest extends Buttons2<NativeButton> {
-
-    @Override
-    protected Class<NativeButton> getTestClass() {
-        return NativeButton.class;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/nativeselect/NativeSelects.java b/tests/src/com/vaadin/tests/components/nativeselect/NativeSelects.java
deleted file mode 100644
index 5f19073e66..0000000000
--- a/tests/src/com/vaadin/tests/components/nativeselect/NativeSelects.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.components.nativeselect;
-
-import java.util.LinkedHashMap;
-
-import com.vaadin.tests.components.select.AbstractSelectTestCase;
-import com.vaadin.ui.NativeSelect;
-
-public class NativeSelects extends AbstractSelectTestCase<NativeSelect> {
-
-    @Override
-    protected Class<NativeSelect> getTestClass() {
-        return NativeSelect.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-        createColumnSelectAction();
-    }
-
-    private void createColumnSelectAction() {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("-", 0);
-        for (int i = 1; i <= 10; i++) {
-            options.put(String.valueOf(i), i);
-        }
-        options.put("50", 50);
-        options.put("100", 100);
-        options.put("1000", 1000);
-
-        super.createSelectAction("Columns", CATEGORY_DATA_SOURCE, options, "-",
-                columnsAction);
-
-    }
-
-    private Command<NativeSelect, Integer> columnsAction = new Command<NativeSelect, Integer>() {
-
-        public void execute(NativeSelect c, Integer value, Object data) {
-            c.setColumns(value);
-        }
-    };
-}
diff --git a/tests/src/com/vaadin/tests/components/notification/CloseErrorNotificationWithEscape.html b/tests/src/com/vaadin/tests/components/notification/CloseErrorNotificationWithEscape.html
deleted file mode 100644
index 288fd65c66..0000000000
--- a/tests/src/com/vaadin/tests/components/notification/CloseErrorNotificationWithEscape.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>CloseErrorNotificationWithEscape</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">CloseErrorNotificationWithEscape</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.notification.Notifications?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=Error</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::Root/VNotification[0]/HTML[0]/domChild[0]</td>
-	<td>Hello world</td>
-</tr>
-<tr>
-	<td>keyDown</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::Root/VNotification[0]/HTML[0]/domChild[0]</td>
-	<td>\\27</td>
-</tr>
-<!-- Fade delay is 400 ms by default - VNotification -->
-<tr>
-	<td>waitForElementNotPresent</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::Root/VNotification[0]</td>
-	<td></td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/notification/Notifications.html b/tests/src/com/vaadin/tests/components/notification/Notifications.html
deleted file mode 100644
index 4157af5450..0000000000
--- a/tests/src/com/vaadin/tests/components/notification/Notifications.html
+++ /dev/null
@@ -1,296 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.notification.Notifications?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>focus</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextArea[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=Error</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=Humanized</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>human-hello-world</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[2]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=Error</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>error-hello-world</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[2]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>500</td>
-	<td></td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=Warning</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>warning-hello-world</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[2]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=Tray</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tray-hello-world</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[2]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextArea[0]</td>
-	<td>Hello world&lt;br/&gt;Second row&lt;br/&gt;Third row which is very, very much longer than the other two rows</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=Humanized</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>human-three-rows</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[2]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=Error</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>error-three-rows</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[2]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>500</td>
-	<td></td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=Warning</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>warning-three-rows</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[2]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=Tray</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tray-three-rows</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[2]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextArea[0]</td>
-	<td>82,107</td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextArea[0]</td>
-	<td>A very long row that should cause the notification to wrap onto several lines. Still the notification box should only be as wide as needed. Adding even more text here so that the tray notification also wraps...</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=Humanized</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>human-long-wrapped-row</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[2]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=Error</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>error-long-wrapped-row</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[2]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>500</td>
-	<td></td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=Warning</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>warning-long-wrapped-row</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[2]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=Tray</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tray-long-wrapped-row</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/notification/Notifications.java b/tests/src/com/vaadin/tests/components/notification/Notifications.java
deleted file mode 100644
index e938495e9f..0000000000
--- a/tests/src/com/vaadin/tests/components/notification/Notifications.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.vaadin.tests.components.notification;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window.Notification;
-
-public class Notifications extends TestBase implements ClickListener {
-
-    private static final String CAPTION = "CAPTION";
-    private TextField tf;
-    private NativeSelect type;
-
-    @SuppressWarnings("deprecation")
-    @Override
-    protected void setup() {
-        tf = new TextField("Text", "Hello world");
-        tf.setRows(10);
-        addComponent(tf);
-        type = new NativeSelect();
-        type.setNullSelectionAllowed(false);
-        type.addContainerProperty(CAPTION, String.class, "");
-        type.setItemCaptionPropertyId(CAPTION);
-        type.addItem(Notification.TYPE_HUMANIZED_MESSAGE)
-                .getItemProperty(CAPTION).setValue("Humanized");
-        type.addItem(Notification.TYPE_ERROR_MESSAGE).getItemProperty(CAPTION)
-                .setValue("Error");
-        type.addItem(Notification.TYPE_WARNING_MESSAGE)
-                .getItemProperty(CAPTION).setValue("Warning");
-        type.addItem(Notification.TYPE_TRAY_NOTIFICATION)
-                .getItemProperty(CAPTION).setValue("Tray");
-        type.setValue(type.getItemIds().iterator().next());
-        addComponent(type);
-        Button showNotification = new Button("Show notification", this);
-        addComponent(showNotification);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Generic test case for notifications";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public void buttonClick(ClickEvent event) {
-        Notification n = new Notification((String) tf.getValue(),
-                (Integer) type.getValue());
-        event.getButton().getWindow().showNotification(n);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/notification/NotificationsHtmlAllowed.html b/tests/src/com/vaadin/tests/components/notification/NotificationsHtmlAllowed.html
deleted file mode 100644
index b4d76edae9..0000000000
--- a/tests/src/com/vaadin/tests/components/notification/NotificationsHtmlAllowed.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">NotificationsHtmlAllowed</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.notification.NotificationsHtmlAllowed?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotificationsHtmlAllowed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>view-html</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[4]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotificationsHtmlAllowed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
-	<td>60,0</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotificationsHtmlAllowed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>view-plain</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[4]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotificationsHtmlAllowed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VCheckBox[0]/domChild[0]</td>
-	<td>51,7</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotificationsHtmlAllowed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>window-plain</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[4]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotificationsHtmlAllowed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
-	<td>80,2</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsnotificationNotificationsHtmlAllowed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>window-html</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[4]</td>
-	<td>0,0</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/notification/NotificationsHtmlAllowed.java b/tests/src/com/vaadin/tests/components/notification/NotificationsHtmlAllowed.java
deleted file mode 100644
index 9157c30174..0000000000
--- a/tests/src/com/vaadin/tests/components/notification/NotificationsHtmlAllowed.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.vaadin.tests.components.notification;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.TextArea;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Window.Notification;
-
-public class NotificationsHtmlAllowed extends TestBase implements ClickListener {
-
-    private TextArea messageField;
-    private CheckBox htmlAllowedBox;
-    private TextField captionField;
-    private Window subwindow;
-    private CheckBox showInSubwindow;
-
-    @Override
-    protected void setup() {
-        captionField = new TextField("Caption", "Hello <u>world</u>");
-        addComponent(captionField);
-        captionField.focus();
-
-        messageField = new TextArea("Message",
-                "Hello <i>world</i>\nWith a newline <br/>And a html line break");
-        messageField.setRows(10);
-        addComponent(messageField);
-
-        htmlAllowedBox = new CheckBox("Html content allowed", true);
-        addComponent(htmlAllowedBox);
-
-        showInSubwindow = new CheckBox("Show in subwindow", false);
-        addComponent(showInSubwindow);
-
-        Button showNotification = new Button("Show notification", this);
-        addComponent(showNotification);
-
-        subwindow = new Window("Sub window");
-        subwindow.setPositionX(400);
-        subwindow.setPositionY(0);
-        getMainWindow().addWindow(subwindow);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Test case for htmlAllowed in notifications";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6097;
-    }
-
-    public void buttonClick(ClickEvent event) {
-        Notification n = makeNotification();
-        Window window;
-        if (showInSubwindow.booleanValue()) {
-            window = subwindow;
-        } else {
-            window = event.getButton().getWindow();
-        }
-        window.showNotification(n);
-
-    }
-
-    private Notification makeNotification() {
-        Notification n = new Notification((String) captionField.getValue(),
-                (String) messageField.getValue(),
-                Notification.TYPE_HUMANIZED_MESSAGE,
-                htmlAllowedBox.booleanValue());
-        return n;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/optiongroup/DisabledOptionGroupItems.html b/tests/src/com/vaadin/tests/components/optiongroup/DisabledOptionGroupItems.html
deleted file mode 100644
index 01c033e4fa..0000000000
--- a/tests/src/com/vaadin/tests/components/optiongroup/DisabledOptionGroupItems.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>DisabledOptionGroupItems</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">DisabledOptionGroupItems</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.optiongroup.DisabledOptionGroupItems?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsoptiongroupDisabledOptionGroupItems::PID_Sbuttonaction-Invert disabled items/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>inverted-disable-state</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsoptiongroupDisabledOptionGroupItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VOptionGroup[0]/domChild[2]/domChild[0]</td>
-	<td>7,5</td>
-</tr>
-<!--Try to select disabled item - should not cause selection to change-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsoptiongroupDisabledOptionGroupItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VOptionGroup[0]/domChild[0]/domChild[0]</td>
-	<td>7,5</td>
-</tr>
-<!--Ensure "Helsinki" is still selected-->
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsoptiongroupDisabledOptionGroupItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VOptionGroup[0]/domChild[2]/domChild[0]</td>
-	<td>on</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/optiongroup/DisabledOptionGroupItems.java b/tests/src/com/vaadin/tests/components/optiongroup/DisabledOptionGroupItems.java
deleted file mode 100644
index 4668ef5ab8..0000000000
--- a/tests/src/com/vaadin/tests/components/optiongroup/DisabledOptionGroupItems.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.vaadin.tests.components.optiongroup;
-
-import java.util.Arrays;
-import java.util.List;
-
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.OptionGroup;
-
-public class DisabledOptionGroupItems extends ComponentTestCase<OptionGroup> {
-
-    private static final List<String> cities = Arrays.asList(new String[] {
-            "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris",
-            "Stockholm" });
-
-    private static final String NULL_SELECTION_ID = "Berlin";
-
-    @Override
-    protected Class<OptionGroup> getTestClass() {
-        return OptionGroup.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-
-        OptionGroup og = createOptionGroup("");
-        og.setItemEnabled("Helsinki", false);
-        og.setItemEnabled("Paris", false);
-        og.setValue(Arrays.asList("Helsinki"));
-        og.setNullSelectionAllowed(true);
-        og.setNullSelectionItemId(NULL_SELECTION_ID);
-        addTestComponent(og);
-
-        og = createOptionGroup("");
-        og.setMultiSelect(true);
-        og.setValue(Arrays.asList("Helsinki"));
-        og.setNullSelectionAllowed(true);
-        og.setItemEnabled("Helsinki", false);
-        og.setItemEnabled("Paris", false);
-        addTestComponent(og);
-
-    }
-
-    @Override
-    protected void createCustomActions(List<Component> actions) {
-        actions.add(createInvertDisabledItemsAction());
-        actions.add(createToggleSelectionModeAction());
-
-    }
-
-    private Component createToggleSelectionModeAction() {
-        return createButtonAction("Toggle selection mode",
-                new Command<OptionGroup, Boolean>() {
-
-                    public void execute(OptionGroup og, Boolean value,
-                            Object data) {
-                        if (og.isMultiSelect()) {
-                            og.setMultiSelect(false);
-                            og.setNullSelectionItemId(NULL_SELECTION_ID);
-                        } else {
-                            og.setNullSelectionItemId(null);
-                            og.setMultiSelect(true);
-                        }
-                    }
-                });
-    }
-
-    private Component createInvertDisabledItemsAction() {
-        return createButtonAction("Invert disabled items",
-                new Command<OptionGroup, Boolean>() {
-
-                    public void execute(OptionGroup c, Boolean value,
-                            Object data) {
-                        for (Object itemId : c.getItemIds()) {
-                            c.setItemEnabled(itemId, !c.isItemEnabled(itemId));
-                        }
-                    }
-                });
-    }
-
-    private OptionGroup createOptionGroup(String caption) {
-        OptionGroup og = new OptionGroup(caption, cities);
-        og.setImmediate(true);
-        return og;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Test case for disabled items in an OptionGroup";
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/optiongroup/HtmlOptionGroupItems.html b/tests/src/com/vaadin/tests/components/optiongroup/HtmlOptionGroupItems.html
deleted file mode 100644
index d74354299d..0000000000
--- a/tests/src/com/vaadin/tests/components/optiongroup/HtmlOptionGroupItems.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">HtmlOptionGroupItems</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.optiongroup.HtmlOptionGroupItems?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsoptiongroupHtmlOptionGroupItems::PID_Sbuttonaction-Toggle html mode/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>html-and-text</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsoptiongroupHtmlOptionGroupItems::PID_Sbuttonaction-Toggle html mode/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>text-and-html</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/optiongroup/HtmlOptionGroupItems.java b/tests/src/com/vaadin/tests/components/optiongroup/HtmlOptionGroupItems.java
deleted file mode 100644
index 0f6ae8917a..0000000000
--- a/tests/src/com/vaadin/tests/components/optiongroup/HtmlOptionGroupItems.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package com.vaadin.tests.components.optiongroup;
-
-import java.util.Arrays;
-import java.util.List;
-
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.OptionGroup;
-
-public class HtmlOptionGroupItems extends ComponentTestCase<OptionGroup> {
-
-    private static final List<String> cities = Arrays.asList(new String[] {
-            "<i>Berlin</i>", "<b>Brussels</b>", "<u>H</u>elsinki",
-            "<span style='font-size: 20px'>Madrid</span>",
-            "<pre><i>Oslo</i>\nNorway</pre>", "<button>Paris</button>",
-            "<input type='text' value='Stockholm' />" });
-
-    private static final String NULL_SELECTION_ID = cities.get(0);
-
-    @Override
-    protected Class<OptionGroup> getTestClass() {
-        return OptionGroup.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-
-        OptionGroup og = createOptionGroup("");
-        og.setItemEnabled(cities.get(2), false);
-        og.setItemEnabled(cities.get(5), false);
-        og.setValue(Arrays.asList(cities.get(2)));
-        og.setNullSelectionAllowed(true);
-        og.setNullSelectionItemId(NULL_SELECTION_ID);
-        addTestComponent(og);
-
-        og = createOptionGroup("");
-        og.setMultiSelect(true);
-        og.setHtmlContentAllowed(true);
-        og.setValue(Arrays.asList(cities.get(2)));
-        og.setNullSelectionAllowed(true);
-        og.setItemEnabled(cities.get(2), false);
-        og.setItemEnabled(cities.get(5), false);
-        addTestComponent(og);
-
-    }
-
-    @Override
-    protected void createCustomActions(List<Component> actions) {
-        actions.add(createInvertDisabledItemsAction());
-        actions.add(createToggleSelectionModeAction());
-        actions.add(createInvertHtmlItemsAction());
-    }
-
-    private Component createInvertHtmlItemsAction() {
-        return createButtonAction("Toggle html mode",
-                new Command<OptionGroup, Boolean>() {
-                    public void execute(OptionGroup og, Boolean value,
-                            Object data) {
-                        og.setHtmlContentAllowed(!og.isHtmlContentAllowed());
-                    }
-                });
-    }
-
-    private Component createToggleSelectionModeAction() {
-        return createButtonAction("Toggle selection mode",
-                new Command<OptionGroup, Boolean>() {
-
-                    public void execute(OptionGroup og, Boolean value,
-                            Object data) {
-                        if (og.isMultiSelect()) {
-                            og.setMultiSelect(false);
-                            og.setNullSelectionItemId(NULL_SELECTION_ID);
-                        } else {
-                            og.setNullSelectionItemId(null);
-                            og.setMultiSelect(true);
-                        }
-                    }
-                });
-    }
-
-    private Component createInvertDisabledItemsAction() {
-        return createButtonAction("Invert disabled items",
-                new Command<OptionGroup, Boolean>() {
-
-                    public void execute(OptionGroup c, Boolean value,
-                            Object data) {
-                        for (Object itemId : c.getItemIds()) {
-                            c.setItemEnabled(itemId, !c.isItemEnabled(itemId));
-                        }
-                    }
-                });
-    }
-
-    private OptionGroup createOptionGroup(String caption) {
-        OptionGroup og = new OptionGroup(caption, cities);
-        og.setImmediate(true);
-        return og;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Test case for html items in an OptionGroup";
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/optiongroup/OptionGroupItemIcons.html b/tests/src/com/vaadin/tests/components/optiongroup/OptionGroupItemIcons.html
deleted file mode 100644
index 978d911a2d..0000000000
--- a/tests/src/com/vaadin/tests/components/optiongroup/OptionGroupItemIcons.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>OptionGroupItemIcons</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">OptionGroupItemIcons</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.optiongroup.OptionGroups?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsoptiongroupOptionGroups::PID_Smenu#item0</td>
-	<td>34,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsoptiongroupOptionGroups::Root/VOverlay[0]/VMenuBar[0]#item1</td>
-	<td>36,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsoptiongroupOptionGroups::Root/VOverlay[1]/VMenuBar[0]#item6</td>
-	<td>45,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsoptiongroupOptionGroups::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>31,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>radio</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsoptiongroupOptionGroups::PID_Smenu#item0</td>
-	<td>44,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsoptiongroupOptionGroups::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>31,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsoptiongroupOptionGroups::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>79,12</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>check</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/optiongroup/OptionGroupMultipleValueChange.java b/tests/src/com/vaadin/tests/components/optiongroup/OptionGroupMultipleValueChange.java
deleted file mode 100644
index 29a81720c7..0000000000
--- a/tests/src/com/vaadin/tests/components/optiongroup/OptionGroupMultipleValueChange.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.vaadin.tests.components.optiongroup;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.OptionGroup;
-
-public class OptionGroupMultipleValueChange extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Clicking on the description of an option should behave exactly like clicking on the radio button. No extra 'null' valuechange event should be sent";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3066;
-    }
-
-    @Override
-    protected void setup() {
-        final OptionGroup og = new OptionGroup();
-        og.addItem("Clicking on the text might cause an extra valuechange event");
-        og.addItem("Second option, same thing");
-        og.setImmediate(true);
-        addComponent(og);
-
-        final Label events = new Label("", Label.CONTENT_PREFORMATTED);
-        events.setWidth(null);
-        addComponent(events);
-
-        og.addListener(new Property.ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                String s = "ValueChange: " + event.getProperty().getValue();
-                events.setValue(events.getValue() + "\n" + s);
-            }
-        });
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/optiongroup/OptionGroups.java b/tests/src/com/vaadin/tests/components/optiongroup/OptionGroups.java
deleted file mode 100644
index 1e752e7c26..0000000000
--- a/tests/src/com/vaadin/tests/components/optiongroup/OptionGroups.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.vaadin.tests.components.optiongroup;
-
-import java.util.Collection;
-import java.util.LinkedHashMap;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.select.AbstractSelectTestCase;
-import com.vaadin.ui.OptionGroup;
-
-public class OptionGroups extends AbstractSelectTestCase<OptionGroup> {
-
-    @Override
-    protected Class<OptionGroup> getTestClass() {
-        return OptionGroup.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-
-        createDisabledItemsMultiToggle("Disabled items");
-        createBooleanAction("HTML content allowed", CATEGORY_STATE, false,
-                new Command<OptionGroup, Boolean>() {
-                    public void execute(OptionGroup og, Boolean value,
-                            Object data) {
-                        og.setHtmlContentAllowed(value.booleanValue());
-                    }
-                });
-        createIconToggle("Item icons");
-    }
-
-    private void createIconToggle(String string) {
-        LinkedHashMap<String, ThemeResource> options = new LinkedHashMap<String, ThemeResource>();
-        options.put("-", null);
-        options.put("16x16", ICON_16_USER_PNG_CACHEABLE);
-        options.put("32x32", ICON_32_ATTENTION_PNG_CACHEABLE);
-        options.put("64x64", ICON_64_EMAIL_REPLY_PNG_CACHEABLE);
-
-        createSelectAction(string, CATEGORY_DECORATIONS, options, options
-                .keySet().iterator().next(),
-                new Command<OptionGroup, ThemeResource>() {
-                    public void execute(OptionGroup c, ThemeResource icon,
-                            Object data) {
-                        Collection<?> itemIds = c.getItemIds();
-                        for (Object itemId : itemIds) {
-                            c.setItemIcon(itemId, icon);
-                        }
-                    }
-                });
-    }
-
-    private void createDisabledItemsMultiToggle(String category) {
-        for (Object id : getComponent().getItemIds()) {
-            createBooleanAction(id.toString() + " - enabled", category, true,
-                    enabledItemCommand, id);
-        }
-    }
-
-    private Command<OptionGroup, Boolean> enabledItemCommand = new Command<OptionGroup, Boolean>() {
-
-        public void execute(OptionGroup c, Boolean value, Object data) {
-            c.setItemEnabled(data, value);
-
-        }
-    };
-
-}
diff --git a/tests/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutTest.java b/tests/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutTest.java
deleted file mode 100644
index b06179efd7..0000000000
--- a/tests/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutTest.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.vaadin.tests.components.orderedlayout;
-
-import com.vaadin.tests.components.AbstractOrderedLayoutTest;
-import com.vaadin.ui.HorizontalLayout;
-
-public class HorizontalLayoutTest extends
-        AbstractOrderedLayoutTest<HorizontalLayout> {
-
-    @Override
-    protected Class<HorizontalLayout> getTestClass() {
-        return HorizontalLayout.class;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/orderedlayout/LayoutClickListenerTest.html b/tests/src/com/vaadin/tests/components/orderedlayout/LayoutClickListenerTest.html
deleted file mode 100644
index 6b850fb52a..0000000000
--- a/tests/src/com/vaadin/tests/components/orderedlayout/LayoutClickListenerTest.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>LayoutClickListenerTest</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">LayoutClickListenerTest</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.orderedlayout.LayoutClickListenerTest?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VLink[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VTabsheet[0]/VTabsheetPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VTabsheet[0]/VTabsheetPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VTabsheet[0]/VTabsheetPanel[0]/VVerticalLayout[0]/ChildComponentContainer[2]/VLink[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VTabsheet[0]/VTabsheetPanel[0]/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[4]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[4]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[4]/VVerticalLayout[0]/ChildComponentContainer[2]/VLink[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[4]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>everything_clicked</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/orderedlayout/LayoutClickListenerTest.java b/tests/src/com/vaadin/tests/components/orderedlayout/LayoutClickListenerTest.java
deleted file mode 100644
index 4f4faf15bb..0000000000
--- a/tests/src/com/vaadin/tests/components/orderedlayout/LayoutClickListenerTest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.vaadin.tests.components.orderedlayout;
-
-import java.util.Arrays;
-
-import com.vaadin.event.LayoutEvents.LayoutClickEvent;
-import com.vaadin.event.LayoutEvents.LayoutClickListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-public class LayoutClickListenerTest extends TestBase {
-
-    @Override
-    protected void setup() {
-
-        // Create a grid layout with click events
-        final GridLayout layout = new GridLayout(3, 2);
-        layout.addStyleName("border");
-        layout.setSpacing(true);
-        layout.setSizeFull();
-
-        // Add some components to the layout
-        layout.addComponent(new TextField(null, "Click here"));
-        layout.addComponent(new Link("Click here", null));
-
-        Select select = new Select(null, Arrays.asList("Click here"));
-        select.select("Click here");
-        layout.addComponent(select);
-
-        // Tab content
-        VerticalLayout l1 = new VerticalLayout();
-        l1.setMargin(true);
-        l1.addComponent(new Label("This is a label."));
-        l1.addComponent(new TextField(null, "Click here"));
-        l1.addComponent(new Link("Click here", null));
-
-        TabSheet t = new TabSheet();
-        t.setHeight("200px");
-        t.addTab(l1, "Tab", null);
-        layout.addComponent(t);
-
-        VerticalLayout nestedLayout = new VerticalLayout();
-        nestedLayout.addComponent(new Label("This is a label."));
-        nestedLayout.addComponent(new TextField(null, "Click here"));
-        nestedLayout.addComponent(new Link("Click here", null));
-
-        HorizontalLayout nestedLayout2 = new HorizontalLayout();
-        nestedLayout2.addComponent(new Label("Deeply nested label"));
-        nestedLayout.addComponent(nestedLayout2);
-
-        layout.addComponent(nestedLayout);
-
-        // Listen for layout click events
-        layout.addListener(new LayoutClickListener() {
-            public void layoutClick(LayoutClickEvent event) {
-
-                // Get the deepest nested component which was clicked
-                Component clickedComponent = event.getClickedComponent();
-
-                if (clickedComponent == null) {
-                    // Not over any child component
-                    LayoutClickListenerTest.this.addComponent(new Label(
-                            "The click was not over any component."));
-                } else {
-                    // Over a child component
-                    String message = "The click was over a "
-                            + clickedComponent.getClass().getCanonicalName()
-                            + " in an immediate child component of type "
-                            + event.getChildComponent().getClass()
-                                    .getCanonicalName();
-                    LayoutClickListenerTest.this
-                            .addComponent(new Label(message));
-                }
-            }
-        });
-
-        addComponent(layout);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Layout click listeners should provide access to the deepest nested component clicked - click anywhere in the layout.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6493;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/orderedlayout/ReplaceComponentNPE.html b/tests/src/com/vaadin/tests/components/orderedlayout/ReplaceComponentNPE.html
deleted file mode 100644
index 7a071030dc..0000000000
--- a/tests/src/com/vaadin/tests/components/orderedlayout/ReplaceComponentNPE.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>ReplaceComponentNPE</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ReplaceComponentNPE</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.orderedlayout.ReplaceComponentNPE</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsorderedlayoutReplaceComponentNPE::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/orderedlayout/ReplaceComponentNPE.java b/tests/src/com/vaadin/tests/components/orderedlayout/ReplaceComponentNPE.java
deleted file mode 100644
index 555495cc58..0000000000
--- a/tests/src/com/vaadin/tests/components/orderedlayout/ReplaceComponentNPE.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.vaadin.tests.components.orderedlayout;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.VerticalLayout;
-
-public class ReplaceComponentNPE extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Clicking 'ReplaceComponent' should replace the 'Button' button with a VericalLayout, and move the button inside the verticalLayout. Visually this can be seen by the added margins of the VerticalLayout.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3195;
-    }
-
-    final Button button = new Button("Button");
-    final VerticalLayout outer = new VerticalLayout();
-
-    @Override
-    protected void setup() {
-        outer.setMargin(true);
-
-        Button changer = new Button("ReplaceComponent");
-        changer.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                getLayout().replaceComponent(button, outer);
-                outer.addComponent(button);
-            }
-        });
-
-        getLayout().addComponent(button);
-        getLayout().addComponent(changer);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutTest.java b/tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutTest.java
deleted file mode 100644
index 20babc8576..0000000000
--- a/tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutTest.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.vaadin.tests.components.orderedlayout;
-
-import com.vaadin.tests.components.AbstractOrderedLayoutTest;
-import com.vaadin.ui.VerticalLayout;
-
-public class VerticalLayoutTest extends
-        AbstractOrderedLayoutTest<VerticalLayout> {
-
-    @Override
-    protected Class<VerticalLayout> getTestClass() {
-        return VerticalLayout.class;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.html b/tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.html
deleted file mode 100644
index f0d837d97a..0000000000
--- a/tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://artur.virtuallypreinstalled.com/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.orderedlayout.VerticalLayoutWidthCalculation?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsorderedlayoutVerticalLayoutWidthCalculation::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsorderedlayoutVerticalLayoutWidthCalculation::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>window-sized-to-one-textfield</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.java b/tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.java
deleted file mode 100644
index f59b940353..0000000000
--- a/tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.vaadin.tests.components.orderedlayout;
-
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class VerticalLayoutWidthCalculation extends AbstractTestCase {
-    @Override
-    public void init() {
-        final Window mainWindow = new Window("Vaadintest Application");
-        mainWindow.addWindow(createSubWindow());
-        setMainWindow(mainWindow);
-
-    }
-
-    private Window createSubWindow() {
-        HorizontalLayout hl = new HorizontalLayout();
-
-        VerticalLayout vlTF1 = new VerticalLayout();
-        vlTF1.setSizeUndefined();
-        final TextField tf1 = new TextField("Text1");
-        tf1.setSizeUndefined();
-        vlTF1.addComponent(tf1);
-        hl.addComponent(vlTF1);
-
-        VerticalLayout vlTF2 = new VerticalLayout();
-        vlTF2.setSizeUndefined();
-        final TextField tf2 = new TextField("Text2");
-        tf2.setVisible(false);
-        tf2.setSizeUndefined();
-        vlTF2.addComponent(tf2);
-        hl.addComponent(vlTF2);
-
-        Window wnd = new Window("Test");
-        wnd.getContent().setSizeUndefined();
-        wnd.addComponent(hl);
-        Button btn = new Button("Show/hide");
-        btn.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                tf2.setVisible(!tf2.isVisible());
-            }
-        });
-        wnd.addComponent(btn);
-
-        return wnd;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The second TextField is initially invisible. Make it visible and then hide it again. You should end up with the same result as initially.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 7260;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/panel/PanelClickListenerRelativeCoordinates.html b/tests/src/com/vaadin/tests/components/panel/PanelClickListenerRelativeCoordinates.html
deleted file mode 100644
index eb40765d03..0000000000
--- a/tests/src/com/vaadin/tests/components/panel/PanelClickListenerRelativeCoordinates.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://192.168.2.60:8080/" />
-<title>PanelClickListenerRelativeCoordinates</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">PanelClickListenerRelativeCoordinates</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.panel.PanelClickListenerRelativeCoordinates?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>focus</td>
-	<td>vaadin=runcomvaadintestscomponentspanelPanelClickListenerRelativeCoordinates::/VVerticalLayout[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspanelPanelClickListenerRelativeCoordinates::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]</td>
-	<td>287,25</td>
-</tr>
-<!-- Should really be 287, 25 but due to v-view border-top it is not always... <tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentspanelPanelClickListenerRelativeCoordinates::Root/VNotification[0]/HTML[0]/domChild[0]</td>
-	<td>287, 25</td>
-</tr>-->
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>click-287-25</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspanelPanelClickListenerRelativeCoordinates::Root/VNotification[0]/HTML[0]/domChild[0]</td>
-	<td>63,34</td>
-</tr>
-<!--click on caption-->
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspanelPanelClickListenerRelativeCoordinates::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>10,10</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<!-- Should really be 10,10 but due to v-view border-top it is not always... <tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentspanelPanelClickListenerRelativeCoordinates::Root/VNotification[0]/HTML[0]/domChild[0]</td>
-	<td>10, 10</td>
-</tr>-->
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>click-10-10</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/panel/PanelClickListenerRelativeCoordinates.java b/tests/src/com/vaadin/tests/components/panel/PanelClickListenerRelativeCoordinates.java
deleted file mode 100644
index 65a185b160..0000000000
--- a/tests/src/com/vaadin/tests/components/panel/PanelClickListenerRelativeCoordinates.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.vaadin.tests.components.panel;
-
-import com.vaadin.event.MouseEvents.ClickEvent;
-import com.vaadin.event.MouseEvents.ClickListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Panel;
-
-public class PanelClickListenerRelativeCoordinates extends TestBase {
-
-    @Override
-    protected void setup() {
-        Panel panel = new Panel("Panel's caption");
-        panel.addListener(new ClickListener() {
-
-            public void click(ClickEvent event) {
-                getMainWindow()
-                        .showNotification(
-                                "" + event.getRelativeX() + ", "
-                                        + event.getRelativeY());
-            }
-        });
-        addComponent(panel);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Click the panel to get coordinates relative to the top-left corder of the panel.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/panel/PanelShouldNotScroll.html b/tests/src/com/vaadin/tests/components/panel/PanelShouldNotScroll.html
deleted file mode 100644
index 8b03ca330f..0000000000
--- a/tests/src/com/vaadin/tests/components/panel/PanelShouldNotScroll.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>CssLayoutRemoveComponent</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">CssLayoutRemoveComponent</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.panel.PanelShouldNotScroll?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentspanelPanelShouldNotScroll::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>scroll</td>
-	<td>vaadin=runcomvaadintestscomponentspanelPanelShouldNotScroll::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/domChild[1]</td>
-	<td>443</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentspanelPanelShouldNotScroll::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/panel/PanelShouldNotScroll.java b/tests/src/com/vaadin/tests/components/panel/PanelShouldNotScroll.java
deleted file mode 100644
index 7c537fe710..0000000000
--- a/tests/src/com/vaadin/tests/components/panel/PanelShouldNotScroll.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.vaadin.tests.components.panel;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.VerticalLayout;
-
-public class PanelShouldNotScroll extends TestBase {
-
-    private Button addMore;
-
-    @Override
-    protected void setup() {
-        final Panel p = new Panel(new CssLayout());
-        p.setScrollable(true);
-        p.setSizeFull();
-        p.setHeight("600px");
-        p.addComponent(foo());
-        addMore = new Button("Add");
-        addMore.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                p.removeComponent(addMore);
-                p.addComponent(foo());
-                p.addComponent(addMore);
-            }
-        });
-        p.addComponent(addMore);
-        addComponent(p);
-        ((VerticalLayout) getMainWindow().getContent()).setSizeFull();
-    }
-
-    private Component foo() {
-        Panel panel = new Panel();
-        panel.addComponent(new Label(
-                "fooooooooo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>"
-                        + "foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>",
-                Label.CONTENT_XHTML));
-        return panel;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "adding a panel to the bottom of the scrolling panel should not scroll up to the top";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 7462;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/panel/PanelShouldRemoveActionHandler.java b/tests/src/com/vaadin/tests/components/panel/PanelShouldRemoveActionHandler.java
deleted file mode 100644
index eec39359aa..0000000000
--- a/tests/src/com/vaadin/tests/components/panel/PanelShouldRemoveActionHandler.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package com.vaadin.tests.components.panel;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.vaadin.event.Action;
-import com.vaadin.event.Action.Handler;
-import com.vaadin.event.ShortcutAction;
-import com.vaadin.event.ShortcutAction.ModifierKey;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TextField;
-
-public class PanelShouldRemoveActionHandler extends TestBase {
-
-    private Panel panel;
-
-    @Override
-    protected String getDescription() {
-        return "Adding action handlers to the panel should make them appear on the client side. Removing the action handlers should remove them also from the client side, also if all action handlers are removed.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2941;
-    }
-
-    @Override
-    protected void setup() {
-        panel = new Panel("A panel");
-        panel.addComponent(new TextField());
-        Button add = new Button("Add an action handler",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        add();
-                    }
-
-                });
-        Button addAnother = new Button("Add another action handler",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        addAnother();
-                    }
-
-                });
-        Button remove = new Button("Remove an action handler",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        remove();
-                    }
-
-                });
-
-        addComponent(panel);
-        addComponent(add);
-        addComponent(addAnother);
-        addComponent(remove);
-    }
-
-    public void remove() {
-        panel.setCaption(panel.getCaption() + " - Removed handler");
-        panel.removeActionHandler(actionHandlers.remove(actionHandlers.size() - 1));
-    }
-
-    private List<Handler> actionHandlers = new ArrayList<Handler>();
-
-    public void add() {
-        panel.setCaption(panel.getCaption() + " - Added handler");
-        Handler actionHandler = new Handler() {
-
-            public Action[] getActions(Object target, Object sender) {
-                return new Action[] { new ShortcutAction("Ctrl+Left",
-                        ShortcutAction.KeyCode.ARROW_LEFT,
-                        new int[] { ModifierKey.CTRL }) };
-            }
-
-            public void handleAction(Action action, Object sender, Object target) {
-                getMainWindow().showNotification(
-                        "Handling action " + action.getCaption());
-            }
-
-        };
-
-        addHandler(actionHandler);
-    }
-
-    public void addAnother() {
-        Handler actionHandler = new Handler() {
-
-            public Action[] getActions(Object target, Object sender) {
-                return new Action[] { new ShortcutAction("Ctrl+Right",
-                        ShortcutAction.KeyCode.ARROW_RIGHT,
-                        new int[] { ModifierKey.CTRL }) };
-            }
-
-            public void handleAction(Action action, Object sender, Object target) {
-                getMainWindow().showNotification(
-                        "Handling action " + action.getCaption());
-            }
-
-        };
-
-        addHandler(actionHandler);
-    }
-
-    private void addHandler(Handler actionHandler) {
-        actionHandlers.add(actionHandler);
-        panel.addActionHandler(actionHandler);
-        panel.setCaption("A panel with " + actionHandlers.size()
-                + " action handlers");
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/panel/PanelTest.java b/tests/src/com/vaadin/tests/components/panel/PanelTest.java
deleted file mode 100644
index 29d93ce86c..0000000000
--- a/tests/src/com/vaadin/tests/components/panel/PanelTest.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.vaadin.tests.components.panel;
-
-import com.vaadin.tests.components.AbstractComponentContainerTest;
-import com.vaadin.ui.Panel;
-
-public class PanelTest<T extends Panel> extends
-        AbstractComponentContainerTest<T> {
-
-    @SuppressWarnings("unchecked")
-    @Override
-    protected Class<T> getTestClass() {
-        return (Class<T>) Panel.class;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/passwordfield/PasswordFieldBasicStates.html b/tests/src/com/vaadin/tests/components/passwordfield/PasswordFieldBasicStates.html
deleted file mode 100644
index 70be23541e..0000000000
--- a/tests/src/com/vaadin/tests/components/passwordfield/PasswordFieldBasicStates.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.passwordfield.PasswordFieldTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--Write "content" -->
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::PID_StestComponent</td>
-	<td>content</td>
-</tr>
-<!--Disable event log-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::PID_Smenu#item1</td>
-	<td>26,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>20,8</td>
-</tr>
-<!-- Enabled state -->
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled</td>
-</tr>
-<!--Disable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::PID_Smenu#item0</td>
-	<td>38,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>31,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>57,13</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled</td>
-</tr>
-<!--Set readonly-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::PID_Smenu#item0</td>
-	<td>6,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>20,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled-readonly</td>
-</tr>
-<!--Enable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::PID_Smenu#item0</td>
-	<td>43,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>42,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>53,5</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>readonly</td>
-</tr>
-<!--Set read-write-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::PID_Smenu#item0</td>
-	<td>6,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>20,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/passwordfield/PasswordFieldTest.java b/tests/src/com/vaadin/tests/components/passwordfield/PasswordFieldTest.java
deleted file mode 100644
index 86d035e925..0000000000
--- a/tests/src/com/vaadin/tests/components/passwordfield/PasswordFieldTest.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.vaadin.tests.components.passwordfield;
-
-import com.vaadin.event.FieldEvents.TextChangeListener;
-import com.vaadin.tests.components.abstractfield.AbstractTextFieldTest;
-import com.vaadin.ui.PasswordField;
-
-public class PasswordFieldTest extends AbstractTextFieldTest<PasswordField>
-        implements TextChangeListener {
-
-    @Override
-    protected Class<PasswordField> getTestClass() {
-        return PasswordField.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/popupview/PopupViewLabelResized.java b/tests/src/com/vaadin/tests/components/popupview/PopupViewLabelResized.java
deleted file mode 100644
index 52bdd47790..0000000000
--- a/tests/src/com/vaadin/tests/components/popupview/PopupViewLabelResized.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.vaadin.tests.components.popupview;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.PopupView;
-
-public class PopupViewLabelResized extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "When clicking on the popup view on the left, its size should not change.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3483;
-    }
-
-    @Override
-    protected void setup() {
-        GridLayout gl = new GridLayout(3, 1);
-        gl.setSizeFull();
-
-        Label expander = new Label();
-        gl.addComponent(expander, 1, 0);
-        gl.setColumnExpandRatio(1, 1);
-
-        gl.addComponent(
-                new PopupView("Click here to popup", new Label("test")), 0, 0);
-        gl.addComponent(
-                new PopupView("Click here to popup", new Label("test")), 2, 0);
-
-        addComponent(gl);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/popupview/PopupViewNullValues.java b/tests/src/com/vaadin/tests/components/popupview/PopupViewNullValues.java
deleted file mode 100644
index 78e66e2db3..0000000000
--- a/tests/src/com/vaadin/tests/components/popupview/PopupViewNullValues.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.vaadin.tests.components.popupview;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.PopupView;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window.Notification;
-
-public class PopupViewNullValues extends TestBase {
-
-    private PopupView pv[] = new PopupView[4];
-    private Button b[] = new Button[4];
-
-    @Override
-    protected void setup() {
-        try {
-            pv[0] = new PopupView("Popupview 1 - no component", null);
-            addComponent(pv[0]);
-            b[0] = new Button("Open popupview 1", new ClickListener() {
-
-                public void buttonClick(ClickEvent event) {
-                    pv[0].setPopupVisible(true);
-                }
-
-            });
-        } catch (Exception e) {
-            getMainWindow()
-                    .showNotification(
-                            "Error, 'null content' should not throw an exception at this point",
-                            Notification.TYPE_ERROR_MESSAGE);
-        }
-
-        try {
-            pv[1] = new PopupView(null, new TextField(
-                    "Empty html, contains component"));
-            addComponent(pv[1]);
-            b[1] = new Button("Open popupview 2", new ClickListener() {
-
-                public void buttonClick(ClickEvent event) {
-                    pv[1].setPopupVisible(true);
-                }
-
-            });
-        } catch (Exception e) {
-            getMainWindow()
-                    .showNotification(
-                            "Error, 'null html', should not throw an exception at this point",
-                            Notification.TYPE_ERROR_MESSAGE);
-        }
-
-        try {
-            pv[2] = new PopupView(null, null);
-            addComponent(pv[2]);
-            b[2] = new Button("Open popupview 3", new ClickListener() {
-
-                public void buttonClick(ClickEvent event) {
-                    pv[2].setPopupVisible(true);
-                }
-
-            });
-        } catch (Exception e) {
-            getMainWindow()
-                    .showNotification(
-                            "Error, 'null html, null content', should not throw an exception at this point",
-                            Notification.TYPE_ERROR_MESSAGE);
-        }
-        try {
-            pv[3] = new PopupView("Popupview 4 - has component", new TextField(
-                    "This is the content of popupview 4"));
-            addComponent(pv[3]);
-            b[3] = new Button("Open popupview 4", new ClickListener() {
-
-                public void buttonClick(ClickEvent event) {
-                    pv[3].setPopupVisible(true);
-                }
-
-            });
-        } catch (Exception e) {
-            getMainWindow()
-                    .showNotification(
-                            "Error, 'null html, null content', should not throw an exception at this point",
-                            Notification.TYPE_ERROR_MESSAGE);
-        }
-
-        addComponent(b[0]);
-        addComponent(b[1]);
-        addComponent(b[2]);
-        addComponent(b[3]);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "This test case contains 3 popupviews. Only the second and the forth popup views have non-null components and can be opened. 1 and 3 will produce an exception if you try to open them.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3248;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/popupview/PopupViewOffScreen.html b/tests/src/com/vaadin/tests/components/popupview/PopupViewOffScreen.html
deleted file mode 100644
index 99ee864179..0000000000
--- a/tests/src/com/vaadin/tests/components/popupview/PopupViewOffScreen.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>PopupViewOffScreen</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">PopupViewOffScreen</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.popupview.PopupViewOffScreen</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentspopupviewPopupViewOffScreen::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/popupview/PopupViewOffScreen.java b/tests/src/com/vaadin/tests/components/popupview/PopupViewOffScreen.java
deleted file mode 100644
index 7067281fa2..0000000000
--- a/tests/src/com/vaadin/tests/components/popupview/PopupViewOffScreen.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.vaadin.tests.components.popupview;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.LoremIpsum;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.PopupView;
-import com.vaadin.ui.VerticalLayout;
-
-public class PopupViewOffScreen extends TestBase {
-
-    private List<PopupView> popupViews = new ArrayList<PopupView>();
-
-    @Override
-    protected String getDescription() {
-        return "A popupview should be displayed on screen. If the popup position is close to a border it should be moved so it is still on screen.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3099;
-    }
-
-    @Override
-    protected void setup() {
-        GridLayout gl = new GridLayout(3, 3);
-        gl.setSizeFull();
-        Label expander = new Label();
-        gl.addComponent(expander, 1, 1);
-        gl.setColumnExpandRatio(1, 1);
-        gl.setRowExpandRatio(1, 1);
-
-        Button showall = new Button("Popup all", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                for (PopupView pv : popupViews) {
-                    pv.setPopupVisible(true);
-                }
-            }
-        });
-        gl.addComponent(showall, 1, 0);
-        gl.addComponent(createPopupView("red"), 0, 0);
-        gl.addComponent(createPopupView("green"), 2, 0);
-        gl.addComponent(createPopupView("blue"), 0, 2);
-        gl.addComponent(createPopupView("yellow"), 2, 2);
-
-        addComponent(gl);
-        gl.getParent().setSizeFull();
-    }
-
-    private Component createPopupView(String bg) {
-        VerticalLayout vl = new VerticalLayout();
-        vl.setSpacing(false);
-        vl.setMargin(false);
-        vl.setSizeFull();
-
-        Panel p = new Panel(vl);
-        p.setWidth("400px");
-        p.setHeight("400px");
-
-        Label l = new Label(
-                "<div style='width: 100%; height: 100%; background: " + bg
-                        + "'>" + LoremIpsum.get(2000) + "</div>",
-                Label.CONTENT_XHTML);
-        l.setSizeFull();
-        p.addComponent(l);
-        PopupView pv = new PopupView("Click here to popup", p);
-
-        popupViews.add(pv);
-        return pv;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/popupview/PopupViewShouldCloseOnTabOut.html b/tests/src/com/vaadin/tests/components/popupview/PopupViewShouldCloseOnTabOut.html
deleted file mode 100644
index fb62215f16..0000000000
--- a/tests/src/com/vaadin/tests/components/popupview/PopupViewShouldCloseOnTabOut.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>PopupViewShouldCloseOnTabOut</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">PopupViewShouldCloseOnTabOut</td></tr>
-</thead><tbody>
-<tr>
-    <td>open</td>
-    <td>/run/com.vaadin.tests.components.popupview.PopupViewShouldCloseOnTabOut?restartApplication</td>
-    <td></td>
-</tr>
-<tr>
-    <td>waitForVaadin</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentspopupviewPopupViewShouldCloseOnTabOut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupView[0]/domChild[0]</td>
-    <td>16,8</td>
-</tr>
-<tr>
-    <td>waitForVaadin</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>//div[1]/div/input</td>
-    <td></td>
-</tr>
-<tr>
-    <td>waitForVaadin</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentspopupviewPopupViewShouldCloseOnTabOut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupView[0]/domChild[0]</td>
-    <td>shift tab</td>
-</tr>
-<tr>
-    <td>waitForVaadin</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>pause</td>
-    <td>100</td>
-    <td></td>
-</tr>
-<tr>
-    <td>screenCapture</td>
-    <td></td>
-    <td>PopupViewShouldBeClosed</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/popupview/PopupViewShouldCloseOnTabOut.java b/tests/src/com/vaadin/tests/components/popupview/PopupViewShouldCloseOnTabOut.java
deleted file mode 100644
index 7e917630c8..0000000000
--- a/tests/src/com/vaadin/tests/components/popupview/PopupViewShouldCloseOnTabOut.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.vaadin.tests.components.popupview;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.PopupView;
-import com.vaadin.ui.PopupView.Content;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-@SuppressWarnings("serial")
-public class PopupViewShouldCloseOnTabOut extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The PopupView should close when the user moves focus away from it using the TAB key.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5059;
-    }
-
-    @Override
-    protected void setup() {
-        PopupView pv = new PopupView(new Content() {
-
-            public String getMinimizedValueAsHTML() {
-                return "<b>click me</b>";
-            }
-
-            public Component getPopupComponent() {
-                VerticalLayout vl = new VerticalLayout();
-                TextField field1 = new TextField();
-                field1.setValue("one");
-                field1.focus();
-                vl.addComponent(field1);
-                TextField field2 = new TextField();
-                field2.setValue("two");
-                vl.addComponent(field2);
-                vl.setWidth("600px");
-                return vl;
-            }
-        });
-        addComponent(pv);
-        TextField main = new TextField();
-        main.setValue("main");
-        addComponent(main);
-        TextField main2 = new TextField();
-        main2.setValue("main2");
-        addComponent(main2);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/popupview/PopupViewWithRTE.java b/tests/src/com/vaadin/tests/components/popupview/PopupViewWithRTE.java
deleted file mode 100644
index ea94ee2185..0000000000
--- a/tests/src/com/vaadin/tests/components/popupview/PopupViewWithRTE.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.vaadin.tests.components.popupview;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.PopupView;
-import com.vaadin.ui.PopupView.Content;
-import com.vaadin.ui.RichTextArea;
-import com.vaadin.ui.VerticalLayout;
-
-public class PopupViewWithRTE extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Rich text editor should work properly in popupview. Try to edit text below.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3043;
-    }
-
-    @Override
-    protected void setup() {
-        PopupView pv = new PopupView(new Content() {
-
-            RichTextArea rte = new RichTextArea();
-
-            VerticalLayout vl = new VerticalLayout();
-
-            public String getMinimizedValueAsHTML() {
-                Object value = rte.getValue();
-                if (value == null || "".equals(value)) {
-                    value = "Initial <b>content</b> for <h3>rte</h3>.";
-                    rte.setValue(value);
-                    rte.setHeight("150px");
-                    rte.setWidth("100%");
-                    vl.addComponent(rte);
-                    vl.setWidth("600px");
-                }
-                return value.toString();
-            }
-
-            public Component getPopupComponent() {
-                return vl;
-            }
-        });
-        getLayout().addComponent(pv);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/progressindicator/ProgressIndicatorInvisible.java b/tests/src/com/vaadin/tests/components/progressindicator/ProgressIndicatorInvisible.java
deleted file mode 100644
index 7e6cfd17ea..0000000000
--- a/tests/src/com/vaadin/tests/components/progressindicator/ProgressIndicatorInvisible.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vaadin.tests.components.progressindicator;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.ProgressIndicator;
-import com.vaadin.ui.VerticalLayout;
-
-public class ProgressIndicatorInvisible extends TestBase {
-
-    @Override
-    protected void setup() {
-        final VerticalLayout lo = new VerticalLayout();
-
-        addComponent(lo);
-
-        final ProgressIndicator pi = new ProgressIndicator();
-        pi.setPollingInterval(400);
-        lo.addComponent(pi);
-
-        final Button b = new Button("Hide container of progress indicator");
-        addComponent(b);
-
-        b.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                // If we skip hiding the layout, hiding the ProgressIndicator
-                // will stop the polling
-                lo.setVisible(!lo.isVisible());
-                // Not even this works
-                pi.setVisible(!lo.isVisible());
-                if (!lo.isVisible()) {
-                    b.setCaption("Still polling");
-                } else {
-                    b.setCaption("Hide container of progress indicator");
-                }
-
-            }
-
-        });
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Progress indicator does not stop polling when its parent layout is made invisible";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4014;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreaSize.html b/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreaSize.html
deleted file mode 100644
index 7708c88e54..0000000000
--- a/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreaSize.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>RichTextAreaSize</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">RichTextAreaSize</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.richtextarea.RichTextAreaSize</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreaSize.java b/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreaSize.java
deleted file mode 100644
index 934f2ed2dd..0000000000
--- a/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreaSize.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.vaadin.tests.components.richtextarea;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.RichTextArea;
-import com.vaadin.ui.VerticalLayout;
-
-public class RichTextAreaSize extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Test the size of a rich text area. The first area is 100px*100px wide, the second 100%*100% (of 200x200px), the third one has undefined width and height.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2573;
-    }
-
-    @Override
-    protected void setup() {
-        HorizontalLayout main = new HorizontalLayout();
-        getMainWindow().setContent(main);
-
-        RichTextArea first = new RichTextArea();
-        RichTextArea second = new RichTextArea();
-        RichTextArea third = new RichTextArea();
-
-        first.setWidth("150px");
-        first.setHeight("400px");
-        second.setSizeFull();
-        third.setSizeUndefined();
-
-        VerticalLayout secondLayout = new VerticalLayout();
-        secondLayout.setWidth("200px");
-        secondLayout.setHeight("200px");
-        secondLayout.addComponent(second);
-
-        main.addComponent(first);
-        main.addComponent(secondLayout);
-        main.addComponent(third);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreaTest.java b/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreaTest.java
deleted file mode 100644
index ad2f82aca6..0000000000
--- a/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreaTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.vaadin.tests.components.richtextarea;
-
-import java.util.LinkedHashMap;
-
-import com.vaadin.tests.components.abstractfield.AbstractFieldTest;
-import com.vaadin.ui.RichTextArea;
-
-public class RichTextAreaTest extends AbstractFieldTest<RichTextArea> {
-
-    @Override
-    protected Class<RichTextArea> getTestClass() {
-        return RichTextArea.class;
-    }
-
-    private Command<RichTextArea, Boolean> nullSelectionAllowedCommand = new Command<RichTextArea, Boolean>() {
-
-        public void execute(RichTextArea c, Boolean value, Object data) {
-            c.setNullSettingAllowed(value);
-
-        }
-    };
-    private Command<RichTextArea, String> nullRepresentationCommand = new Command<RichTextArea, String>() {
-
-        public void execute(RichTextArea c, String value, Object data) {
-            c.setNullRepresentation(value);
-        }
-    };
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-
-        createSetTextValueAction(CATEGORY_ACTIONS);
-
-        createNullSettingAllowedAction(CATEGORY_FEATURES);
-        createNullRepresentationAction(CATEGORY_FEATURES);
-    }
-
-    private void createNullSettingAllowedAction(String category) {
-        createBooleanAction("Null selection allowed", category, true,
-                nullSelectionAllowedCommand);
-    }
-
-    private void createNullRepresentationAction(String category) {
-        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
-        options.put("-", null);
-        options.put("null", "null");
-        options.put("This is empty", "This is empty");
-        options.put("- Nothing -", "- Nothing -");
-        createSelectAction("Null representation", category, options, "null",
-                nullRepresentationCommand);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreaWithKeyboardShortcuts.java b/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreaWithKeyboardShortcuts.java
deleted file mode 100644
index 2e26d3e2c4..0000000000
--- a/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreaWithKeyboardShortcuts.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.vaadin.tests.components.richtextarea;
-
-import com.vaadin.event.Action;
-import com.vaadin.event.Action.Handler;
-import com.vaadin.event.ShortcutAction;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractField;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.RichTextArea;
-import com.vaadin.ui.Window;
-
-@SuppressWarnings("serial")
-public class RichTextAreaWithKeyboardShortcuts extends TestBase {
-
-    private Handler actionHandler = new Handler() {
-
-        ShortcutAction save = new ShortcutAction("^Save");
-        private Action[] actions = new Action[] { save };
-
-        public void handleAction(Action action, Object sender, Object target) {
-            String msg = "Action: " + action.getCaption();
-            msg += " From : " + sender.getClass().getSimpleName() + " '"
-                    + ((Component) sender).getCaption() + "'";
-
-            AbstractField f = (AbstractField) target;
-            msg += " Target:" + target.getClass().getSimpleName() + " '"
-                    + f.getCaption() + "'";
-
-            String string = f.getValue().toString();
-
-            msg += " Value: " + string;
-            f.getWindow().showNotification(msg);
-
-        }
-
-        public Action[] getActions(Object target, Object sender) {
-            return actions;
-        }
-    };
-
-    @Override
-    protected void setup() {
-
-        getLayout().getWindow().addActionHandler(actionHandler);
-        getLayout().addComponent(createRichTextArea("InMainLayout"));
-
-        Panel panel = new Panel("RTA Panel");
-        panel.addActionHandler(actionHandler);
-        panel.getContent().addComponent(createRichTextArea("InPanel"));
-        getLayout().addComponent(panel);
-
-        Window w = new Window("SubWindow");
-        w.addActionHandler(actionHandler);
-        w.addComponent(createRichTextArea("InSubWindow"));
-        w.getContent().setSizeUndefined();
-
-        getLayout().getWindow().addWindow(w);
-
-    }
-
-    private RichTextArea createRichTextArea(String caption) {
-        RichTextArea rta = new RichTextArea(caption);
-        return rta;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "RichTextArea shouls support shortcut actions just like other components do.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4175;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreas.html b/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreas.html
deleted file mode 100644
index d3e5c42c80..0000000000
--- a/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreas.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.richtextarea.RichTextAreas?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsrichtextareaRichTextAreas::PID_Scheckboxaction-Error indicators/domChild[0]</td>
-	<td>68,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsrichtextareaRichTextAreas::PID_Scheckboxaction-Required/domChild[0]</td>
-	<td>23,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>error-required</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsrichtextareaRichTextAreas::PID_Scheckboxaction-Readonly/domChild[0]</td>
-	<td>34,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>error-required-readonly</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreas.java b/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreas.java
deleted file mode 100644
index 8585d19bc2..0000000000
--- a/tests/src/com/vaadin/tests/components/richtextarea/RichTextAreas.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.vaadin.tests.components.richtextarea;
-
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.ui.RichTextArea;
-
-public class RichTextAreas extends ComponentTestCase<RichTextArea> {
-
-    @Override
-    protected Class<RichTextArea> getTestClass() {
-        return RichTextArea.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-        RichTextArea rta;
-
-        rta = createRichTextArea("TextField 100% wide, 100px high");
-        rta.setWidth("100%");
-        rta.setHeight("100px");
-        addTestComponent(rta);
-
-        rta = createRichTextArea("TextField auto width, auto height");
-        addTestComponent(rta);
-
-        rta = createRichTextArea(null, "500px wide, 120px high textfield");
-        rta.setWidth("500px");
-        rta.setHeight("120px");
-        addTestComponent(rta);
-
-    }
-
-    private RichTextArea createRichTextArea(String caption, String value) {
-        return new RichTextArea(caption, value);
-    }
-
-    private RichTextArea createRichTextArea(String caption) {
-        return new RichTextArea(caption);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/select/AbstractSelectTestCase.java b/tests/src/com/vaadin/tests/components/select/AbstractSelectTestCase.java
deleted file mode 100644
index 528fbd7edd..0000000000
--- a/tests/src/com/vaadin/tests/components/select/AbstractSelectTestCase.java
+++ /dev/null
@@ -1,240 +0,0 @@
-package com.vaadin.tests.components.select;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.event.Action;
-import com.vaadin.event.ItemClickEvent;
-import com.vaadin.event.ItemClickEvent.ItemClickListener;
-import com.vaadin.event.ItemClickEvent.ItemClickNotifier;
-import com.vaadin.terminal.Resource;
-import com.vaadin.tests.components.abstractfield.AbstractFieldTest;
-import com.vaadin.ui.AbstractSelect;
-
-public abstract class AbstractSelectTestCase<T extends AbstractSelect> extends
-        AbstractFieldTest<T> implements ItemClickListener {
-
-    protected static final String CATEGORY_DATA_SOURCE = "Data source";
-
-    private int items = 0;
-    private int properties = 0;
-
-    protected static class ContextMenu {
-
-        private List<Action> items = new ArrayList<Action>();
-
-        public ContextMenu(String caption, Resource icon) {
-            addItem(caption, icon);
-        }
-
-        public ContextMenu() {
-        }
-
-        public void addItem(String caption, Resource icon) {
-            items.add(new Action(caption, icon));
-        }
-
-        public Action[] getActions(Object target, Object sender) {
-            Action[] actions = new Action[items.size()];
-            for (int i = 0; i < items.size(); i++) {
-                actions[i] = items.get(i);
-            }
-
-            return actions;
-        }
-
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-        createNullSelectAllowedCheckbox(CATEGORY_SELECTION);
-        createMultiSelectCheckbox(CATEGORY_SELECTION);
-
-        createPropertiesInContainerSelect(CATEGORY_DATA_SOURCE);
-        createItemsInContainerSelect(CATEGORY_DATA_SOURCE);
-
-    }
-
-    protected void createNullSelectAllowedCheckbox(String category) {
-        createBooleanAction("Null Selection Allowed", category, false,
-                nullSelectionAllowedCommand);
-
-    }
-
-    protected void createMultiSelectCheckbox(String category) {
-        createBooleanAction("Multi select", category, false, multiselectCommand);
-
-    }
-
-    protected void createNullSelectItemId(String category) {
-        LinkedHashMap<String, Object> options = new LinkedHashMap<String, Object>();
-        options.put("- None -", null);
-        for (Object id : (getComponent()).getContainerDataSource()
-                .getContainerPropertyIds()) {
-            options.put(id.toString(), id);
-        }
-        createSelectAction("Null Selection Item Id", category, options,
-                "- None -", nullSelectItemIdCommand);
-    }
-
-    protected Container createContainer(int properties, int items) {
-        return createIndexedContainer(properties, items);
-    }
-
-    private Container createIndexedContainer(int properties, int items) {
-        IndexedContainer c = new IndexedContainer();
-        populateContainer(c, properties, items);
-
-        return c;
-    }
-
-    protected void populateContainer(Container c, int properties, int items) {
-        c.removeAllItems();
-        for (int i = 1; i <= properties; i++) {
-            c.addContainerProperty("Property " + i, String.class, "");
-        }
-        for (int i = 1; i <= items; i++) {
-            Item item = c.addItem("Item " + i);
-            for (int j = 1; j <= properties; j++) {
-                item.getItemProperty("Property " + j).setValue(
-                        "Item " + i + "," + j);
-            }
-        }
-
-    }
-
-    protected void createItemsInContainerSelect(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        for (int i = 0; i <= 10; i++) {
-            options.put(String.valueOf(i), i);
-        }
-        options.put("20", 20);
-        options.put("100", 100);
-        options.put("1000", 1000);
-        options.put("10000", 10000);
-        options.put("100000", 100000);
-
-        createSelectAction("Items in container", category, options, "20",
-                itemsInContainerCommand);
-    }
-
-    protected void createPropertiesInContainerSelect(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("0", 0);
-        for (int i = 0; i <= 10; i++) {
-            options.put(String.valueOf(i), i);
-        }
-        options.put("50", 50);
-        options.put("100", 100);
-        options.put("1000", 1000);
-
-        createSelectAction("Properties in container", category, options, "10",
-                propertiesInContainerCommand);
-    }
-
-    protected void createItemClickListener(String category) {
-        createBooleanAction("Item click listener", category, false,
-                itemClickListenerCommand);
-    }
-
-    /* COMMANDS */
-
-    protected Command<T, Boolean> nullSelectionAllowedCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            (c).setNullSelectionAllowed(value);
-        }
-    };
-
-    protected Command<T, Boolean> multiselectCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            c.setMultiSelect(value);
-        }
-    };
-
-    protected Command<T, Object> nullSelectItemIdCommand = new Command<T, Object>() {
-
-        public void execute(T c, Object value, Object data) {
-            c.setNullSelectionItemId(value);
-        }
-    };
-
-    protected Command<T, Integer> itemsInContainerCommand = new Command<T, Integer>() {
-
-        public void execute(T t, Integer value, Object data) {
-            items = value;
-            updateContainer();
-        }
-    };
-
-    protected Command<T, Integer> propertiesInContainerCommand = new Command<T, Integer>() {
-
-        public void execute(T t, Integer value, Object data) {
-            properties = value;
-            updateContainer();
-        }
-    };
-
-    protected Command<T, Boolean> itemClickListenerCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            if (value) {
-                ((ItemClickNotifier) c)
-                        .addListener(AbstractSelectTestCase.this);
-            } else {
-                ((ItemClickNotifier) c)
-                        .removeListener(AbstractSelectTestCase.this);
-            }
-
-        }
-    };
-
-    protected void setContainer(Container newContainer) {
-        getComponent().setContainerDataSource(newContainer);
-
-    }
-
-    protected void updateContainer() {
-        setContainer(createContainer(properties, items));
-    }
-
-    /* COMMANDS END */
-
-    public void itemClick(ItemClickEvent event) {
-        String type = event.getButtonName();
-        if (event.isDoubleClick()) {
-            type += " double-click";
-        } else {
-            type += " click";
-        }
-
-        String target = "source: " + event.getSource();
-        target += ", client: [" + event.getClientX() + "," + event.getClientY()
-                + "];";
-        target += ", relative: [" + event.getRelativeX() + ","
-                + event.getRelativeY() + "]";
-        target += ", itemId: " + event.getItemId();
-        target += ", propertyId: " + event.getPropertyId();
-
-        String modifierKeys = "";
-        if (event.isCtrlKey()) {
-            modifierKeys += "CTRL ";
-        }
-        if (event.isAltKey()) {
-            modifierKeys += "ALT ";
-        }
-        if (event.isMetaKey()) {
-            modifierKeys += "META ";
-        }
-        if (event.isShiftKey()) {
-            modifierKeys += "SHIFT ";
-        }
-        log(modifierKeys + type + " on " + target);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/select/ComboBoxAddWhileFiltering.java b/tests/src/com/vaadin/tests/components/select/ComboBoxAddWhileFiltering.java
deleted file mode 100644
index 931686003a..0000000000
--- a/tests/src/com/vaadin/tests/components/select/ComboBoxAddWhileFiltering.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.vaadin.tests.components.select;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.ComboBox;
-
-/**
- * TODO can't reproduce the issue with this test case, possibly need some
- * enhancements.
- * 
- */
-public class ComboBoxAddWhileFiltering extends TestBase {
-
-    private int i;
-
-    @Override
-    protected void setup() {
-        final ComboBox comboBox = new ComboBox();
-        populate(comboBox);
-
-        Button b = new Button("add item (^N)");
-        b.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                addItem(comboBox);
-            }
-        });
-        addComponent(b);
-        addComponent(comboBox);
-        getMainWindow().addAction(new Button.ClickShortcut(b, "^n"));
-    }
-
-    private void populate(ComboBox comboBox) {
-        for (i = 0; i < 4;) {
-            addItem(comboBox);
-        }
-    }
-
-    private void addItem(ComboBox comboBox) {
-        i++;
-        comboBox.addItem("Item " + i);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Filtered list should be updated when new item is added.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3643;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/select/MultiSelect.java b/tests/src/com/vaadin/tests/components/select/MultiSelect.java
deleted file mode 100644
index b3c15251a1..0000000000
--- a/tests/src/com/vaadin/tests/components/select/MultiSelect.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.vaadin.tests.components.select;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Select;
-
-public class MultiSelect extends TestBase {
-
-    @SuppressWarnings("deprecation")
-    @Override
-    protected void setup() {
-        Select selectComponent = new Select();
-        selectComponent.setMultiSelect(true);
-
-        String[] selection = { "One", "Hund", "Three" };
-        for (String word : selection) {
-            selectComponent.addItem(word);
-        }
-
-        addComponent(selectComponent);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The select is in multi select mode and should be rendered as such";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4553;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/select/NativeSelects.html b/tests/src/com/vaadin/tests/components/select/NativeSelects.html
deleted file mode 100644
index f9ab8eb3a0..0000000000
--- a/tests/src/com/vaadin/tests/components/select/NativeSelects.html
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.select.NativeSelects?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=The second item</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=an item 1</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=The second item</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[8]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=an item 1</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-readwrite-noerror</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::PID_Scheckboxaction-Readonly/domChild[0]</td>
-	<td>7,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-readonly-noerror</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::PID_Scheckboxaction-Error indicators/domChild[0]</td>
-	<td>31,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-readonly-error</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::PID_Scheckboxaction-Readonly/domChild[0]</td>
-	<td>3,9</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-readwrite-error</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::PID_Scheckboxaction-Enabled/domChild[0]</td>
-	<td>32,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled-readwrite-error</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::PID_Scheckboxaction-Error indicators/domChild[0]</td>
-	<td>47,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled-readwrite-noerror</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::PID_Scheckboxaction-Readonly/domChild[0]</td>
-	<td>31,11</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled-readonly-noerror</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::PID_Scheckboxaction-Error indicators/domChild[0]</td>
-	<td>42,4</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled-readonly-error</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/select/NativeSelects.java b/tests/src/com/vaadin/tests/components/select/NativeSelects.java
deleted file mode 100644
index d5577e213c..0000000000
--- a/tests/src/com/vaadin/tests/components/select/NativeSelects.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package com.vaadin.tests.components.select;
-
-import java.util.List;
-
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.NativeSelect;
-
-public class NativeSelects extends ComponentTestCase<NativeSelect> {
-
-    NativeSelect label[] = new NativeSelect[20];
-
-    @Override
-    protected Class<NativeSelect> getTestClass() {
-        return NativeSelect.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-
-        NativeSelect s;
-
-        s = createNativeSelect(null);
-        s.setWidth(null);
-        addTestComponent(s);
-
-        s = createNativeSelect("Undefined wide, empty select");
-        s.setWidth(null);
-        addTestComponent(s);
-
-        s = createNativeSelect("Undefined wide select with 5 items");
-        s.setWidth(null);
-        addItem(s, "The first item");
-        addItem(s, "The second item");
-        addItem(s, "The third item");
-        addItem(s, "The fourth item");
-        addItem(s, "The fifth item");
-        addTestComponent(s);
-
-        s = createNativeSelect("Undefined wide select with 50 items");
-        s.setWidth(null);
-        populate(s, 50);
-        addTestComponent(s);
-
-        s = createNativeSelect(null);
-        s.setWidth("100px");
-        addTestComponent(s);
-
-        s = createNativeSelect("100px wide, empty select");
-        s.setWidth("100px");
-        addTestComponent(s);
-
-        s = createNativeSelect("150px wide select with 5 items");
-        s.setWidth("150px");
-        addItem(s, "The first item");
-        addItem(s, "The second item");
-        addItem(s, "The third item");
-        addItem(s, "The fourth item");
-        addItem(s, "The fifth item");
-        addTestComponent(s);
-
-        s = createNativeSelect("200px wide select with 50 items");
-        s.setWidth("200px");
-        populate(s, 50);
-        addTestComponent(s);
-
-    }
-
-    private void populate(NativeSelect s, int nr) {
-        String text = " an item ";
-
-        String caption = "";
-        for (int i = 0; i < nr; i++) {
-            if (i % 2 == 0) {
-                caption += text;
-            } else {
-                caption += i;
-            }
-
-            addItem(s, caption);
-        }
-
-    }
-
-    private void addItem(NativeSelect s, String string) {
-        Object id = s.addItem();
-        s.getItem(id).getItemProperty(CAPTION).setValue(string);
-
-    }
-
-    private NativeSelect createNativeSelect(String caption) {
-        NativeSelect s = new NativeSelect();
-
-        s.addContainerProperty(CAPTION, String.class, "");
-        s.setItemCaptionPropertyId(CAPTION);
-        s.setCaption(caption);
-        s.setNullSelectionAllowed(false);
-        return s;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A generic test for Labels in different configurations";
-    }
-
-    @Override
-    protected void createCustomActions(List<Component> actions) {
-        actions.add(createBooleanAction("Null selection allowed", false,
-                new Command<NativeSelect, Boolean>() {
-
-                    public void execute(NativeSelect c, Boolean value,
-                            Object data) {
-                        c.setNullSelectionAllowed(value);
-                    }
-                }));
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/select/NullSelectionItemId.java b/tests/src/com/vaadin/tests/components/select/NullSelectionItemId.java
deleted file mode 100644
index 4298cfc525..0000000000
--- a/tests/src/com/vaadin/tests/components/select/NullSelectionItemId.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.vaadin.tests.components.select;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Select;
-
-public class NullSelectionItemId extends TestBase implements ClickListener {
-
-    private static final String NULL_ITEM_ID = "Null item id";
-
-    private Select mySelect;
-
-    @Override
-    protected void setup() {
-
-        mySelect = new Select("My Select");
-
-        // add items
-        mySelect.addItem(NULL_ITEM_ID);
-        mySelect.addItem("Another item");
-
-        // allow null and set the null item id
-        mySelect.setNullSelectionAllowed(true);
-        mySelect.setNullSelectionItemId(NULL_ITEM_ID);
-
-        // select the null item
-        mySelect.select(NULL_ITEM_ID);
-
-        Button button = new Button("Show selected value", this);
-
-        addComponent(mySelect);
-        addComponent(button);
-
-        button = new Button(
-                "Select null with select(NULL_ITEM_ID) (should make value null)",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        mySelect.select(NULL_ITEM_ID);
-                    }
-                });
-
-        addComponent(button);
-
-        button = new Button(
-                "Select null with setValue(null) (should make value null)",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        mySelect.setValue(null);
-                    }
-                });
-
-        addComponent(button);
-
-    }
-
-    public void buttonClick(ClickEvent event) {
-        getMainWindow().showNotification(
-                "mySelect.getValue() returns: " + mySelect.getValue());
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Steps to reproduce:<br />"
-                + "<ol><li>Click the button -> value is the item id \"Null item id\" (should be null).</li>"
-                + "<li>Select the \"Another item\".</li>"
-                + "<li>Select back the first item.</li>"
-                + "<li>Click the button -> the value is null (as it should)</li></ol>";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3203;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/select/SelectDisplaysOldValue.html b/tests/src/com/vaadin/tests/components/select/SelectDisplaysOldValue.html
deleted file mode 100644
index e9d5fabb14..0000000000
--- a/tests/src/com/vaadin/tests/components/select/SelectDisplaysOldValue.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.select.SelectDisplaysOldValue?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>7,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
-	<td>76,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
-	<td>4,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item0</td>
-	<td>79,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>20,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item0</td>
-	<td>89,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
-	<td>7,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
-	<td>7,9</td>
-</tr>
-<tr>
-	<td>focus</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>focus</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>704,305</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<!--Master should retain its value after filtering and not selecting any option-->
-<!--Select "Master 3" and "Master 3 - Slave 1"-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>10,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item2</td>
-	<td>96,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
-	<td>87,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
-	<td>98,16</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
-	<td>enter</td>
-</tr>
-<!--Filter master using "test" but do not select anything-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>-70,7</td>
-</tr>
-<tr>
-	<td>focus</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>test</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
-	<td>58,163</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
-	<td>58,163</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
-	<td>Master 3</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/select/SelectDisplaysOldValue.java b/tests/src/com/vaadin/tests/components/select/SelectDisplaysOldValue.java
deleted file mode 100644
index 56953e298c..0000000000
--- a/tests/src/com/vaadin/tests/components/select/SelectDisplaysOldValue.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package com.vaadin.tests.components.select;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Select;
-
-public class SelectDisplaysOldValue extends TestBase {
-
-    @Override
-    protected void setup() {
-        addComponent(new DynamicSelectTestCase());
-    }
-
-    public class DynamicSelectTestCase extends HorizontalLayout {
-
-        private static final String CONTROLLER_COMBO_BOX_CAPTION = "Master : ";
-        private static final String SLAVE_COMBO_BOX_CAPTION = "Slave :";
-
-        private Select controllerComboBox;
-        private Select slaveComboBox;
-
-        private Map<Integer, String> controllerOptionMap = new HashMap<Integer, String>();
-
-        private Map<String, List<String>> slaveOptionMapping = new HashMap<String, List<String>>();
-        private final Object NAME_PROPERTY_ID = "name";
-
-        public DynamicSelectTestCase() {
-            populateControllerOptionMapping();
-            populateSlaveOptionMappings();
-            buildDynamicSelectTestCase();
-        }
-
-        private void populateControllerOptionMapping() {
-            for (int i = 1; i <= 3; i++) {
-                controllerOptionMap.put(i, "Master " + i);
-            }
-        }
-
-        private void populateSlaveOptionMappings() {
-            for (String controllerOption : controllerOptionMap.values()) {
-                List<String> slaveOptions = new ArrayList<String>();
-
-                for (int i = 1; i <= 3; i++) {
-                    slaveOptions.add(controllerOption + " - Slave " + i);
-                }
-
-                slaveOptionMapping.put(controllerOption, slaveOptions);
-            }
-        }
-
-        private void buildDynamicSelectTestCase() {
-            setSpacing(true);
-            setMargin(true);
-            buildAndConfigureComboBoxes();
-            addComponent(controllerComboBox);
-            addComponent(slaveComboBox);
-        }
-
-        private void buildAndConfigureComboBoxes() {
-            IndexedContainer masterOptionContainer = initMasterOptionContainer();
-            controllerComboBox = new Select(CONTROLLER_COMBO_BOX_CAPTION,
-                    masterOptionContainer);
-            configureMasterOptionDropdown();
-            controllerComboBox.addListener(new ControllerUpdatedListener());
-
-            buildSlaveDropdown(1);
-        }
-
-        private void buildSlaveDropdown(Integer masterId) {
-            IndexedContainer slaveOptionContainer = initSlaveOptionContainer(masterId);
-            slaveComboBox = new Select(SLAVE_COMBO_BOX_CAPTION,
-                    slaveOptionContainer);
-            configureSlaveOptionDropdown();
-        }
-
-        private IndexedContainer initMasterOptionContainer() {
-            IndexedContainer containerToReturn = new IndexedContainer();
-            Object defaultValue = null;
-            Item itemAdded;
-
-            containerToReturn.addContainerProperty(NAME_PROPERTY_ID,
-                    String.class, defaultValue);
-
-            for (Integer optionId : controllerOptionMap.keySet()) {
-                itemAdded = containerToReturn.addItem(optionId);
-                itemAdded.getItemProperty(NAME_PROPERTY_ID).setValue(
-                        controllerOptionMap.get(optionId));
-            }
-
-            return containerToReturn;
-        }
-
-        private IndexedContainer initSlaveOptionContainer(Integer masterId) {
-            IndexedContainer containerToReturn = new IndexedContainer();
-            Object defaultValue = null;
-            Item itemAdded;
-            List<String> options;
-
-            options = slaveOptionMapping.get(controllerOptionMap.get(masterId));
-            containerToReturn.addContainerProperty(NAME_PROPERTY_ID,
-                    String.class, defaultValue);
-
-            for (String option : options) {
-                itemAdded = containerToReturn.addItem(option);
-                itemAdded.getItemProperty(NAME_PROPERTY_ID).setValue(option);
-            }
-
-            return containerToReturn;
-        }
-
-        private void configureMasterOptionDropdown() {
-            controllerComboBox.setItemCaptionPropertyId(NAME_PROPERTY_ID);
-            controllerComboBox.setNullSelectionAllowed(false);
-            controllerComboBox.setNewItemsAllowed(false);
-            controllerComboBox.setImmediate(true);
-            controllerComboBox.setWriteThrough(false);
-            controllerComboBox.setReadThrough(false);
-
-        }
-
-        private void configureSlaveOptionDropdown() {
-            slaveComboBox.setItemCaptionPropertyId(NAME_PROPERTY_ID);
-            slaveComboBox.setNullSelectionAllowed(false);
-            slaveComboBox.setNewItemsAllowed(false);
-            slaveComboBox.setImmediate(true);
-            slaveComboBox.setWriteThrough(false);
-            slaveComboBox.setReadThrough(false);
-        }
-
-        private void refreshSlaveDropdown(Integer masterId) {
-            slaveComboBox
-                    .setContainerDataSource(initSlaveOptionContainer(masterId));
-            System.out.println("Slave value: " + slaveComboBox.getValue());
-        }
-
-        private class ControllerUpdatedListener implements
-                Property.ValueChangeListener {
-            public void valueChange(Property.ValueChangeEvent valueChangeEvent) {
-                refreshSlaveDropdown((Integer) valueChangeEvent.getProperty()
-                        .getValue());
-            }
-        }
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Select an 'master' item from the first combo box, a slave from the second, select another master and focus+blur the slave combo box and the slave combobox will show a value not in the combo box";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5556;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/select/SelectIconPlacement.html b/tests/src/com/vaadin/tests/components/select/SelectIconPlacement.html
deleted file mode 100644
index 90e2e293a3..0000000000
--- a/tests/src/com/vaadin/tests/components/select/SelectIconPlacement.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.select.SelectIconPlacement?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>icon-and-text-initial</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.select.SelectIconPlacement?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>icon-and-text-initial-reload</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[2]</td>
-	<td>16,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
-	<td>277,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[2]</td>
-	<td>9,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
-	<td>99,11</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>icon-and-text-reselected-items</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[2]</td>
-	<td>17,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item0</td>
-	<td>85,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>11,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
-	<td>57,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[2]</td>
-	<td>16,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item0</td>
-	<td>125,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
-	<td>14,15</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
-	<td>105,12</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>icon-and-text-reselected-items-2</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/select/SelectIconPlacement.java b/tests/src/com/vaadin/tests/components/select/SelectIconPlacement.java
deleted file mode 100644
index 51a899a7e6..0000000000
--- a/tests/src/com/vaadin/tests/components/select/SelectIconPlacement.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.components.select;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Select;
-
-public class SelectIconPlacement extends TestBase {
-    private static final long serialVersionUID = 1L;
-
-    private Select mySelect;
-
-    @Override
-    protected void setup() {
-        for (String width : new String[] { null, "200px" }) {
-            String icon = "error.png";
-            if (width == null) {
-                icon = "bullet.png";
-            }
-            mySelect = new Select("Width: " + (width == null ? "auto" : width));
-            String bar = "Only item";
-            mySelect.addItem(bar);
-            mySelect.setItemIcon(bar, new ThemeResource("common/icons/" + icon
-                    + "?w=" + width));
-            mySelect.select(bar);
-            mySelect.setWidth(width);
-            addComponent(mySelect);
-        }
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A select with item icons pushes the caption of that item to the right to make room for the icon. It works fine in all browsers except IE8.<br/>"
-                + "Upon component render the icon and caption is on top of each others, and it corrects itself when you open the dropdown. <br/><br/>";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3991;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/select/SelectTest.java b/tests/src/com/vaadin/tests/components/select/SelectTest.java
deleted file mode 100644
index cdc30921fa..0000000000
--- a/tests/src/com/vaadin/tests/components/select/SelectTest.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.components.select;
-
-import com.vaadin.ui.Select;
-
-public class SelectTest<T extends Select> extends AbstractSelectTestCase<T> {
-
-    @SuppressWarnings("unchecked")
-    @Override
-    protected Class<T> getTestClass() {
-        return (Class<T>) Select.class;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/select/TwinColSelectCaptionStyles.html b/tests/src/com/vaadin/tests/components/select/TwinColSelectCaptionStyles.html
deleted file mode 100644
index 7fd4908673..0000000000
--- a/tests/src/com/vaadin/tests/components/select/TwinColSelectCaptionStyles.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.select.TwinColSelectCaptionStyles?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>auto-auto</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectCaptionStyles::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>500px-500px</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/select/TwinColSelectCaptionStyles.java b/tests/src/com/vaadin/tests/components/select/TwinColSelectCaptionStyles.java
deleted file mode 100644
index f3d147e32a..0000000000
--- a/tests/src/com/vaadin/tests/components/select/TwinColSelectCaptionStyles.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.components.select;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.TwinColSelect;
-
-public class TwinColSelectCaptionStyles extends TestBase {
-
-    @Override
-    protected void setup() {
-        setTheme("tests-tickets");
-        final TwinColSelect sel = new TwinColSelect("Component caption");
-        sel.setLeftColumnCaption("Left caption");
-        sel.setRightColumnCaption("Right caption");
-        sel.setStyleName("styled-twincol-captions");
-        sel.setWidth("300px");
-        addComponent(sel);
-
-        Button b = new Button("Set height and width to 500px",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        sel.setHeight("500px");
-                        sel.setWidth("500px");
-
-                    }
-                });
-        addComponent(b);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tests that caption styling for TwinColSelect captions work properly. The left caption should be red and the right caption blue and larger than the left one.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/select/TwinColSelectDualCaptions.html b/tests/src/com/vaadin/tests/components/select/TwinColSelectDualCaptions.html
deleted file mode 100644
index 04388cb95a..0000000000
--- a/tests/src/com/vaadin/tests/components/select/TwinColSelectDualCaptions.html
+++ /dev/null
@@ -1,430 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://192.168.2.75:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.select.TwinColSelectTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--Hide log-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item1</td>
-	<td>27,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>27,6</td>
-</tr>
-<!--Remove component caption-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
-	<td>25,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item1</td>
-	<td>34,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>69,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>37,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>no-captions</td>
-</tr>
-<!--Add left caption-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
-	<td>39,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>46,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>46,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item3</td>
-	<td>27,4</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>left-caption</td>
-</tr>
-<!--Add right caption-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
-	<td>37,19</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>27,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
-	<td>61,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>29,11</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>dual-captions</td>
-</tr>
-<!--Hide left caption-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
-	<td>27,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>46,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>77,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>18,11</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>right-caption</td>
-</tr>
-<!--Hide right caption-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
-	<td>44,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>46,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
-	<td>75,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>8,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>no-captions</td>
-</tr>
-<!--Show right caption-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
-	<td>29,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>38,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
-	<td>64,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>29,9</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>right-caption</td>
-</tr>
-<!--Hide right caption-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
-	<td>35,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>42,15</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
-	<td>45,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>75,3</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>no-captions</td>
-</tr>
-<!--Set width to fixed (500px)-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
-	<td>37,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>36,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>15,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item6</td>
-	<td>27,8</td>
-</tr>
-<!--Add left caption-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
-	<td>7,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>49,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>50,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item3</td>
-	<td>21,0</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>500px-left-caption</td>
-</tr>
-<!--Add right caption-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
-	<td>53,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>47,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
-	<td>44,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item4</td>
-	<td>46,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>500px-dual-captions</td>
-</tr>
-<!--Change the size of the parent layout to 500px to ensure cached updates work-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item1</td>
-	<td>20,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>53,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>4,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item6</td>
-	<td>27,15</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>500px-dual-captions</td>
-</tr>
-<!--Hide left caption-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
-	<td>27,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>35,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>26,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>4,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
-	<td>32,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>42,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
-	<td>46,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>19,7</td>
-</tr>
-<!--Ensure height setting works correctly-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
-	<td>21,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>23,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>32,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item4</td>
-	<td>28,9</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>height-300px-no-captions</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
-	<td>47,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>37,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>55,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>36,15</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>height-300px-left-caption</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
-	<td>36,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>48,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>44,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>29,12</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>height-300px-no-captions</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/select/TwinColSelectTest.java b/tests/src/com/vaadin/tests/components/select/TwinColSelectTest.java
deleted file mode 100644
index 2fb9ed2079..0000000000
--- a/tests/src/com/vaadin/tests/components/select/TwinColSelectTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.vaadin.tests.components.select;
-
-import java.util.LinkedHashMap;
-
-import com.vaadin.ui.TwinColSelect;
-
-public class TwinColSelectTest extends AbstractSelectTestCase<TwinColSelect> {
-
-    private Command<TwinColSelect, Integer> rowsCommand = new Command<TwinColSelect, Integer>() {
-        public void execute(TwinColSelect c, Integer value, Object data) {
-            c.setRows(value);
-        }
-    };
-
-    private Command<TwinColSelect, Integer> colsCommand = new Command<TwinColSelect, Integer>() {
-        public void execute(TwinColSelect c, Integer value, Object data) {
-            c.setColumns(value);
-        }
-    };
-
-    private Command<TwinColSelect, String> leftColumnCaptionCommand = new Command<TwinColSelect, String>() {
-
-        public void execute(TwinColSelect c, String value, Object data) {
-            c.setLeftColumnCaption(value);
-        }
-    };
-
-    private Command<TwinColSelect, String> rightColumnCaptionCommand = new Command<TwinColSelect, String>() {
-
-        public void execute(TwinColSelect c, String value, Object data) {
-            c.setRightColumnCaption(value);
-        }
-    };
-
-
-    @Override
-    protected Class<TwinColSelect> getTestClass() {
-        return TwinColSelect.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-        createRowsAction(CATEGORY_FEATURES);
-        createColsAction(CATEGORY_FEATURES);
-        createCaptionActions(CATEGORY_FEATURES);
-    }
-
-    private void createRowsAction(String category) {
-        LinkedHashMap<String, Integer> options = createIntegerOptions(20);
-        createSelectAction("Rows", category, options, "0", rowsCommand);
-    }
-
-    private void createColsAction(String category) {
-        LinkedHashMap<String, Integer> options = createIntegerOptions(20);
-        createSelectAction("Columns", category, options, "0", colsCommand);
-    }
-
-    private void createCaptionActions(String category) {
-        createSelectAction("Left column caption", category,
-                createCaptionOptions(), "-", leftColumnCaptionCommand);
-        createSelectAction("Right column caption", category,
-                createCaptionOptions(), "-", rightColumnCaptionCommand);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/select/TwinColSelects.java b/tests/src/com/vaadin/tests/components/select/TwinColSelects.java
deleted file mode 100644
index cf59eaa03b..0000000000
--- a/tests/src/com/vaadin/tests/components/select/TwinColSelects.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.vaadin.tests.components.select;
-
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.ui.TwinColSelect;
-
-public class TwinColSelects extends ComponentTestCase<TwinColSelect> {
-
-    @Override
-    protected Class<TwinColSelect> getTestClass() {
-        return TwinColSelect.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-
-        TwinColSelect tws = createTwinColSelect("400x<auto>");
-        tws.setWidth("400px");
-        tws.setHeight("-1px");
-        addTestComponent(tws);
-
-        tws = createTwinColSelect("400x100");
-        tws.setWidth("400px");
-        tws.setHeight("100px");
-        addTestComponent(tws);
-
-        tws = createTwinColSelect("<auto>x100");
-        tws.setWidth("-1px");
-        tws.setHeight("100px");
-        addTestComponent(tws);
-
-        tws = createTwinColSelect("<auto>x<auto>");
-        tws.setSizeUndefined();
-        addTestComponent(tws);
-
-    }
-
-    private TwinColSelect createTwinColSelect(String caption) {
-        TwinColSelect select = new TwinColSelect(caption);
-        select.addContainerProperty(CAPTION, String.class, null);
-        for (int i = 0; i < 20; i++) {
-            select.addItem("" + i).getItemProperty(CAPTION)
-                    .setValue("Item " + i);
-        }
-        select.setImmediate(true);
-        return select;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/select/TwinColSelectsDisabledReadonly.html b/tests/src/com/vaadin/tests/components/select/TwinColSelectsDisabledReadonly.html
deleted file mode 100644
index f403d8b2f5..0000000000
--- a/tests/src/com/vaadin/tests/components/select/TwinColSelectsDisabledReadonly.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.select.TwinColSelects?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::PID_Scheckboxaction-Error indicators/domChild[0]</td>
-	<td>7,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::PID_Scheckboxaction-Required/domChild[0]</td>
-	<td>4,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-error-required</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::PID_Scheckboxaction-Error indicators/domChild[0]</td>
-	<td>2,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::PID_Scheckboxaction-Required/domChild[0]</td>
-	<td>0,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::PID_Scheckboxaction-Readonly/domChild[0]</td>
-	<td>9,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled-readonly</td>
-</tr>
-<!--Disable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::PID_Scheckboxaction-Enabled/domChild[0]</td>
-	<td>7,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::PID_Scheckboxaction-Readonly/domChild[0]</td>
-	<td>10,2</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/slider/SliderKeyboardFocus.html b/tests/src/com/vaadin/tests/components/slider/SliderKeyboardFocus.html
deleted file mode 100644
index 0521506418..0000000000
--- a/tests/src/com/vaadin/tests/components/slider/SliderKeyboardFocus.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.slider.SliderKeyboardFocus?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>SliderUnfocused</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssliderSliderKeyboardFocus::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VSlider[0]/domChild[2]/domChild[0]</td>
-	<td>2,7</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>SliderFocused0</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentssliderSliderKeyboardFocus::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VSlider[0]</td>
-	<td>right</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentssliderSliderKeyboardFocus::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VSlider[0]</td>
-	<td>right</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentssliderSliderKeyboardFocus::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VSlider[0]</td>
-	<td>right</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>SliderFocused3</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/slider/SliderKeyboardFocus.java b/tests/src/com/vaadin/tests/components/slider/SliderKeyboardFocus.java
deleted file mode 100644
index fe9450a0f0..0000000000
--- a/tests/src/com/vaadin/tests/components/slider/SliderKeyboardFocus.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.vaadin.tests.components.slider;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Slider;
-
-public class SliderKeyboardFocus extends TestBase {
-
-    @Override
-    protected void setup() {
-        Slider slider = new Slider("The slider", 0, 100);
-        slider.setWidth("300px");
-        addComponent(slider);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tests keyboard navigation with the slider";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5329;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/slider/SliderTest.java b/tests/src/com/vaadin/tests/components/slider/SliderTest.java
deleted file mode 100644
index 65a2fdd1b5..0000000000
--- a/tests/src/com/vaadin/tests/components/slider/SliderTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package com.vaadin.tests.components.slider;
-
-import java.util.LinkedHashMap;
-
-import com.vaadin.tests.components.abstractfield.AbstractFieldTest;
-import com.vaadin.ui.Slider;
-
-public class SliderTest extends AbstractFieldTest<Slider> {
-
-    private Command<Slider, Double> minCommand = new Command<Slider, Double>() {
-        public void execute(Slider c, Double value, Object data) {
-            c.setMin(value);
-        }
-    };
-
-    private Command<Slider, Double> maxCommand = new Command<Slider, Double>() {
-        public void execute(Slider c, Double value, Object data) {
-            c.setMax(value);
-        }
-    };
-
-    private Command<Slider, Integer> orientationCommand = new Command<Slider, Integer>() {
-        public void execute(Slider c, Integer value, Object data) {
-            c.setOrientation(value);
-        }
-    };
-    private Command<Slider, Integer> resolutionCommand = new Command<Slider, Integer>() {
-        public void execute(Slider c, Integer value, Object data) {
-            c.setResolution(value);
-        }
-    };
-
-    @Override
-    protected Class<Slider> getTestClass() {
-        return Slider.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-
-        createMinSelect(CATEGORY_FEATURES);
-        createMaxSelect(CATEGORY_FEATURES);
-        createResolutionSelect(CATEGORY_FEATURES);
-        createOrientationSelect(CATEGORY_FEATURES);
-    }
-
-    private void createResolutionSelect(String category) {
-        createSelectAction("Resolution", category, createIntegerOptions(10),
-                "1", resolutionCommand);
-
-    }
-
-    private void createOrientationSelect(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("Horizontal", Slider.ORIENTATION_HORIZONTAL);
-        options.put("Vertical", Slider.ORIENTATION_VERTICAL);
-        createSelectAction("Orientation", category, options, "Horizontal",
-                orientationCommand);
-
-    }
-
-    private void createMaxSelect(String category) {
-        createSelectAction("Max", category, createDoubleOptions(100), "0",
-                maxCommand);
-    }
-
-    private void createMinSelect(String category) {
-        createSelectAction("Min", category, createDoubleOptions(100), "0",
-                minCommand);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/AbstractSplitPanelTest.java b/tests/src/com/vaadin/tests/components/splitpanel/AbstractSplitPanelTest.java
deleted file mode 100644
index 0b702db33a..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/AbstractSplitPanelTest.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package com.vaadin.tests.components.splitpanel;
-
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.tests.components.AbstractLayoutTest;
-import com.vaadin.ui.AbstractSplitPanel;
-import com.vaadin.ui.AbstractSplitPanel.SplitterClickEvent;
-import com.vaadin.ui.AbstractSplitPanel.SplitterClickListener;
-
-public abstract class AbstractSplitPanelTest<T extends AbstractSplitPanel>
-        extends AbstractLayoutTest<T> implements SplitterClickListener {
-
-    private Command<T, Boolean> splitterClickListenerCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((SplitterClickListener) AbstractSplitPanelTest.this);
-            } else {
-                c.removeListener((SplitterClickListener) AbstractSplitPanelTest.this);
-            }
-
-        }
-    };
-    private Command<T, SplitPosition> setSplitPositionCommand = new Command<T, AbstractSplitPanelTest.SplitPosition>() {
-        public void execute(T c, SplitPosition value, Object data) {
-            value.apply(c);
-        }
-    };
-    private Command<T, Boolean> splitterLockCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            c.setLocked(value);
-        }
-    };
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-        createSetSplitPositionAction(CATEGORY_FEATURES);
-        createSplitterClickListenerAction(CATEGORY_LISTENERS);
-        createSplitterLockAction(CATEGORY_FEATURES);
-
-        // Default to 100% x 100% as SplitPanel does not work as undefined
-        for (T c : getTestComponents()) {
-            c.setSizeFull();
-        }
-    }
-
-    private void createSplitterLockAction(String categoryFeatures) {
-        createBooleanAction("Splitter locked", categoryFeatures, false,
-                splitterLockCommand);
-
-    }
-
-    public static class SplitPosition {
-
-        private boolean reverse = false;
-        private int position;
-        private int unit;
-        private String posString;
-
-        public SplitPosition(String pos) {
-            this.posString = pos;
-            if (pos.startsWith("-")) {
-                reverse = true;
-                pos = pos.substring(1);
-            }
-
-            if (pos.endsWith("px")) {
-                position = Integer.parseInt(pos.substring(0, pos.length() - 2));
-                unit = Sizeable.UNITS_PIXELS;
-            } else if (pos.endsWith("%")) {
-                position = Integer.parseInt(pos.substring(0, pos.length() - 1));
-                unit = Sizeable.UNITS_PERCENTAGE;
-            } else {
-                throw new RuntimeException("Could not parse " + pos);
-            }
-        }
-
-        public void apply(AbstractSplitPanel sp) {
-            sp.setSplitPosition(position, unit, reverse);
-        }
-
-        @Override
-        public String toString() {
-            return posString;
-        }
-    }
-
-    private void createSetSplitPositionAction(String categoryFeatures) {
-        String subCategory = "Set splitter position";
-        createCategory(subCategory, categoryFeatures);
-
-        createClickAction("0px from left/top", subCategory,
-                setSplitPositionCommand, new SplitPosition("0px"));
-        createClickAction("200px from left/top", subCategory,
-                setSplitPositionCommand, new SplitPosition("200px"));
-        createClickAction("0px from right/bottom", subCategory,
-                setSplitPositionCommand, new SplitPosition("-0px"));
-        createClickAction("200px from right/bottom", subCategory,
-                setSplitPositionCommand, new SplitPosition("-200px"));
-
-        createClickAction("0% from left/top", subCategory,
-                setSplitPositionCommand, new SplitPosition("0%"));
-        createClickAction("0% from right/bottom", subCategory,
-                setSplitPositionCommand, new SplitPosition("-0%"));
-        createClickAction("50% from left/top", subCategory,
-                setSplitPositionCommand, new SplitPosition("50%"));
-        createClickAction("50% from right/bottom", subCategory,
-                setSplitPositionCommand, new SplitPosition("-50%"));
-        createClickAction("100% from left/top", subCategory,
-                setSplitPositionCommand, new SplitPosition("100%"));
-        createClickAction("100% from right/bottom", subCategory,
-                setSplitPositionCommand, new SplitPosition("-100%"));
-
-    }
-
-    private void createSplitterClickListenerAction(String category) {
-        createBooleanAction("SplitterClickListener", category, false,
-                splitterClickListenerCommand);
-
-    }
-
-    public void splitterClick(SplitterClickEvent event) {
-        log(event.getClass().getSimpleName() + ": " + event.getButtonName()
-                + " at " + event.getRelativeX() + "," + event.getRelativeY());
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelBasicStates.html b/tests/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelBasicStates.html
deleted file mode 100644
index 2b1ad7866a..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelBasicStates.html
+++ /dev/null
@@ -1,213 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.splitpanel.HorizontalSplitPanels?restartApplication</td>
-	<td></td>
-</tr>
-<!--Disable event log-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item1</td>
-	<td>26,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>20,8</td>
-</tr>
-<!--set size full-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
-	<td>22,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>72,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>18,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>47,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
-	<td>37,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>35,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>20,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>23,7</td>
-</tr>
-<!--add TextArea + NativeButton (100% x 100%) -->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
-	<td>23,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>86,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>48,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>38,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[3]/VMenuBar[0]#item6</td>
-	<td>69,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
-	<td>18,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>36,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>70,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>28,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[3]/VMenuBar[0]#item6</td>
-	<td>38,0</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled</td>
-</tr>
-<!--Disable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
-	<td>38,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>31,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>57,13</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled</td>
-</tr>
-<!--Set readonly-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
-	<td>6,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>20,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled-readonly</td>
-</tr>
-<!--Enable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
-	<td>43,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>42,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>53,5</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>readonly</td>
-</tr>
-<!--Set read-write-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
-	<td>6,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>20,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelMoveSplitter.html b/tests/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelMoveSplitter.html
deleted file mode 100644
index b2deb8e509..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelMoveSplitter.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.splitpanel.HorizontalSplitPanels?restartApplication</td>
-	<td></td>
-</tr>
-<!--set size full-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
-	<td>22,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>72,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>18,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>47,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
-	<td>37,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>35,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>20,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>23,7</td>
-</tr>
-<!--add two 100% x 100% components-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
-	<td>23,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>86,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>48,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item6</td>
-	<td>38,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[3]/VMenuBar[0]#item6</td>
-	<td>69,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
-	<td>18,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>36,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>70,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item4</td>
-	<td>28,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[3]/VMenuBar[0]#item6</td>
-	<td>38,0</td>
-</tr>
-<!--move the splitter-->
-<tr>
-	<td>dragAndDrop</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_StestComponent/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>-500,0</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>splitter-left</td>
-</tr>
-<tr>
-	<td>dragAndDrop</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_StestComponent/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>800,0</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>splitter-right</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelSplitterClick.html b/tests/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelSplitterClick.html
deleted file mode 100644
index 3d3fcc5939..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelSplitterClick.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>HorizontalSplitPanelSplitterClick</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">HorizontalSplitPanelSplitterClick</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.splitpanel.HorizontalSplitPanels?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-<!--Add splitter click listener-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
-	<td>9,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>105,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>36,11</td>
-</tr>
-<!--Click splitter-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_StestComponent/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_SLog_row_0</td>
-	<td>1. SplitterClickEvent: left at -1,-1</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>splitterClicked</td>
-</tr>
-<!--Reverse orientation-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
-	<td>51,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>73,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>50,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item7</td>
-	<td>92,10</td>
-</tr>
-<!--Click splitter-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_StestComponent/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_SLog_row_0</td>
-	<td>3. SplitterClickEvent: left at -1,-1</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>reverseSplitterClicked</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanels.java b/tests/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanels.java
deleted file mode 100644
index a92143963b..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanels.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.components.splitpanel;
-
-import com.vaadin.ui.HorizontalSplitPanel;
-
-public class HorizontalSplitPanels extends
-        AbstractSplitPanelTest<HorizontalSplitPanel> {
-
-    @Override
-    protected Class<HorizontalSplitPanel> getTestClass() {
-        return HorizontalSplitPanel.class;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelExtraScrollbars.html b/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelExtraScrollbars.html
deleted file mode 100644
index e8e7395198..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelExtraScrollbars.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>SplitPanelExtraScrollbars</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">SplitPanelExtraScrollbars</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.splitpanel.SplitPanelExtraScrollbars</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelSplitPanelExtraScrollbars::/VSplitPanelHorizontal[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VNativeButton[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelExtraScrollbars.java b/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelExtraScrollbars.java
deleted file mode 100644
index 872828c97e..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelExtraScrollbars.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.vaadin.tests.components.splitpanel;
-
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.NativeButton;
-import com.vaadin.ui.Window;
-
-public class SplitPanelExtraScrollbars extends AbstractTestCase implements
-        ClickListener {
-
-    private HorizontalSplitPanel sp;
-    private HorizontalLayout hl;
-    private Button b;
-
-    @Override
-    public void init() {
-        sp = new HorizontalSplitPanel();
-        sp.setSizeFull();
-        sp.setSplitPosition(0, Sizeable.UNITS_PIXELS);
-
-        hl = new HorizontalLayout();
-        hl.setMargin(true);
-        hl.setWidth("100%");
-        hl.setHeight(null);
-
-        b = createButton("200px");
-        sp.setSecondComponent(hl);
-        hl.addComponent(b);
-
-        Window w = new Window("Test", sp);
-        setMainWindow(w);
-    }
-
-    private Button createButton(String height) {
-        Button b = new NativeButton("A BIG button");
-        b.setHeight(height);
-        b.addListener(this);
-        return b;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Click the button to change its height. Making the button higher than the browser should not cause vertical but not horizontal scrollbars to appear.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3458;
-    }
-
-    public void buttonClick(ClickEvent event) {
-        if (b.getHeight() == 200) {
-            b.setHeight("1200px");
-        } else {
-            b.setHeight("200px");
-        }
-
-        // Sending all changes in one repaint triggers the bug
-        hl.requestRepaint();
-        sp.requestRepaint();
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelInModalWindow.java b/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelInModalWindow.java
deleted file mode 100644
index c06ca5b0b9..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelInModalWindow.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.vaadin.tests.components.splitpanel;
-
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class SplitPanelInModalWindow extends TestBase {
-
-    @Override
-    public void setup() {
-
-        VerticalLayout vl = new VerticalLayout();
-        final Window modalWindow = new Window("Modeless Window", vl);
-        vl.setWidth(200, Sizeable.UNITS_PIXELS);
-        vl.setHeight(200, Sizeable.UNITS_PIXELS);
-        modalWindow.setModal(true); // This line causes the problem
-        getMainWindow().addWindow(modalWindow);
-
-        HorizontalSplitPanel splitPanel = new HorizontalSplitPanel();
-        splitPanel.setSplitPosition(20);
-        vl.addComponent(splitPanel);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Moving the splitter in the modal window should work as expected and not cause the application to freeze.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4067;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelReversePosition.html b/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelReversePosition.html
deleted file mode 100644
index 6bdc9dd5e7..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelReversePosition.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.splitpanel.SplitPanelReversePosition?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>right100pxbottom10percent</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelSplitPanelReversePosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>left100pxbottom10percent</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelSplitPanelReversePosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>left100pxtop10percent</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelSplitPanelReversePosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>right100pxtop10percent</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelReversePosition.java b/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelReversePosition.java
deleted file mode 100644
index 107635e989..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelReversePosition.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package com.vaadin.tests.components.splitpanel;
-
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractSplitPanel.SplitterClickEvent;
-import com.vaadin.ui.AbstractSplitPanel.SplitterClickListener;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalSplitPanel;
-
-public class SplitPanelReversePosition extends TestBase {
-
-    private boolean hsplitReversed = true;
-    private boolean vsplitReversed = true;
-
-    @Override
-    protected void setup() {
-        getLayout().setSizeFull();
-        getLayout().setSpacing(true);
-
-        final HorizontalSplitPanel hsplit = new HorizontalSplitPanel();
-        hsplit.setSizeFull();
-        hsplit.setImmediate(true);
-        hsplit.setSplitPosition(100, Sizeable.UNITS_PIXELS, hsplitReversed);
-        hsplit.addListener(new HorizontalSplitPanel.SplitterClickListener() {
-            public void splitterClick(SplitterClickEvent event) {
-                getMainWindow().showNotification("Horizontal Splitter Clicked");
-            }
-        });
-
-        TextField field = new TextField("");
-        field.setSizeFull();
-        hsplit.addComponent(field);
-
-        final VerticalSplitPanel vsplit = new VerticalSplitPanel();
-        vsplit.setSizeFull();
-        vsplit.setImmediate(true);
-        vsplit.setSplitPosition(10, Sizeable.UNITS_PERCENTAGE, vsplitReversed);
-        vsplit.addListener(new SplitterClickListener() {
-            public void splitterClick(SplitterClickEvent event) {
-                getMainWindow().showNotification("Vertical Splitter Clicked");
-            }
-        });
-        hsplit.addComponent(vsplit);
-
-        addComponent(hsplit);
-
-        field = new TextField("");
-        field.setSizeFull();
-        vsplit.addComponent(field);
-
-        field = new TextField("");
-        field.setSizeFull();
-        vsplit.addComponent(field);
-
-        HorizontalLayout buttons = new HorizontalLayout();
-        buttons.setSpacing(true);
-
-        buttons.addComponent(new Button("Swap horizontal positioning",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        hsplitReversed = !hsplitReversed;
-                        hsplit.setSplitPosition(100, Sizeable.UNITS_PIXELS,
-                                hsplitReversed);
-
-                    }
-                }));
-
-        buttons.addComponent(new Button("Swap vertical positioning",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        vsplitReversed = !vsplitReversed;
-                        vsplit.setSplitPosition(10, Sizeable.UNITS_PERCENTAGE,
-                                vsplitReversed);
-                    }
-                }));
-
-        addComponent(buttons);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The horizontal split panel should be splitted "
-                + "100px from the right and the vertical split panel should "
-                + "be splitted 10% from the bottom";
-
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 1588;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelSplitterWidth.java b/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelSplitterWidth.java
deleted file mode 100644
index 49a5915999..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelSplitterWidth.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.vaadin.tests.components.splitpanel;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.VerticalSplitPanel;
-import com.vaadin.ui.Window.Notification;
-
-public class SplitPanelSplitterWidth extends TestBase {
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2510;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "SplitPanel splitter is effectively a 1px wide target after unlocking previously locked splitter.";
-    }
-
-    @Override
-    protected void setup() {
-        final HorizontalSplitPanel split = new HorizontalSplitPanel();
-        split.setWidth("200px");
-        split.setHeight("200px");
-        split.setLocked(true);
-        Panel p = new Panel("Left");
-        p.setSizeFull();
-        split.addComponent(p);
-        p = new Panel("Right");
-        p.setSizeFull();
-        split.addComponent(p);
-
-        final VerticalSplitPanel split2 = new VerticalSplitPanel();
-        split2.setWidth("200px");
-        split2.setHeight("200px");
-        split2.setLocked(true);
-        p = new Panel("Top");
-        p.setSizeFull();
-        split2.addComponent(p);
-        p = new Panel("Bottom");
-        p.setSizeFull();
-        split2.addComponent(p);
-
-        getLayout().addComponent(
-                new Button("Unlock", new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        split.setLocked(false);
-                        split2.setLocked(false);
-                        getMainWindow().showNotification(
-                                "Try moving split. Then reload page.",
-                                Notification.TYPE_WARNING_MESSAGE);
-                        getLayout().removeComponent(event.getButton());
-                    }
-
-                }));
-        getLayout().addComponent(split);
-        getLayout().addComponent(split2);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelSwapComponents.html b/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelSwapComponents.html
deleted file mode 100644
index f84eba7c36..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelSwapComponents.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>SplitPanelSwapComponents</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">SplitPanelSwapComponents</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.splitpanel.SplitPanelSwapComponents?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelSplitPanelSwapComponents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>A label</td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelSwapComponents.java b/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelSwapComponents.java
deleted file mode 100644
index 470a47f160..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelSwapComponents.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.vaadin.tests.components.splitpanel;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Label;
-
-public class SplitPanelSwapComponents extends TestBase {
-
-    @Override
-    protected void setup() {
-        final HorizontalSplitPanel hsplit = new HorizontalSplitPanel();
-        hsplit.setWidth("300px");
-        hsplit.setHeight("300px");
-        hsplit.setSecondComponent(new Label("A label"));
-        hsplit.setFirstComponent(new Label("Another label"));
-        getLayout().addComponent(hsplit);
-
-        Button swap = new Button("Swap components", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                Component first = hsplit.getFirstComponent();
-                hsplit.removeComponent(first);
-
-                Component second = hsplit.getSecondComponent();
-                hsplit.removeComponent(second);
-
-                hsplit.setFirstComponent(second);
-                hsplit.setSecondComponent(first);
-            }
-        });
-
-        getLayout().addComponent(swap);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Swapping components should work";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6171;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelWidthOnResize.java b/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelWidthOnResize.java
deleted file mode 100644
index 8d5256ece7..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelWidthOnResize.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.vaadin.tests.components.splitpanel;
-
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.NativeButton;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class SplitPanelWidthOnResize extends AbstractTestCase {
-
-    @Override
-    public void init() {
-        VerticalLayout layout = new VerticalLayout();
-        layout.setSizeFull();
-        Window w = new Window("", layout);
-        setMainWindow(w);
-        HorizontalSplitPanel splitPanel = new HorizontalSplitPanel();
-        Button button = new NativeButton("A huge button");
-        button.setSizeFull();
-        TextField textField = new TextField("A small textfield");
-
-        splitPanel.setFirstComponent(button);
-        splitPanel.setSecondComponent(textField);
-        splitPanel.setSizeFull();
-        splitPanel.setSplitPosition(100, Sizeable.UNITS_PERCENTAGE);
-
-        layout.addComponent(splitPanel);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Make the browser window smaller and then larger again. The huge button should always stay visible and the TextField should never be shown.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3322;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelWithRichTextArea.java b/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelWithRichTextArea.java
deleted file mode 100644
index 6b17319509..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanelWithRichTextArea.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.vaadin.tests.components.splitpanel;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.RichTextArea;
-import com.vaadin.ui.VerticalSplitPanel;
-
-public class SplitPanelWithRichTextArea extends TestBase {
-
-    @Override
-    protected void setup() {
-        VerticalSplitPanel sp = new VerticalSplitPanel();
-        sp.setSizeFull();
-        RichTextArea rta = new RichTextArea();
-        rta.setSizeFull();
-        Label label = new Label("One side of the panel");
-
-        sp.setFirstComponent(label);
-        sp.setSecondComponent(rta);
-
-        addComponent(sp);
-        sp.setSizeFull();
-        getLayout().setSizeFull();
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Dragging the splitter should work even if the cursor happens to move over the RichTextArea because of slow updates.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3792;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanels.java b/tests/src/com/vaadin/tests/components/splitpanel/SplitPanels.java
deleted file mode 100644
index ebe94271cc..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/SplitPanels.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.vaadin.tests.components.splitpanel;
-
-import java.util.LinkedHashMap;
-
-import com.vaadin.ui.SplitPanel;
-
-@SuppressWarnings("deprecation")
-public class SplitPanels extends AbstractSplitPanelTest<SplitPanel> {
-
-    private Command<SplitPanel, Integer> orientationCommand = new Command<SplitPanel, Integer>() {
-
-        public void execute(SplitPanel c, Integer value, Object data) {
-            c.setOrientation(value);
-        }
-    };
-
-    @Override
-    protected Class<SplitPanel> getTestClass() {
-        return SplitPanel.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-        createOrientationSelect(CATEGORY_FEATURES);
-
-    }
-
-    private void createOrientationSelect(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("Horizontal", SplitPanel.ORIENTATION_HORIZONTAL);
-        options.put("Vertical", SplitPanel.ORIENTATION_VERTICAL);
-        createSelectAction("Orientation", category, options, "Horizontal",
-                orientationCommand);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/VerticalSplitPanelBasicStates.html b/tests/src/com/vaadin/tests/components/splitpanel/VerticalSplitPanelBasicStates.html
deleted file mode 100644
index 6f9678a54f..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/VerticalSplitPanelBasicStates.html
+++ /dev/null
@@ -1,214 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.splitpanel.VerticalSplitPanels?restartApplication</td>
-	<td></td>
-</tr>
-<!--Disable event log-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item1</td>
-	<td>26,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>20,8</td>
-</tr>
-<!--set size full-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
-	<td>22,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>72,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>18,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>47,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
-	<td>37,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>35,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>20,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>23,7</td>
-</tr>
-<!--add two 100% x 100% components-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
-	<td>23,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>86,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>48,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>38,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[3]/VMenuBar[0]#item6</td>
-	<td>69,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
-	<td>18,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>36,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>70,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>28,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[3]/VMenuBar[0]#item6</td>
-	<td>38,0</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled</td>
-</tr>
-<!--Disable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
-	<td>38,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>31,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>57,13</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled</td>
-</tr>
-<!--Set readonly-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
-	<td>6,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>20,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled-readonly</td>
-</tr>
-<!--Enable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
-	<td>43,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>42,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>53,5</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>readonly</td>
-</tr>
-<!--Set read-write-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
-	<td>6,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>20,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/VerticalSplitPanelMoveSplitter.html b/tests/src/com/vaadin/tests/components/splitpanel/VerticalSplitPanelMoveSplitter.html
deleted file mode 100644
index 0ebde2846d..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/VerticalSplitPanelMoveSplitter.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.splitpanel.VerticalSplitPanels?restartApplication</td>
-	<td></td>
-</tr>
-<!--set size full-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
-	<td>22,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>72,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>18,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>47,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
-	<td>37,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>35,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>20,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>23,7</td>
-</tr>
-<!--add two 100% x 100% components-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
-	<td>23,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>86,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>48,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item6</td>
-	<td>38,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[3]/VMenuBar[0]#item6</td>
-	<td>69,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
-	<td>18,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>36,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>70,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item5</td>
-	<td>28,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[3]/VMenuBar[0]#item6</td>
-	<td>38,0</td>
-</tr>
-<!--move the splitter-->
-<tr>
-	<td>dragAndDrop</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_StestComponent/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>0,-100</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>splitter-above</td>
-</tr>
-<tr>
-	<td>dragAndDrop</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_StestComponent/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>0,300</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>splitter-below</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/VerticalSplitPanelSplitterClick.html b/tests/src/com/vaadin/tests/components/splitpanel/VerticalSplitPanelSplitterClick.html
deleted file mode 100644
index ed5f191a65..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/VerticalSplitPanelSplitterClick.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>VerticalSplitPanelSplitterClick</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">VerticalSplitPanelSplitterClick</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.splitpanel.VerticalSplitPanels?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-<!--Add splitter click listener-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
-	<td>9,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>105,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>36,11</td>
-</tr>
-<!--Click splitter-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_StestComponent/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_SLog_row_0</td>
-	<td>1. SplitterClickEvent: left at -1,-1</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>splitterClicked</td>
-</tr>
-<!--Reverse orientation-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
-	<td>51,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>73,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>50,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item7</td>
-	<td>92,10</td>
-</tr>
-<!--Click splitter-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_StestComponent/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_SLog_row_0</td>
-	<td>3. SplitterClickEvent: left at -1,-1</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>reverseSplitterClicked</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/splitpanel/VerticalSplitPanels.java b/tests/src/com/vaadin/tests/components/splitpanel/VerticalSplitPanels.java
deleted file mode 100644
index 4ff0445d71..0000000000
--- a/tests/src/com/vaadin/tests/components/splitpanel/VerticalSplitPanels.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.components.splitpanel;
-
-import com.vaadin.ui.VerticalSplitPanel;
-
-public class VerticalSplitPanels extends
-        AbstractSplitPanelTest<VerticalSplitPanel> {
-
-    @Override
-    protected Class<VerticalSplitPanel> getTestClass() {
-        return VerticalSplitPanel.class;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/ActionsOnTableBackground.html b/tests/src/com/vaadin/tests/components/table/ActionsOnTableBackground.html
deleted file mode 100644
index 93037c3da1..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ActionsOnTableBackground.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>actions-on-table-background</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">actions-on-table-background</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<!--make table higher than number of rows-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>47,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>51,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>32,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item8</td>
-	<td>25,1</td>
-</tr>
-<!--add context menu-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>36,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>60,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>71,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item5</td>
-	<td>57,8</td>
-</tr>
-<!--Context menu for item 1-->
-<tr>
-	<td>contextmenu</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertVisible</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
-	<td>Edit Item 1</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option1</td>
-	<td>Common action</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
-	<td>47,6</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog_row_0</td>
-	<td>2. Action Edit Item 1 performed on Item 1</td>
-</tr>
-<!--Context menu for no item-->
-<tr>
-	<td>contextmenu</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertVisible</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
-	<td>New...</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option1</td>
-	<td>Common action</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
-	<td>47,6</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog_row_0</td>
-	<td>3. Action New... performed on null</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/CellStyleGeneratorTest.java b/tests/src/com/vaadin/tests/components/table/CellStyleGeneratorTest.java
deleted file mode 100644
index 08bbd0790f..0000000000
--- a/tests/src/com/vaadin/tests/components/table/CellStyleGeneratorTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.TestUtils;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.CellStyleGenerator;
-
-@SuppressWarnings("serial")
-public class CellStyleGeneratorTest extends TestBase {
-
-    @Override
-    protected void setup() {
-        TestUtils
-                .injectCSS(getMainWindow(),
-                        ".v-table-cell-content-red{background:red;}.v-table-row-blue{background:blue;}");
-
-        CellStyleGenerator g = new CellStyleGenerator() {
-
-            public String getStyle(Object itemId, Object propertyId) {
-                if (propertyId != null && propertyId.equals("red")) {
-                    return "red";
-                } else if (itemId.equals("blue") && propertyId == null) {
-                    // row style
-                    return "blue";
-                }
-                return null;
-            }
-
-        };
-
-        Table table = new Table();
-        table.addContainerProperty("foo", String.class, "foo");
-        table.addContainerProperty("red", String.class, "red");
-        table.addItem();
-        table.addItem("blue");
-        table.setCellStyleGenerator(g);
-
-        addComponent(table);
-
-        table = new Table();
-        table.addContainerProperty("foo", String.class, "foo");
-        table.addContainerProperty("red", String.class, "red");
-        table.addItem();
-        table.addItem("blue");
-        table.setCellStyleGenerator(g);
-        table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-
-        addComponent(table);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Cell style generators should work";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/ClippedComponentsInTable.html b/tests/src/com/vaadin/tests/components/table/ClippedComponentsInTable.html
deleted file mode 100644
index 4a6ccbbe2d..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ClippedComponentsInTable.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>ClippedComponentsInTable</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ClippedComponentsInTable</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.ClippedComponentsInTable</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/ClippedComponentsInTable.java b/tests/src/com/vaadin/tests/components/table/ClippedComponentsInTable.java
deleted file mode 100644
index 8b6775cc74..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ClippedComponentsInTable.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-
-public class ClippedComponentsInTable extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The table below should display 3 rows. Each with a textfield containing the row number.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-    @Override
-    protected void setup() {
-        Table t = new Table();
-        addComponent(t);
-
-        t.addContainerProperty("Name", TextField.class, null);
-        t.addContainerProperty("Button", Button.class, null);
-
-        for (int i = 0; i < 3; i++) {
-            Item item = t.addItem(i);
-            TextField tf = new TextField("", String.valueOf(i + 1));
-            tf.setColumns(10);
-            item.getItemProperty("Name").setValue(tf);
-
-            Button b = new Button("OK");
-            item.getItemProperty("Button").setValue(b);
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/CollapseIndicatorOverlapsColumn.html b/tests/src/com/vaadin/tests/components/table/CollapseIndicatorOverlapsColumn.html
deleted file mode 100644
index e3d0821642..0000000000
--- a/tests/src/com/vaadin/tests/components/table/CollapseIndicatorOverlapsColumn.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8080/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.CollapseIndicatorOverlapsColumn?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>RightColumnCaptionVisible</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableCollapseIndicatorOverlapsColumn::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
-	<td>76,11</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>RightColumnCaptionAndSortIndicatorVisible</td>
-</tr>
-<tr>
-	<td>drag</td>
-	<td>vaadin=runcomvaadintestscomponentstableCollapseIndicatorOverlapsColumn::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>Wait to ensure the dragged element is updated by the start of the drag</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td></td>
-	<td>200</td>
-</tr>
-<tr>
-	<td>drop</td>
-	<td>vaadin=runcomvaadintestscomponentstableCollapseIndicatorOverlapsColumn::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>-100,0</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>NoExtraSpacingInCaption</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/CollapseIndicatorOverlapsColumn.java b/tests/src/com/vaadin/tests/components/table/CollapseIndicatorOverlapsColumn.java
deleted file mode 100644
index 267b61854f..0000000000
--- a/tests/src/com/vaadin/tests/components/table/CollapseIndicatorOverlapsColumn.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-
-public class CollapseIndicatorOverlapsColumn extends TestBase {
-
-    @Override
-    protected void setup() {
-        Table tbl = createTable();
-        tbl = createTable();
-        tbl.setWidth("400px");
-        addComponent(tbl);
-    }
-
-    private Table createTable() {
-        Table tbl = new Table();
-        tbl.addContainerProperty("COL1", String.class, "Column 1");
-        tbl.addContainerProperty("COL2", String.class, "Column 2");
-
-        // Right align last column
-        tbl.setColumnAlignment("COL2", Table.ALIGN_RIGHT);
-
-        // Allow collapsing
-        tbl.setColumnCollapsingAllowed(true);
-
-        for (int i = 0; i < 5; i++) {
-            Item item = tbl.addItem("Item " + i);
-            for (int j = 1; j <= 2; j++) {
-                item.getItemProperty("COL" + j).setValue("Item " + i + "/" + j);
-            }
-        }
-        return tbl;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The rightmost column should not be covered by the collapse indicator";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6934;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.html b/tests/src/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.html
deleted file mode 100644
index 9e529836b6..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.html
+++ /dev/null
@@ -1,158 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>ColumnCollapsingAndColumnExpansion</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ColumnCollapsingAndColumnExpansion</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.ColumnCollapsingAndColumnExpansion</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<!--Initial state, all 3 columns visible-->
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>col1-col2-col3-visible</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<!--Hide 'col2' through table interface-->
-<tr>
-	<td>click</td>
-	<td>//td[@id='gwt-uid-2']/span/div</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>col2-hidden</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<!--Hide 'Col1' using button-->
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>Col1</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>col1-col2-hidden</td>
-</tr>
-<!--Show 'col2' using action handler-->
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>contextmenu</td>
-	<td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VContextMenu[0]#option0</td>
-	<td>11,6</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>Col2</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>col1-hidden</td>
-</tr>
-<!--Show 'Col1' using button-->
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>Col1</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<!--We should now be back at the initial state, all 3 columns visible-->
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>col1-col2-col3-visible-again</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.java b/tests/src/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.java
deleted file mode 100644
index 9bf77f42bd..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.event.Action;
-import com.vaadin.event.Action.Handler;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-
-public class ColumnCollapsingAndColumnExpansion extends TestBase {
-
-    private Table table;
-
-    @Override
-    public void setup() {
-
-        table = new Table();
-
-        table.addContainerProperty("Col1", String.class, null);
-        table.addContainerProperty("Col2", String.class, null);
-        table.addContainerProperty("Col3", String.class, null);
-        table.setColumnCollapsingAllowed(true);
-
-        table.addActionHandler(new Handler() {
-
-            final Action H = new Action("Toggle Col2");
-            final Action[] actions = new Action[] { H };
-
-            public Action[] getActions(Object target, Object sender) {
-                return actions;
-            }
-
-            public void handleAction(Action action, Object sender, Object target) {
-                table.setColumnCollapsed("Col2",
-                        !table.isColumnCollapsed("Col2"));
-
-            }
-        });
-
-        table.setSizeFull();
-
-        for (int y = 1; y < 5; y++) {
-            table.addItem(new Object[] { "cell " + 1 + "-" + y,
-                    "cell " + 2 + "-" + y, "cell " + 3 + "-" + y, },
-                    new Object());
-        }
-
-        addComponent(table);
-
-        HorizontalLayout hl = new HorizontalLayout();
-        final TextField tf = new TextField("Column name (ColX)");
-        Button hide = new Button("Collapse", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                table.setColumnCollapsed(tf.getValue(), true);
-            }
-
-        });
-
-        Button show = new Button("Show", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                table.setColumnCollapsed(tf.getValue(), false);
-            }
-
-        });
-
-        hl.addComponent(tf);
-        hl.addComponent(hide);
-        hl.addComponent(show);
-        hl.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
-        hl.setComponentAlignment(hide, Alignment.BOTTOM_LEFT);
-        hl.setComponentAlignment(show, Alignment.BOTTOM_LEFT);
-        addComponent(hl);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "After hiding column 2 the remaining columns (1 and 3) should use all available space in the table";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3246;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/ColumnExpandRatio.html b/tests/src/com/vaadin/tests/components/table/ColumnExpandRatio.html
deleted file mode 100644
index 6d5422831e..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ColumnExpandRatio.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>ColumnExpandRatio</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ColumnExpandRatio</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.ColumnExpandRatio</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/ColumnExpandRatio.java b/tests/src/com/vaadin/tests/components/table/ColumnExpandRatio.java
deleted file mode 100644
index be176d83fa..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ColumnExpandRatio.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-
-public class ColumnExpandRatio extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Column expand ratios can be used to adjust the way "
-                + "how excess horizontal space is divided among columns.";
-
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2806;
-    }
-
-    private static final int ROWS = 100;
-
-    @Override
-    public void setup() {
-        Table table1 = initTable();
-        addComponent(new Label("Plain table"));
-        addComponent(table1);
-
-    }
-
-    private Table initTable() {
-        Table table = new Table();
-        table.setWidth("100%");
-
-        IndexedContainer idx = new IndexedContainer();
-        idx.addContainerProperty("firstname", String.class, null);
-        idx.addContainerProperty("lastname", String.class, null);
-        Item i = idx.addItem(1);
-        i.getItemProperty("firstname").setValue("John");
-        i.getItemProperty("lastname").setValue("Johnson");
-
-        i = idx.addItem(2);
-        i.getItemProperty("firstname").setValue("Jane");
-        i.getItemProperty("lastname").setValue("Janeine");
-
-        for (int index = 3; index < ROWS; index++) {
-            i = idx.addItem(index);
-            i.getItemProperty("firstname").setValue("Jane");
-            i.getItemProperty("lastname").setValue("Janeine");
-        }
-
-        idx.addContainerProperty("fixed 50px column", String.class, "");
-
-        idx.addContainerProperty("Expanded with 2", String.class, "foobar");
-
-        table.setContainerDataSource(idx);
-
-        table.setColumnHeader("firstname", "FirstName");
-        table.setColumnHeader("lastname", "LastName (1)");
-
-        table.setColumnWidth("fixed 50px column", 50);
-        table.setColumnExpandRatio("Expanded with 2", 2);
-        table.setColumnExpandRatio("lastname", 1);
-
-        return table;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/ColumnExpandWithFixedColumns.html b/tests/src/com/vaadin/tests/components/table/ColumnExpandWithFixedColumns.html
deleted file mode 100644
index eb338c8dde..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ColumnExpandWithFixedColumns.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>ColumnExpandWithFixedColumns</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ColumnExpandWithFixedColumns</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.ColumnExpandWithFixedColumns</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/ColumnExpandWithFixedColumns.java b/tests/src/com/vaadin/tests/components/table/ColumnExpandWithFixedColumns.java
deleted file mode 100644
index 198e29be61..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ColumnExpandWithFixedColumns.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-
-public class ColumnExpandWithFixedColumns extends TestBase {
-
-    private Table createTable() {
-        Table t = new Table();
-        t.addContainerProperty("id", Integer.class, null);
-        t.addContainerProperty("txt", Component.class, null);
-        t.addContainerProperty("button", Button.class, null);
-        t.setColumnWidth("id", 30);
-        t.setColumnWidth("button", 200);
-        t.setColumnExpandRatio("txt", 10);// This column should be 400px wide.
-        t.setSelectable(true);
-        t.setSizeFull();
-
-        for (int i = 0; i < 10; i++) {
-            t.addItem(new Object[] { i, new Label("test " + i),
-                    new Button("Button " + i) }, i);
-        }
-
-        return t;
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The second column has expand ratio and should use the maximum available space";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3143;
-    }
-
-    @Override
-    protected void setup() {
-        addComponent(createTable());
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/ColumnGeneratorAddingOrder.java b/tests/src/com/vaadin/tests/components/table/ColumnGeneratorAddingOrder.java
deleted file mode 100644
index d3dfa61ceb..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ColumnGeneratorAddingOrder.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Table;
-
-public class ColumnGeneratorAddingOrder extends TestBase {
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2457;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Column generator must be allowed to be added both before and after data source setting and overriding should work. Bugs in 5.3-rc7 if added after DS.";
-    }
-
-    @Override
-    protected void setup() {
-        Table t = new Table();
-
-        t.addGeneratedColumn("col2", new Table.ColumnGenerator() {
-            public Component generateCell(Table source, Object itemId,
-                    Object columnId) {
-                return new Button("generated b c2");
-            }
-        });
-
-        IndexedContainer c = new IndexedContainer();
-        c.addContainerProperty("col1", String.class, "col1 ds data");
-        c.addContainerProperty("col2", String.class, "col2 ds data");
-        c.addContainerProperty("col3", String.class, "col3 ds data");
-        for (int i = 0; i < 100; i++) {
-            c.addItem();
-        }
-        t.setContainerDataSource(c);
-
-        t.addGeneratedColumn("col1", new Table.ColumnGenerator() {
-            public Component generateCell(Table source, Object itemId,
-                    Object columnId) {
-                return new Button("generated b c1");
-            }
-        });
-
-        getLayout().addComponent(t);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/ColumnHeaderAlignments.java b/tests/src/com/vaadin/tests/components/table/ColumnHeaderAlignments.java
deleted file mode 100644
index 0c625f1c5d..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ColumnHeaderAlignments.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.Table;
-
-@SuppressWarnings("serial")
-public class ColumnHeaderAlignments extends TestBase {
-
-    private static final String BAZ = "Baz (right)";
-    private static final String BAR = "Bar (center)";
-    private static final String FOO = "Foo (left)";
-    private Table fooTable;
-    private Table barTable;
-    private Table bazTable;
-
-    @Override
-    protected void setup() {
-        Select theme = new Select();
-        theme.addItem("reindeer");
-        theme.addItem("runo");
-        theme.addItem("base");
-        theme.addItem("liferay");
-        theme.setValue("reindeer");
-        theme.setNullSelectionAllowed(false);
-        theme.setImmediate(true);
-        theme.addListener(new ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                setTheme(String.valueOf(event.getProperty().getValue()));
-            }
-        });
-        addComponent(theme);
-        CheckBox footers = new CheckBox("Show footers", new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                fooTable.setFooterVisible((Boolean) event.getButton()
-                        .getValue());
-                barTable.setFooterVisible((Boolean) event.getButton()
-                        .getValue());
-                bazTable.setFooterVisible((Boolean) event.getButton()
-                        .getValue());
-            }
-        });
-        footers.setImmediate(true);
-        addComponent(footers);
-        HorizontalLayout tables = new HorizontalLayout();
-        fooTable = createTable(null);
-        tables.addComponent(fooTable);
-        barTable = createTable("strong");
-        tables.addComponent(barTable);
-        bazTable = createTable("black");
-        tables.addComponent(bazTable);
-        addComponent(tables);
-    }
-
-    private Table createTable(String style) {
-        Table table = new Table();
-        table.addContainerProperty(FOO, String.class, "");
-        table.addContainerProperty(BAR, String.class, "");
-        table.addContainerProperty(BAZ, String.class, "");
-
-        table.setColumnAlignment(FOO, Table.ALIGN_LEFT);
-        table.setColumnAlignment(BAR, Table.ALIGN_CENTER);
-        table.setColumnAlignment(BAZ, Table.ALIGN_RIGHT);
-        if (style != null) {
-            table.setStyleName(style);
-        }
-
-        for (int i = 0; i < 100; i++) {
-            Item item = table.addItem(i);
-            item.getItemProperty(FOO).setValue("foo");
-            item.getItemProperty(BAR).setValue("bar");
-            item.getItemProperty(BAZ).setValue("baz");
-        }
-
-        return table;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Aligned column headers should have style names telling the alignment";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5066;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/ColumnReorderEvent.java b/tests/src/com/vaadin/tests/components/table/ColumnReorderEvent.java
deleted file mode 100644
index 4c1fc70e5e..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ColumnReorderEvent.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-
-@SuppressWarnings("serial")
-public class ColumnReorderEvent extends TestBase {
-
-    private Label order = new Label("Column order");
-
-    @Override
-    protected void setup() {
-
-        HorizontalLayout widths = new HorizontalLayout();
-        widths.setSpacing(true);
-        widths.setWidth("50%");
-
-        order.setCaption("Column 1 width");
-        widths.addComponent(order);
-
-        addComponent(widths);
-
-        Table table1 = initTable();
-        addComponent(table1);
-
-        order.setValue(aToString(table1.getVisibleColumns()));
-
-    }
-
-    private String aToString(Object[] visibleColumns) {
-        StringBuilder sb = new StringBuilder();
-        for (Object object : visibleColumns) {
-            sb.append(object.toString());
-            sb.append(" | ");
-        }
-        return sb.toString();
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Test ColumnReorderEvents";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6283;
-    }
-
-    private static final int ROWS = 100;
-
-    private Table initTable() {
-        final Table table = new Table();
-        table.setWidth("100%");
-        table.setImmediate(true);
-
-        IndexedContainer idx = new IndexedContainer();
-        idx.addContainerProperty("firstname", String.class, null);
-        idx.addContainerProperty("lastname", String.class, null);
-
-        Item i = idx.addItem(1);
-        i.getItemProperty("firstname").setValue("John");
-        i.getItemProperty("lastname").setValue("Johnson");
-
-        i = idx.addItem(2);
-        i.getItemProperty("firstname").setValue("Jane");
-        i.getItemProperty("lastname").setValue("Janeine");
-
-        for (int index = 3; index < ROWS; index++) {
-            i = idx.addItem(index);
-            i.getItemProperty("firstname").setValue("Jane");
-            i.getItemProperty("lastname").setValue("Janeine");
-        }
-
-        idx.addContainerProperty("property", String.class, "foobar");
-
-        table.setContainerDataSource(idx);
-
-        table.setColumnHeader("firstname", "FirstName");
-        table.setColumnHeader("lastname", "LastName");
-
-        table.addListener(new Table.ColumnReorderListener() {
-            public void columnReorder(
-                    com.vaadin.ui.Table.ColumnReorderEvent event) {
-                order.setValue(aToString(table.getVisibleColumns()));
-            }
-        });
-
-        table.setColumnReorderingAllowed(true);
-
-        return table;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/ColumnResizeEvent.java b/tests/src/com/vaadin/tests/components/table/ColumnResizeEvent.java
deleted file mode 100644
index 29131b8d7a..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ColumnResizeEvent.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.ColumnResizeListener;
-
-@SuppressWarnings("serial")
-public class ColumnResizeEvent extends TestBase {
-
-    private Label column1Width = new Label("Undefined");
-    private Label column2Width = new Label("Undefined");
-    private Label column3Width = new Label("Undefined");
-
-    @Override
-    protected void setup() {
-
-        HorizontalLayout widths = new HorizontalLayout();
-        widths.setSpacing(true);
-        widths.setWidth("50%");
-
-        column1Width.setCaption("Column 1 width");
-        widths.addComponent(column1Width);
-
-        column2Width.setCaption("Column 2 width");
-        widths.addComponent(column2Width);
-
-        column3Width.setCaption("Column 3 width");
-        widths.addComponent(column3Width);
-
-        addComponent(widths);
-
-        Table table1 = initTable();
-        addComponent(table1);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Table should update column size back to server";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2807;
-    }
-
-    private static final int ROWS = 100;
-
-    private Table initTable() {
-        Table table = new Table();
-        table.setWidth("100%");
-        table.setImmediate(true);
-
-        IndexedContainer idx = new IndexedContainer();
-        idx.addContainerProperty("firstname", String.class, null);
-        idx.addContainerProperty("lastname", String.class, null);
-
-        Item i = idx.addItem(1);
-        i.getItemProperty("firstname").setValue("John");
-        i.getItemProperty("lastname").setValue("Johnson");
-
-        i = idx.addItem(2);
-        i.getItemProperty("firstname").setValue("Jane");
-        i.getItemProperty("lastname").setValue("Janeine");
-
-        for (int index = 3; index < ROWS; index++) {
-            i = idx.addItem(index);
-            i.getItemProperty("firstname").setValue("Jane");
-            i.getItemProperty("lastname").setValue("Janeine");
-        }
-
-        idx.addContainerProperty("150pxfixedCol", String.class, "foobar");
-
-        table.setContainerDataSource(idx);
-
-        table.setColumnHeader("firstname", "FirstName");
-        table.setColumnHeader("lastname", "LastName with long header");
-
-        table.setColumnWidth("150pxfixedCol", 150);
-        column3Width.setValue(table.getColumnWidth("150pxfixedCol") + "px");
-
-        table.addListener(new ColumnResizeListener() {
-            public void columnResize(com.vaadin.ui.Table.ColumnResizeEvent event) {
-
-                if (event.getPropertyId().equals("firstname")) {
-                    column1Width.setValue(event.getCurrentWidth()
-                            + "px (previously " + event.getPreviousWidth()
-                            + "px)");
-                } else if (event.getPropertyId().equals("lastname")) {
-                    column2Width.setValue(event.getCurrentWidth()
-                            + "px (previously " + event.getPreviousWidth()
-                            + "px)");
-                } else if (event.getPropertyId().equals("150pxfixedCol")) {
-                    column3Width.setValue(event.getCurrentWidth()
-                            + "px (previously " + event.getPreviousWidth()
-                            + "px)");
-                }
-            }
-        });
-
-        return table;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/ColumnWidths.java b/tests/src/com/vaadin/tests/components/table/ColumnWidths.java
deleted file mode 100644
index 9fe7a98179..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ColumnWidths.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-
-public class ColumnWidths extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "On window resize undefined "
-                + "columns (by server or user (dragged)) columns "
-                + "must consume the excess space. Space is divided "
-                + "by default according to natural widths of columns."
-                + "In example last column is fixed width. Other columns"
-                + " should divide excess space relatively to 'natural' width unless user has resized column.";
-
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2804;
-    }
-
-    private static final int ROWS = 100;
-
-    @Override
-    public void setup() {
-        Table table1 = initTable();
-        addComponent(new Label("Plain table"));
-        addComponent(table1);
-
-    }
-
-    private Table initTable() {
-        Table table = new Table();
-        table.setWidth("100%");
-
-        IndexedContainer idx = new IndexedContainer();
-        idx.addContainerProperty("firstname", String.class, null);
-        idx.addContainerProperty("lastname", String.class, null);
-        Item i = idx.addItem(1);
-        i.getItemProperty("firstname").setValue("John");
-        i.getItemProperty("lastname").setValue("Johnson");
-        i = idx.addItem(2);
-        i.getItemProperty("firstname").setValue("Jane");
-        i.getItemProperty("lastname").setValue("Janeine");
-
-        for (int index = 3; index < ROWS; index++) {
-            i = idx.addItem(index);
-            i.getItemProperty("firstname").setValue("Jane");
-            i.getItemProperty("lastname").setValue("Janeine");
-        }
-
-        idx.addContainerProperty("150pxfixedCol", String.class, "foobar");
-
-        table.setContainerDataSource(idx);
-
-        table.setColumnHeader("firstname", "FirstName");
-        table.setColumnHeader("lastname", "LastName with long header");
-
-        table.setColumnWidth("150pxfixedCol", 150);
-
-        return table;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/ContainerChangeWithPartlySamePropertyIds.html b/tests/src/com/vaadin/tests/components/table/ContainerChangeWithPartlySamePropertyIds.html
deleted file mode 100644
index 6c8a770b6a..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ContainerChangeWithPartlySamePropertyIds.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>ContainerChangeWithPartlySamePropertyIds</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ContainerChangeWithPartlySamePropertyIds</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.ContainerChangeWithPartlySamePropertyIds?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableContainerChangeWithPartlySamePropertyIds::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>contextmenu</td>
-	<td>vaadin=runcomvaadintestscomponentstableContainerChangeWithPartlySamePropertyIds::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[2]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>property4</td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>value_prop4</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableContainerChangeWithPartlySamePropertyIds::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>property1</td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>value1</td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/ContainerChangeWithPartlySamePropertyIds.java b/tests/src/com/vaadin/tests/components/table/ContainerChangeWithPartlySamePropertyIds.java
deleted file mode 100644
index b8e9226ad2..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ContainerChangeWithPartlySamePropertyIds.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-
-public class ContainerChangeWithPartlySamePropertyIds extends TestBase {
-
-    @Override
-    protected void setup() {
-        getLayout().addComponent(new TableTestComponent());
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The client side Table component messes up its internal "
-                + "data structures (in header and footer) if the container changes and it has partly"
-                + " the same properties (but in different order) than the old container.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6281;
-    }
-
-    public static class TableTestComponent extends VerticalLayout {
-
-        final TableTestComponent me = this;
-
-        Table testTable;
-        IndexedContainer containerA;
-        IndexedContainer containerB;
-
-        String property1 = "property1";
-        String property2 = "property2";
-        String property3 = "property3";
-        String property4 = "property4";
-
-        private void createContainers() {
-
-            containerA = new IndexedContainer();
-            containerA.addContainerProperty(property1, String.class, "");
-            containerA.addContainerProperty(property2, String.class, "");
-            containerA.addContainerProperty(property3, String.class, "");
-
-            Item itemA = containerA.addItem(new Object());
-            itemA.getItemProperty(property1).setValue("value1");
-            itemA.getItemProperty(property2).setValue("value2");
-            itemA.getItemProperty(property3).setValue("value3");
-
-            containerB = new IndexedContainer();
-            containerB.addContainerProperty(property4, String.class, "");
-            containerB.addContainerProperty(property3, String.class, "");
-            containerB.addContainerProperty(property2, String.class, "");
-
-            Item itemB = containerB.addItem(new Object());
-            itemB.getItemProperty(property4).setValue("value_prop4");
-            itemB.getItemProperty(property3).setValue("value_prop3");
-            itemB.getItemProperty(property2).setValue("value_prop2");
-        }
-
-        public TableTestComponent() {
-
-            Button switchContainerButton = new Button("switch container");
-            switchContainerButton.addListener(new ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    if (testTable.getContainerDataSource() == containerA) {
-                        testTable.setContainerDataSource(containerB);
-                    } else {
-                        testTable.setContainerDataSource(containerA);
-                    }
-                }
-            });
-            this.addComponent(switchContainerButton);
-
-            Button clearButton = new Button("clear (click twice)");
-            clearButton.addListener(new ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    try {
-                        me.removeComponent(testTable);
-
-                        testTable = new Table();
-                        createContainers();
-                        testTable.setContainerDataSource(containerA);
-
-                        me.addComponent(testTable);
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                    }
-                }
-            });
-            this.addComponent(clearButton);
-
-            testTable = new Table();
-            this.addComponent(testTable);
-
-            createContainers();
-            testTable.setContainerDataSource(containerA);
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/ContainerSizeChange.html b/tests/src/com/vaadin/tests/components/table/ContainerSizeChange.html
deleted file mode 100644
index 7c2374f322..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ContainerSizeChange.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>ContainerSizeChange</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ContainerSizeChange</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.ContainerSizeChange</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableContainerSizeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableContainerSizeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>scroll</td>
-	<td>vaadin=runcomvaadintestscomponentstableContainerSizeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
-	<td>945</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>scroll</td>
-	<td>vaadin=runcomvaadintestscomponentstableContainerSizeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
-	<td>525</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/ContainerSizeChange.java b/tests/src/com/vaadin/tests/components/table/ContainerSizeChange.java
deleted file mode 100644
index 84e98deffb..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ContainerSizeChange.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Table;
-
-public class ContainerSizeChange extends TestBase {
-
-    private Table table;
-    private MyDataSource ds;
-
-    @Override
-    protected String getDescription() {
-        return "A table should be able to handle a decrease in the size of the container. The original container here contains 50 items and the decrease button removes 10 of these. To reproduce the problem: Click 'Decrease size' two times to reduce size to 30 and scroll to the end (50). What should happen is the table should notice the container size has decreased and show the last items which now exists in the new container.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2862;
-    }
-
-    @Override
-    protected void setup() {
-        table = new Table("A table");
-        ds = new MyDataSource();
-        table.setContainerDataSource(ds);
-        table.setPageLength(5);
-        addComponent(table);
-
-        Button b = new Button("Decrease size", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                ds.decreaseSize();
-            }
-
-        });
-
-        addComponent(b);
-
-        b = new Button("Increase size", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                ds.increaseSize();
-            }
-
-        });
-
-        addComponent(b);
-
-    }
-
-}
-
-class MyDataSource extends IndexedContainer {
-
-    private int size = 0;
-
-    public MyDataSource() {
-        addContainerProperty("a", String.class, "");
-        addContainerProperty("b", String.class, "");
-        addContainerProperty("c", String.class, "");
-
-        for (int i = 0; i < 100; i++) {
-            Item item = addItem(String.valueOf(i));
-            item.getItemProperty("a").setValue("a " + i);
-            item.getItemProperty("b").setValue("b " + i);
-            item.getItemProperty("c").setValue("c " + i);
-        }
-        size = 50;
-    }
-
-    public void increaseSize() {
-        size += 10;
-
-    }
-
-    public void decreaseSize() {
-        if (size > 10) {
-            size -= 10;
-        }
-
-    }
-
-    @Override
-    public int size() {
-        return size;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/CtrlShiftMultiselect.java b/tests/src/com/vaadin/tests/components/table/CtrlShiftMultiselect.java
deleted file mode 100644
index 02f4af045b..0000000000
--- a/tests/src/com/vaadin/tests/components/table/CtrlShiftMultiselect.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-
-@SuppressWarnings("serial")
-public class CtrlShiftMultiselect extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Table table = new Table("Multiselectable table");
-
-        table.setContainerDataSource(createContainer());
-        table.setImmediate(true);
-
-        table.setSelectable(true);
-        table.setMultiSelect(true);
-
-        table.setWidth("400px");
-        table.setHeight("400px");
-
-        addComponent(table);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Improve Table multiselect to use Ctrl and Shift for selection";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3520;
-    }
-
-    private Container createContainer() {
-        IndexedContainer container = new IndexedContainer();
-        container.addContainerProperty("col1", String.class, "");
-        container.addContainerProperty("col2", String.class, "");
-        container.addContainerProperty("col3", String.class, "");
-
-        for (int i = 0; i < 100; i++) {
-            Item item = container.addItem("item " + i);
-            item.getItemProperty("col1").setValue("first" + i);
-            item.getItemProperty("col2").setValue("middle" + i);
-            item.getItemProperty("col3").setValue("last" + i);
-        }
-
-        return container;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/DisabledTableKeyboardNavigation.html b/tests/src/com/vaadin/tests/components/table/DisabledTableKeyboardNavigation.html
deleted file mode 100644
index a8f0e864c3..0000000000
--- a/tests/src/com/vaadin/tests/components/table/DisabledTableKeyboardNavigation.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.DisabledTableKeyboardNavigation?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>ADisabledTableWithoutASelection</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableDisabledTableKeyboardNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[1]/domChild[0]</td>
-	<td>56,13</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentstableDisabledTableKeyboardNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentstableDisabledTableKeyboardNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentstableDisabledTableKeyboardNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentstableDisabledTableKeyboardNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentstableDisabledTableKeyboardNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentstableDisabledTableKeyboardNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
-	<td>down</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>StillADisabledTableWithoutSelection</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/DisabledTableKeyboardNavigation.java b/tests/src/com/vaadin/tests/components/table/DisabledTableKeyboardNavigation.java
deleted file mode 100644
index ec888c2699..0000000000
--- a/tests/src/com/vaadin/tests/components/table/DisabledTableKeyboardNavigation.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-
-public class DisabledTableKeyboardNavigation extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Table table = new Table("Multiselectable table");
-
-        table.setContainerDataSource(createContainer());
-        table.setImmediate(true);
-        table.setSelectable(true);
-        table.setMultiSelect(true);
-        table.setWidth("400px");
-        table.setHeight("200px");
-
-        table.setEnabled(false);
-
-        addComponent(table);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Once should not be able to focus or use a disabled table";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5797;
-    }
-
-    private Container createContainer() {
-        IndexedContainer container = new IndexedContainer();
-        container.addContainerProperty("col1", String.class, "");
-        container.addContainerProperty("col2", String.class, "");
-        container.addContainerProperty("col3", String.class, "");
-
-        for (int i = 0; i < 100; i++) {
-            Item item = container.addItem("item " + i);
-            item.getItemProperty("col1").setValue("first" + i);
-            item.getItemProperty("col2").setValue("middle" + i);
-            item.getItemProperty("col3").setValue("last" + i);
-        }
-
-        return container;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/DisabledTableShouldNotSendPageLengthUpdates.java b/tests/src/com/vaadin/tests/components/table/DisabledTableShouldNotSendPageLengthUpdates.java
deleted file mode 100644
index 86646f522f..0000000000
--- a/tests/src/com/vaadin/tests/components/table/DisabledTableShouldNotSendPageLengthUpdates.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Table;
-
-@SuppressWarnings("serial")
-public class DisabledTableShouldNotSendPageLengthUpdates extends TestBase {
-
-    final Table table = new Table();
-
-    @Override
-    protected void setup() {
-        HorizontalSplitPanel split = new HorizontalSplitPanel();
-        table.addContainerProperty("name", Integer.class, 0);
-        Button button = new Button("Add items", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                for (int i = 0; i < 5; i++) {
-                    Object id = table.addItem();
-                    table.getItem(id).getItemProperty("name").setValue(i);
-                }
-            }
-        });
-        table.setEnabled(false);
-        table.setSizeFull();
-        split.setFirstComponent(table);
-        split.setSecondComponent(button);
-        getLayout().setSizeFull();
-        split.setSizeFull();
-        addComponent(split);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A disabled table should not send pageLength updates causing 'Warning: Ignoring variable change for disabled component class com.vaadin.ui.Table' warnings in the server logs";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4317;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/EditableModeChange.html b/tests/src/com/vaadin/tests/components/table/EditableModeChange.html
deleted file mode 100644
index 2a7949f3ba..0000000000
--- a/tests/src/com/vaadin/tests/components/table/EditableModeChange.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.EditableModeChange?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableEditableModeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>24,8</td>
-</tr>
-<!--Set into editable mode-->
-<tr>
-	<td>doubleClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableEditableModeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>24,8</td>
-</tr>
-<!--Update name for selected row-->
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstableEditableModeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VTextField[0]</td>
-	<td>baa</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableEditableModeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
-	<td>34,11</td>
-</tr>
-<!--Ensure the name was updated-->
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableEditableModeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>baa</td>
-</tr>
-<!--Ensure the correct row is selected-->
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>selected-teemu</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/EditableModeChange.java b/tests/src/com/vaadin/tests/components/table/EditableModeChange.java
deleted file mode 100644
index f2163f6df3..0000000000
--- a/tests/src/com/vaadin/tests/components/table/EditableModeChange.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import java.text.DateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Locale;
-
-import com.vaadin.data.Container;
-import com.vaadin.event.ItemClickEvent;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.DefaultFieldFactory;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TableFieldFactory;
-
-public class EditableModeChange extends TestBase {
-
-    private ItemClickEvent selectionEvent;
-
-    private final String[] names = { "Teemu", "Teppo", "Seppo", "Matti",
-            "Pekka" };
-
-    @Override
-    public void setup() {
-
-        final Table items = new Table("Items - double-click to edit");
-        items.setSelectable(true);
-        items.addContainerProperty("name", String.class, "");
-        items.addContainerProperty("birthday", Date.class, "");
-
-        final TableFieldFactory fieldFactory = new ItemFieldFactory();
-        items.setTableFieldFactory(fieldFactory);
-
-        Calendar cal = Calendar.getInstance();
-        cal.set(2010, 7, 12, 12, 7, 54);
-
-        for (String name : names) {
-            items.addItem(name);
-            items.getItem(name).getItemProperty("name").setValue(name);
-            items.getItem(name).getItemProperty("birthday")
-                    .setValue(new FormattedDate(cal.getTime().getTime()));
-        }
-
-        items.addListener(new ItemClickEvent.ItemClickListener() {
-
-            public void itemClick(ItemClickEvent event) {
-                if (event.isDoubleClick()) {
-                    selectionEvent = event;
-                    items.setEditable(true);
-                } else if (items.isEditable()) {
-                    items.setEditable(false);
-                }
-            }
-        });
-
-        addComponent(items);
-    }
-
-    private class FormattedDate extends Date {
-
-        private DateFormat formatter = DateFormat.getDateTimeInstance(
-                DateFormat.MEDIUM, DateFormat.MEDIUM, new Locale("en", "US"));
-
-        public FormattedDate(long time) {
-            super(time);
-        }
-
-        @Override
-        public String toString() {
-            return formatter.format(this);
-        }
-    }
-
-    private class ItemFieldFactory extends DefaultFieldFactory {
-        @Override
-        public Field createField(Container container, Object itemId,
-                Object propertyId, Component uiContext) {
-            if (selectionEvent != null) {
-                if ((selectionEvent.getItemId().equals(itemId))
-                        && (selectionEvent.getPropertyId().equals(propertyId))) {
-                    return super.createField(container, itemId, propertyId,
-                            uiContext);
-                }
-            }
-            return null;
-        }
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Double click a cell to edit, then click on another row to select it (editmode is set to false). The clicked row should now be selected without any flickering.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5427;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/table/EditableTableLeak.java b/tests/src/com/vaadin/tests/components/table/EditableTableLeak.java
deleted file mode 100644
index 6561ff0076..0000000000
--- a/tests/src/com/vaadin/tests/components/table/EditableTableLeak.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-import java.io.Serializable;
-import java.util.HashMap;
-
-import com.vaadin.data.Container;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.TestUtils;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.DefaultFieldFactory;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-
-public class EditableTableLeak extends TestBase {
-    private final Table table = new Table("ISO-3166 Country Codes and flags");
-    private final CheckBox useFieldFactory = new CheckBox(
-            "Use a caching TableFieldFactory");
-    private final Label sizeLabel = new Label("", Label.CONTENT_XHTML);
-
-    private long size = 0;
-
-    static class DebugUtils {
-        private static class ByteCountNullOutputStream extends OutputStream
-                implements Serializable {
-            private static final long serialVersionUID = 4220043426041762877L;
-            private long bytes;
-
-            @Override
-            public void write(int b) {
-                bytes++;
-            }
-
-            public long getBytes() {
-                return bytes;
-            }
-        }
-
-        public static long getSize(Object object) {
-            ByteCountNullOutputStream os = new ByteCountNullOutputStream();
-            ObjectOutputStream oos;
-            try {
-                oos = new ObjectOutputStream(os);
-                oos.writeObject(object);
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-            return os.getBytes();
-        }
-    }
-
-    private static class CachingFieldFactory extends DefaultFieldFactory {
-        private final HashMap<Object, HashMap<Object, Field>> cache = new HashMap<Object, HashMap<Object, Field>>();
-
-        @Override
-        public Field createField(Container container, Object itemId,
-                Object propertyId, Component uiContext) {
-            if (cache.containsKey(itemId)) {
-                if (cache.get(itemId) != null
-                        && cache.get(itemId).containsKey(propertyId)) {
-                    return cache.get(itemId).get(propertyId);
-                }
-            }
-            Field f = super.createField(container, itemId, propertyId,
-                    uiContext);
-            if (!cache.containsKey(itemId)) {
-                cache.put(itemId, new HashMap<Object, Field>());
-            }
-            cache.get(itemId).put(propertyId, f);
-            return f;
-        }
-
-    }
-
-    @Override
-    protected void setup() {
-        addComponent(useFieldFactory);
-        useFieldFactory.setImmediate(true);
-        useFieldFactory.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                if ((Boolean) useFieldFactory.getValue()) {
-                    table.setTableFieldFactory(new CachingFieldFactory());
-                } else {
-                    table.setTableFieldFactory(DefaultFieldFactory.get());
-                }
-            }
-        });
-        addComponent(table);
-        table.setEditable(true);
-        table.setWidth("100%");
-        table.setHeight("170px");
-        table.setSelectable(true);
-        table.setContainerDataSource(TestUtils.getISO3166Container());
-        table.setColumnHeaders(new String[] { "Country", "Code" });
-        table.setColumnAlignment(TestUtils.iso3166_PROPERTY_SHORT,
-                Table.ALIGN_CENTER);
-        table.setColumnExpandRatio(TestUtils.iso3166_PROPERTY_NAME, 1);
-        table.setColumnWidth(TestUtils.iso3166_PROPERTY_SHORT, 70);
-
-        addComponent(sizeLabel);
-
-        addComponent(new Button("Show size of the table", new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                table.requestRepaintAll();
-                updateSize();
-            }
-
-        }));
-
-        addComponent(new Button("Select the second row", new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                table.select("AL");
-                updateSize();
-            }
-        }));
-    }
-
-    private void updateSize() {
-        System.gc();
-        long newSize = DebugUtils.getSize(table);
-        sizeLabel.setValue("Size of the table: " + newSize
-                + " bytes<br/>Delta: " + (newSize - size));
-        size = newSize;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Table leaks memory while scrolling/selecting when in editable mode";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6071;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/EmptyTable.html b/tests/src/com/vaadin/tests/components/table/EmptyTable.html
deleted file mode 100644
index dc52eb8bac..0000000000
--- a/tests/src/com/vaadin/tests/components/table/EmptyTable.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
-	<td>35,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>36,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>44,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>25,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>80,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>25,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>empty-table</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables</td>
-	<td></td>
-</tr>
-<!-- Focus menubar to get consistent screenshots-->
-<tr>
-	<td>focus</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu</td>
-	<td>35,1</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>empty-table</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/FixedHeightTable.html b/tests/src/com/vaadin/tests/components/table/FixedHeightTable.html
deleted file mode 100644
index fb8f7c8b7f..0000000000
--- a/tests/src/com/vaadin/tests/components/table/FixedHeightTable.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>FixedHeighTable</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.FixedHeightTable</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/FixedHeightTable.java b/tests/src/com/vaadin/tests/components/table/FixedHeightTable.java
deleted file mode 100644
index e193a8a949..0000000000
--- a/tests/src/com/vaadin/tests/components/table/FixedHeightTable.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-
-public class FixedHeightTable extends TestBase {
-
-    private static final long serialVersionUID = -929892889178757852L;
-    Table table;
-    VerticalLayout layout;
-
-    @Override
-    public void setup() {
-
-        table = new Table();
-        table.addContainerProperty("test", String.class, null);
-        table.setSizeFull();
-        // bug: settings rows to 16 or more => last line is not rendered at all
-        // on the client-side.
-        final int maxRows = 16;
-        for (int i = 1; i <= maxRows; i++) {
-            table.addItem(new Object[] { "" + i }, i);
-        }
-
-        getLayout().setHeight("400px");
-        addComponent(table);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The table contains 16 (1-16) rows which all should be visible";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3814;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/table/Footer.html b/tests/src/com/vaadin/tests/components/table/Footer.html
deleted file mode 100644
index dbbdef2f9c..0000000000
--- a/tests/src/com/vaadin/tests/components/table/Footer.html
+++ /dev/null
@@ -1,226 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>Footer</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">Footer</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Footer?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]</td>
-	<td>926,229</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>Footer1</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
-	<td>Footer2</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>Footer3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
-	<td>11,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>no-footer</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
-	<td>6,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>footer-col1-col2-col3-a</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>Footer1</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
-	<td>Footer2</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>Footer3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[1]</td>
-	<td>9,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::Root/VContextMenu[0]#option1</td>
-	<td>0,9</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>footer-col1-col3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[1]</td>
-	<td>12,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VContextMenu[0]#option1</td>
-	<td>10,7</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>footer-col1-col2-col3-b</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>-45,13</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>fuu</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>fuu</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>-61,2</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>bar</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
-	<td>bar</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>-21,9</td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>-18,9</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>Footer1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>-56,-4</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>Footer2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>124,17</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>Footer3</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>footer-col1-col2-col3-c</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>Footer1</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/Footer.java b/tests/src/com/vaadin/tests/components/table/Footer.java
deleted file mode 100644
index d6a9853fff..0000000000
--- a/tests/src/com/vaadin/tests/components/table/Footer.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-@SuppressWarnings("serial")
-public class Footer extends TestBase {
-
-    @Override
-    protected void setup() {
-        HorizontalLayout layout = new HorizontalLayout();
-        layout.setSpacing(true);
-
-        final Table table = new Table();
-        table.setWidth("400px");
-        table.setHeight("400px");
-
-        table.setContainerDataSource(createContainer());
-        table.setImmediate(true);
-
-        table.setColumnCollapsingAllowed(true);
-        table.setColumnReorderingAllowed(true);
-
-        table.setFooterVisible(true);
-
-        table.setColumnFooter("col1", "Footer1");
-        table.setColumnFooter("col2", "Footer2");
-        table.setColumnFooter("col3", "Footer3");
-
-        table.setColumnAlignment("col2", Table.ALIGN_CENTER);
-        table.setColumnAlignment("col3", Table.ALIGN_RIGHT);
-
-        layout.addComponent(table);
-
-        // Add some options to play with
-        VerticalLayout options = new VerticalLayout();
-        options.setSpacing(true);
-
-        final CheckBox visible = new CheckBox("Footers Visible", true);
-        visible.setImmediate(true);
-        visible.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                table.setFooterVisible(visible.booleanValue());
-
-            }
-        });
-
-        options.addComponent(visible);
-
-        final TextField footer1Value = new TextField(null, "Footer1");
-        footer1Value.setImmediate(true);
-        Button footer1Btn = new Button("Change", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                table.setColumnFooter("col1",
-                        footer1Value.getValue() == null ? "" : footer1Value
-                                .getValue().toString());
-            }
-        });
-        HorizontalLayout footer1 = new HorizontalLayout();
-        footer1.addComponent(footer1Value);
-        footer1.addComponent(footer1Btn);
-        options.addComponent(footer1);
-
-        final TextField footer2Value = new TextField(null, "Footer2");
-        footer2Value.setImmediate(true);
-        Button footer2Btn = new Button("Change", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                table.setColumnFooter("col2",
-                        footer2Value.getValue() == null ? "" : footer2Value
-                                .getValue().toString());
-            }
-        });
-        HorizontalLayout footer2 = new HorizontalLayout();
-        footer2.addComponent(footer2Value);
-        footer2.addComponent(footer2Btn);
-        options.addComponent(footer2);
-
-        final TextField footer3Value = new TextField(null, "Footer3");
-        footer3Value.setImmediate(true);
-        Button footer3Btn = new Button("Change", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                table.setColumnFooter("col3",
-                        footer3Value.getValue() == null ? "" : footer3Value
-                                .getValue().toString());
-            }
-        });
-        HorizontalLayout footer3 = new HorizontalLayout();
-        footer3.addComponent(footer3Value);
-        footer3.addComponent(footer3Btn);
-        options.addComponent(footer3);
-
-        layout.addComponent(options);
-
-        addComponent(layout);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Table with footer";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 1553;
-    }
-
-    private Container createContainer() {
-        IndexedContainer container = new IndexedContainer();
-        container.addContainerProperty("col1", String.class, "");
-        container.addContainerProperty("col2", String.class, "");
-        container.addContainerProperty("col3", String.class, "");
-
-        for (int i = 0; i < 100; i++) {
-            Item item = container.addItem("item " + i);
-            item.getItemProperty("col1").setValue("first" + i);
-            item.getItemProperty("col2").setValue("middle" + i);
-            item.getItemProperty("col3").setValue("last" + i);
-        }
-
-        return container;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/FooterClick.html b/tests/src/com/vaadin/tests/components/table/FooterClick.html
deleted file mode 100644
index fb3d004620..0000000000
--- a/tests/src/com/vaadin/tests/components/table/FooterClick.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>FooterClick</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">FooterClick</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.FooterClick?restartApplication</td>
-	<td></td>
-</tr>
-<!--Click on text in cell-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_Stable/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>41,7</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SClickedColumn</td>
-	<td>col1</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>1. Clicked on footer: col1</td>
-</tr>
-<!--Click on empty cell-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_Stable/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]</td>
-	<td>69,12</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SClickedColumn</td>
-	<td>col2</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>2. Clicked on footer: col2</td>
-</tr>
-<!--Click on cell, not on text-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_Stable/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>19,3</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SClickedColumn</td>
-	<td>col3</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. Clicked on footer: col3</td>
-</tr>
-<!--non-immediate-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
-	<td>30,9</td>
-</tr>
-<!--Click on text in cell-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_Stable/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>41,7</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SClickedColumn</td>
-	<td>col1</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>4. Clicked on footer: col1</td>
-</tr>
-<!--Click on empty cell-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_Stable/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]</td>
-	<td>69,12</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SClickedColumn</td>
-	<td>col2</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>5. Clicked on footer: col2</td>
-</tr>
-<!--Click on cell, not on text-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_Stable/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>19,3</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SClickedColumn</td>
-	<td>col3</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>6. Clicked on footer: col3</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/FooterClick.java b/tests/src/com/vaadin/tests/components/table/FooterClick.java
deleted file mode 100644
index b92d6ef362..0000000000
--- a/tests/src/com/vaadin/tests/components/table/FooterClick.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.FooterClickEvent;
-import com.vaadin.ui.TextField;
-
-@SuppressWarnings("serial")
-public class FooterClick extends TestBase {
-
-    private final String COLUMN1_PROPERTY_ID = "col1";
-    private final String COLUMN2_PROPERTY_ID = "col2";
-    private final String COLUMN3_PROPERTY_ID = "col3";
-
-    private Log log = new Log(5);
-
-    @Override
-    protected void setup() {
-        final Table table = new Table();
-        table.setDebugId("table");
-        table.setContainerDataSource(createContainer());
-        table.setWidth("400px");
-        table.setHeight("400px");
-        table.setImmediate(true);
-        table.setFooterVisible(true);
-        table.setColumnReorderingAllowed(true);
-
-        table.setColumnFooter(COLUMN1_PROPERTY_ID, "fuu");
-        // table.setColumnFooter(COLUMN2_PROPERTY_ID, "bar");
-        table.setColumnFooter(COLUMN3_PROPERTY_ID, "fuubar");
-
-        final TextField columnField = new TextField(
-                "ProperyId of clicked column");
-        columnField.setDebugId("ClickedColumn");
-
-        // Add a footer click listener
-        table.addListener(new Table.FooterClickListener() {
-            public void footerClick(FooterClickEvent event) {
-                columnField.setValue(event.getPropertyId());
-                log.log("Clicked on footer: " + event.getPropertyId());
-            }
-        });
-
-        CheckBox immediateCheckbox = new CheckBox("Immediate");
-        immediateCheckbox.setImmediate(true);
-        immediateCheckbox.setValue(table.isImmediate());
-        immediateCheckbox.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                table.setImmediate(event.getButton().booleanValue());
-            }
-        });
-
-        CheckBox columnReorderingCheckbox = new CheckBox(
-                "Column reordering allowed");
-        columnReorderingCheckbox.setImmediate(true);
-        columnReorderingCheckbox.setValue(table.isColumnReorderingAllowed());
-        columnReorderingCheckbox.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                table.setColumnReorderingAllowed(event.getButton()
-                        .booleanValue());
-            }
-        });
-
-        addComponent(immediateCheckbox);
-        addComponent(columnReorderingCheckbox);
-
-        addComponent(log);
-
-        addComponent(table);
-        addComponent(columnField);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tests the footer click handler";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4516;
-    }
-
-    private Container createContainer() {
-        IndexedContainer container = new IndexedContainer();
-        container.addContainerProperty(COLUMN1_PROPERTY_ID, String.class, "");
-        container.addContainerProperty(COLUMN2_PROPERTY_ID, String.class, "");
-        container.addContainerProperty(COLUMN3_PROPERTY_ID, String.class, "");
-
-        for (int i = 0; i < 100; i++) {
-            Item item = container.addItem("item " + i);
-            item.getItemProperty(COLUMN1_PROPERTY_ID).setValue("first" + i);
-            item.getItemProperty(COLUMN2_PROPERTY_ID).setValue("middle" + i);
-            item.getItemProperty(COLUMN3_PROPERTY_ID).setValue("last" + i);
-        }
-
-        return container;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/HeaderClick.html b/tests/src/com/vaadin/tests/components/table/HeaderClick.html
deleted file mode 100644
index d5328b25d3..0000000000
--- a/tests/src/com/vaadin/tests/components/table/HeaderClick.html
+++ /dev/null
@@ -1,168 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8080/" />
-<title>HeaderClick</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">HeaderClick</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.HeaderClick?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]</td>
-	<td>37,11</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
-	<td>col1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[1]</td>
-	<td>36,9</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
-	<td>col2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[1]</td>
-	<td>8,11</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
-	<td>col3</td>
-</tr>
-<!--non-immediate test-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
-	<td>6,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]</td>
-	<td>31,9</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
-	<td>col1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[1]</td>
-	<td>16,10</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
-	<td>col2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[1]</td>
-	<td>16,10</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
-	<td>col3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
-	<td>7,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]</td>
-	<td>64,10</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
-	<td>col1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[1]</td>
-	<td>48,10</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
-	<td>col2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[1]</td>
-	<td>30,11</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
-	<td>col3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
-	<td>7,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]</td>
-	<td>48,11</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
-	<td>col1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[1]</td>
-	<td>71,10</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
-	<td>col2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[1]</td>
-	<td>39,5</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
-	<td>col3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
-	<td>54,6</td>
-</tr>
-<!--Column reordering should not fire header click-->
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
-	<td>col3</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/HeaderClick.java b/tests/src/com/vaadin/tests/components/table/HeaderClick.java
deleted file mode 100644
index 3cb11781b1..0000000000
--- a/tests/src/com/vaadin/tests/components/table/HeaderClick.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.HeaderClickEvent;
-import com.vaadin.ui.TextField;
-
-@SuppressWarnings("serial")
-public class HeaderClick extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Table table = new Table();
-        table.setColumnReorderingAllowed(true);
-        table.setContainerDataSource(createContainer());
-        table.setWidth("400px");
-        table.setHeight("400px");
-        table.setImmediate(true);
-
-        final TextField columnField = new TextField(
-                "ProperyId of clicked column");
-
-        // Add a header click listener
-        table.addListener(new Table.HeaderClickListener() {
-            public void headerClick(HeaderClickEvent event) {
-                columnField.setValue(event.getPropertyId());
-            }
-        });
-
-        CheckBox immediateCheckbox = new CheckBox("Immediate");
-        immediateCheckbox.setImmediate(true);
-        immediateCheckbox.setValue(table.isImmediate());
-        immediateCheckbox.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                table.setImmediate(event.getButton().booleanValue());
-            }
-        });
-
-        CheckBox sortEnabledCheckbox = new CheckBox("Sortable");
-        sortEnabledCheckbox.setImmediate(true);
-        sortEnabledCheckbox.setValue(!table.isSortDisabled());
-        sortEnabledCheckbox.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                table.setSortDisabled(!event.getButton().booleanValue());
-            }
-        });
-
-        CheckBox columnReorderingCheckbox = new CheckBox(
-                "Column reordering allowed");
-        columnReorderingCheckbox.setImmediate(true);
-        columnReorderingCheckbox.setValue(table.isColumnReorderingAllowed());
-        columnReorderingCheckbox.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                table.setColumnReorderingAllowed(event.getButton()
-                        .booleanValue());
-            }
-        });
-
-        addComponent(immediateCheckbox);
-        addComponent(sortEnabledCheckbox);
-        addComponent(columnReorderingCheckbox);
-        addComponent(table);
-        addComponent(columnField);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tests the header click listener";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4515;
-    }
-
-    private Container createContainer() {
-        IndexedContainer container = new IndexedContainer();
-        container.addContainerProperty("col1", String.class, "");
-        container.addContainerProperty("col2", String.class, "");
-        container.addContainerProperty("col3", String.class, "");
-
-        for (int i = 0; i < 100; i++) {
-            Item item = container.addItem("item " + i);
-            item.getItemProperty("col1").setValue("first" + i);
-            item.getItemProperty("col2").setValue("middle" + i);
-            item.getItemProperty("col3").setValue("last" + i);
-        }
-
-        return container;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/HeaderPositionWhenSorting.html b/tests/src/com/vaadin/tests/components/table/HeaderPositionWhenSorting.html
deleted file mode 100644
index c3128820ef..0000000000
--- a/tests/src/com/vaadin/tests/components/table/HeaderPositionWhenSorting.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableAndBrowserContextMenu?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableAndBrowserContextMenu::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
-	<td>32,4</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>sort-asc-died-at-age</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableAndBrowserContextMenu::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
-	<td>32,4</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>sort-desc-died-at-age</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableAndBrowserContextMenu::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>19,15</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>sort-asc-name</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableAndBrowserContextMenu::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>19,15</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>sort-desc-name</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/HeaderSyncOnScroll.html b/tests/src/com/vaadin/tests/components/table/HeaderSyncOnScroll.html
deleted file mode 100644
index 70abbd78ba..0000000000
--- a/tests/src/com/vaadin/tests/components/table/HeaderSyncOnScroll.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<!--hide log-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
-	<td>39,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>23,9</td>
-</tr>
-<!--width: 100%-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>35,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>54,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>21,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>44,4</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>100pct-no-scrollbar</td>
-</tr>
-<!--parent width: 300px-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
-	<td>22,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>48,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>7,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item6</td>
-	<td>43,7</td>
-</tr>
-<!--scroll right-->
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>scrollLeft</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
-	<td>200</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>300px-scrolled-right</td>
-</tr>
-<!--parent width: 100%-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
-	<td>22,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>48,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>7,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>43,7</td>
-</tr>
-<!--  Should really be the same image as before, avoiding constant IE fails using a different image (#6147)-->
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>100pct-no-scrollbar-2</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/HeaderUpdateWhenNoRows.html b/tests/src/com/vaadin/tests/components/table/HeaderUpdateWhenNoRows.html
deleted file mode 100644
index ef2067fbf5..0000000000
--- a/tests/src/com/vaadin/tests/components/table/HeaderUpdateWhenNoRows.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.HeaderUpdateWhenNoRows</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>headerVisible</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderUpdateWhenNoRows::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
-	<td>5,4</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>headerHidden</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableHeaderUpdateWhenNoRows::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
-	<td>9,7</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>headerVisibleAgain</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/HeaderUpdateWhenNoRows.java b/tests/src/com/vaadin/tests/components/table/HeaderUpdateWhenNoRows.java
deleted file mode 100644
index bf1f9ca883..0000000000
--- a/tests/src/com/vaadin/tests/components/table/HeaderUpdateWhenNoRows.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Table;
-
-public class HeaderUpdateWhenNoRows extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Table table = new Table("Test table");
-        table.addContainerProperty("Name", String.class, null, "Name", null,
-                null);
-        table.setItemCaptionPropertyId("Name");
-        table.setHeight("100px");
-        table.setImmediate(true);
-
-        CheckBox showHeaders = new CheckBox("Show headers",
-                new CheckBox.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        if (event.getButton().booleanValue()) {
-                            table.setColumnHeaderMode(Table.COLUMN_HEADER_MODE_EXPLICIT_DEFAULTS_ID);
-                        } else {
-                            table.setColumnHeaderMode(Table.COLUMN_HEADER_MODE_HIDDEN);
-                        }
-                    }
-                });
-
-        showHeaders.setImmediate(true);
-        showHeaders.setValue(true);
-
-        addComponent(showHeaders);
-        addComponent(table);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The header should be updated when toggling column header mode";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2974;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/HiddenColumnsExpandRatios.java b/tests/src/com/vaadin/tests/components/table/HiddenColumnsExpandRatios.java
deleted file mode 100644
index 007c93573f..0000000000
--- a/tests/src/com/vaadin/tests/components/table/HiddenColumnsExpandRatios.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import java.util.Random;
-
-import com.vaadin.data.Item;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Table;
-
-public class HiddenColumnsExpandRatios extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Table table = new Table();
-        table.setColumnCollapsingAllowed(true);
-        table.setWidth("800px");
-        addComponent(table);
-        table.addContainerProperty("foo", String.class, "");
-        table.addContainerProperty("bar", String.class, "");
-        table.addContainerProperty("baz", String.class, "");
-        table.addContainerProperty("asdf", String.class, "");
-        table.addContainerProperty("sdfg", String.class, "");
-        table.addContainerProperty("dfgh", String.class, "");
-        table.setColumnExpandRatio("bar", 1.0f);
-        for (int i = 0; i < 10; i++) {
-            Item item = table.addItem(i);
-            item.getItemProperty("foo").setValue(genValue());
-            item.getItemProperty("bar").setValue(genValue());
-            item.getItemProperty("baz").setValue(genValue());
-            item.getItemProperty("asdf").setValue(genValue());
-            item.getItemProperty("sdfg").setValue(genValue());
-            item.getItemProperty("dfgh").setValue(genValue());
-        }
-
-        addComponent(new Button("All", new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                table.setVisibleColumns(table.getContainerPropertyIds()
-                        .toArray());
-            }
-        }));
-        addComponent(new Button("Some", new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                table.setWidth("100px");
-                table.setWidth("800px");
-                table.setVisibleColumns(new Object[] { "foo", "bar", "baz" });
-            }
-        }));
-    }
-
-    private String genValue() {
-        Random rnd = new Random();
-        StringBuffer str = new StringBuffer("");
-        String[] strings = new String[] { "foo", "bar", "baz" };
-        for (int i = 0; i < 5; i++) {
-            str.append(strings[Math.abs(rnd.nextInt() % strings.length)])
-                    .append(" ");
-        }
-        return str.toString();
-    }
-
-    @Override
-    protected String getDescription() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/HugeRowCount.java b/tests/src/com/vaadin/tests/components/table/HugeRowCount.java
deleted file mode 100644
index 5cd9f964a3..0000000000
--- a/tests/src/com/vaadin/tests/components/table/HugeRowCount.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-
-public class HugeRowCount extends TestBase {
-
-    private MockupContainer container;
-
-    @Override
-    protected void setup() {
-
-        container = new MockupContainer();
-        container.setSize(100000);
-
-        final TextField tf = new TextField("Rows");
-        tf.setValue(100000);
-        tf.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                container.setSize(Integer.parseInt(tf.getValue().toString()));
-            }
-        });
-        addComponent(tf);
-        addComponent(new Button("Update rowcount"));
-
-        Table t = new Table();
-        t.setWidth("400px");
-        t.setRowHeaderMode(Table.ROW_HEADER_MODE_INDEX);
-        t.setContainerDataSource(container);
-
-        addComponent(t);
-
-    }
-
-    class MockupContainer extends IndexedContainer {
-
-        private Item item;
-        private Object addItem;
-
-        public MockupContainer() {
-            addContainerProperty("foo", String.class, "bar");
-            addItem = addItem();
-            item = getItem(addItem);
-        }
-
-        private int size;
-
-        public void setSize(int size) {
-            this.size = size;
-            fireItemSetChange();
-        }
-
-        @Override
-        public int size() {
-            return size;
-        }
-
-        @Override
-        public Item getItem(Object itemId) {
-            return item;
-        }
-
-        @Override
-        public Object getIdByIndex(int index) {
-            return addItem;
-        }
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Should work as well as possible";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4220;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/ItemClickEvents.html b/tests/src/com/vaadin/tests/components/table/ItemClickEvents.html
deleted file mode 100644
index e00482679c..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ItemClickEvents.html
+++ /dev/null
@@ -1,479 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.ItemClickEvents?restartApplication</td>
-	<td></td>
-</tr>
-<!--Single select not null-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>42,7</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>1. left click on table/Item 0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>41,3</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>2. left click on table/Item 1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>41,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. left click on table/Item 1</td>
-</tr>
-<tr>
-	<td>doubleClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>88,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>4. doubleClick on table/Item 1</td>
-</tr>
-<tr>
-	<td>doubleClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>88,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>5. doubleClick on table/Item 0</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<!--Single select null-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
-	<td>6,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>48,15</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>0. left click on table/Item 0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>57,11</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>1. left click on table/Item 0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[5]/domChild[0]/domChild[0]</td>
-	<td>45,9</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>2. left click on table/Item 5</td>
-</tr>
-<tr>
-	<td>doubleClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[5]/domChild[0]/domChild[0]</td>
-	<td>45,9</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. doubleClick on table/Item 5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[5]</td>
-	<td>195,142</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[5]</td>
-	<td>582,1</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<!--Multiselect null-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[3]/VCheckBox[0]/domChild[0]</td>
-	<td>22,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>50,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[0]/domChild[0]</td>
-	<td>51,10:shift</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[6]/domChild[0]/domChild[0]</td>
-	<td>47,11:ctrl</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
-	<td>50,8:ctrl</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>0. left click on table/Item 0</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[2]/VLabel[0]</td>
-	<td>1. left click on table/Item 4 (shift)</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[1]/VLabel[0]</td>
-	<td>2. left click on table/Item 6 (ctrl)</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. left click on table/Item 2 (ctrl)</td>
-</tr>
-<!--Multi select not null-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
-	<td>34,0</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[0]/domChild[0]</td>
-	<td>43,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[0]/domChild[0]</td>
-	<td>49,6:ctrl</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[0]/domChild[0]</td>
-	<td>71,9:ctrl</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[0]/domChild[0]</td>
-	<td>79,4:ctrl</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[0]/domChild[0]</td>
-	<td>75,17:ctrl</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[4]/VLabel[0]</td>
-	<td>0. left click on table/Item 9</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>1. left click on table/Item 9 (ctrl)</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[2]/VLabel[0]</td>
-	<td>2. left click on table/Item 3 (ctrl)</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[1]/VLabel[0]</td>
-	<td>3. left click on table/Item 9 (ctrl)</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>4. left click on table/Item 3 (ctrl)</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<!--Single not selectable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[3]/VCheckBox[0]/domChild[0]</td>
-	<td>11,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
-	<td>11,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>49,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
-	<td>48,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[7]/domChild[0]/domChild[0]</td>
-	<td>50,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[0]/domChild[0]</td>
-	<td>57,11</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>0. left click on table/Item 1</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[2]/VLabel[0]</td>
-	<td>1. left click on table/Item 2</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[1]/VLabel[0]</td>
-	<td>2. left click on table/Item 7</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. left click on table/Item 3</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<!--Multi not selectable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[3]/VCheckBox[0]/domChild[0]</td>
-	<td>8,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>42,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[5]/domChild[0]/domChild[0]</td>
-	<td>47,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[0]/domChild[0]</td>
-	<td>43,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[8]/domChild[0]/domChild[0]</td>
-	<td>44,9:shift</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>0. left click on table/Item 1</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[2]/VLabel[0]</td>
-	<td>1. left click on table/Item 5</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[1]/VLabel[0]</td>
-	<td>2. left click on table/Item 3</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. left click on table/Item 8 (shift)</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<!--Single, Non-immediate-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
-	<td>8,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[3]/VCheckBox[0]/domChild[0]</td>
-	<td>6,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>57,8</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>0. left click on table/Item 0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>47,9</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>1. left click on table/Item 1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
-	<td>47,11</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>2. left click on table/Item 2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[8]/domChild[0]/domChild[0]</td>
-	<td>31,13:ctrl shift</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. left click on table/Item 8 (ctrl shift)</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<!--non-immediate single selectable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
-	<td>10,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>43,11</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>0. left click on table/Item 1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[8]/domChild[0]/domChild[0]</td>
-	<td>73,9</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>1. left click on table/Item 8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>58,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>2. left click on table/Item 1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>71,15</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. left click on table/Item 0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[6]/domChild[0]/domChild[0]</td>
-	<td>68,11</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>4. left click on table/Item 6</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/ItemClickEvents.java b/tests/src/com/vaadin/tests/components/table/ItemClickEvents.java
deleted file mode 100644
index 537461ce0f..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ItemClickEvents.java
+++ /dev/null
@@ -1,153 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.MethodProperty;
-import com.vaadin.event.ItemClickEvent;
-import com.vaadin.event.ItemClickEvent.ItemClickListener;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Tree;
-
-public class ItemClickEvents extends TestBase {
-
-    Tree tree = new Tree();
-    Table table = new Table();
-    Log log = new Log(5);
-
-    @Override
-    public void setup() {
-        log.setDebugId("log");
-
-        HorizontalLayout ol = createHorizontalLayout(tree);
-        Button b = new Button("icon", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                if (tree.getItemIconPropertyId() == null) {
-                    tree.setItemIconPropertyId("icon");
-                } else {
-                    tree.setItemIconPropertyId(null);
-                }
-
-            }
-        });
-        ol.addComponent(b);
-
-        tree.setImmediate(true);
-        tree.setNullSelectionAllowed(false);
-        tree.addItem("Root 1");
-        tree.addItem("1. Child 1");
-        tree.setParent("1. Child 1", "Root 1");
-        tree.addItem("1. Child 2");
-        tree.setParent("1. Child 2", "Root 1");
-        tree.addItem("Root 2");
-        tree.addItem("2. Child 1");
-        tree.setParent("2. Child 1", "Root 2");
-        tree.addItem("2. Child 2");
-        tree.setParent("2. Child 2", "Root 2");
-        tree.addContainerProperty("icon", ExternalResource.class,
-                new ExternalResource(
-                        "http://www.itmill.com/res/images/itmill_logo.gif"));
-
-        tree.addListener(new ItemClickListener() {
-            public void itemClick(ItemClickEvent event) {
-                logEvent(event, "tree");
-            }
-        });
-        tree.setDebugId("tree");
-
-        HorizontalLayout ol2 = createHorizontalLayout(table);
-        table.setWidth("150px");
-        table.setImmediate(true);
-        table.setSelectable(true);
-        table.setNullSelectionAllowed(false);
-        table.addContainerProperty("Column", String.class, "value");
-        for (int i = 0; i < 10; i++) {
-            Item item = table.addItem("Item " + i);
-            item.getItemProperty("Column").setValue("Row " + i);
-
-        }
-        table.addListener(new ItemClickListener() {
-            public void itemClick(ItemClickEvent event) {
-                logEvent(event, "table");
-            }
-        });
-        table.setDebugId("table");
-
-        addComponent(log);
-        addComponent(new Button("Clear log", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                log.clear();
-            }
-        }));
-        addComponent(ol);
-        addComponent(tree);
-        addComponent(ol2);
-        addComponent(table);
-    }
-
-    protected void logEvent(ItemClickEvent event, String targetComponent) {
-        String type = event.getButtonName() + " " + "click";
-        if (event.isDoubleClick()) {
-            type = "doubleClick";
-        }
-
-        String modifiers = "";
-        if (event.isAltKey()) {
-            modifiers += "alt ";
-        }
-        if (event.isMetaKey()) {
-            modifiers += "meta ";
-        }
-        if (event.isCtrlKey()) {
-            modifiers += "ctrl ";
-        }
-        if (event.isShiftKey()) {
-            modifiers += "shift ";
-        }
-        if (!"".equals(modifiers)) {
-            modifiers = " (" + modifiers.trim() + ")";
-        }
-
-        log.log(type + " on " + targetComponent + "/" + event.getItemId()
-                + modifiers);
-
-    }
-
-    private static HorizontalLayout createHorizontalLayout(Component c) {
-        HorizontalLayout layout = new HorizontalLayout();
-        CheckBox b = new CheckBox("immediate", new MethodProperty<Boolean>(c,
-                "immediate"));
-        b.setImmediate(true);
-        layout.addComponent(b);
-        b = new CheckBox("selectable", new MethodProperty<Boolean>(c,
-                "selectable"));
-        b.setImmediate(true);
-        layout.addComponent(b);
-        b = new CheckBox("nullsel", new MethodProperty<Boolean>(c,
-                "nullSelectionAllowed"));
-        b.setImmediate(true);
-        layout.addComponent(b);
-        b = new CheckBox("multi", new MethodProperty<Boolean>(c, "multiSelect"));
-        b.setImmediate(true);
-        layout.addComponent(b);
-        return layout;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Click events should always come trough no matter how the table is configured.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5458;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/KeyControl.java b/tests/src/com/vaadin/tests/components/table/KeyControl.java
deleted file mode 100644
index e662db338c..0000000000
--- a/tests/src/com/vaadin/tests/components/table/KeyControl.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import java.util.Set;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-
-@SuppressWarnings("serial")
-public class KeyControl extends TestBase {
-
-    private final Label selected1 = new Label("No selected items.");
-    private final Table table1 = new Table("Read only table");
-
-    private final Label selected2 = new Label("No selected items");
-    private final Table table2 = new Table("Selectable table");
-
-    private final Label selected3 = new Label("Not selected items");
-    private final Table table3 = new Table("Multi-selectable table");
-
-    @Override
-    protected void setup() {
-        HorizontalLayout layout = new HorizontalLayout();
-        layout.setSpacing(true);
-        addComponent(layout);
-
-        // Create read only table
-        VerticalLayout layout1 = new VerticalLayout();
-        layout1.setSpacing(true);
-
-        table1.setContainerDataSource(createContainer());
-        table1.setWidth("300px");
-        table1.setHeight("300px");
-        table1.setImmediate(true);
-        layout1.addComponent(table1);
-
-        table1.addListener(new Table.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                @SuppressWarnings("unchecked")
-                Set<String> value = (Set<String>) table1.getValue();
-                selected1.setValue(value.toString() + " TOTAL: " + value.size());
-            }
-        });
-
-        layout1.addComponent(selected1);
-        layout.addComponent(layout1);
-
-        // Create single select table
-        VerticalLayout layout2 = new VerticalLayout();
-        layout2.setSpacing(true);
-
-        table2.setContainerDataSource(createContainer());
-        table2.setSelectable(true);
-        table2.setWidth("300px");
-        table2.setHeight("300px");
-        table2.setImmediate(true);
-        layout2.addComponent(table2);
-
-        table2.addListener(new Table.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                String value = table2.getValue() == null ? "No selected items"
-                        : table2.getValue().toString();
-                selected2.setValue(value);
-            }
-        });
-
-        layout2.addComponent(selected2);
-        layout.addComponent(layout2);
-
-        // Create multi select table
-        VerticalLayout layout3 = new VerticalLayout();
-        layout3.setSpacing(true);
-
-        table3.setContainerDataSource(createContainer());
-        table3.setSelectable(true);
-        table3.setMultiSelect(true);
-        table3.setWidth("300px");
-        table3.setHeight("300px");
-        table3.setImmediate(true);
-        layout3.addComponent(table3);
-
-        table3.addListener(new Table.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                @SuppressWarnings("unchecked")
-                Set<String> value = (Set<String>) table3.getValue();
-                selected3.setValue(value.size() == 0 ? "No selected items"
-                        : value + ": Total " + value.size() + " items");
-            }
-        });
-
-        selected3.setWidth("300px");
-        selected3.setHeight("500px");
-        layout3.addComponent(selected3);
-        layout.addComponent(layout3);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Add keyboard control to the Table";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2390;
-    }
-
-    private Container createContainer() {
-        IndexedContainer container = new IndexedContainer();
-        container.addContainerProperty("col1", String.class, "");
-        container.addContainerProperty("col2", String.class, "");
-        container.addContainerProperty("col3", String.class, "");
-        container.addContainerProperty("col4", String.class, "");
-        container.addContainerProperty("col5", String.class, "");
-        container.addContainerProperty("col6", String.class, "");
-
-        for (int i = 0; i < 100; i++) {
-            Item item = container.addItem("item " + i);
-            item.getItemProperty("col1").setValue("First column " + i);
-            item.getItemProperty("col2").setValue("Second column " + i);
-            item.getItemProperty("col3").setValue("Third column" + i);
-            item.getItemProperty("col4").setValue("Fourth column" + i);
-            item.getItemProperty("col5").setValue("Fifth column" + i);
-            item.getItemProperty("col6").setValue("Sixth column" + i);
-        }
-
-        return container;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/KeyboardNavigationDatasourceChange.java b/tests/src/com/vaadin/tests/components/table/KeyboardNavigationDatasourceChange.java
deleted file mode 100644
index b389727fd3..0000000000
--- a/tests/src/com/vaadin/tests/components/table/KeyboardNavigationDatasourceChange.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import com.vaadin.data.util.BeanItemContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-
-public class KeyboardNavigationDatasourceChange extends TestBase {
-
-    @Override
-    protected void setup() {
-        List<MyItem> items = new ArrayList<MyItem>();
-        for (int i = 0; i < 110; i++) {
-            items.add(new MyItem("item" + i, i, null));
-        }
-        BeanItemContainer<MyItem> c = new BeanItemContainer<MyItem>(
-                MyItem.class, items);
-        Table t = new Table("Test", c);
-        t.setVisibleColumns(new String[] { "nome", "index", "parent" });
-        t.setSelectable(true);
-        t.setSizeFull();
-        t.setImmediate(true);
-        TextField f = new TextField("Name");
-        final Form form = new Form();
-        // Property p = new ObjectProperty<String>("", String.class);
-        // t.setPropertyDataSource(p); // UNCOMMENT THIS LINE TO SEE BUG
-        // HAPPENING
-        // f.setPropertyDataSource(p);
-        // f.setImmediate(true);
-        t.setPropertyDataSource(f);
-        form.addField("table", t);
-        form.addField("name", f);
-        addComponent(form);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "When calling setPropertyDataSource on a regular table the keyboard navigation becomes unstable";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 7446;
-    }
-
-    public class MyItem implements Serializable {
-
-        private String nome;
-        private Integer index;
-        protected List<MyItem> children = new ArrayList<MyItem>();
-        private MyItem parent;
-
-        public MyItem(String nome, Integer index, List<MyItem> children) {
-            this.nome = nome;
-            this.index = index;
-            if (children != null) {
-                this.children = children;
-                if (children != null) {
-                    for (MyItem child : children) {
-                        child.setParent(this);
-                    }
-                }
-            }
-        }
-
-        /**
-         * @return the nome
-         */
-        public String getNome() {
-            return nome;
-        }
-
-        /**
-         * @param nome
-         *            the nome to set
-         */
-        public void setNome(String nome) {
-            this.nome = nome;
-        }
-
-        /**
-         * @return the idade
-         */
-        public Integer getIndex() {
-            return index;
-        }
-
-        /**
-         * @param idade
-         *            the idade to set
-         */
-        public void setIndex(Integer idade) {
-            index = idade;
-        }
-
-        /**
-         * @return the children
-         */
-        public List<MyItem> getChildren() {
-            return children;
-        }
-
-        /**
-         * @param children
-         *            the children to set
-         */
-        public void setChildren(List<MyItem> children) {
-            this.children = children;
-        }
-
-        /**
-         * @return the parent
-         */
-        public MyItem getParent() {
-            return parent;
-        }
-
-        /**
-         * @param parent
-         *            the parent to set
-         */
-        public void setParent(MyItem parent) {
-            this.parent = parent;
-        }
-
-        @Override
-        public String toString() {
-            return nome;
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/KeyboardNavigationWithChangingContent.java b/tests/src/com/vaadin/tests/components/table/KeyboardNavigationWithChangingContent.java
deleted file mode 100644
index 44a2dcd9a9..0000000000
--- a/tests/src/com/vaadin/tests/components/table/KeyboardNavigationWithChangingContent.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import java.util.Arrays;
-
-import com.vaadin.data.util.BeanItemContainer;
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Table;
-
-@SuppressWarnings("serial")
-public class KeyboardNavigationWithChangingContent extends TestBase {
-
-    @Override
-    protected void setup() {
-        ValueHolder<String> v1 = new ValueHolder<String>("test1");
-        ValueHolder<String> v2 = new ValueHolder<String>("test2");
-        ValueHolder<String> v3 = new ValueHolder<String>("test3");
-        @SuppressWarnings("unchecked")
-        final BeanItemContainer<ValueHolder<String>> bic = new BeanItemContainer<ValueHolder<String>>(
-                Arrays.asList(v1, v2, v3));
-        final Table t = new Table(null, bic);
-        t.setSelectable(true);
-        t.setMultiSelect(false);
-        t.setWidth(200, Sizeable.UNITS_PIXELS);
-        t.setHeight(100, Sizeable.UNITS_PIXELS);
-        t.select(v1);
-        t.focus();
-        t.setMultiSelect(true);
-
-        getLayout().addComponent(t);
-        getLayout().addComponent(
-                new Button("Change elements and selection",
-                        new ClickListener() {
-
-                            public void buttonClick(ClickEvent event) {
-
-                                bic.removeAllItems();
-                                ValueHolder<String> v4 = null;
-                                for (int i = 4; i < 30; i++) {
-                                    v4 = new ValueHolder<String>("test" + i);
-                                    bic.addBean(v4);
-
-                                }
-                                t.select(t.firstItemId());
-                                t.focus();
-                            }
-                        }));
-    }
-
-    @Override
-    protected String getDescription() {
-        // TODO Auto-generated method stub
-        return "Table keyboard navigation does not work after the contents in table is changed";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        // TODO Auto-generated method stub
-        return 5347;
-    }
-
-    public class ValueHolder<E> {
-        private E value;
-
-        public ValueHolder() {
-        }
-
-        public ValueHolder(E value) {
-            this.value = value;
-        }
-
-        public void setValue(E value) {
-            this.value = value;
-        }
-
-        public E getValue() {
-            return value;
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.html b/tests/src/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.html
deleted file mode 100644
index 62e3786a44..0000000000
--- a/tests/src/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.html
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>LabelEmbeddedClickThroughForTable</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">LabelEmbeddedClickThroughForTable</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.LabelEmbeddedClickThroughForTable?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>32,13</td>
-</tr>
-<!--  Work around for Opera issue #5597 -->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>30,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>32,13</td>
-</tr>
-<!--  Work around done -->
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>30,12</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>row-2-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VLabel[0]</td>
-	<td>32,9</td>
-</tr>
-<!--  Moved here to avoid Opera issue #5588 -->
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>row-1-selected</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VLabel[0]</td>
-	<td>22,6</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>row-2-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VLabel[1]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VLabel[0]</td>
-	<td>22,6</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VEmbedded[0]/domChild[0]</td>
-	<td>19,14</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VEmbedded[0]/domChild[0]</td>
-	<td>16,15</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]</td>
-	<td>v-selected</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.java b/tests/src/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.java
deleted file mode 100644
index a54c3ce447..0000000000
--- a/tests/src/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.event.ItemClickEvent;
-import com.vaadin.event.ItemClickEvent.ItemClickListener;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-
-public class LabelEmbeddedClickThroughForTable extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Clicking on a Label or Embedded inside a Table should select the row in the same way that clicking on a text selects the row.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2688;
-    }
-
-    @Override
-    protected void setup() {
-        Table table = new Table();
-        table.setHeight("500px");
-        table.setSelectable(true);
-        table.addContainerProperty("Column 1", String.class, "");
-        table.addContainerProperty("Column 2", Component.class, "");
-        table.addContainerProperty("Column 3", Component.class, "");
-        table.addContainerProperty("Column 4", Component.class, "");
-
-        Item item = table.addItem("Item 1 (row 1)");
-        item.getItemProperty("Column 1").setValue("String A");
-        item.getItemProperty("Column 2").setValue(new Label("Label A"));
-        item.getItemProperty("Column 3").setValue(
-                new Label("<b>Label A</b>", Label.CONTENT_XHTML));
-        item.getItemProperty("Column 4").setValue(
-                new Embedded("An embedded image", new ThemeResource(
-                        "../runo/icons/32/ok.png")));
-
-        item = table.addItem("Item 2 (row 2)");
-        item.getItemProperty("Column 1").setValue("String B");
-        item.getItemProperty("Column 2").setValue(new Label("Label B"));
-        item.getItemProperty("Column 3")
-                .setValue(
-                        new Label(
-                                "<a style=\"color: blue\" href=\"javascript:false\">Label A</a>",
-                                Label.CONTENT_XHTML));
-        item.getItemProperty("Column 4").setValue(
-                new Embedded("", new ThemeResource(
-                        "../runo/icons/32/cancel.png")));
-
-        table.addListener(new ItemClickListener() {
-
-            public void itemClick(ItemClickEvent event) {
-                System.out.println("Clickevent on item " + event.getItemId()
-                        + ", column: " + event.getPropertyId());
-
-            }
-
-        });
-        addComponent(table);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/MissingScrollbar.html b/tests/src/com/vaadin/tests/components/table/MissingScrollbar.html
deleted file mode 100644
index e1f783d42f..0000000000
--- a/tests/src/com/vaadin/tests/components/table/MissingScrollbar.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>MissingScrollbar</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">MissingScrollbar</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.MissingScrollbar</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableMissingScrollbar::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>50-items-scrollbar</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableMissingScrollbar::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>2-items-no-scrollbar</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/MissingScrollbar.java b/tests/src/com/vaadin/tests/components/table/MissingScrollbar.java
deleted file mode 100644
index 5f65b40f2f..0000000000
--- a/tests/src/com/vaadin/tests/components/table/MissingScrollbar.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import java.io.Serializable;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-
-public class MissingScrollbar extends TestBase {
-
-    private Table table;
-    private IndexedContainer container50;
-    private IndexedContainer container2;
-
-    @Override
-    protected String getDescription() {
-        return "Increasing the number of items to more than is displayed at once should show the scrollbar.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3076;
-    }
-
-    @Override
-    protected void setup() {
-        HorizontalLayout hl = new HorizontalLayout();
-
-        container50 = createContainer(50);
-        container2 = createContainer(2);
-
-        table = new Table();
-        table.setContainerDataSource(container2);
-        table.setPageLength(10);
-
-        VerticalLayout buttonLayout = new VerticalLayout();
-        buttonLayout.setWidth(null);
-
-        Button b = new Button("Set items to 2", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                table.setContainerDataSource(container2);
-            }
-        });
-        buttonLayout.addComponent(b);
-
-        b = new Button("Set items to 50", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                table.setContainerDataSource(container50);
-            }
-
-        });
-        buttonLayout.addComponent(b);
-
-        hl.addComponent(buttonLayout);
-        hl.addComponent(table);
-
-        addComponent(hl);
-    }
-
-    private static IndexedContainer createContainer(int items) {
-        IndexedContainer ic = new IndexedContainer();
-        ic.addContainerProperty("License number", Integer.class, "");
-        ic.addContainerProperty("First", String.class, "");
-        ic.addContainerProperty("Last", String.class, "");
-
-        for (int i = 0; i < items; i++) {
-            Item item = ic.addItem("" + i);
-            item.getItemProperty("License number").setValue(i);
-            item.getItemProperty("First").setValue("First " + i);
-            item.getItemProperty("Last").setValue("Last " + i);
-        }
-
-        return ic;
-    }
-
-    private void writeObject(java.io.ObjectOutputStream out) throws Exception {
-
-        out.defaultWriteObject();
-        System.out.println("Serialize " + getClass().getName() + "("
-                + (this instanceof Serializable) + ")");
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/ModifyContainerProperty.html b/tests/src/com/vaadin/tests/components/table/ModifyContainerProperty.html
deleted file mode 100644
index 93d97cd698..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ModifyContainerProperty.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>ModifyContainerProperty</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ModifyContainerProperty</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.ModifyContainerProperty?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableModifyContainerProperty::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertTextNotPresent</td>
-	<td>bar</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableModifyContainerProperty::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableModifyContainerProperty::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
-	<td>three</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/ModifyContainerProperty.java b/tests/src/com/vaadin/tests/components/table/ModifyContainerProperty.java
deleted file mode 100644
index be3b6d3ec0..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ModifyContainerProperty.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Table;
-
-@SuppressWarnings("serial")
-public class ModifyContainerProperty extends TestBase {
-
-    private Table table = new Table();
-    private IndexedContainer ic = new IndexedContainer();
-
-    @Override
-    protected void setup() {
-        addComponent(table);
-
-        ic.addContainerProperty("one", String.class, "one");
-        ic.addContainerProperty("two", String.class, "two");
-
-        ic.addItem("foo");
-
-        ic.getContainerProperty("foo", "one").setValue("bar");
-        ic.getContainerProperty("foo", "two").setValue("baz");
-
-        table.setContainerDataSource(ic);
-        addComponent(new Button("Remove container property",
-                new Button.ClickListener() {
-                    public void buttonClick(com.vaadin.ui.Button.ClickEvent arg0) {
-                        ic.removeContainerProperty("one");
-                    }
-                }));
-        addComponent(new Button("Add container property",
-                new Button.ClickListener() {
-                    public void buttonClick(com.vaadin.ui.Button.ClickEvent arg0) {
-                        boolean added = ic.addContainerProperty("three",
-                                String.class, "three");
-                        if (added) {
-                            Object[] current = table.getVisibleColumns();
-                            Object[] vis = new Object[current.length + 1];
-                            for (int i = 0; i < current.length; i++) {
-                                vis[i] = current[i];
-                            }
-                            vis[current.length] = "three";
-                            table.setVisibleColumns(vis);
-                        }
-                    }
-                }));
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Clicking on \"Add container property\" adds a property to the container and sets it visible. The table should then show a \"three\" column in addition to the others. Clicking on \"Remove container property\" should remove column \"two\" from the table.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3165;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/MultiSelectWithNotIdentityEqualIds.java b/tests/src/com/vaadin/tests/components/table/MultiSelectWithNotIdentityEqualIds.java
deleted file mode 100644
index 62fd53d769..0000000000
--- a/tests/src/com/vaadin/tests/components/table/MultiSelectWithNotIdentityEqualIds.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-
-@SuppressWarnings("serial")
-public class MultiSelectWithNotIdentityEqualIds extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Table t = new Table();
-        t.setContainerDataSource(getDS());
-        t.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-        t.setMultiSelect(true);
-        t.setSelectable(true);
-        t.setImmediate(true);
-        t.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                t.getWindow().showNotification(
-                        "Selected: " + event.getProperty());
-
-            }
-        });
-        getLayout().addComponent(t);
-    }
-
-    private Container getDS() {
-
-        IndexedContainer idx = new IndexedContainer() {
-
-            @Override
-            public Object nextItemId(Object itemId) {
-                Integer id = (Integer) super.nextItemId(itemId);
-                return id == null ? null : new Integer(id);
-            }
-
-        };
-        for (int i = 0; i < 10; i++) {
-            idx.addItem();
-        }
-
-        idx.addContainerProperty("Property", String.class, "foo");
-
-        return idx;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Multiselection should work with container that uses ids that are equal, but not necessary identical. With bug an infinit loop is caused.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5342;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/NotselectablePaintSelections.java b/tests/src/com/vaadin/tests/components/table/NotselectablePaintSelections.java
deleted file mode 100644
index 9d3011365d..0000000000
--- a/tests/src/com/vaadin/tests/components/table/NotselectablePaintSelections.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import com.vaadin.data.Item;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-
-public class NotselectablePaintSelections extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Table should paint selections even if it's not selectable.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3500;
-    }
-
-    @Override
-    protected void setup() {
-        // Multiselect
-        Table t = new Table("Multiselect");
-        addComponent(t);
-        t.setSelectable(false);
-        t.setMultiSelect(true);
-        t.setPageLength(5);
-        t.addContainerProperty("Name", String.class, null);
-        Set<Object> selected = new HashSet<Object>();
-        for (int i = 0; i < 30; i++) {
-            Item item = t.addItem(i);
-            item.getItemProperty("Name").setValue("Name " + i);
-            if (i % 2 == 0) {
-                selected.add(i);
-            }
-        }
-        t.setValue(selected);
-
-        // Singleselect
-        t = new Table("Singleselect");
-        addComponent(t);
-        t.setSelectable(false);
-        t.setMultiSelect(false);
-        t.setPageLength(5);
-        t.addContainerProperty("Name", String.class, null);
-        for (int i = 0; i < 30; i++) {
-            Item item = t.addItem(i);
-            item.getItemProperty("Name").setValue("Name " + i);
-        }
-        t.setValue(3);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/OddEvenRowStyling.html b/tests/src/com/vaadin/tests/components/table/OddEvenRowStyling.html
deleted file mode 100644
index 525ad34888..0000000000
--- a/tests/src/com/vaadin/tests/components/table/OddEvenRowStyling.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>OddEvenRowStyling</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">OddEvenRowStyling</td></tr>
-</thead><tbody>
-<tr>
-    <td>open</td>
-    <td>/run/com.vaadin.tests.components.table.OddEvenRowStyling?restartApplication</td>
-    <td></td>
-</tr>
-<tr>
-    <td>scroll</td>
-    <td>vaadin=runcomvaadintestscomponentstableOddEvenRowStyling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
-    <td>1000</td>
-</tr>
-<tr>
-    <td>pause</td>
-    <td>300</td>
-    <td></td>
-</tr>
-<tr>
-    <td>screenCapture</td>
-    <td></td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>scroll</td>
-    <td>vaadin=runcomvaadintestscomponentstableOddEvenRowStyling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
-    <td>0</td>
-</tr>
-<tr>
-    <td>pause</td>
-    <td>300</td>
-    <td></td>
-</tr>
-<tr>
-    <td>screenCapture</td>
-    <td></td>
-    <td>up</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/OddEvenRowStyling.java b/tests/src/com/vaadin/tests/components/table/OddEvenRowStyling.java
deleted file mode 100644
index 578672ec83..0000000000
--- a/tests/src/com/vaadin/tests/components/table/OddEvenRowStyling.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-package com.vaadin.tests.components.table;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-
-/**
- * @author jonatan
- * 
- */
-public class OddEvenRowStyling extends TestBase {
-
-    @Override
-    protected void setup() {
-        Table t = new Table();
-        t.setPageLength(10);
-        t.addContainerProperty("foo", String.class, "");
-        for (int i = 0; i < 33; i++) {
-            t.addItem(i).getItemProperty("foo").setValue("bar");
-        }
-        addComponent(t);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Odd/even row styling should not change when scrolling";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 7644;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/PropertyValueChange.html b/tests/src/com/vaadin/tests/components/table/PropertyValueChange.html
deleted file mode 100644
index 71d323cdc0..0000000000
--- a/tests/src/com/vaadin/tests/components/table/PropertyValueChange.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>PropertyValueChange</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">PropertyValueChange</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.PropertyValueChange</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstablePropertyValueChange::PID_Seditortable/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VFilterSelect[0]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[4]/td</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstablePropertyValueChange::PID_Seditortable/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VTextField[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentstablePropertyValueChange::PID_Seditortable/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VTextField[0]</td>
-	<td>9</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstablePropertyValueChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/PropertyValueChange.java b/tests/src/com/vaadin/tests/components/table/PropertyValueChange.java
deleted file mode 100644
index 5975137976..0000000000
--- a/tests/src/com/vaadin/tests/components/table/PropertyValueChange.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractSelect.NewItemHandler;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.DefaultFieldFactory;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.ColumnGenerator;
-import com.vaadin.ui.TableFieldFactory;
-
-public class PropertyValueChange extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Property value change should only update absolutely "
-                + "needed cells. Tables have common datasource. The first is "
-                + "editable, second one has data in disabled fields, the lastone "
-                + "is plain table that directly shows data. Use first table and "
-                + "combobox/sync button to send changed values to server and evaluate "
-                + "given uidl responses.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2823;
-    }
-
-    private IndexedContainer container;
-
-    // Also use column generator in test, to ensure it is possible to build
-    // columns that update automatically.
-    ColumnGenerator multiplier = new ColumnGenerator() {
-        private int getMultipliedValue(Property p) {
-            int i = ((Integer) p.getValue()).intValue();
-            return i * 3;
-        }
-
-        public Component generateCell(Table source, Object itemId,
-                Object columnId) {
-            final Label l = new Label();
-            final Property integer = source.getContainerProperty(itemId,
-                    "integer");
-            l.setValue(getMultipliedValue(integer));
-
-            // we must hook value change listener to ensure updates in all use
-            // cases (eg. edit mode)
-            if (integer instanceof Property.ValueChangeNotifier) {
-                Property.ValueChangeNotifier notifier = (Property.ValueChangeNotifier) integer;
-                notifier.addListener(new ValueChangeListener() {
-                    public void valueChange(ValueChangeEvent event) {
-                        l.setValue(getMultipliedValue(integer));
-                    }
-                });
-            }
-            return l;
-        }
-    };
-
-    TableFieldFactory ff = new MyFieldFactory();
-
-    @Override
-    public void setup() {
-        container = new IndexedContainer();
-
-        container.addContainerProperty("text", String.class, "sampletext");
-        container.addContainerProperty("integer", Integer.class, 5);
-
-        container.addItem();
-        container.addItem();
-
-        Table t1 = new Table(
-                "Editable table with bells and wistles. See description.");
-        t1.setDescription("Opening combobox should never fire table"
-                + " refresh (for this table). Update from textfield "
-                + "(integer) may be sent to server however. The readonly table"
-                + " my refresh, but not this one.");
-        t1.setPageLength(0);
-        t1.setContainerDataSource(container);
-        t1.addGeneratedColumn("integer x 3", multiplier);
-        t1.setTableFieldFactory(ff);
-        t1.setEditable(true);
-        t1.setDebugId("editortable");
-
-        Table t2 = new Table(
-                "A clone of table1, but disabled. Properties are in components.");
-        t2.setDescription("This table is in editable mode."
-                + " Updates to common datasource should not affect redraw for this "
-                + "table. Only the components inside table should get updated.");
-        t2.setTableFieldFactory(ff);
-        t2.setEditable(true);
-        t2.setEnabled(false);
-        t2.setContainerDataSource(container);
-        t2.addGeneratedColumn("integer x 3", multiplier);
-        t2.setPageLength(0);
-        t2.setDebugId("disabled table");
-
-        Table reader = new Table("Reader table");
-        reader.setDescription("This table should be redrawn on container changes as container data is "
-                + "displayed directly in cells.");
-        reader.setContainerDataSource(container);
-        reader.addGeneratedColumn("integer x 3", multiplier);
-        reader.setPageLength(0);
-        reader.setDebugId("reader table");
-
-        getLayout().addComponent(t1);
-        getLayout().addComponent(t2);
-        getLayout().addComponent(reader);
-        getLayout().addComponent(new Button("Sync!"));
-
-    }
-}
-
-class MyFieldFactory extends DefaultFieldFactory {
-
-    IndexedContainer texts = new IndexedContainer();
-
-    public MyFieldFactory() {
-        texts.addItem("sampletext");
-        texts.addItem("foo");
-        texts.addItem("bar");
-        for (int i = 0; i < 100; i++) {
-            texts.addItem("foo" + 1);
-        }
-
-    }
-
-    @Override
-    public Field createField(Container container, Object itemId,
-            Object propertyId, Component uiContext) {
-        if (propertyId.equals("text")) {
-            // replace text fields with comboboxes
-            final ComboBox cb = new ComboBox() {
-            };
-            cb.setContainerDataSource(texts);
-            cb.setNewItemsAllowed(true);
-            cb.setNewItemHandler(new NewItemHandler() {
-                public void addNewItem(String newItemCaption) {
-                    texts.addItem(newItemCaption);
-                    cb.setValue(newItemCaption);
-                }
-            });
-            return cb;
-        }
-
-        return super.createField(container, itemId, propertyId, uiContext);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/ResizeColumnAfterScrolling.html b/tests/src/com/vaadin/tests/components/table/ResizeColumnAfterScrolling.html
deleted file mode 100644
index 7e7536d63a..0000000000
--- a/tests/src/com/vaadin/tests/components/table/ResizeColumnAfterScrolling.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>drag</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[0]</td>
-	<td>0,11</td>
-</tr>
-<tr>
-	<td>drop</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[0]</td>
-	<td>100,0</td>
-</tr>
-<tr>
-	<td>scrollLeft</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
-	<td>101</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>drag</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[9]/domChild[0]</td>
-	<td>0,11</td>
-</tr>
-<tr>
-	<td>drop</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[9]/domChild[0]</td>
-	<td>-50,0</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>resized-after-scrolling</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/RowAdditionTest.java b/tests/src/com/vaadin/tests/components/table/RowAdditionTest.java
deleted file mode 100644
index 742cc0acf3..0000000000
--- a/tests/src/com/vaadin/tests/components/table/RowAdditionTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Table;
-
-public class RowAdditionTest extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Adding a row should refresh client area only if newly added row is in the rendered area.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return new Integer(2799);
-    }
-
-    @Override
-    protected void setup() {
-        final Table table = new Table();
-        final IndexedContainer container = (IndexedContainer) table
-                .getContainerDataSource();
-        table.addContainerProperty("column1", String.class, "test");
-
-        for (int i = 0; i < 100; ++i) {
-            table.addItem();
-        }
-
-        HorizontalLayout hl = new HorizontalLayout();
-        hl.addComponent(new Button("Add first", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                Item item = container.addItemAt(0, new Object());
-                item.getItemProperty("column1").setValue("0");
-            }
-        }));
-        hl.addComponent(new Button("Add at position 50",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        Item item = container.addItemAt(50, new Object());
-                        item.getItemProperty("column1").setValue("50");
-                    }
-                }));
-        hl.addComponent(new Button("Add at position 100",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        Item item = container.addItemAt(100, new Object());
-                        item.getItemProperty("column1").setValue("100");
-                    }
-                }));
-
-        getLayout().addComponent(table);
-        getLayout().addComponent(hl);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/RowGenerators.java b/tests/src/com/vaadin/tests/components/table/RowGenerators.java
deleted file mode 100644
index 1ddb03c316..0000000000
--- a/tests/src/com/vaadin/tests/components/table/RowGenerators.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.GeneratedRow;
-import com.vaadin.ui.Table.RowGenerator;
-
-public class RowGenerators extends TestBase implements RowGenerator {
-
-    @Override
-    protected void setup() {
-        Table table = new Table();
-        table.setContainerDataSource(filledContainer());
-        table.setRowGenerator(this);
-        addComponent(table);
-    }
-
-    private Container filledContainer() {
-        IndexedContainer c = new IndexedContainer();
-        c.addContainerProperty("Property 1", String.class, "");
-        c.addContainerProperty("Property 2", String.class, "");
-        c.addContainerProperty("Property 3", String.class, "");
-        c.addContainerProperty("Property 4", String.class, "");
-        for (int ix = 0; ix < 500; ix++) {
-            Item i = c.addItem(ix);
-            i.getItemProperty("Property 1").setValue("Item " + ix + ",1");
-            i.getItemProperty("Property 2").setValue("Item " + ix + ",2");
-            i.getItemProperty("Property 3").setValue("Item " + ix + ",3");
-            i.getItemProperty("Property 4").setValue("Item " + ix + ",4");
-        }
-        return c;
-    }
-
-    public GeneratedRow generateRow(Table table, Object itemId) {
-        if ((Integer) itemId % 5 == 0) {
-            if ((Integer) itemId % 10 == 0) {
-                return new GeneratedRow(
-                        "foobarbazoof very extremely long, most definitely will span.");
-            } else {
-                return new GeneratedRow("foo", "bar", "baz", "oof");
-            }
-        }
-        return null;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Row generators should replace every fifth row in the table";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6720;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/SafariRenderingBugWhiteSpace.java b/tests/src/com/vaadin/tests/components/table/SafariRenderingBugWhiteSpace.java
deleted file mode 100644
index 133a5e83a5..0000000000
--- a/tests/src/com/vaadin/tests/components/table/SafariRenderingBugWhiteSpace.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Table;
-
-public class SafariRenderingBugWhiteSpace extends TestBase {
-
-    @Override
-    protected void setup() {
-
-        final HorizontalSplitPanel split = new HorizontalSplitPanel();
-
-        final Table table = new Table();
-        table.addContainerProperty("name", String.class, "");
-        table.addContainerProperty("value", String.class, "");
-
-        table.addItem(new Object[] { "test1", "val1" }, "test1");
-        table.addItem(new Object[] { "test2", "val2" }, "test2");
-        table.addItem(new Object[] { "test3", "val3" }, "test3");
-        table.addItem(new Object[] { "test4", "val4" }, "test4");
-        table.addItem(new Object[] { "test5", "val5" }, "test5");
-        table.addItem(new Object[] { "test6", "val6" }, "test6");
-        table.addItem(new Object[] { "test7", "val7" }, "test7");
-        table.addItem(new Object[] { "test8", "val8" }, "test8");
-        table.addItem(new Object[] { "test9", "val9" }, "test9");
-        table.setSelectable(true);
-        table.setImmediate(true);
-        table.setSizeFull();
-        table.addListener(new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                if (table.getValue() == null) {
-                    split.setSplitPosition(100, Sizeable.UNITS_PERCENTAGE);
-                } else {
-                    split.setSplitPosition(20, Sizeable.UNITS_PERCENTAGE);
-                }
-            }
-        });
-
-        split.setFirstComponent(table);
-        split.setSplitPosition(100, Sizeable.UNITS_PERCENTAGE);
-        Panel editor = new Panel("Editor");
-        editor.setSizeFull();
-        split.setSecondComponent(editor);
-        getLayout().setSizeFull();
-        getLayout().addComponent(split);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "White space between header an content should not appear, when selecting and de-selecting first row";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3875;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/SelectingItemScrollsRight.java b/tests/src/com/vaadin/tests/components/table/SelectingItemScrollsRight.java
deleted file mode 100644
index cfe0301775..0000000000
--- a/tests/src/com/vaadin/tests/components/table/SelectingItemScrollsRight.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-
-public class SelectingItemScrollsRight extends TestBase {
-
-    @Override
-    protected void setup() {
-        Table table = new Table();
-        table.setSelectable(true);
-        table.setWidth("300px");
-        table.setColumnWidth("Column", 500);
-        table.addGeneratedColumn("Column", new Table.ColumnGenerator() {
-            public Component generateCell(Table source, Object itemId,
-                    Object columnId) {
-                return new Label(
-                        "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
-            }
-        });
-
-        for (int i = 0; i < 50; i++) {
-            table.addItem();
-        }
-
-        addComponent(table);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Clicking on an item that is longer than the table width should not scroll the table right";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5385;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/SortLongTable.html b/tests/src/com/vaadin/tests/components/table/SortLongTable.html
deleted file mode 100644
index 96513509e1..0000000000
--- a/tests/src/com/vaadin/tests/components/table/SortLongTable.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.SortLongTable?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableSortLongTable::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>120,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>sorted-asc</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableSortLongTable::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>120,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>sorted-desc</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/SortLongTable.java b/tests/src/com/vaadin/tests/components/table/SortLongTable.java
deleted file mode 100644
index cc9dec0965..0000000000
--- a/tests/src/com/vaadin/tests/components/table/SortLongTable.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class SortLongTable extends AbstractTestCase {
-
-    @Override
-    public void init() {
-        final int NUMBER_OF_ROWS = 100; // Works with 10
-
-        Window mainWindow = new Window("Table Sort Test");
-        mainWindow.setSizeFull();
-        setMainWindow(mainWindow);
-
-        Table ptable = new Table();
-        ptable.addContainerProperty("Sort_me_please", String.class, "--");
-        for (int i = NUMBER_OF_ROWS - 1; i >= 0; i--) {
-            ptable.addItem("" + i).getItemProperty("Sort_me_please")
-                    .setValue("Value " + String.format("%02d", i));
-        }
-
-        ptable.setWidth("100%");
-        ptable.setPageLength(NUMBER_OF_ROWS);
-
-        VerticalLayout vl = new VerticalLayout();
-        vl.addComponent(ptable);
-        mainWindow.addComponent(vl);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Clicking on the header should sort the column. It should not cause the headers to be scrolled out of view.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6367;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableAndBrowserContextMenu.java b/tests/src/com/vaadin/tests/components/table/TableAndBrowserContextMenu.java
deleted file mode 100644
index d1fce928d4..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableAndBrowserContextMenu.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.event.Action;
-import com.vaadin.event.ItemClickEvent;
-import com.vaadin.event.ItemClickEvent.ItemClickListener;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.Table;
-
-public class TableAndBrowserContextMenu extends TestBase implements
-        Action.Handler, ItemClickListener {
-
-    private Table table;
-    private boolean actionHandlerHasActions = false;
-
-    @Override
-    public void setup() {
-        CheckBox cb = new CheckBox("Item click listener");
-        cb.setImmediate(true);
-        cb.addListener(new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                if (((Boolean) event.getProperty().getValue())) {
-                    table.addListener(TableAndBrowserContextMenu.this);
-                } else {
-                    table.removeListener(TableAndBrowserContextMenu.this);
-                }
-
-            }
-        });
-        addComponent(cb);
-
-        CheckBox cbActionHandler = new CheckBox("Action handler");
-        cbActionHandler.setImmediate(true);
-        cbActionHandler.addListener(new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                if (((Boolean) event.getProperty().getValue())) {
-                    table.addActionHandler(TableAndBrowserContextMenu.this);
-                } else {
-                    table.removeActionHandler(TableAndBrowserContextMenu.this);
-                }
-
-            }
-        });
-        addComponent(cbActionHandler);
-
-        CheckBox cbActionHasActions = new CheckBox("Action handler has actions");
-        cbActionHasActions.setImmediate(true);
-        cbActionHasActions.addListener(new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                actionHandlerHasActions = ((Boolean) event.getProperty()
-                        .getValue());
-
-                // Workaround to ensure actions are repainted
-                removeComponent(table);
-                addComponent(table);
-
-            }
-        });
-        addComponent(cbActionHasActions);
-
-        createTable();
-        addComponent(table);
-
-    }
-
-    private void createTable() {
-        // Have a table with a numeric column
-        table = new Table("A table");
-        table.addContainerProperty("Name", String.class, null);
-        table.addContainerProperty("Died At Age", Integer.class, null);
-
-        // Add a generated column with a link to Google
-        table.addGeneratedColumn("Search", new Table.ColumnGenerator() {
-            public Component generateCell(Table source, Object itemId,
-                    Object columnId) {
-                Item item = source.getItem(itemId);
-                String name = (String) item.getItemProperty("Name").getValue();
-                return new Link("Google for " + name, new ExternalResource(
-                        "http://www.google.co.uk/search?q=" + name));
-            }
-        });
-
-        // Insert some data
-        Object people[][] = { { "Galileo", 77 }, { "Monnier", 83 },
-                { "Vaisala", 79 }, { "Oterma", 86 } };
-
-        for (int i = 0; i < people.length; i++) {
-            table.addItem(people[i], i);
-        }
-
-        // Calculate the average of the numeric column
-        double avgAge = 0;
-        for (int i = 0; i < people.length; i++) {
-            avgAge += (Integer) people[i][1];
-        }
-        avgAge /= people.length;
-
-        // Set the footers
-        table.setFooterVisible(true);
-        table.setColumnFooter("Name", "Average");
-        table.setColumnFooter("Died At Age", String.valueOf(avgAge));
-
-        // Adjust the table height a bit
-        table.setPageLength(table.size() + 2);
-
-        for (int i = 0; i < people.length; i++) {
-            Object[] person = people[i];
-            String name = (String) person[0];
-            addComponent(new Link("Google for " + name, new ExternalResource(
-                    "http://www.google.co.uk/search?q=" + name)));
-        }
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Table should only prevent the browser context menu when the right click is used for some Table specific operation. In practice these are either action handlers/context menu or item click listeners (right click). Note that item click listeners affects rows only, not the body.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5924;
-    }
-
-    public void itemClick(ItemClickEvent event) {
-        getMainWindow()
-                .showNotification("Click using " + event.getButtonName());
-    }
-
-    public Action[] getActions(Object target, Object sender) {
-        if (!actionHandlerHasActions) {
-            return null;
-        }
-
-        return new Action[] { new Action("test") };
-    }
-
-    public void handleAction(Action action, Object sender, Object target) {
-        getMainWindow().showNotification("Action: " + action.getCaption());
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/table/TableCacheBuildEfficiency.java b/tests/src/com/vaadin/tests/components/table/TableCacheBuildEfficiency.java
deleted file mode 100644
index 220d5e8192..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableCacheBuildEfficiency.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Property;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-
-public class TableCacheBuildEfficiency extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "On each add, row property values should be queried only once (one log row for first addition).";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4299;
-    }
-
-    @Override
-    protected void setup() {
-
-        final CssLayout log = new CssLayout();
-        log.setWidth("100%");
-
-        final Table table = new Table() {
-            @Override
-            public Property getContainerProperty(Object itemId,
-                    Object propertyId) {
-                log("Fetched container property \"" + propertyId
-                        + "\" for item \"" + itemId + "\"");
-                return super.getContainerProperty(itemId, propertyId);
-            }
-
-            private void log(String string) {
-                log.addComponent(new Label(string));
-
-            }
-        };
-
-        table.addContainerProperty("foo", String.class, "bar");
-
-        Button b = new Button("Click to add row", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                table.addItem();
-
-            }
-        });
-
-        getLayout().addComponent(table);
-        getLayout().addComponent(b);
-        getLayout().addComponent(log);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableClickAndDragOnIconAndComponents.html b/tests/src/com/vaadin/tests/components/table/TableClickAndDragOnIconAndComponents.html
deleted file mode 100644
index 7ad0873c0f..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableClickAndDragOnIconAndComponents.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TableClickAndDragOnIconAndComponents</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TableClickAndDragOnIconAndComponents</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableClickAndDragOnIconAndComponents?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertNotCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[1]/domChild[0]</td>
-	<td>38,13</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>assertNotCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>1,1</td>
-</tr>
-<tr>
-	<td>assertNotCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VLabel[0]</td>
-	<td>30,9</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>assertNotCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VTextField[0]</td>
-	<td>71,11</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>assertNotCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]/VTextField[1]</td>
-	<td>34,9</td>
-</tr>
-<tr>
-	<td>assertNotCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VEmbedded[0]/domChild[0]</td>
-	<td>9,8</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>assertNotCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]</td>
-	<td>v-selected</td>
-</tr>
-<tr>
-	<td>drag</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[1]</td>
-	<td>2,16</td>
-</tr>
-<tr>
-	<td>drop</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[1]/domChild[0]</td>
-	<td>22,18</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[1]/domChild[0]</td>
-	<td>foo 4foo</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableClickAndDragOnIconAndComponents.java b/tests/src/com/vaadin/tests/components/table/TableClickAndDragOnIconAndComponents.java
deleted file mode 100644
index ee04813ce6..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableClickAndDragOnIconAndComponents.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.event.DataBoundTransferable;
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.acceptcriteria.AcceptAll;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.ColumnGenerator;
-import com.vaadin.ui.Table.TableDragMode;
-import com.vaadin.ui.TextField;
-
-public class TableClickAndDragOnIconAndComponents extends TestBase {
-
-    private static final long serialVersionUID = -2534880024131980135L;
-    private Table table;
-
-    @Override
-    protected void setup() {
-        table = new Table();
-        table.addContainerProperty("foo", String.class, "foo");
-        table.addContainerProperty("red", String.class, "red");
-        table.addContainerProperty("icon", Resource.class, null);
-        table.setSelectable(true);
-        table.setRowHeaderMode(Table.ROW_HEADER_MODE_ICON_ONLY);
-        table.setItemIconPropertyId("icon");
-        table.setDebugId("testable-table");
-        addComponent(table);
-        for (int i = 0; i < 5; i++) {
-            addItemAfter(i + "foo", null);
-        }
-
-        table.addGeneratedColumn("Label", new ColumnGenerator() {
-
-            private static final long serialVersionUID = -5042109683675242407L;
-
-            public Component generateCell(Table source, Object itemId,
-                    Object columnId) {
-                Item item = source.getItem(itemId);
-                return new Label("" + item.getItemProperty("foo").getValue());
-            }
-        });
-        table.addGeneratedColumn("textField", new ColumnGenerator() {
-
-            private static final long serialVersionUID = -5042109683675242407L;
-
-            public Component generateCell(Table source, Object itemId,
-                    Object columnId) {
-                Item item = source.getItem(itemId);
-                TextField textfield = new TextField();
-                textfield.setValue(String.valueOf(item.getItemProperty("foo")
-                        .getValue()));
-                return textfield;
-            }
-        });
-        table.addGeneratedColumn("readOnlyTextField", new ColumnGenerator() {
-
-            private static final long serialVersionUID = -5042109683675242407L;
-
-            public Component generateCell(Table source, Object itemId,
-                    Object columnId) {
-                Item item = source.getItem(itemId);
-                TextField textfield = new TextField();
-                textfield.setValue(String.valueOf(item.getItemProperty("foo")
-                        .getValue()));
-                textfield.setReadOnly(true);
-                return textfield;
-            }
-        });
-        table.addGeneratedColumn("embedded", new ColumnGenerator() {
-
-            private static final long serialVersionUID = -5042109683675242407L;
-
-            public Component generateCell(Table source, Object itemId,
-                    Object columnId) {
-                Embedded embedded = new Embedded(null, new ThemeResource(
-                        "../runo/icons/16/ok.png"));
-                return embedded;
-            }
-        });
-
-        table.setDragMode(TableDragMode.ROW);
-        table.setDropHandler(new DropHandler() {
-
-            public AcceptCriterion getAcceptCriterion() {
-                return AcceptAll.get();
-            }
-
-            public void drop(DragAndDropEvent event) {
-                DataBoundTransferable t = (DataBoundTransferable) event
-                        .getTransferable();
-                Object dragged = t.getItemId();
-
-                AbstractSelectTargetDetails dropData = ((AbstractSelectTargetDetails) event
-                        .getTargetDetails());
-                Object target = dropData.getItemIdOver();
-
-                if (dragged == target || target == null) {
-                    return;
-                }
-
-                IndexedContainer container = (IndexedContainer) table
-                        .getContainerDataSource();
-                container.removeItem(dragged);
-                addItemAfter(dragged, target);
-            }
-        });
-    }
-
-    private void addItemAfter(Object itemId, Object afterItemId) {
-        Item item;
-        if (afterItemId != null) {
-            item = table.addItemAfter(afterItemId, itemId);
-        } else {
-            item = table.addItem(itemId);
-        }
-        item.getItemProperty("foo").setValue("foo " + itemId);
-        item.getItemProperty("red").setValue("red " + itemId);
-        item.getItemProperty("icon").setValue(
-                new ThemeResource("../runo/icons/16/ok.png"));
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tests that you can click on a row icon in a table to select the row, or to drag the row. Verifies also that the table doesn't capture the click events meant for components inside the table";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 7026;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableColumnAlignment.html b/tests/src/com/vaadin/tests/components/table/TableColumnAlignment.html
deleted file mode 100644
index 49bb86dbce..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableColumnAlignment.html
+++ /dev/null
@@ -1,305 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<!--Add some footers as it should be aligned aswell-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>22,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item7</td>
-	<td>37,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>85,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>73,6</td>
-</tr>
-<!--Align 1r,2c,3l,4r,5c-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>23,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>53,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>61,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>41,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
-	<td>46,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>24,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>41,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>24,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>51,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item1</td>
-	<td>32,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>34,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>42,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>37,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>50,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
-	<td>15,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>13,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>42,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item3</td>
-	<td>42,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>32,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
-	<td>36,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>48,21</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>46,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>35,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>43,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item1</td>
-	<td>24,11</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>aligned-1r-2c-3l-4r-5c</td>
-</tr>
-<!--Align column back to left-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>35,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>37,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>50,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>60,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
-	<td>38,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>39,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>56,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>44,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>53,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
-	<td>30,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>49,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>44,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>44,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>36,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
-	<td>54,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>32,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>33,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item3</td>
-	<td>53,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>48,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
-	<td>28,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>29,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>34,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>36,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>34,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
-	<td>31,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>aligned-all-left</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableColumnHeaders.html b/tests/src/com/vaadin/tests/components/table/TableColumnHeaders.html
deleted file mode 100644
index 9f4e6cb8da..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableColumnHeaders.html
+++ /dev/null
@@ -1,244 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<!--3 properties-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>63,19</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>54,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>43,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item3</td>
-	<td>17,3</td>
-</tr>
-<!--Property 1 -> "A nice column"-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>51,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>39,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>51,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item5</td>
-	<td>52,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
-	<td>46,2</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>A nice column</td>
-</tr>
-<!--Property 2 -> "A"-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>54,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>58,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>46,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item5</td>
-	<td>22,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item1</td>
-	<td>31,11</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
-	<td>A</td>
-</tr>
-<!--Header mode -> id-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>24,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>51,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>50,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>72,11</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>Property 1</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
-	<td>Property 2</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[2]</td>
-	<td>Property 3</td>
-</tr>
-<!--Header mode -> Explicit-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>22,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>43,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>34,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>48,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>A nice column</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
-	<td>A</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[2]</td>
-	<td></td>
-</tr>
-<!--Header mode hidden-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>49,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>44,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>72,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item3</td>
-	<td>40,10</td>
-</tr>
-<tr>
-	<td>assertNotVisible</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]</td>
-	<td>A nice column<br /><br /><br />A<br /><br /><br />Property 3</td>
-</tr>
-<!--explicit defaults id-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>39,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>39,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>51,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>73,11</td>
-</tr>
-<tr>
-	<td>assertVisible</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]</td>
-	<td>A nice column<br /><br /><br />A<br /><br /><br />Property 3</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>A nice column</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
-	<td>A</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[2]</td>
-	<td>Property 3</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableColumnIcons.html b/tests/src/com/vaadin/tests/components/table/TableColumnIcons.html
deleted file mode 100644
index 81b8be89fa..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableColumnIcons.html
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<!--Add icons to property 1,5,10-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>19,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>31,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>48,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
-	<td>45,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item1</td>
-	<td>38,14</td>
-</tr>
-<!--ensure icon is there-->
-<tr>
-	<td>assertElementPresent</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>2,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>24,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>49,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
-	<td>29,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item3</td>
-	<td>51,7</td>
-</tr>
-<tr>
-	<td>assertElementPresent</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[4]/domChild[2]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>20,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>45,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item9</td>
-	<td>36,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
-	<td>46,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item4</td>
-	<td>72,10</td>
-</tr>
-<tr>
-	<td>assertElementPresent</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[9]/domChild[2]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>icons-on-properties-1-5-10</td>
-</tr>
-<!--Remove icons from 1 and 10-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>21,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>42,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>17,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
-	<td>52,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
-	<td>27,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>45,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>53,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item9</td>
-	<td>45,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
-	<td>41,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
-	<td>13,5</td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[9]/domChild[2]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>icon-on-5</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableColumnResizeContentsWidth.html b/tests/src/com/vaadin/tests/components/table/TableColumnResizeContentsWidth.html
deleted file mode 100644
index 9c8a12fe15..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableColumnResizeContentsWidth.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title></title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3"></td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableColumnResizeContentsWidth?restartApplication&amp;debug</td>
-	<td></td>
-</tr>
-<tr>
-	<td>dragAndDrop</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableColumnResizeContentsWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>-20,+0</td>
-</tr>
-<tr>
-	<td>assertElementWidth</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableColumnResizeContentsWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VTextField[0]</td>
-	<td>80</td>
-</tr>
-<tr>
-	<td>dragAndDrop</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableColumnResizeContentsWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>+40,+0</td>
-</tr>
-<tr>
-	<td>assertElementWidth</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableColumnResizeContentsWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VTextField[0]</td>
-	<td>120</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableColumnResizeContentsWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementWidth</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableColumnResizeContentsWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VTextField[0]</td>
-	<td>80</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableColumnResizeContentsWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementWidth</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableColumnResizeContentsWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VTextField[0]</td>
-	<td>100</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableColumnResizeContentsWidth.java b/tests/src/com/vaadin/tests/components/table/TableColumnResizeContentsWidth.java
deleted file mode 100644
index fbe7ed88ef..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableColumnResizeContentsWidth.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.ColumnGenerator;
-import com.vaadin.ui.TextField;
-
-public class TableColumnResizeContentsWidth extends TestBase {
-
-    private static final String COL1 = "COL1";
-
-    @Override
-    protected void setup() {
-        final Table table = new Table();
-        table.addGeneratedColumn(COL1, new ColumnGenerator() {
-            public Object generateCell(Table source, Object itemId,
-                    Object columnId) {
-                TextField textField = new TextField();
-                textField.setWidth("100%");
-                return textField;
-            }
-        });
-
-        table.addItem();
-
-        table.setWidth("200px");
-        table.setColumnWidth(COL1, 100);
-
-        addComponent(table);
-        addComponent(new Button("Increase width", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                table.setColumnWidth(COL1, table.getColumnWidth(COL1) + 20);
-                table.requestRepaint();
-            }
-        }));
-        addComponent(new Button("Decrease width", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                table.setColumnWidth(COL1, table.getColumnWidth(COL1) - 40);
-                table.requestRepaint();
-            }
-        }));
-    }
-
-    @Override
-    protected String getDescription() {
-        return "When a column is resized, it's contents should update to match the new size";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return Integer.valueOf(7393);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableColumnSorting.html b/tests/src/com/vaadin/tests/components/table/TableColumnSorting.html
deleted file mode 100644
index f513d147a8..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableColumnSorting.html
+++ /dev/null
@@ -1,208 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
-	<td>35,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>36,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>auto-unsorted</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>53,11</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>auto-sorted-p1-asc-update</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>53,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>53,11</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>auto-sorted-p1-asc-redraw</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>53,11</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
-	<td>34,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[2]</td>
-	<td>29,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[2]</td>
-	<td>19,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[4]/domChild[2]</td>
-	<td>27,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[4]/domChild[2]</td>
-	<td>27,12</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>auto-sorted-p5-desc-update</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>auto-sorted-p5-desc-redraw</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[4]/domChild[2]</td>
-	<td>27,12</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables</td>
-	<td></td>
-</tr>
-<!--500px wide-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>30,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>32,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>40,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item6</td>
-	<td>47,4</td>
-</tr>
-<!--3 items-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>36,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>61,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>72,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item3</td>
-	<td>20,10</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>500px-unsorted-redraw</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>83,9</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>500px-sorted-p1-desc-update</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>500px-sorted-p1-desc-redraw</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>83,9</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableContextMenuAndIcons.html b/tests/src/com/vaadin/tests/components/table/TableContextMenuAndIcons.html
deleted file mode 100644
index 54d8e624f1..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableContextMenuAndIcons.html
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<!--Hide event log-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
-	<td>19,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>32,7</td>
-</tr>
-<!--Simple context menu-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>28,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>57,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>68,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>69,7</td>
-</tr>
-<tr>
-	<td>contextMenuAt</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[1]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>contextmenu-noicon</td>
-</tr>
-<!--Two actions, without and with icon-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>42,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>52,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>53,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>31,4</td>
-</tr>
-<tr>
-	<td>contextMenuAt</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[2]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>caption-only-and-has-icon</td>
-</tr>
-<!--Large icon-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>42,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>52,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>53,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item3</td>
-	<td>31,4</td>
-</tr>
-<tr>
-	<td>contextMenuAt</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[2]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>large-icon</td>
-</tr>
-<!--Simple context menu again to ensure it is properly updated (icons removed)-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>28,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>57,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>68,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>69,7</td>
-</tr>
-<tr>
-	<td>contextMenuAt</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[1]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>contextmenu-noicon</td>
-</tr>
-<!--Empty context menu-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>25,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>72,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>77,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
-	<td>48,5</td>
-</tr>
-<tr>
-	<td>contextmenu</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[3]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>contextmenu-empty</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableContextMenuOnField.java b/tests/src/com/vaadin/tests/components/table/TableContextMenuOnField.java
deleted file mode 100644
index 4c6f658a24..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableContextMenuOnField.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.event.Action;
-import com.vaadin.event.LayoutEvents.LayoutClickEvent;
-import com.vaadin.event.LayoutEvents.LayoutClickListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-public class TableContextMenuOnField extends TestBase {
-
-    private static final Action ACTION_MYACTION = new Action("Action!!");
-
-    @Override
-    protected void setup() {
-        Table table = new Table();
-        table.setSelectable(true);
-        table.setMultiSelect(true);
-
-        table.addActionHandler(new Action.Handler() {
-            public void handleAction(Action action, Object sender, Object target) {
-                // TODO Auto-generated method stub
-
-            }
-
-            public Action[] getActions(Object target, Object sender) {
-                return new Action[] { ACTION_MYACTION };
-            }
-        });
-
-        table.addGeneratedColumn("layout", new Table.ColumnGenerator() {
-
-            public Component generateCell(Table source, Object itemId,
-                    Object columnId) {
-
-                VerticalLayout layout = new VerticalLayout();
-                layout.addComponent(new TextField());
-
-                layout.addListener(new LayoutClickListener() {
-
-                    public void layoutClick(LayoutClickEvent event) {
-                        getMainWindow().showNotification("HELLO");
-
-                    }
-                });
-
-                return layout;
-            }
-        });
-
-        table.addGeneratedColumn("textfield", new Table.ColumnGenerator() {
-            public Component generateCell(Table source, Object itemId,
-                    Object columnId) {
-                return new TextField();
-            }
-        });
-
-        table.addGeneratedColumn("link", new Table.ColumnGenerator() {
-            public Component generateCell(Table source, Object itemId,
-                    Object columnId) {
-                return new Link("Link", null);
-            }
-        });
-
-        table.addGeneratedColumn("button", new Table.ColumnGenerator() {
-            public Component generateCell(Table source, Object itemId,
-                    Object columnId) {
-                return new Button("Button");
-            }
-        });
-
-        table.addItem();
-        table.addItem();
-        table.addItem();
-        addComponent(table);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Right clicking on an item without a context menu should bring"
-                + "up the Tables context menu";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4264;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableDragColumn.html b/tests/src/com/vaadin/tests/components/table/TableDragColumn.html
deleted file mode 100644
index 7c2dc2813c..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableDragColumn.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>TableDragColumn</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TableDragColumn</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<!--Hide log to allow screenshots to be consistent-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
-	<td>23,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>58,13</td>
-</tr>
-<!-- Icon for first column -->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>43,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>42,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>24,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
-	<td>58,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item1</td>
-	<td>37,8</td>
-</tr>
-<!-- Drag column to a new location -->
-<tr>
-	<td>drag</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
-	<td>51,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>dragging_column</td>
-</tr>
-<tr>
-	<td>drop</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[2]</td>
-	<td>10,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>moved_column</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableExtraScrollbars.java b/tests/src/com/vaadin/tests/components/table/TableExtraScrollbars.java
deleted file mode 100644
index bc8c40108c..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableExtraScrollbars.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class TableExtraScrollbars extends AbstractTestCase {
-
-    private static int PROPS = 15;
-    private static int ROWS = 1000;
-
-    @Override
-    public void init() {
-        setTheme("runo");
-        Window w = new Window("Table scrollbars bug example");
-        setMainWindow(w);
-
-        VerticalLayout vl = new VerticalLayout();
-        vl.setSizeFull();
-        vl.addComponent(createTable());
-        w.setContent(vl);
-    }
-
-    protected Table createTable() {
-        Table table = new Table(null, createContainer());
-        table.setSizeFull();
-        table.setPageLength(50);
-        table.setColumnReorderingAllowed(true);
-        table.setSelectable(true);
-        return table;
-    }
-
-    protected Container createContainer() {
-        Container container = new IndexedContainer();
-        for (int i = 0; i < PROPS; ++i) {
-            container.addContainerProperty("prop" + i, String.class, null);
-        }
-        for (int i = 0; i < ROWS; ++i) {
-            Item item = container.addItem(i);
-            for (int p = 0; p < PROPS; ++p) {
-                item.getItemProperty("prop" + p).setValue(
-                        "property value 1234567890");
-            }
-        }
-        return container;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Scrolling down in the table should not add extra scrollbars";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4489;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/table/TableGeneratedColumns.html b/tests/src/com/vaadin/tests/components/table/TableGeneratedColumns.html
deleted file mode 100644
index 19326e9f12..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableGeneratedColumns.html
+++ /dev/null
@@ -1,223 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<!--Hide log to allow screenshots to be consistent-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
-	<td>23,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>58,13</td>
-</tr>
-<!--width 700px-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>44,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>41,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>36,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item8</td>
-	<td>53,17</td>
-</tr>
-<!--2 properties-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>31,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>36,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>86,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>22,7</td>
-</tr>
-<!--add 100% wide button-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>27,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>37,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>77,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>45,10</td>
-</tr>
-<!--Ensure button is resized with column-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>1,11</td>
-</tr>
-<tr>
-	<td>dragAndDrop</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>-100,0</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>button-100%-after-column-resize</td>
-</tr>
-<!--Add undefined wide label-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>45,21</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>30,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>109,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item3</td>
-	<td>71,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>button-and-label</td>
-</tr>
-<!--Reload to relayout (this shouldn't be necessary)-->
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>button-and-label-after-reload</td>
-</tr>
-<!--Align generated button right (should not make a difference)-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>17,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>48,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>39,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>53,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
-	<td>16,6</td>
-</tr>
-<!--Align generated label right (should make a difference)-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>17,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>48,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item3</td>
-	<td>39,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>53,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
-	<td>16,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>label-aligned-right</td>
-</tr>
-<!--Resize right aligned column with undef wide Label-->
-<tr>
-	<td>dragAndDrop</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[0]</td>
-	<td>-20,0</td>
-</tr>
-<tr>
-	<td>dragAndDrop</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[0]</td>
-	<td>20,0</td>
-</tr>
-<!--Should match after resizing back and forth-->
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>label-aligned-right</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableGeneratedRows.html b/tests/src/com/vaadin/tests/components/table/TableGeneratedRows.html
deleted file mode 100644
index 35a600765f..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableGeneratedRows.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-    <td>open</td>
-    <td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-    <td></td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-    <td>46,13</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-    <td>42,5</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item6</td>
-    <td>82,3</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-    <td>56,4</td>
-</tr>
-<tr>
-    <td>screenCapture</td>
-    <td></td>
-    <td>spanned</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-    <td>29,3</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-    <td>30,5</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-    <td>27,4</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-    <td>47,13</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item6</td>
-    <td>80,2</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-    <td>80,8</td>
-</tr>
-<tr>
-    <td>screenCapture</td>
-    <td></td>
-    <td>nospan</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-    <td>36,12</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-    <td>47,5</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item6</td>
-    <td>95,7</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item3</td>
-    <td>67,12</td>
-</tr>
-<tr>
-    <td>screenCapture</td>
-    <td></td>
-    <td>html</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableGeneratedStringColumns.html b/tests/src/com/vaadin/tests/components/table/TableGeneratedStringColumns.html
deleted file mode 100644
index 4d5f4c2d17..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableGeneratedStringColumns.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<!--Hide log to allow screenshots to be consistent-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
-	<td>23,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>58,13</td>
-</tr>
-<!--2 properties-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>31,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>36,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>86,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>22,7</td>
-</tr>
-<!--add plain string-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>27,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>37,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>77,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item7</td>
-	<td>45,10</td>
-</tr>
-<!--Add html label-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>45,21</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>30,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>109,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item8</td>
-	<td>71,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>plain-html</td>
-</tr>
-<!--set width to 900px-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>39,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>38,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>39,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item10</td>
-	<td>19,9</td>
-</tr>
-<!--Align generated string right-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>17,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
-	<td>48,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>39,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>53,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
-	<td>16,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>plain-right-html-left</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableHeaderShifting.java b/tests/src/com/vaadin/tests/components/table/TableHeaderShifting.java
deleted file mode 100644
index 9dc641ddc4..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableHeaderShifting.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-
-public class TableHeaderShifting extends TestBase {
-
-    // COLS = 200; still ok
-    // COLS = 210; header width begins shifting
-    // COLS = 230; header text disappears
-    static final int COLS = 210;
-
-    @Override
-    protected String getDescription() {
-        return "The table header starts shifting when adding lots of columns";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5022;
-    }
-
-    @Override
-    protected void setup() {
-        final Table t = new Table();
-        t.setSizeFull();
-        t.addContainerProperty("name", String.class, "NA");
-
-        for (Integer i = 0; i < COLS; i++) {
-            t.addContainerProperty(i, Integer.class, Integer.valueOf(0));
-        }
-        t.addItem("1").getItemProperty("name").setValue("Ares");
-        t.addItem("2").getItemProperty("name").setValue("Bob");
-        t.addItem("3").getItemProperty("name").setValue("Coral");
-        t.addItem("4").getItemProperty("name").setValue("David");
-        t.addItem("5").getItemProperty("name").setValue("Emma");
-
-        addComponent(t);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableHeightWhenHidingHeaders.html b/tests/src/com/vaadin/tests/components/table/TableHeightWhenHidingHeaders.html
deleted file mode 100644
index 01b2c578f0..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableHeightWhenHidingHeaders.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>Ticket4507</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">Ticket4507</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableHeightWhenHidingHeaders?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableHeightWhenHidingHeaders::/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
-	<td>5,9</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableHeightWhenHidingHeaders::/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
-	<td>10,7</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableHeightWhenHidingHeaders.java b/tests/src/com/vaadin/tests/components/table/TableHeightWhenHidingHeaders.java
deleted file mode 100644
index d0b7631f10..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableHeightWhenHidingHeaders.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-/**
- * Setting table height and setting column header mode as hidden leaves the body
- * height of the table as it would be with the headers visible and leaves an
- * empty area below the body.
- * 
- */
-@SuppressWarnings("serial")
-public class TableHeightWhenHidingHeaders extends AbstractTestCase {
-
-    @Override
-    public void init() {
-        Window mainWindow = new Window();
-        setMainWindow(mainWindow);
-
-        final Table table = new Table("Test table");
-        table.addContainerProperty("Name", String.class, null, "Name", null,
-                null);
-        table.setItemCaptionPropertyId("Name");
-        table.setHeight("100px");
-        table.setImmediate(true);
-
-        table.addItem("1").getItemProperty("Name").setValue("Item 1");
-        table.addItem("2").getItemProperty("Name").setValue("Item 2");
-
-        CheckBox showHeaders = new CheckBox("Show headers",
-                new CheckBox.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        if (event.getButton().booleanValue()) {
-                            // table body height is now 77px, which together
-                            // with header makes 100px
-                            table.setColumnHeaderMode(Table.COLUMN_HEADER_MODE_EXPLICIT_DEFAULTS_ID);
-                        } else {
-                            table.setColumnHeaderMode(Table.COLUMN_HEADER_MODE_HIDDEN);
-                            // header disappears, but table body height stays at
-                            // 77px
-                            // and below the body is an empty area (same height
-                            // as header would
-                            // have)
-
-                        }
-                    }
-                });
-        showHeaders.setValue(true);
-        showHeaders.setImmediate(true);
-
-        mainWindow.addComponent(showHeaders);
-        mainWindow.addComponent(table);
-    }
-
-    @Override
-    protected String getDescription() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4507;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableItemDescriptionGeneratorTest.java b/tests/src/com/vaadin/tests/components/table/TableItemDescriptionGeneratorTest.java
deleted file mode 100644
index 2f53b91107..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableItemDescriptionGeneratorTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.AbstractSelect.ItemDescriptionGenerator;
-import com.vaadin.ui.TextField;
-
-public class TableItemDescriptionGeneratorTest extends TestBase {
-
-	private final String COLUMN1_PROPERTY_ID = "Text - Cell description";
-	private final String COLUMN2_PROPERTY_ID = "Text - Row description";
-	private final String COLUMN3_PROPERTY_ID = "Widget";
-	
-	@Override
-	protected void setup() {
-		   final Table table = new Table();
-	        table.setDebugId("table");
-	        table.setContainerDataSource(createContainer());        
-	        addComponent(table);
-	        	   	        
-	        table.setItemDescriptionGenerator(new ItemDescriptionGenerator() {				
-				public String generateDescription(Component source, Object itemId,
-						Object propertyId) {
-					if(propertyId == null){
-						return "Row description "+ itemId;
-					} else if(propertyId == COLUMN1_PROPERTY_ID) {
-						return "Cell description " + itemId +","+propertyId;
-					}									
-					return null;
-				}
-			});
-	        
-	        table.addGeneratedColumn(COLUMN3_PROPERTY_ID, new Table.ColumnGenerator() {
-				
-				public Component generateCell(Table source, Object itemId, Object columnId) {
-					TextField lbl = new TextField();
-					lbl.setDescription("Textfields own description");
-					return lbl;
-				}
-			});
-	}
-
-	@Override
-	protected String getDescription() {		
-		return "Cells and rows should have tooltips";
-	}
-
-	@Override
-	protected Integer getTicketNumber() {		
-		return 5414;
-	}
-	
-	private Container createContainer() {
-        IndexedContainer container = new IndexedContainer();
-        container.addContainerProperty(COLUMN1_PROPERTY_ID, String.class, "");
-        container.addContainerProperty(COLUMN2_PROPERTY_ID, String.class, "");
-       // container.addContainerProperty(COLUMN3_PROPERTY_ID, String.class, "");
-
-        for (int i = 0; i < 5; i++) {
-            Item item = container.addItem("item " + i);
-            item.getItemProperty(COLUMN1_PROPERTY_ID).setValue("first" + i);
-            item.getItemProperty(COLUMN2_PROPERTY_ID).setValue("middle" + i);
-           // item.getItemProperty(COLUMN3_PROPERTY_ID).setValue("last" + i);
-        }
-
-        return container;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableItemIcon.java b/tests/src/com/vaadin/tests/components/table/TableItemIcon.java
deleted file mode 100644
index b8a6733e83..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableItemIcon.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.terminal.ClassResource;
-import com.vaadin.terminal.Resource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-
-public class TableItemIcon extends TestBase {
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2457;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The items in the Table should have icons in the first column (rowheader).";
-    }
-
-    @Override
-    protected void setup() {
-        Table table = new Table();
-        table.addContainerProperty("icon", Resource.class, null);
-        table.setItemIconPropertyId("icon");
-        table.setRowHeaderMode(Table.ROW_HEADER_MODE_ICON_ONLY);
-        getLayout().addComponent(table);
-
-        Item item = table.addItem("FI");
-        item.getItemProperty("icon").setValue(
-                new ClassResource("fi.gif", TableItemIcon.this));
-        item = table.addItem("SE");
-        item.getItemProperty("icon").setValue(
-                new ClassResource("se.gif", TableItemIcon.this));
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableLastRowMissing.html b/tests/src/com/vaadin/tests/components/table/TableLastRowMissing.html
deleted file mode 100644
index ca8ee6d6a4..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableLastRowMissing.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TableLastRowMissing</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TableLastRowMissing</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableLastRowMissing</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableLastRowMissing.java b/tests/src/com/vaadin/tests/components/table/TableLastRowMissing.java
deleted file mode 100644
index 4e4a223e23..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableLastRowMissing.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-
-public class TableLastRowMissing extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The table below should display 3 rows. Each with a textfield containing the row number.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2933;
-    }
-
-    @Override
-    protected void setup() {
-        Table t = new Table();
-        addComponent(t);
-
-        t.addContainerProperty("Name", TextField.class, null);
-
-        for (int i = 0; i < 3; i++) {
-            Item item = t.addItem(i);
-            TextField tf = new TextField("", String.valueOf(i + 1));
-            tf.setColumns(10);
-            item.getItemProperty("Name").setValue(tf);
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableModifcationsWhenScrolledRight.java b/tests/src/com/vaadin/tests/components/table/TableModifcationsWhenScrolledRight.java
deleted file mode 100644
index 7d29b8650e..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableModifcationsWhenScrolledRight.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Table;
-
-public class TableModifcationsWhenScrolledRight extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Table t = new Table();
-        Button btn = new Button("Add row");
-        Integer row = 1;
-
-        t.setPageLength(5);
-        t.setWidth("400px");
-        t.addContainerProperty("name", String.class, "NA");
-        t.setColumnCollapsingAllowed(true);
-
-        for (Integer col = 0; col < 10; col++) {
-            t.addContainerProperty(col, Integer.class, col);
-            t.setColumnWidth(col, 50);
-        }
-        t.addItem(row).getItemProperty("name").setValue("Row" + row);
-
-        btn.addListener(new ClickListener() {
-            Integer row = 2;
-
-            public void buttonClick(ClickEvent event) {
-                t.addItem(row).getItemProperty("name").setValue("Row" + row);
-                row++;
-            }
-        });
-
-        addComponent(t);
-        addComponent(btn);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Scroll right and then click \"Add row\". The table will scroll back left and the headers should also.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5382;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableModificationsWhenScrolledRight.html b/tests/src/com/vaadin/tests/components/table/TableModificationsWhenScrolledRight.html
deleted file mode 100644
index b225b30726..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableModificationsWhenScrolledRight.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableModifcationsWhenScrolledRight?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>scrollLeft</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableModifcationsWhenScrolledRight::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
-	<td>292</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>scrolled-right</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableModifcationsWhenScrolledRight::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>column-added-when-scrolled-right</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableMultiSelectMouse.html b/tests/src/com/vaadin/tests/components/table/TableMultiSelectMouse.html
deleted file mode 100644
index 8d7c0d98b0..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableMultiSelectMouse.html
+++ /dev/null
@@ -1,361 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<!--Multi select-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>6,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>73,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>33,13</td>
-</tr>
-<!--Null select allowed-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>39,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>75,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>42,2</td>
-</tr>
-<!--ValueChangeListener-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>14,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>75,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>64,6</td>
-</tr>
-<!--Clear log to ensure numbers matches with the later case-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
-	<td>29,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item1</td>
-	<td>40,7</td>
-</tr>
-<!--Start clicking-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[3]/domChild[0]</td>
-	<td>16,8</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>0. ValueChangeEvent, new value: '[Item 3]'</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[8]/domChild[2]/domChild[0]</td>
-	<td>26,10:shift</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>1. ValueChangeEvent, new value: '[Item 3, Item 4, Item 5, Item 6, Item 7, Item 8, Item 9]'</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>selected-2-9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>31,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>2. ValueChangeEvent, new value: '[Item 1]'</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[2]/domChild[0]</td>
-	<td>27,10:ctrl</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. ValueChangeEvent, new value: '[Item 1, Item 3]'</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[2]/domChild[0]</td>
-	<td>37,10:ctrl</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>4. ValueChangeEvent, new value: '[Item 1, Item 3, Item 5]'</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>selected-135</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[3]/domChild[0]</td>
-	<td>22,6:shift</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>5. ValueChangeEvent, new value: '[Item 10, Item 5, Item 6, Item 7, Item 8, Item 9]'</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>selected-5-10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[6]/domChild[2]/domChild[0]</td>
-	<td>30,7</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>6. ValueChangeEvent, new value: '[Item 7]'</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[2]/domChild[0]</td>
-	<td>66,10:ctrl</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>7. ValueChangeEvent, new value: '[Item 4, Item 7]'</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[2]/domChild[0]</td>
-	<td>62,5:shift</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>8. ValueChangeEvent, new value: '[Item 2, Item 3, Item 4]'</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[4]/domChild[0]</td>
-	<td>62,8:shift</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>9. ValueChangeEvent, new value: '[Item 10, Item 4, Item 5, Item 6, Item 7, Item 8, Item 9]'</td>
-</tr>
-<!--The same thing with nullselectallowed == false-->
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<!--Multi select-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>6,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>73,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>33,13</td>
-</tr>
-<!--ValueChangeListener-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>14,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>75,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>64,6</td>
-</tr>
-<!--Clear log to ensure numbers matches with the later case-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
-	<td>29,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item1</td>
-	<td>40,7</td>
-</tr>
-<!--Start clicking-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[3]/domChild[0]</td>
-	<td>16,8</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>0. ValueChangeEvent, new value: '[Item 3]'</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[8]/domChild[2]/domChild[0]</td>
-	<td>26,10:shift</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>1. ValueChangeEvent, new value: '[Item 3, Item 4, Item 5, Item 6, Item 7, Item 8, Item 9]'</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>selected-2-9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>31,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>2. ValueChangeEvent, new value: '[Item 1]'</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[2]/domChild[0]</td>
-	<td>27,10:ctrl</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. ValueChangeEvent, new value: '[Item 1, Item 3]'</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[2]/domChild[0]</td>
-	<td>37,10:ctrl</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>4. ValueChangeEvent, new value: '[Item 1, Item 3, Item 5]'</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>selected-135</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[3]/domChild[0]</td>
-	<td>22,6:shift</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>5. ValueChangeEvent, new value: '[Item 10, Item 5, Item 6, Item 7, Item 8, Item 9]'</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>selected-5-10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[6]/domChild[2]/domChild[0]</td>
-	<td>30,7</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>6. ValueChangeEvent, new value: '[Item 7]'</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[2]/domChild[0]</td>
-	<td>66,10:ctrl</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>7. ValueChangeEvent, new value: '[Item 4, Item 7]'</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[2]/domChild[0]</td>
-	<td>62,5:shift</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>8. ValueChangeEvent, new value: '[Item 2, Item 3, Item 4]'</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[4]/domChild[0]</td>
-	<td>62,8:shift</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>9. ValueChangeEvent, new value: '[Item 10, Item 4, Item 5, Item 6, Item 7, Item 8, Item 9]'</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableMultiSelectSimple.html b/tests/src/com/vaadin/tests/components/table/TableMultiSelectSimple.html
deleted file mode 100644
index dcf88620ca..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableMultiSelectSimple.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableMultiSelectSimple?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableMultiSelectSimple::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>28,17</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableMultiSelectSimple::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
-	<td>48,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableMultiSelectSimple::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[0]/domChild[0]</td>
-	<td>48,9</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>0-2-4Selected</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableMultiSelectSimple::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[0]/domChild[0]</td>
-	<td>38,18</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableMultiSelectSimple::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
-	<td>32,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableMultiSelectSimple::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>35,13</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>NoSelection</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableMultiSelectSimple.java b/tests/src/com/vaadin/tests/components/table/TableMultiSelectSimple.java
deleted file mode 100644
index 76415844be..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableMultiSelectSimple.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import java.util.Set;
-import java.util.TreeSet;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.AbstractSelect.MultiSelectMode;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Table;
-
-public class TableMultiSelectSimple extends TestBase {
-    Log log = new Log(3);
-
-    @Override
-    protected void setup() {
-        log.setDebugId("eventlog");
-
-        Table t = new Table();
-
-        t.setSelectable(true);
-        t.setNullSelectionAllowed(true);
-        t.setMultiSelect(true);
-        t.setMultiSelectMode(MultiSelectMode.SIMPLE);
-        t.setImmediate(true);
-        t.addListener(new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                TreeSet sorted = new TreeSet((Set) event.getProperty()
-                        .getValue());
-                log.log("Selected value: " + sorted);
-            }
-        });
-
-        t.addContainerProperty("string", String.class, null);
-        t.addContainerProperty("button", Component.class, null);
-
-        for (int i = 0; i < 10; i++) {
-            t.addItem(i);
-            t.getContainerProperty(i, "string").setValue(i);
-            t.getContainerProperty(i, "button")
-                    .setValue(new Button("Click me"));
-        }
-
-        addComponent(log);
-        addComponent(t);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tests that MultiSelectMode.SIMPLE is working properly";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5744;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TablePageLengthCalculation.java b/tests/src/com/vaadin/tests/components/table/TablePageLengthCalculation.java
deleted file mode 100644
index 5847450f89..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TablePageLengthCalculation.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-public class TablePageLengthCalculation extends TestBase {
-
-    @Override
-    public void setup() {
-
-        Window window = new Window();
-        window.setCaption("usermanagement");
-        window.center();
-        window.setWidth(40, Window.UNITS_PERCENTAGE);
-        window.setHeight(40, Window.UNITS_PERCENTAGE);
-        window.setModal(true);
-        getMainWindow().addWindow(window);
-
-        TabSheet tab = new TabSheet();
-        tab.setSizeFull();
-
-        tab.addTab(new TableView(), "users", null);
-        tab.addTab(new TableView(), "groups", null);
-
-        window.setContent(tab);
-    }
-
-    public class TableView extends Table {
-        private static final long serialVersionUID = 1L;
-
-        public TableView() {
-            setSizeFull();
-
-            addContainerProperty("name", String.class, "name");
-            addContainerProperty("right", Boolean.class, "right");
-        }
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Resize the window and change the selected tab. In Opera 10.50 the updated pagelength will be calculated as a float and not an integer, causing an \"Internal Error\"";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4374;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/table/TablePageLengthUpdate.html b/tests/src/com/vaadin/tests/components/table/TablePageLengthUpdate.html
deleted file mode 100644
index bc438eaf1b..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TablePageLengthUpdate.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TablePageLengthUpdate</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TablePageLengthUpdate</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TablePageLengthUpdate</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTablePageLengthUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentstableTablePageLengthUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
-	<td>200px</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTablePageLengthUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>exact:Pagelength: 9</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTablePageLengthUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentstableTablePageLengthUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
-	<td>260px</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTablePageLengthUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>exact:Pagelength: 12</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentstableTablePageLengthUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
-	<td>50px</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTablePageLengthUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>exact:Pagelength: 2</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TablePageLengthUpdate.java b/tests/src/com/vaadin/tests/components/table/TablePageLengthUpdate.java
deleted file mode 100644
index 71dc987e56..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TablePageLengthUpdate.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.util.MethodProperty;
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-
-public class TablePageLengthUpdate extends TestBase {
-
-    private Label pageLengthLabel;
-    private Table table;
-
-    @Override
-    protected String getDescription() {
-        return "When the height is set for a table, the pagelength should be updated according to what is actually displayed. The table pagelength is initially 100 and the height is 100px. After clicking update the pageLength label should display the correct value (?).";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 1623;
-    }
-
-    @Override
-    protected void setup() {
-        table = new Table();
-        table.setWidth("400px");
-        table.setHeight("100px");
-        table.setPageLength(100);
-        table.addContainerProperty("p1", String.class, null);
-        table.addContainerProperty("p2", String.class, null);
-        table.addContainerProperty("p3", String.class, null);
-
-        for (int i = 0; i < 10; i++) {
-            table.addItem(new Object[] { "a" + i, "b" + i, "c" + i }, "" + i);
-        }
-
-        addComponent(table);
-
-        pageLengthLabel = new Label("");
-        updatePageLengthLabel();
-        addComponent(pageLengthLabel);
-
-        Button updateButton = new Button("Update pageLength",
-                new ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        updatePageLengthLabel();
-                    }
-                });
-        addComponent(updateButton);
-
-        TextField tableHeight = new TextField("Table height",
-                new MethodProperty<String>(this, "tableHeight"));
-        tableHeight.setImmediate(true);
-        addComponent(tableHeight);
-    }
-
-    public String getTableHeight() {
-        return "" + (int) table.getHeight()
-                + Sizeable.UNIT_SYMBOLS[table.getHeightUnits()];
-    }
-
-    public void setTableHeight(String height) {
-        table.setHeight(height);
-    }
-
-    protected void updatePageLengthLabel() {
-        pageLengthLabel.setValue("Pagelength: " + table.getPageLength());
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableRemoveActionHandlers.html b/tests/src/com/vaadin/tests/components/table/TableRemoveActionHandlers.html
deleted file mode 100644
index a363f6980e..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableRemoveActionHandlers.html
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<!--5 items-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>25,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>50,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>86,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item5</td>
-	<td>53,6</td>
-</tr>
-<!--Item 1 context menu-->
-<tr>
-	<td>contextmenu</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td></td>
-</tr>
-<!--Body context menu-->
-<tr>
-	<td>contextmenu</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
-	<td></td>
-</tr>
-<!--Add context menu-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>21,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>61,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>68,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item5</td>
-	<td>69,12</td>
-</tr>
-<!--Item 1 context menu-->
-<tr>
-	<td>contextmenu</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertVisible</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
-	<td>Edit Item 1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
-	<td>52,12</td>
-</tr>
-<!--Body context menu-->
-<tr>
-	<td>contextmenu</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertVisible</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
-	<td>New...</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
-	<td>35,12</td>
-</tr>
-<!--Remove context menu-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>20,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>67,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>71,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>16,3</td>
-</tr>
-<!--Item 1 context menu-->
-<tr>
-	<td>contextmenu</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>//div[@id='PID_VAADIN_CM']</td>
-	<td></td>
-</tr>
-<!--Body context menu-->
-<tr>
-	<td>contextmenu</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>//div[@id='PID_VAADIN_CM']</td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableRowHeight.html b/tests/src/com/vaadin/tests/components/table/TableRowHeight.html
deleted file mode 100644
index a28df6329f..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableRowHeight.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TableRowHeight</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TableRowHeight</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableRowHeight</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableRowHeight.java b/tests/src/com/vaadin/tests/components/table/TableRowHeight.java
deleted file mode 100644
index b3864ae0e4..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableRowHeight.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.ColumnGenerator;
-
-public class TableRowHeight extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "This test case contains 5 tables in various configurations. All tables have a pageLength of "
-                + PAGELENGTH
-                + " and thus should show as many rows without any scrollbars (height is undefined for all tables).";
-
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2691;
-    }
-
-    private static final int PAGELENGTH = 2;
-
-    @Override
-    public void setup() {
-        Table table1 = initTable(PAGELENGTH, false, false, false);
-        addComponent(new Label("Plain table"));
-        addComponent(table1);
-
-        Table table2 = initTable(PAGELENGTH, true, false, false);
-        addComponent(new Label("Table with label component in generated column"));
-        addComponent(table2);
-
-        Table table3 = initTable(PAGELENGTH, false, true, false);
-        addComponent(new Label(
-                "Table with layout component in generated column"));
-        addComponent(table3);
-
-        Table table4 = initTable(PAGELENGTH, true, true, false);
-        addComponent(new Label(
-                "Table with both label and layout component in generated column"));
-        addComponent(table4);
-
-        Table table5 = initTable(PAGELENGTH, false, false, true);
-        addComponent(new Label("Table with label horizontal scrollbar"));
-        addComponent(table5);
-
-    }
-
-    private Table initTable(int pageLength, boolean addLabelColGen,
-            boolean addLayoutColGen, boolean fixedColWidths) {
-        Table table = new Table();
-        table.setWidth("100%");
-        table.setPageLength(pageLength);
-
-        IndexedContainer idx = new IndexedContainer();
-        idx.addContainerProperty("firstname", String.class, null);
-        idx.addContainerProperty("lastname", String.class, null);
-        Item i = idx.addItem(1);
-        i.getItemProperty("firstname").setValue("John");
-        i.getItemProperty("lastname").setValue("Johnson");
-        i = idx.addItem(2);
-        i.getItemProperty("firstname").setValue("Jane");
-        i.getItemProperty("lastname").setValue("Janeine");
-
-        table.setContainerDataSource(idx);
-
-        table.setColumnHeader("firstname", "FirstName");
-        table.setColumnHeader("lastname", "LastName");
-        if (addLabelColGen) {
-            table.addGeneratedColumn("name1", new LabelColumnGenerator());
-        }
-        if (addLayoutColGen) {
-            table.addGeneratedColumn("name2", new LayoutColumnGenerator());
-        }
-        if (fixedColWidths) {
-            table.setWidth("400px");
-            table.setColumnWidth("firstname", 200);
-            table.setColumnWidth("lastname", 300);
-        }
-
-        return table;
-    }
-
-    public class LabelColumnGenerator implements ColumnGenerator {
-
-        public Component generateCell(Table source, Object itemId,
-                Object columnId) {
-            Item item = source.getItem(itemId);
-            String firstname = (String) item.getItemProperty("firstname")
-                    .getValue();
-            String lastname = (String) item.getItemProperty("lastname")
-                    .getValue();
-            Label label = new Label(firstname + " " + lastname);
-            return label;
-        }
-
-    }
-
-    public class LayoutColumnGenerator implements ColumnGenerator {
-
-        public Component generateCell(Table source, Object itemId,
-                Object columnId) {
-            Item item = source.getItem(itemId);
-            GridLayout layout = new GridLayout(1, 2);
-            String firstname = (String) item.getItemProperty("firstname")
-                    .getValue();
-            String lastname = (String) item.getItemProperty("lastname")
-                    .getValue();
-            layout.addComponent(new Label(firstname), 0, 0);
-            layout.addComponent(new Label(lastname), 0, 1);
-            return layout;
-        }
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableRowHeight2.html b/tests/src/com/vaadin/tests/components/table/TableRowHeight2.html
deleted file mode 100644
index a440ff84fb..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableRowHeight2.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TableRowHeight2</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TableRowHeight2</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableRowHeight2</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>1</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableRowHeight2::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VButton[1]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableRowHeight2::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VButton[1]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>1</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableRowHeight2.java b/tests/src/com/vaadin/tests/components/table/TableRowHeight2.java
deleted file mode 100644
index 0011fdca18..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableRowHeight2.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.themes.BaseTheme;
-
-public class TableRowHeight2 extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The table contains 2 rows, which both should be shown completely as the table height is undefined.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2747;
-    }
-
-    @Override
-    protected void setup() {
-        setTheme("tests-tickets");
-        HorizontalLayout vl = new HorizontalLayout();
-        vl.setSizeFull();
-
-        Table table = new Table();
-
-        int COL_TITLE_W = 200;
-        int COL_TEST_W = 98;
-
-        table.setPageLength(0);
-        table.setColumnWidth("title", COL_TITLE_W);
-        table.setColumnWidth("test", COL_TEST_W);
-        table.addContainerProperty("title", Button.class, "");
-        table.addContainerProperty("test", Button.class, "");
-        for (int i = 0; i < 2; i++) {
-            Item item = table.addItem(new Object());
-
-            Button b = new Button();
-            b.setWidth("100%");
-            b.setStyleName(BaseTheme.BUTTON_LINK);
-            b.addStyleName("nowraplink");
-
-            b.setCaption("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ullamcorper, elit quis elementum iaculis, dui est rutrum risus, at cursus sem leo eget arcu. Proin vel eros ut tortor luctus pretium. Nulla facilisi. Donec in dui. Proin ac diam vitae massa tempus faucibus. Fusce eu risus. Nunc ac risus. Cras libero.");
-
-            item.getItemProperty("title").setValue(b);
-
-            Button c = new Button("test");
-            item.getItemProperty("test").setValue(c);
-        }
-
-        vl.addComponent(table);
-
-        addComponent(vl);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableRowHeight3.html b/tests/src/com/vaadin/tests/components/table/TableRowHeight3.html
deleted file mode 100644
index 2aa90085e4..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableRowHeight3.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TableRowHeight3</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TableRowHeight3</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableRowHeight3</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableRowHeight3.java b/tests/src/com/vaadin/tests/components/table/TableRowHeight3.java
deleted file mode 100644
index c31b87f9da..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableRowHeight3.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.themes.BaseTheme;
-
-public class TableRowHeight3 extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "All rows should be visible and the table height should match the height of the rows (no vertical scrollbar)";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2747;
-    }
-
-    @Override
-    protected void setup() {
-        setTheme("tests-tickets");
-        HorizontalLayout vl = new HorizontalLayout();
-        vl.setSizeFull();
-
-        Table table = new Table();
-        table.setWidth("320px");
-        table.setPageLength(0);
-        table.setColumnWidth("title", 200);
-        table.setColumnWidth("test", 98);
-        table.addContainerProperty("title", Button.class, "");
-        table.addContainerProperty("test", Button.class, "");
-        for (int i = 0; i < 6; i++) {
-            Item item = table.addItem(new Object());
-
-            Button b = new Button();
-            b.setWidth("100%");
-            b.setStyleName(BaseTheme.BUTTON_LINK);
-            b.addStyleName("nowraplink");
-            if (i < 2) {
-                b.setCaption("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ullamcorper, elit quis elementum iaculis, dui est rutrum risus, at cursus sem leo eget arcu. Proin vel eros ut tortor luctus pretium. Nulla facilisi. Donec in dui. Proin ac diam vitae massa tempus faucibus. Fusce eu risus. Nunc ac risus. Cras libero.");
-            } else if (2 <= i && i < 4) {
-                b.setCaption("One line");
-            } else {
-                b.setCaption("This button caption should use up two lines");
-            }
-            item.getItemProperty("title").setValue(b);
-
-            Button c = new Button("test");
-            item.getItemProperty("test").setValue(c);
-        }
-
-        vl.addComponent(table);
-
-        addComponent(vl);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableScrollOnFocus.html b/tests/src/com/vaadin/tests/components/table/TableScrollOnFocus.html
deleted file mode 100644
index 1a91211040..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableScrollOnFocus.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableScrollOnFocus?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>scroll</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableScrollOnFocus::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]</td>
-	<td>3864</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableScrollOnFocus::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
-	<td>391,141</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableScrollOnFocus::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]</td>
-	<td>3234</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>visible-185-199</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableScrollOnFocus.java b/tests/src/com/vaadin/tests/components/table/TableScrollOnFocus.java
deleted file mode 100644
index 05e101a5f9..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableScrollOnFocus.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Table;
-
-public class TableScrollOnFocus extends TestBase {
-    @Override
-    protected void setup() {
-        final Table table = new Table();
-        final CheckBox chkSelectable = new CheckBox("selectable");
-
-        chkSelectable.setImmediate(true);
-        chkSelectable.addListener(new ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                table.setSelectable(chkSelectable.booleanValue());
-            }
-        });
-
-        table.addContainerProperty("row #", String.class, "-");
-        table.setColumnWidth("row #", 150);
-        for (int i = 1; i < 200; i++) {
-            table.addItem(new String[] { "" + i }, null);
-        }
-        table.setSortDisabled(true);
-
-        chkSelectable.setValue(true);
-
-        addComponent(chkSelectable);
-        addComponent(table);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The table scrolls up 2 pages after loosing and regaining the focus!</b><p>"
-                + "Drag scrollbar to top then to the bottom of the table.<br>"
-                + "Click somewhere beside the table to take away the focus,<br>"
-                + "then click back on the table (header or scrollbar) to give back the focus<br>"
-                + "(Pressing Tab and Shift-Tab does the same job).<p>"
-                + "If the table is set to non-selectable-mode, no self-scrolling occurs.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6774;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/table/TableScrolling.html b/tests/src/com/vaadin/tests/components/table/TableScrolling.html
deleted file mode 100644
index 51fa844412..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableScrolling.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<!--Hide event log-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
-	<td>37,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>35,13</td>
-</tr>
-<!--1000 items-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>28,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>63,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>63,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item13</td>
-	<td>27,5</td>
-</tr>
-<!--600px width-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>31,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>54,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>12,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item7</td>
-	<td>25,10</td>
-</tr>
-<!--scroll right and down-->
-<tr>
-	<td>scroll</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
-	<td>13823</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>scrollLeft</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
-	<td>369</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>scrolled-down-right</td>
-</tr>
-<tr>
-	<td>scrollLeft</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
-	<td>0</td>
-</tr>
-<tr>
-	<td>scroll</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
-	<td>0</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>scrolled-up-left</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableScrollsOnSelection.html b/tests/src/com/vaadin/tests/components/table/TableScrollsOnSelection.html
deleted file mode 100644
index dff3dcbc48..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableScrollsOnSelection.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableScrollsOnSelection?restartApplication</td>
-	<td></td>
-</tr>
-<!--Scroll to the end of the page (show last items in Table)-->
-<tr>
-	<td>scroll</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableScrollsOnSelection::</td>
-	<td>2000</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<!--Select the last item (79)-->
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstableTableScrollsOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[79]/domChild[0]/domChild[0]</td>
-    <td>38,-892</td>
-</tr>
-<!--Ensure the page is not scrolled to the beginning-->
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>scrolled-down-and-selected-79</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableScrollsOnSelection.java b/tests/src/com/vaadin/tests/components/table/TableScrollsOnSelection.java
deleted file mode 100644
index c76fe05d47..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableScrollsOnSelection.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-
-public class TableScrollsOnSelection extends TestBase {
-
-    @Override
-    protected void setup() {
-        getMainWindow().getContent().setSizeUndefined();
-
-        IndexedContainer cont = new IndexedContainer();
-        cont.addContainerProperty("number", String.class, null);
-        for (int i = 0; i < 80; i++) {
-            Item item = cont.addItem(i);
-            item.getItemProperty("number").setValue(i + "");
-        }
-        Table table = new Table();
-        table.setPageLength(0);
-        table.setContainerDataSource(cont);
-        table.setSelectable(true);
-        addComponent(table);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The scroll position should not change when an item is selected in a Table that is higher than the view.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6197;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableSelectPagingOff.java b/tests/src/com/vaadin/tests/components/table/TableSelectPagingOff.java
deleted file mode 100644
index 4d97a1a669..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableSelectPagingOff.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import java.util.Arrays;
-import java.util.Collection;
-
-import com.vaadin.data.util.BeanItemContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-
-public class TableSelectPagingOff extends TestBase {
-
-    @Override
-    protected void setup() {
-        Table table = new Table();
-        BeanItemContainer<MyBean> dataSource = new BeanItemContainer<MyBean>(
-                getBeans());
-        table.setContainerDataSource(dataSource);
-        table.setSelectable(true);
-        table.setPageLength(0);
-        addComponent(table);
-    }
-
-    private Collection<MyBean> getBeans() {
-        return Arrays.asList(new MyBean("a", "description a"), new MyBean("b",
-                "description b"), new MyBean("c", "description c"), new MyBean(
-                "d", "description d"));
-    }
-
-    public class MyBean {
-
-        private String name;
-        private String description;
-
-        public MyBean() {
-        }
-
-        public MyBean(String name, String description) {
-            this.name = name;
-            this.description = description;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public String getDescription() {
-            return description;
-        }
-
-        public void setDescription(String description) {
-            this.description = description;
-        }
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "No flickering (scrollbars) should happen on select";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5746;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableShouldNotEatValueChanges.html b/tests/src/com/vaadin/tests/components/table/TableShouldNotEatValueChanges.html
deleted file mode 100644
index ede2ea70fc..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableShouldNotEatValueChanges.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TableShouldNotEatValueChanges</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TableShouldNotEatValueChanges</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableShouldNotEatValueChanges?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>139,5</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>fooo</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>18,11:shift</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::Root/VNotification[0]</td>
-	<td>TF Value on the server:fooo</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[2]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>74,15</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>74,15</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>baar</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>12,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::Root/VNotification[0]/HTML[0]/domChild[0]</td>
-	<td>TF Value on the server:baar</td>
-</tr>
-<tr>
-	<td>closeNotification</td>
-	<td>//body/div[2]</td>
-	<td>0,0</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableShouldNotEatValueChanges.java b/tests/src/com/vaadin/tests/components/table/TableShouldNotEatValueChanges.java
deleted file mode 100644
index 21e26b64b8..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableShouldNotEatValueChanges.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.event.ItemClickEvent;
-import com.vaadin.event.ItemClickEvent.ItemClickListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.TableDragMode;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window.Notification;
-
-public class TableShouldNotEatValueChanges extends TestBase {
-
-    @Override
-    protected void setup() {
-        Table t = new Table("Table with multiselection and item click listener");
-        t.focus();
-        t.setPageLength(3);
-        t.addContainerProperty("foo", String.class, "bar");
-        t.addItem();
-        t.setSelectable(true);
-        t.setMultiSelect(true);
-        t.setTabIndex(4);
-        // t.setSelectable(true);
-
-        final TextField tf = new TextField();
-        tf.setTabIndex(1);
-        ItemClickListener l = new ItemClickListener() {
-
-            public void itemClick(ItemClickEvent event) {
-                tf.getWindow().showNotification(
-                        "TF Value on the server:" + tf.getValue(),
-                        Notification.TYPE_WARNING_MESSAGE);
-
-            }
-        };
-        t.addListener(l);
-        addComponent(tf);
-        addComponent(t);
-        t = new Table("Table with drag and drop and item click listener");
-        t.setDragMode(TableDragMode.ROW);
-        t.setPageLength(3);
-        t.addContainerProperty("foo", String.class, "bar");
-        t.addItem();
-        t.setSelectable(true);
-        t.setMultiSelect(true);
-
-        t.addListener(l);
-        addComponent(t);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "When selecting something from table or clicking on item, table should never eat value change from other components.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5429;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableSingleSelect.html b/tests/src/com/vaadin/tests/components/table/TableSingleSelect.html
deleted file mode 100644
index c029e2889b..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableSingleSelect.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableSingleSelect?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableSingleSelect::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>27,14</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableSingleSelect::PID_Seventlog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>1. Selected value: 0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableSingleSelect::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>28,17</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableSingleSelect::PID_Seventlog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>2. Selected value: 1</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>selected-1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableSingleSelect::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>33,15</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableSingleSelect::PID_Seventlog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. Selected value: null</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableSingleSelect::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>26,17</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableSingleSelect::PID_Seventlog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>4. Selected value: 1</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableSingleSelect.java b/tests/src/com/vaadin/tests/components/table/TableSingleSelect.java
deleted file mode 100644
index edde284848..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableSingleSelect.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Table;
-
-public class TableSingleSelect extends TestBase {
-    Log log = new Log(3);
-
-    @Override
-    protected void setup() {
-        log.setDebugId("eventlog");
-
-        Table t = new Table();
-
-        t.setSelectable(true);
-        t.setNullSelectionAllowed(true);
-        t.setImmediate(true);
-        t.addListener(new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                log.log("Selected value: " + event.getProperty().getValue());
-            }
-        });
-
-        t.addContainerProperty("string", String.class, null);
-        t.addContainerProperty("button", Component.class, null);
-
-        for (int i = 0; i < 10; i++) {
-            t.addItem(i);
-            t.getContainerProperty(i, "string").setValue(i);
-            t.getContainerProperty(i, "button")
-                    .setValue(new Button("Click me"));
-        }
-
-        addComponent(log);
-        addComponent(t);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Table in single-select mode with null selection allowed. Tests that single select does not select multiple items, selects and deselects properly.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5431;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableSorting.java b/tests/src/com/vaadin/tests/components/table/TableSorting.java
deleted file mode 100644
index 4cbb1934e4..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableSorting.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import java.io.Serializable;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.BeanItemContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-
-public class TableSorting extends TestBase {
-
-    @Override
-    public void setup() {
-        final Label showID = new Label("");
-        final Table testTable = new Table();
-
-        BeanItemContainer<TestItem> cont = new BeanItemContainer<TestItem>(
-                TestItem.class);
-
-        for (int i = 0; i < 20; i++) {
-            TestItem ti = new TestItem();
-            ti.setTestName("Name_" + i);
-            cont.addBean(ti);
-        }
-        testTable.setContainerDataSource(cont);
-        testTable.setImmediate(true);
-        testTable.setSelectable(true);
-        testTable.setMultiSelect(false);
-        testTable.setVisibleColumns(new Object[] { "testName" });
-
-        // Handle selection change.
-        testTable.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                System.out.println("ValueChanged: "
-                        + testTable.getValue().toString());
-                showID.setCaption("ID: " + testTable.getValue().toString());
-            }
-        });
-        addComponent(testTable);
-        addComponent(showID);
-    }
-
-    public class TestItem implements Serializable {
-        private static final long serialVersionUID = -745849615488792221L;
-        private String testName;
-
-        public String getTestName() {
-            return testName;
-        }
-
-        public void setTestName(String testName) {
-            this.testName = testName;
-        }
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Click the header to sort the table, then click on \"Name_10\". This should show ID: com.vaadin.tests.components.table.TableSorting$TestItem@<hex id> below the table";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4537;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/table/TableToggleVisibility.html b/tests/src/com/vaadin/tests/components/table/TableToggleVisibility.html
deleted file mode 100644
index e9c57203c0..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableToggleVisibility.html
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableToggleVisibility?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>trucks-trailers-drivers</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>drivers</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>trailers</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>trailers-drivers</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>trucks-trailers-drivers-2</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableToggleVisibility.java b/tests/src/com/vaadin/tests/components/table/TableToggleVisibility.java
deleted file mode 100644
index 5c456ab230..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableToggleVisibility.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import java.text.DecimalFormat;
-
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class TableToggleVisibility extends AbstractTestCase {
-
-    private static final int[] LENGTHS = new int[] { 20, 22, 10 };
-
-    @Override
-    public void init() {
-
-        DecimalFormat format = new DecimalFormat("000");
-        Table[] tables = new Table[3];
-        Button[] buttons = new Button[3];
-
-        VerticalLayout leftComponent = new VerticalLayout();
-        leftComponent.setMargin(true);
-        leftComponent.setSpacing(true);
-
-        // Toolbar with buttons to hide or show lists
-
-        HorizontalLayout toolBar = new HorizontalLayout();
-        toolBar.setSpacing(true);
-        toolBar.setMargin(true);
-
-        leftComponent.addComponent(toolBar);
-        leftComponent.setExpandRatio(toolBar, 0.0f);
-
-        // List of trucks -----------------------
-
-        tables[0] = new Table("Trucks");
-        tables[0].addContainerProperty("Brand", String.class, null);
-        tables[0].addContainerProperty("Model", String.class, null);
-        tables[0].addContainerProperty("License Plate", String.class, null);
-
-        for (int i = 1; i < LENGTHS[0]; i++) {
-            tables[0].addItem(
-                    new Object[] { "MAN", "XYZ", "1-ABC-" + format.format(i) },
-                    Integer.valueOf(i));
-        }
-        tables[0].setPageLength(LENGTHS[0]);
-
-        tables[0].setWidth("100%");
-        tables[0].setHeight("100%");
-        tables[0].setSelectable(true);
-
-        leftComponent.addComponent(tables[0]);
-        leftComponent.setExpandRatio(tables[0], 1.0f);
-
-        // List of trailers ----------------------
-
-        tables[1] = new Table("Trailers");
-        tables[1].addContainerProperty("Type", String.class, null);
-        tables[1].addContainerProperty("License Plate", String.class, null);
-        for (int i = 1; i < LENGTHS[1]; i++) {
-            tables[1].addItem(
-                    new Object[] { "Cooler", "1-QQQ-" + format.format(i) },
-                    Integer.valueOf(i));
-        }
-        tables[1].setPageLength(LENGTHS[1]);
-
-        tables[1].setWidth("100%");
-        tables[1].setHeight("100%");
-        tables[1].setSelectable(true);
-
-        leftComponent.addComponent(tables[1]);
-        leftComponent.setExpandRatio(tables[1], 1.0f);
-
-        // List of drivers ------------------------
-
-        tables[2] = new Table("Drivers");
-        tables[2].addContainerProperty("First Name", String.class, null);
-        tables[2].addContainerProperty("Last Name", String.class, null);
-        tables[2].addContainerProperty("HR ID", String.class, null);
-        for (int i = 1; i < LENGTHS[2]; i++) {
-            tables[2].addItem(
-                    new Object[] { "King", "Vabis", "HR-" + format.format(i) },
-                    Integer.valueOf(i));
-        }
-        tables[2].setPageLength(LENGTHS[2]);
-
-        tables[2].setWidth("100%");
-        tables[2].setHeight("100%");
-        tables[2].setSelectable(true);
-
-        leftComponent.addComponent(tables[2]);
-        leftComponent.setExpandRatio(tables[2], 1.0f);
-
-        leftComponent.setWidth("100%");
-
-        HorizontalSplitPanel split = new HorizontalSplitPanel();
-        split.setFirstComponent(leftComponent);
-
-        VerticalLayout rightComponent = new VerticalLayout();
-        rightComponent.setMargin(true);
-        rightComponent.addComponent(new Label("Left blank!"));
-        split.setSecondComponent(rightComponent);
-
-        split.setSizeFull();
-
-        VerticalLayout mainLayout = new VerticalLayout();
-        mainLayout.setSizeFull();
-        mainLayout.addComponent(split);
-        mainLayout.setExpandRatio(split, 1.0f);
-
-        Window mainWindow = new Window("Visibilitybug Application", mainLayout);
-        mainWindow.setSizeFull();
-
-        setMainWindow(mainWindow);
-
-        // complete toolbar
-
-        for (int i = 0; i < buttons.length; i++) {
-            buttons[i] = new ToggleButton(tables[i]);
-            toolBar.addComponent(buttons[i]);
-        }
-
-    }
-
-    // Button to switch the visibility of a table.
-
-    private static class ToggleButton extends Button {
-
-        private Table table;
-
-        private ToggleButton(Table table) {
-            this.table = table;
-
-            setCaption("- " + table.getCaption());
-
-            addListener(new ClickListener() {
-
-                public void buttonClick(ClickEvent event) {
-
-                    boolean wasVisible = ToggleButton.this.table.isVisible();
-
-                    ToggleButton.this.table.setVisible(!wasVisible);
-                    setCaption((wasVisible ? "+ " : "- ")
-                            + ToggleButton.this.table.getCaption());
-                    setDescription((wasVisible ? "Show " : "Hide ")
-                            + "the list with "
-                            + ToggleButton.this.table.getCaption());
-
-                }
-            });
-        }
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Test for hiding and showing tables. Click a button to show/hide one of the tables. The tables are all 100% wide and should be rendered the same way after being hidden and shown again.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6494;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/table/TableTooltips.html b/tests/src/com/vaadin/tests/components/table/TableTooltips.html
deleted file mode 100644
index 989fb865c5..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableTooltips.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableItemDescriptionGeneratorTest?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableItemDescriptionGeneratorTest::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[0]/domChild[0]</td>
-	<td>57,5</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>1000</td>
-	<td>1000</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableItemDescriptionGeneratorTest::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>Cell description item 3,Text - Cell description</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableItemDescriptionGeneratorTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[0]</td>
-	<td>810,153</td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableItemDescriptionGeneratorTest::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[1]/domChild[0]</td>
-	<td>57,12</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>1000</td>
-	<td>1000</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableItemDescriptionGeneratorTest::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>Row description item 1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableItemDescriptionGeneratorTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[0]</td>
-	<td>1011,283</td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableItemDescriptionGeneratorTest::PID_Stable/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[4]/VTextField[0]</td>
-	<td>58,10</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>1000</td>
-	<td>1000</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableItemDescriptionGeneratorTest::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>Textfields own description</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableUndefinedSize.html b/tests/src/com/vaadin/tests/components/table/TableUndefinedSize.html
deleted file mode 100644
index fbb6f4c7f9..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableUndefinedSize.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableUndefinedSize?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>UndefinedSizeTable</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableUndefinedSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>exact:1: Size 200x200 pixels</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>FixedSize200x200Table</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableUndefinedSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>exact:2: Size 600x200 pixels<br />1: Size 200x200 pixels</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>FixedSize600x200Table</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableUndefinedSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>exact:3: Size undefined<br />2: Size 600x200 pixels<br />1: Size 200x200 pixels</td>
-	<td></td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableUndefinedSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[3]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=4</td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>exact:4: Page length: 4<br />3: Size undefined<br />2: Size 600x200 pixels<br />1: Size 200x200 pixels</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>PageLength4</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableUndefinedSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[3]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>PageLength10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableUndefinedSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[3]</td>
-	<td>1102,215</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableUndefinedSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
-	<td>3,6</td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>Column 2</td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>Column 3</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>Column1Hidden</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableUndefinedSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
-	<td>3,3</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>AllColumnsShown</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableUndefinedSize.java b/tests/src/com/vaadin/tests/components/table/TableUndefinedSize.java
deleted file mode 100644
index 2b3204953b..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableUndefinedSize.java
+++ /dev/null
@@ -1,165 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import java.util.Arrays;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.Table;
-
-public class TableUndefinedSize extends TestBase {
-
-    private ObjectProperty<String> output = new ObjectProperty<String>("");
-
-    private int counter = 1;
-
-    @Override
-    protected void setup() {
-
-        HorizontalLayout controls = new HorizontalLayout();
-        controls.setSpacing(true);
-        addComponent(controls);
-
-        HorizontalLayout visibilities = new HorizontalLayout();
-        visibilities.setSpacing(true);
-        addComponent(visibilities);
-
-        final Table tbl = new Table("", createDataSource());
-        tbl.setImmediate(true);
-        tbl.setColumnCollapsingAllowed(true);
-
-        Label output = new Label(this.output);
-        output.setWidth("400px");
-        output.setHeight("100px");
-        output.setContentMode(Label.CONTENT_XHTML);
-
-        controls.addComponent(new Button("Fixed size (200x200)",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        tbl.setWidth("200px");
-                        tbl.setHeight("200px");
-                        print("Size 200x200 pixels");
-                    }
-                }));
-
-        controls.addComponent(new Button("Fixed size (600x200)",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        tbl.setWidth("600px");
-                        tbl.setHeight("200px");
-                        print("Size 600x200 pixels");
-                    }
-                }));
-
-        controls.addComponent(new Button("Undefined size",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        tbl.setSizeUndefined();
-                        print("Size undefined");
-                    }
-                }));
-
-        NativeSelect pageLength = new NativeSelect("PageLength", Arrays.asList(
-                0, 1, 2, 4, 8, 10));
-        pageLength.setImmediate(true);
-        pageLength.setNullSelectionAllowed(false);
-        pageLength.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                int pageLength = Integer.valueOf(event.getProperty().getValue()
-                        .toString());
-                tbl.setPageLength(pageLength);
-                print("Page length: " + pageLength);
-            }
-        });
-        controls.addComponent(pageLength);
-
-        CheckBox cb = new CheckBox("Column 1", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                tbl.setColumnCollapsed("Column 1", !event.getButton()
-                                .booleanValue());
-                if (event.getButton().booleanValue()) {
-                    print("Column 1 visible");
-                } else {
-                    print("Column 1 hidden");
-                }
-                    }
-        });
-        cb.setImmediate(true);
-        cb.setValue(true);
-        visibilities.addComponent(cb);
-
-        cb = new CheckBox("Column 2", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                tbl.setColumnCollapsed("Column 2", !event.getButton()
-                        .booleanValue());
-
-                if (event.getButton().booleanValue()) {
-                    print("Column 2 visible");
-                } else {
-                    print("Column 2 hidden");
-                }
-            }
-        });
-        cb.setImmediate(true);
-        cb.setValue(true);
-        visibilities.addComponent(cb);
-
-        cb = new CheckBox("Column 3", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                tbl.setColumnCollapsed("Column 3", !event.getButton()
-                        .booleanValue());
-
-                if (event.getButton().booleanValue()) {
-                    print("Column 3 visible");
-                } else {
-                    print("Column 3 hidden");
-                }
-            }
-        });
-        cb.setImmediate(true);
-        cb.setValue(true);
-        visibilities.addComponent(cb);
-
-        addComponent(output);
-        addComponent(tbl);
-
-    }
-
-    protected void print(String message) {
-        output.setValue(counter + ": " + message + "<br/>" + output.getValue());
-        counter++;
-    }
-
-    protected Container createDataSource() {
-        IndexedContainer c = new IndexedContainer();
-        c.addContainerProperty("Column 1", String.class, "Column 1");
-        c.addContainerProperty("Column 2", String.class, "Column 2");
-        c.addContainerProperty("Column 3", String.class, "Column 3");
-
-        for (int i = 0; i < 50; i++) {
-            c.addItem();
-        }
-
-        return c;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5789;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableUnregisterComponent.html b/tests/src/com/vaadin/tests/components/table/TableUnregisterComponent.html
deleted file mode 100644
index 1e5617d64f..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableUnregisterComponent.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableUnregisterComponent?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableUnregisterComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableUnregisterComponent::PID_SLog_row_0</td>
-	<td>1. Embedded field property data source set</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableUnregisterComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableUnregisterComponent::PID_SLog_row_0</td>
-	<td>2. Edit field property data source set</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableUnregisterComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableUnregisterComponent::PID_SLog_row_0</td>
-	<td>3. Edit field property data source cleared</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableUnregisterComponent.java b/tests/src/com/vaadin/tests/components/table/TableUnregisterComponent.java
deleted file mode 100644
index 91f5aec1ca..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableUnregisterComponent.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.DefaultFieldFactory;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-
-public class TableUnregisterComponent extends TestBase {
-
-    private static final String COL_A = "textFieldA";
-    private static final String COL_B = "textB";
-
-    @Override
-    protected void setup() {
-        final Log log = new Log(5);
-
-        IndexedContainer container = new IndexedContainer();
-        container.addContainerProperty(COL_A, TextField.class, null);
-        container.addContainerProperty(COL_B, String.class, "");
-
-        Item it = container.addItem("a");
-        final ObjectProperty<String> valA = new ObjectProperty<String>("orgVal");
-        final TextField fieldA = new TextField(valA) {
-            @Override
-            public void setPropertyDataSource(Property newDataSource) {
-                super.setPropertyDataSource(newDataSource);
-                if (newDataSource == null) {
-                    log.log("Embedded field property data source cleared");
-                } else {
-                    log.log("Embedded field property data source set");
-                }
-            }
-        };
-        it.getItemProperty(COL_A).setValue(fieldA);
-        it.getItemProperty(COL_B).setValue("Some text here");
-
-        final Table table = new Table("", container);
-        table.setColumnCollapsingAllowed(true);
-        table.setTableFieldFactory(new DefaultFieldFactory() {
-            @Override
-            public Field createField(Container container, Object itemId,
-                    Object propertyId, Component uiContext) {
-                if (COL_B.equals(propertyId)) {
-                    Field field = new TextField() {
-                        @Override
-                        public void setPropertyDataSource(Property newDataSource) {
-                            super.setPropertyDataSource(newDataSource);
-                            if (newDataSource == null) {
-                                log.log("Edit field property data source cleared");
-                            } else {
-                                log.log("Edit field property data source set");
-                            }
-                        }
-                    };
-                    field.setCaption(createCaptionByPropertyId(propertyId));
-                    return field;
-                } else {
-                    return super.createField(container, itemId, propertyId,
-                            uiContext);
-                }
-            }
-        });
-
-        addComponent(log);
-        addComponent(table);
-
-        addComponent(new Button("Switch column collapse", new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                table.setColumnCollapsed(COL_A, !table.isColumnCollapsed(COL_A));
-            }
-        }));
-
-        addComponent(new Button("Switch editable", new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                table.setEditable(!table.isEditable());
-            }
-        }));
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Table.uncollapseColumn (triggered by collapsing column or disabling editable mode) should only unregister property data sources that have been added by the table.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return Integer.valueOf("7541");
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableVisibleColumnsUpdate.html b/tests/src/com/vaadin/tests/components/table/TableVisibleColumnsUpdate.html
deleted file mode 100644
index 05325cb9e6..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableVisibleColumnsUpdate.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TableVisibleColumnsUpdate</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TableVisibleColumnsUpdate</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableVisibleColumnsUpdate</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>1</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableVisibleColumnsUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>2</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableVisibleColumnsUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>1</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableVisibleColumnsUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>2</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableVisibleColumnsUpdate.java b/tests/src/com/vaadin/tests/components/table/TableVisibleColumnsUpdate.java
deleted file mode 100644
index ad8eacb4b7..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableVisibleColumnsUpdate.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Table;
-
-public class TableVisibleColumnsUpdate extends TestBase {
-
-    private String[] cols1 = new String[] { "p1", "p2", "p3" };
-    private String[] cols2 = new String[] { "p1", "p4", "p3" };
-    private Table table;
-
-    @Override
-    protected String getDescription() {
-        return "Columns should change between p1,p2,p3 and p1,p4,p3";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3139;
-    }
-
-    @Override
-    protected void setup() {
-        table = new Table();
-        table.setWidth("400px");
-        table.setHeight("100px");
-        table.setPageLength(100);
-        table.addContainerProperty("p1", String.class, null);
-        table.addContainerProperty("p2", String.class, null);
-        table.addContainerProperty("p3", String.class, null);
-        table.addContainerProperty("p4", String.class, null);
-
-        for (int i = 0; i < 10; i++) {
-            table.addItem(new Object[] { "a" + i, "b" + i, "c" + i, "X" + i },
-                    "" + i);
-        }
-
-        addComponent(table);
-
-        table.setVisibleColumns(cols1);
-        // table.setColumnHeaders(headers1);
-
-        Button updateButton = new Button("Change columns", new ClickListener() {
-            private boolean one = true;
-
-            public void buttonClick(ClickEvent event) {
-                table.setVisibleColumns((one ? cols2 : cols1));
-                one = !one;
-            }
-        });
-        addComponent(updateButton);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TableWithManyColumns.html b/tests/src/com/vaadin/tests/components/table/TableWithManyColumns.html
deleted file mode 100644
index 5fea0c99df..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableWithManyColumns.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TableWithManyColumns?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>scrollLeft</td>
-	<td>vaadin=runcomvaadintestscomponentstableTableWithManyColumns::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
-	<td>10000</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>scrolled-right</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableWithManyColumns.java b/tests/src/com/vaadin/tests/components/table/TableWithManyColumns.java
deleted file mode 100644
index 543c1ebae2..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TableWithManyColumns.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-
-public class TableWithManyColumns extends TestBase {
-
-    private static final int ROWS = 20;
-    private static final int COLS = 100;
-
-    @Override
-    protected void setup() {
-        Table t = new Table();
-
-        for (int i = 0; i < COLS; i++) {
-            t.addContainerProperty("COLUMN_" + i, String.class, "");
-        }
-        for (int row = 0; row < ROWS; row++) {
-            Item i = t.addItem(String.valueOf(row));
-            for (int col = 0; col < COLS; col++) {
-                Property p = i.getItemProperty("COLUMN_" + col);
-                p.setValue("item " + row + "/" + col);
-            }
-        }
-        t.setFooterVisible(true);
-        t.setSizeFull();
-        addComponent(t);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The footer, header and content cells should be as wide, even when the Table contains many columns";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5185;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/Tables.java b/tests/src/com/vaadin/tests/components/table/Tables.java
deleted file mode 100644
index 3a34fb47b2..0000000000
--- a/tests/src/com/vaadin/tests/components/table/Tables.java
+++ /dev/null
@@ -1,838 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.List;
-
-import com.vaadin.event.Action;
-import com.vaadin.event.Action.Handler;
-import com.vaadin.event.ItemClickEvent.ItemClickListener;
-import com.vaadin.terminal.Resource;
-import com.vaadin.tests.components.select.AbstractSelectTestCase;
-import com.vaadin.ui.AbstractSelect.MultiSelectMode;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.CellStyleGenerator;
-import com.vaadin.ui.Table.ColumnGenerator;
-import com.vaadin.ui.Table.ColumnResizeEvent;
-import com.vaadin.ui.Table.ColumnResizeListener;
-import com.vaadin.ui.Table.FooterClickEvent;
-import com.vaadin.ui.Table.FooterClickListener;
-import com.vaadin.ui.Table.GeneratedRow;
-import com.vaadin.ui.Table.HeaderClickEvent;
-import com.vaadin.ui.Table.HeaderClickListener;
-import com.vaadin.ui.Table.RowGenerator;
-
-public class Tables<T extends Table> extends AbstractSelectTestCase<T>
-        implements ItemClickListener, HeaderClickListener, FooterClickListener,
-        ColumnResizeListener {
-
-    protected static final String CATEGORY_ROWS = "Rows";
-    private static final String CATEGORY_HEADER = "Header";
-    private static final String CATEGORY_FOOTER = "Footer";
-    private static final String CATEGORY_COLUMNS = "Columns";
-
-    @Override
-    protected Class<T> getTestClass() {
-        return (Class) Table.class;
-    }
-
-    /* COMMANDS */
-    private Command<T, String> columnAlignmentCommand = new Command<T, String>() {
-
-        public void execute(T c, String alignment, Object propertyId) {
-            c.setColumnAlignment(propertyId, alignment);
-        }
-
-    };
-
-    private Command<T, Boolean> columnVisibleCommand = new Command<T, Boolean>() {
-        public void execute(Table c, Boolean visible, Object propertyId) {
-            List<Object> visibleColumns = new ArrayList<Object>(Arrays.asList(c
-                    .getVisibleColumns()));
-            if (visible) {
-                // Table should really check this... Completely fails without
-                // the check (#
-                if (!visibleColumns.contains(propertyId)) {
-                    visibleColumns.add(propertyId);
-                }
-            } else {
-                visibleColumns.remove(propertyId);
-            }
-            c.setVisibleColumns(visibleColumns.toArray());
-        }
-    };
-
-    private Command<T, Boolean> columnCollapsed = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean collapsed, Object propertyId) {
-            c.setColumnCollapsed(propertyId, collapsed);
-
-        }
-    };
-
-    protected Command<T, Boolean> columnResizeListenerCommand = new Command<T, Boolean>() {
-
-        public void execute(Table c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((ColumnResizeListener) Tables.this);
-            } else {
-                c.removeListener((ColumnResizeListener) Tables.this);
-            }
-        }
-    };
-
-    protected Command<T, Boolean> headerClickListenerCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((HeaderClickListener) Tables.this);
-            } else {
-                c.removeListener((HeaderClickListener) Tables.this);
-            }
-        }
-    };
-
-    protected Command<T, Boolean> footerClickListenerCommand = new Command<T, Boolean>() {
-
-        public void execute(Table c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((FooterClickListener) Tables.this);
-            } else {
-                c.removeListener((FooterClickListener) Tables.this);
-            }
-        }
-    };
-
-    protected Command<T, Integer> rowHeaderModeCommand = new Command<T, Integer>() {
-
-        public void execute(Table c, Integer value, Object data) {
-            if (value == Table.ROW_HEADER_MODE_PROPERTY) {
-                c.setItemCaptionPropertyId("Property 3");
-            }
-            c.setRowHeaderMode(value);
-        }
-    };
-
-    protected Command<T, String> footerTextCommand = new Command<T, String>() {
-
-        public void execute(Table c, String value, Object data) {
-            for (Object propertyId : c.getContainerPropertyIds()) {
-                if (value != null) {
-                    c.setColumnFooter(propertyId,
-                            value.replace("{id}", propertyId.toString()));
-                } else {
-                    c.setColumnFooter(propertyId, null);
-                }
-            }
-        }
-    };
-
-    protected Command<T, Object> alignColumnLeftCommand = new Command<T, Object>() {
-
-        public void execute(T c, Object propertyId, Object data) {
-            c.setColumnAlignment(propertyId, (String) data);
-        }
-    };
-
-    private Command<T, ContextMenu> contextMenuCommand = new Command<T, ContextMenu>() {
-
-        public void execute(T c, final ContextMenu value, Object data) {
-            c.removeAllActionHandlers();
-            if (value != null) {
-                c.addActionHandler(new Handler() {
-
-                    public void handleAction(Action action, Object sender,
-                            Object target) {
-                        log("Action " + action.getCaption() + " performed on "
-                                + target);
-                    }
-
-                    public Action[] getActions(Object target, Object sender) {
-                        return value.getActions(target, sender);
-                    }
-                });
-            }
-        }
-    };
-    private Command<T, Integer> columnWidthCommand = new Command<T, Integer>() {
-
-        public void execute(T c, Integer width, Object propertyId) {
-            c.setColumnWidth(propertyId, width);
-
-        }
-    };
-
-    private Command<T, Resource> columnIconCommand = new Command<T, Resource>() {
-
-        public void execute(T c, Resource icon, Object propertyId) {
-            c.setColumnIcon(propertyId, icon);
-
-        }
-    };
-    private Command<T, Integer> columnHeaderModeCommand = new Command<T, Integer>() {
-
-        public void execute(T c, Integer columnHeaderMode, Object data) {
-            c.setColumnHeaderMode(columnHeaderMode);
-
-        }
-    };
-    private Command<T, String> columnHeaderCommand = new Command<T, String>() {
-
-        public void execute(T c, String header, Object propertyId) {
-            c.setColumnHeader(propertyId, header);
-
-        }
-    };
-    private Command<T, Float> columnExpandRatioCommand = new Command<T, Float>() {
-
-        public void execute(T c, Float expandRatio, Object propertyId) {
-            c.setColumnExpandRatio(propertyId, expandRatio);
-        }
-    };
-
-    private class GeneratedColumn {
-        private Class<?> type;
-        private String width;
-        private boolean html;
-
-        public GeneratedColumn(Class<?> type, String width, boolean html) {
-            super();
-            this.type = type;
-            this.width = width;
-            this.html = html;
-        }
-    }
-
-    String generatedColumnId = "Generated ";
-    int generatedColumnNextNr = 1;
-
-    private Command<T, GeneratedColumn> addGeneratedColumnCommand = new Command<T, GeneratedColumn>() {
-
-        public void execute(T c, final GeneratedColumn col, Object data) {
-            while (c.getColumnGenerator(generatedColumnId
-                    + generatedColumnNextNr) != null) {
-                generatedColumnNextNr++;
-            }
-
-            c.addGeneratedColumn(generatedColumnId + generatedColumnNextNr,
-                    new ColumnGenerator() {
-
-                        public Object generateCell(Table source, Object itemId,
-                                Object columnId) {
-                            String value = "";
-                            if (col.html) {
-                                value = "<i>" + itemId + "</i>" + "/" + "<b>"
-                                        + columnId + "</b>";
-                            } else {
-                                value = itemId + "/" + columnId;
-                            }
-                            if (col.type == Button.class) {
-                                Button b = new Button();
-                                b.setCaption(value);
-                                b.setWidth(col.width);
-                                return b;
-                            } else if (col.type == Label.class) {
-                                Label l = new Label();
-                                l.setWidth(col.width);
-                                if (col.html) {
-                                    l.setValue(value);
-                                    l.setContentMode(Label.CONTENT_XHTML);
-                                } else {
-                                    l.setValue(value);
-                                }
-                                return l;
-                            } else if (col.type == String.class) {
-                                return value;
-                            } else if (col.type == Object.class) {
-                                return new Object();
-                            }
-
-                            return null;
-                        }
-                    });
-            generatedColumnNextNr++;
-            createColumnOptions(false);
-
-        }
-    };
-    private Command<T, Object> removeGeneratedColumnsCommand = new Command<T, Object>() {
-
-        public void execute(T c, Object value, Object data) {
-            for (int i = 0; i < generatedColumnNextNr; i++) {
-                String columnId = generatedColumnId + i;
-                if (c.getColumnGenerator(columnId) != null) {
-                    c.removeGeneratedColumn(columnId);
-                }
-
-            }
-            createColumnOptions(false);
-
-        }
-    };
-
-    private class CellStyleInfo {
-        private final String styleName;
-        private final Object itemId;
-        private final Object propertyId;
-
-        public CellStyleInfo(String styleName, Object itemId, Object propertyId) {
-            this.styleName = styleName;
-            this.itemId = itemId;
-            this.propertyId = propertyId;
-        }
-
-        public boolean appliesTo(Object itemId, Object propertyId) {
-            return (this.itemId != null && this.itemId.equals(itemId))
-                    && (this.propertyId == propertyId || (this.propertyId != null && this.propertyId
-                            .equals(propertyId)));
-        }
-    }
-
-    private Command<T, CellStyleInfo> cellStyleCommand = new Command<T, CellStyleInfo>() {
-
-        public void execute(T c, final CellStyleInfo cellStyleInfo, Object data) {
-            if (cellStyleInfo == null) {
-                c.setCellStyleGenerator(null);
-            } else {
-                c.setCellStyleGenerator(new CellStyleGenerator() {
-
-                    public String getStyle(Object itemId, Object propertyId) {
-                        if (cellStyleInfo.appliesTo(itemId, propertyId)) {
-                            return cellStyleInfo.styleName;
-                        }
-                        return null;
-                    }
-                });
-            }
-        }
-    };
-
-    private class GeneratedRowInfo {
-
-        private final int nth;
-        private final String[] text;
-        private final boolean isHtml;
-
-        public GeneratedRowInfo(int nth, boolean isHtml, String... text) {
-            this.nth = nth;
-            this.isHtml = isHtml;
-            this.text = text;
-        }
-
-        public boolean appliesTo(Object itemId) {
-            int ix = Integer.valueOf(itemId.toString().substring(5));
-            return ix % nth == 0;
-        }
-
-        @Override
-        public String toString() {
-            return String.format("%d, %s, %s", nth, isHtml ? "true" : "false",
-                    Arrays.toString(text));
-        }
-    }
-
-    private Command<T, GeneratedRowInfo> rowGeneratorCommand = new Command<T, GeneratedRowInfo>() {
-
-        public void execute(T c, final GeneratedRowInfo generatedRowInfo,
-                Object data) {
-            if (generatedRowInfo == null) {
-                c.setRowGenerator(null);
-            } else {
-                c.setRowGenerator(new RowGenerator() {
-
-                    public GeneratedRow generateRow(Table table, Object itemId) {
-                        if (generatedRowInfo.appliesTo(itemId)) {
-                            GeneratedRow generatedRow = new GeneratedRow(
-                                    generatedRowInfo.text);
-                            generatedRow
-                                    .setHtmlContentAllowed(generatedRowInfo.isHtml);
-                            return generatedRow;
-                        }
-                        return null;
-                    }
-                });
-            }
-        }
-    };
-
-    private Command<T, Boolean> setSortEnabledCommand = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            c.setSortDisabled(!value);
-
-        }
-    };
-
-    /* COMMANDS END */
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-
-        createPageLengthSelect(CATEGORY_SIZE);
-
-        createSelectionModeSelect(CATEGORY_SELECTION);
-        createValueSelection(CATEGORY_SELECTION);
-
-        createItemClickListener(CATEGORY_LISTENERS);
-        createColumnResizeListenerCheckbox(CATEGORY_LISTENERS);
-        createHeaderClickListenerCheckbox(CATEGORY_LISTENERS);
-        createFooterClickListenerCheckbox(CATEGORY_LISTENERS);
-
-        createRowHeaderModeSelect(CATEGORY_DATA_SOURCE);
-
-        createHeaderVisibilitySelect(CATEGORY_HEADER);
-        createHeaderTextCheckbox(CATEGORY_HEADER);
-
-        createFooterVisibilityCheckbox(CATEGORY_FOOTER);
-        createFooterTextSelect(CATEGORY_FOOTER);
-
-        createColumnReorderingAllowedCheckbox(CATEGORY_FEATURES);
-        createColumnCollapsingAllowedCheckbox(CATEGORY_FEATURES);
-
-        createContextMenuAction(CATEGORY_FEATURES);
-
-        createColumnHeaderMode(CATEGORY_FEATURES);
-        createAddGeneratedColumnAction(CATEGORY_FEATURES);
-        createCellStyleAction(CATEGORY_FEATURES);
-        createGeneratedRowAction(CATEGORY_FEATURES);
-
-        createBooleanAction("Sort enabled", CATEGORY_FEATURES, true,
-                setSortEnabledCommand);
-        createColumnOptions(true);
-    }
-
-    private void createAddGeneratedColumnAction(String categoryFeatures) {
-        String category = "Generated columns";
-        createCategory(category, categoryFeatures);
-        createClickAction("Add Button", category, addGeneratedColumnCommand,
-                new GeneratedColumn(Button.class, null, false));
-        createClickAction("Add 200px wide Button", category,
-                addGeneratedColumnCommand, new GeneratedColumn(Button.class,
-                        "200px", false));
-        createClickAction("Add 100% wide Button", category,
-                addGeneratedColumnCommand, new GeneratedColumn(Button.class,
-                        "100%", false));
-        createClickAction("Add Label", category, addGeneratedColumnCommand,
-                new GeneratedColumn(Label.class, null, false));
-        createClickAction("Add 100px Label", category,
-                addGeneratedColumnCommand, new GeneratedColumn(Label.class,
-                        "100px", false));
-        createClickAction("Add 100% wide Label", category,
-                addGeneratedColumnCommand, new GeneratedColumn(Label.class,
-                        "100%", false));
-
-        createClickAction("Remove generated columns", category,
-                removeGeneratedColumnsCommand, null);
-        createClickAction("Add string as generated column", category,
-                addGeneratedColumnCommand, new GeneratedColumn(String.class,
-                        "", false));
-        createClickAction("Add HTML string as generated column", category,
-                addGeneratedColumnCommand, new GeneratedColumn(String.class,
-                        "", true));
-        createClickAction("Add 100px HTML Label", category,
-                addGeneratedColumnCommand, new GeneratedColumn(Label.class,
-                        "100px", true));
-        createClickAction("Add Object as generated column", category,
-                addGeneratedColumnCommand, new GeneratedColumn(Object.class,
-                        "", false));
-    }
-
-    private void createCellStyleAction(String categoryFeatures) {
-        LinkedHashMap<String, CellStyleInfo> options = new LinkedHashMap<String, CellStyleInfo>();
-        options.put("None", null);
-        options.put("Red row", new CellStyleInfo(
-                "tables-test-cell-style-red-row", "Item 2", null));
-        options.put("Red cell", new CellStyleInfo(
-                "tables-test-cell-style-red-row", "Item 2", "Property 2"));
-        createSelectAction("Cell style generator", categoryFeatures, options,
-                "None", cellStyleCommand, true);
-    }
-
-    private void createGeneratedRowAction(String categoryFeatures) {
-        LinkedHashMap<String, GeneratedRowInfo> options = new LinkedHashMap<String, GeneratedRowInfo>();
-        options.put("None", null);
-        options.put("Every fifth row, spanned", new GeneratedRowInfo(5, false,
-                "foobarbaz this is a long one that should span."));
-        int props = getComponent().getContainerPropertyIds().size();
-        String[] text = new String[props];
-        for (int ix = 0; ix < props; ix++) {
-            text[ix] = "foo" + ix;
-        }
-        options.put("Every tenth row, no spanning", new GeneratedRowInfo(10,
-                false, text));
-        options.put(
-                "Every eight row, spanned, html formatted",
-                new GeneratedRowInfo(8, true,
-                        "<b>foo</b> <i>bar</i> <span style='color:red;text-size:0.5em;'>baz</span>"));
-        options.put("Every row, spanned", new GeneratedRowInfo(1, false,
-                "spanned"));
-        createSelectAction("Row generator", categoryFeatures, options, "None",
-                rowGeneratorCommand, true);
-    }
-
-    private void createColumnHeaderMode(String category) {
-        LinkedHashMap<String, Integer> columnHeaderModeOptions = new LinkedHashMap<String, Integer>();
-        columnHeaderModeOptions.put("Hidden", Table.COLUMN_HEADER_MODE_HIDDEN);
-        columnHeaderModeOptions.put("Id", Table.COLUMN_HEADER_MODE_ID);
-        columnHeaderModeOptions.put("Explicit",
-                Table.COLUMN_HEADER_MODE_EXPLICIT);
-        columnHeaderModeOptions.put("Explicit defaults id",
-                Table.COLUMN_HEADER_MODE_EXPLICIT_DEFAULTS_ID);
-
-        createSelectAction("Column header mode", category,
-                columnHeaderModeOptions, "Explicit defaults id",
-                columnHeaderModeCommand);
-    }
-
-    private void createValueSelection(String categorySelection) {
-        LinkedHashMap<String, Object> options = new LinkedHashMap<String, Object>();
-        options.put("null", null);
-        for (int i = 1; i <= 10; i++) {
-            options.put("Item " + i, "Item " + i);
-        }
-        createSelectAction("Value", categorySelection, options, null,
-                setValueCommand);
-    }
-
-    private void createContextMenuAction(String category) {
-        LinkedHashMap<String, ContextMenu> options = new LinkedHashMap<String, ContextMenu>();
-        options.put("None", null);
-        options.put("Item without icon", new ContextMenu("No icon", null));
-        ContextMenu cm = new ContextMenu();
-        cm.addItem("Caption only", null);
-        cm.addItem("Has icon", ICON_16_USER_PNG_UNCACHEABLE);
-        options.put("With and without icon", cm);
-        options.put("Only one large icon", new ContextMenu("Icon",
-                ICON_64_EMAIL_REPLY_PNG_UNCACHEABLE));
-        options.put("Empty", new ContextMenu() {
-            @Override
-            public Action[] getActions(Object target, Object sender) {
-                return null;
-            }
-        });
-        options.put("Edit/New", new ContextMenu() {
-            @Override
-            public Action[] getActions(Object itemId, Object component) {
-                if (itemId == null) {
-                    return new Action[] { new Action("New..."),
-                            new Action("Common action") };
-                } else {
-                    return new Action[] { new Action("Edit " + itemId),
-                            new Action("Common action") };
-                }
-            }
-        });
-
-        createSelectAction("Context menu", category, options, "None",
-                contextMenuCommand, true);
-    }
-
-    private void createColumnReorderingAllowedCheckbox(String category) {
-        createBooleanAction("Column reordering allowed", category, true,
-                new Command<T, Boolean>() {
-                    public void execute(Table c, Boolean value, Object data) {
-                        c.setColumnReorderingAllowed(value);
-                    }
-                });
-    }
-
-    private void createColumnCollapsingAllowedCheckbox(String category) {
-        createBooleanAction("Column collapsing allowed", category, true,
-                new Command<T, Boolean>() {
-                    public void execute(T c, Boolean value, Object data) {
-                        c.setColumnCollapsingAllowed(value);
-                    }
-                });
-    }
-
-    private void createColumnOptions(boolean init) {
-        if (!init && !hasCategory(CATEGORY_COLUMNS)) {
-            return;
-        }
-
-        long start = System.currentTimeMillis();
-        if (!init) {
-            removeCategory(CATEGORY_COLUMNS);
-        }
-
-        for (Object id : getComponent().getContainerPropertyIds()) {
-            String name = id.toString();
-            createCategory(name, CATEGORY_COLUMNS);
-            createColumnOption(name, id);
-        }
-        for (int i = 0; i < generatedColumnNextNr; i++) {
-            String id = generatedColumnId + i;
-            String name = id;
-            if (getTestComponents().get(0).getColumnGenerator(id) != null) {
-                createCategory(name, CATEGORY_COLUMNS);
-                createColumnOption(name, id);
-            }
-        }
-
-        long end = System.currentTimeMillis();
-        System.err.println("Create options took " + (end - start) + "ms");
-    }
-
-    private class Timer {
-        private long start, last;
-
-        private Timer() {
-            start = System.currentTimeMillis();
-            last = System.currentTimeMillis();
-        }
-
-        public void log(String msg) {
-            long now = System.currentTimeMillis();
-            System.err.println("[This: " + (now - last) + "ms, total: "
-                    + (now - start) + "ms]: " + msg);
-            last = now;
-        }
-    }
-
-    private void createColumnOption(String category, Object propertyId) {
-        Timer t = new Timer();
-        createBooleanAction("Visible", category, true, columnVisibleCommand,
-                propertyId);
-        t.log("Visible");
-        createBooleanAction("Collapsed", category, false, columnCollapsed,
-                propertyId);
-        t.log("Collapsed");
-        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
-        options.put("Left", Table.ALIGN_LEFT);
-        options.put("Center", Table.ALIGN_CENTER);
-        options.put("Right", Table.ALIGN_RIGHT);
-
-        createSelectAction("Alignment", category, options, "Left",
-                columnAlignmentCommand, propertyId);
-        t.log("Alignment");
-        LinkedHashMap<String, Integer> widthOptions = new LinkedHashMap<String, Integer>();
-        widthOptions.put("- remove -", -1);
-        for (int i : new int[] { 0, 1, 10, 100, 200, 400 }) {
-            widthOptions.put(i + "px", i);
-        }
-        createSelectAction("Width", category, widthOptions, "- remove -",
-                columnWidthCommand, propertyId);
-        t.log("Width");
-
-        LinkedHashMap<String, Resource> iconOptions = new LinkedHashMap<String, Resource>();
-        iconOptions.put("- none -", null);
-        iconOptions.put("ok 16x16", ICON_16_USER_PNG_CACHEABLE);
-        iconOptions.put("help 16x16", ICON_16_HELP_PNG_CACHEABLE);
-        iconOptions.put("folder 16x16", ICON_16_FOLDER_PNG_CACHEABLE);
-        iconOptions.put("attention 32x32", ICON_32_ATTENTION_PNG_CACHEABLE);
-        createSelectAction("Icon", category, iconOptions, "- none -",
-                columnIconCommand, propertyId);
-
-        t.log("Icon");
-        LinkedHashMap<String, String> columnHeaderOptions = new LinkedHashMap<String, String>();
-        columnHeaderOptions.put("- none -", null);
-        columnHeaderOptions.put("A", "A");
-        columnHeaderOptions.put("A nice column", "A nice column");
-
-        createSelectAction("Column header", category, columnHeaderOptions,
-                "- none -", columnHeaderCommand, propertyId);
-        t.log("Header");
-        LinkedHashMap<String, Float> expandOptions = new LinkedHashMap<String, Float>();
-        expandOptions.put("- remove -", -1f);
-        for (float i : new float[] { 0, 1, 2, 3, 4, 5 }) {
-            expandOptions.put(i + "", i);
-        }
-        createSelectAction("Expand ratio", category, expandOptions,
-                "- remove -", columnExpandRatioCommand, propertyId);
-        t.log("Expand");
-        // Footer text (move)
-        // Header text (move)
-
-    }
-
-    private void createRowHeaderModeSelect(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("Explicit", Table.ROW_HEADER_MODE_EXPLICIT);
-        options.put("Explicit defaults id",
-                Table.ROW_HEADER_MODE_EXPLICIT_DEFAULTS_ID);
-        options.put("Hidden", Table.ROW_HEADER_MODE_HIDDEN);
-        options.put("Icon only", Table.ROW_HEADER_MODE_ICON_ONLY);
-        options.put("Id", Table.ROW_HEADER_MODE_ID);
-        options.put("Index", Table.ROW_HEADER_MODE_INDEX);
-        options.put("Item", Table.ROW_HEADER_MODE_ITEM);
-        options.put("'Property 3' property", Table.ROW_HEADER_MODE_PROPERTY);
-
-        createSelectAction("Row header mode", category, options, "Hidden",
-                rowHeaderModeCommand);
-    }
-
-    private void createFooterTextSelect(String category) {
-        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
-        options.put("None", null);
-        options.put("Footer X", "Footer {id}");
-        options.put("X", "{id}");
-
-        createSelectAction("Texts in footer", category, options, "None",
-                footerTextCommand);
-    }
-
-    private void createHeaderTextCheckbox(String category) {
-        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
-        options.put("None", null);
-        options.put("Col: {id}", "Col: {id}");
-        options.put("Header {id} - every second", "Header {id}");
-
-        createSelectAction("Texts in header", category, options, "None",
-                new Command<T, String>() {
-                    public void execute(T c, String value, Object data) {
-                        int nr = 0;
-                        for (Object propertyId : c.getContainerPropertyIds()) {
-                            nr++;
-                            if (value != null && value.equals("Header {id}")
-                                    && nr % 2 == 0) {
-                                c.setColumnHeader(propertyId, null);
-                            } else if (value != null) {
-                                c.setColumnHeader(
-                                        propertyId,
-                                        value.replace("{id}",
-                                                propertyId.toString()));
-                            } else {
-                                c.setColumnHeader(propertyId, null);
-                            }
-                        }
-
-                    }
-                });
-    }
-
-    private void createHeaderClickListenerCheckbox(String category) {
-
-        createBooleanAction("Header click listener", category, false,
-                headerClickListenerCommand);
-    }
-
-    private void createFooterClickListenerCheckbox(String category) {
-
-        createBooleanAction("Footer click listener", category, false,
-                footerClickListenerCommand);
-    }
-
-    private void createColumnResizeListenerCheckbox(String category) {
-
-        createBooleanAction("Column resize listener", category, false,
-                columnResizeListenerCommand);
-    }
-
-    // TODO:
-    // setCurrentPageFirstItemIndex()
-    // Editable
-    // Cache rate
-    // CurrentPageFirstItemId
-
-    protected void createFooterVisibilityCheckbox(String category) {
-        createBooleanAction("Footer visible", category, true,
-                new Command<T, Boolean>() {
-
-                    public void execute(T c, Boolean value, Object data) {
-                        c.setFooterVisible(value);
-                    }
-                });
-    }
-
-    protected void createHeaderVisibilitySelect(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("Explicit", Table.COLUMN_HEADER_MODE_EXPLICIT);
-        options.put("Explicit defaults id",
-                Table.COLUMN_HEADER_MODE_EXPLICIT_DEFAULTS_ID);
-        options.put("Id", Table.COLUMN_HEADER_MODE_ID);
-        options.put("Hidden", Table.COLUMN_HEADER_MODE_HIDDEN);
-
-        createSelectAction("Header mode", category, options,
-                "Explicit defaults id", new Command<T, Integer>() {
-
-                    public void execute(T c, Integer value, Object data) {
-                        c.setColumnHeaderMode(value);
-
-                    }
-                });
-    }
-
-    protected void createPageLengthSelect(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("0", 0);
-        options.put("5", 5);
-        options.put("10", 10);
-        options.put("20", 20);
-        options.put("50", 50);
-
-        createSelectAction("PageLength", category, options, "10",
-                new Command<T, Integer>() {
-
-                    public void execute(Table t, Integer value, Object data) {
-                        t.setPageLength(value);
-                    }
-                });
-    }
-
-    private enum SelectMode {
-        NONE, SINGLE, MULTI_SIMPLE, MULTI;
-    }
-
-    protected void createSelectionModeSelect(String category) {
-        LinkedHashMap<String, SelectMode> options = new LinkedHashMap<String, SelectMode>();
-        options.put("None", SelectMode.NONE);
-        options.put("Single", SelectMode.SINGLE);
-        options.put("Multi - simple", SelectMode.MULTI_SIMPLE);
-        options.put("Multi - ctrl/shift", SelectMode.MULTI);
-
-        createSelectAction("Selection Mode", category, options,
-                "Multi - ctrl/shift", new Command<T, SelectMode>() {
-
-                    public void execute(Table t, SelectMode value, Object data) {
-                        switch (value) {
-                        case NONE:
-                            t.setSelectable(false);
-                            break;
-                        case SINGLE:
-                            t.setMultiSelect(false);
-                            t.setSelectable(true);
-                            break;
-                        case MULTI_SIMPLE:
-                            t.setSelectable(true);
-                            t.setMultiSelect(true);
-                            t.setMultiSelectMode(MultiSelectMode.SIMPLE);
-                            break;
-                        case MULTI:
-                            t.setSelectable(true);
-                            t.setMultiSelect(true);
-                            t.setMultiSelectMode(MultiSelectMode.DEFAULT);
-                            break;
-                        }
-                    }
-                });
-    }
-
-    public void columnResize(ColumnResizeEvent event) {
-        log("ColumnResize on " + event.getPropertyId() + " from "
-                + event.getPreviousWidth() + " to " + event.getCurrentWidth());
-    }
-
-    public void footerClick(FooterClickEvent event) {
-        log("FooterClick on " + event.getPropertyId() + " using "
-                + event.getButtonName());
-    }
-
-    public void headerClick(HeaderClickEvent event) {
-        log("HeaderClick on " + event.getPropertyId() + " using "
-                + event.getButtonName());
-    }
-
-    @Override
-    protected void updateContainer() {
-        super.updateContainer();
-
-        // Recreate for the new properties
-        createColumnOptions(false);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TestCurrentPageFirstItem.java b/tests/src/com/vaadin/tests/components/table/TestCurrentPageFirstItem.java
deleted file mode 100644
index 9c3b2de3e0..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TestCurrentPageFirstItem.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.Application;
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class TestCurrentPageFirstItem extends Application implements
-        ClickListener {
-
-    private Button buttonIndex;
-    private Button buttonItem;
-    private Table table;
-    private int counter = 0;
-    IndexedContainer container = new IndexedContainer();
-
-    @Override
-    public void init() {
-        try {
-            Window main = new Window("Table header Test");
-            setMainWindow(main);
-            main.setSizeFull();
-            // setTheme("testtheme");
-            VerticalLayout baseLayout = new VerticalLayout();
-            main.setContent(baseLayout);
-
-            table = new Table();
-            container.addContainerProperty("row", String.class, "");
-            table.setContainerDataSource(container);
-            table.setWidth("100%");
-            table.setPageLength(3);
-            buttonIndex = new Button("Add row and select last index", this);
-            buttonItem = new Button("Add row and select last item", this);
-
-            baseLayout.addComponent(table);
-            baseLayout.addComponent(buttonIndex);
-            baseLayout.addComponent(buttonItem);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    public void buttonClick(ClickEvent event) {
-        Item item = container.addItem(++counter);
-        item.getItemProperty("row").setValue(counter + "");
-        table.select(counter);
-        if (event.getButton() == buttonIndex) {
-            table.setCurrentPageFirstItemIndex(((Container.Indexed) table
-                    .getContainerDataSource()).indexOfId(counter));
-        } else {
-            table.setCurrentPageFirstItemId(counter);
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/TextFieldRelativeWidth.html b/tests/src/com/vaadin/tests/components/table/TextFieldRelativeWidth.html
deleted file mode 100644
index 99f8f5bf9b..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TextFieldRelativeWidth.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TextFieldRelativeWidth</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TextFieldRelativeWidth</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TextFieldRelativeWidth</td>
-	<td></td>
-</tr>
-<!--  Workaround for Opera 10.50 CSS loading problem -->
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.TextFieldRelativeWidth</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTextFieldRelativeWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableTextFieldRelativeWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[4]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TextFieldRelativeWidth.java b/tests/src/com/vaadin/tests/components/table/TextFieldRelativeWidth.java
deleted file mode 100644
index 13ca9f8cf3..0000000000
--- a/tests/src/com/vaadin/tests/components/table/TextFieldRelativeWidth.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-
-public class TextFieldRelativeWidth extends TestBase {
-
-    @Override
-    public void setup() {
-        TextField tf = new TextField("test", "testing");
-        tf.setWidth("100%");
-
-        EditTable t = new EditTable();
-        t.setButtonCaption("Click to add new Key Research Question");
-        t.setInputPrompt("Key Reseach question");
-        t.setInputPromptChild("Question details");
-        t.addNewRow();
-        addComponent(t);
-    }
-
-    public class EditTable extends Table implements Button.ClickListener {
-
-        private Button addButton = new Button("Add new row",
-                (Button.ClickListener) this);
-
-        private String inputPrompt;
-
-        private String inputPromptChild;
-
-        private int nextItemIndex = 1;
-
-        private static final long serialVersionUID = 3326806911297977454L;
-
-        public EditTable() {
-            setColumnHeaderMode(Table.COLUMN_HEADER_MODE_HIDDEN);
-            inputPrompt = "";
-            setPageLength(100);
-            setHeight("100%");
-            setSizeFull();
-            addContainerProperty("id", Integer.class, null);
-            addContainerProperty("text", Component.class, null);
-            addContainerProperty("button", Button.class, null);
-            setColumnExpandRatio("text", 1);
-            Item i = getItem(addItem());
-            i.getItemProperty("text").setValue(addButton);
-            setImmediate(true);
-            setSelectable(true);
-            addListener(new Property.ValueChangeListener() {
-                private static final long serialVersionUID = 448896474865195605L;
-
-                public void valueChange(
-                        com.vaadin.data.Property.ValueChangeEvent event) {
-                    // IndexedContainer idc = (IndexedContainer)
-                    // getContainerDataSource();
-
-                }
-
-            });
-        }
-
-        public void addNewRow() {
-            IndexedContainer idc = (IndexedContainer) getContainerDataSource();
-            int size = idc.size();
-            Object itemId = idc.addItemAt(size - 1);
-            Item newItem = idc.getItem(itemId);
-            TextField tf = new TextField();
-            if (inputPrompt != null && inputPrompt.length() > 0) {
-                tf.setInputPrompt(inputPrompt);
-            }
-            tf.setWidth("100%");
-
-            newItem.getItemProperty("id").setValue(nextItemIndex);
-            nextItemIndex++;
-            newItem.getItemProperty("text").setValue(tf);
-            setValue(itemId);
-            itemId = idc.addItemAt(size);
-            newItem = idc.getItem(itemId);
-
-            tf = new TextField();
-            if (inputPromptChild != null && inputPromptChild.length() > 0) {
-                tf.setInputPrompt(inputPromptChild);
-            }
-            // tf.setRows(1);
-            // tf.setHeight("45px");
-            tf.setWidth("100%");
-            tf.addStyleName("childtf");
-            newItem.getItemProperty("text").setValue(tf);
-
-        }
-
-        public void setButtonCaption(String caption) {
-            addButton.setCaption(caption);
-        }
-
-        public void buttonClick(ClickEvent event) {
-            Button b = event.getButton();
-            if (b == addButton) {
-                select(getNullSelectionItemId());
-                addNewRow();
-            }
-        }
-
-        public void setInputPrompt(String string) {
-            inputPrompt = string;
-        }
-
-        public void setInputPromptChild(String string) {
-            inputPromptChild = string;
-        }
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The table has 3 columns. The second column is expanded and contains 100% wide textfields. These should fill the available space. The third column is empty.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3145;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/table/UncollapsedCollumnWidth.html b/tests/src/com/vaadin/tests/components/table/UncollapsedCollumnWidth.html
deleted file mode 100644
index e1b39533f3..0000000000
--- a/tests/src/com/vaadin/tests/components/table/UncollapsedCollumnWidth.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.UncollapsedCollumnWidth?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableUncollapsedCollumnWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>1,10</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstableUncollapsedCollumnWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertNotElementWidth</td>
-	<td>vaadin=runcomvaadintestscomponentstableUncollapsedCollumnWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
-	<td>0</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/table/UncollapsedCollumnWidth.java b/tests/src/com/vaadin/tests/components/table/UncollapsedCollumnWidth.java
deleted file mode 100644
index 99b954fa63..0000000000
--- a/tests/src/com/vaadin/tests/components/table/UncollapsedCollumnWidth.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Table;
-
-public class UncollapsedCollumnWidth extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Table table = new Table();
-        table.addContainerProperty("Col1", String.class, "");
-        table.addContainerProperty("Col2", String.class, "");
-        table.setColumnCollapsingAllowed(true);
-        table.setColumnCollapsed("Col2", true);
-
-        table.setColumnWidth("Col1", 150);
-
-        table.setWidth("400px");
-
-        table.addItem(new Object[] { "Cell 1", "Cell 2" }, new Object());
-
-        addComponent(table);
-        addComponent(new Button("Uncollapse col2", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                table.setColumnCollapsed("Col2", false);
-            }
-        }));
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Uncollapsing col2 after resizing col1 should set a reasonable width for col2. Additionally, the width of the header and the cell content should be the same.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return Integer.valueOf(7012);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/table/WideSelectableTable.java b/tests/src/com/vaadin/tests/components/table/WideSelectableTable.java
deleted file mode 100644
index c820dc08d5..0000000000
--- a/tests/src/com/vaadin/tests/components/table/WideSelectableTable.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.vaadin.tests.components.table;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-
-public class WideSelectableTable extends TestBase {
-
-    @Override
-    protected void setup() {
-        final int NUMBER_OF_COLS = 50;
-
-        // mainWindow.setSizeFull();
-        // setMainWindow(mainWindow);
-
-        Table ptable = new Table();
-        for (int colcount = 0; colcount < NUMBER_OF_COLS; colcount++) {
-            String col = "COL_" + colcount + "";
-            ptable.addContainerProperty(col, String.class, "--");
-            ptable.addItem(colcount + "-").getItemProperty(col)
-                    .setValue("--" + colcount + "");
-        }
-        ptable.setSelectable(true);
-        ptable.setMultiSelect(true);
-        ptable.setColumnReorderingAllowed(false);
-        ptable.setImmediate(true);
-
-        ptable.setWidth("100%");
-        ptable.setPageLength(5);
-
-        VerticalLayout vl = new VerticalLayout();
-        vl.addComponent(ptable);
-        addComponent(vl);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A wide table scrolls to the beginning when sorting a column at  the beginning when sorting a column at the end";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6788;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/table/fi.gif b/tests/src/com/vaadin/tests/components/table/fi.gif
deleted file mode 100755
index 8d3a191828..0000000000
Binary files a/tests/src/com/vaadin/tests/components/table/fi.gif and /dev/null differ
diff --git a/tests/src/com/vaadin/tests/components/table/se.gif b/tests/src/com/vaadin/tests/components/table/se.gif
deleted file mode 100755
index 80f6285228..0000000000
Binary files a/tests/src/com/vaadin/tests/components/table/se.gif and /dev/null differ
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/AddAndRemoveTabs.html b/tests/src/com/vaadin/tests/components/tabsheet/AddAndRemoveTabs.html
deleted file mode 100644
index 993ef79c91..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/AddAndRemoveTabs.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>AddAndRemoveTabs</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">AddAndRemoveTabs</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tabsheet.AddAndRemoveTabs?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VHorizontalLayout[1]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>v-tabsheet-tabitemcell-first</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/AddAndRemoveTabs.java b/tests/src/com/vaadin/tests/components/tabsheet/AddAndRemoveTabs.java
deleted file mode 100644
index 3b5166a21e..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/AddAndRemoveTabs.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.TabSheet;
-
-public class AddAndRemoveTabs extends TestBase {
-    private TabSheet tabSheet;
-
-    private int counter = 0;
-
-    @Override
-    public void setup() {
-        tabSheet = new TabSheet();
-        addTab();
-        addComponent(tabSheet);
-
-        Button addTabBtn = new Button("Add new tab",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        addTab();
-                    }
-
-                });
-        addComponent(addTabBtn);
-    }
-
-    private void addTab() {
-        final HorizontalLayout layout = new HorizontalLayout();
-        layout.setCaption("Test " + counter);
-
-        Button closeTab = new Button("Close tab", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                tabSheet.removeComponent(layout);
-
-            }
-
-        });
-
-        layout.addComponent(closeTab);
-
-        tabSheet.addComponent(layout);
-        counter++;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Removing all tabs and then adding new tabs should work properly and without javascript errors. All new tabs should be displayed and not only the first one";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2861;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/PreventTabChange.html b/tests/src/com/vaadin/tests/components/tabsheet/PreventTabChange.html
deleted file mode 100644
index c4f5998f47..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/PreventTabChange.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8080/" />
-<title>PreventTabChange</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">PreventTabChange</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tabsheet.PreventTabChange</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetPreventTabChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetPreventTabChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetPreventTabChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetPreventTabChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/PreventTabChange.java b/tests/src/com/vaadin/tests/components/tabsheet/PreventTabChange.java
deleted file mode 100644
index f1faecb711..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/PreventTabChange.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
-import com.vaadin.ui.TabSheet.SelectedTabChangeListener;
-
-public class PreventTabChange extends TestBase implements
-        SelectedTabChangeListener {
-
-    private TabSheet tabSheet;
-
-    private Component lastTab;
-
-    private Label tab1;
-    private Label tab2;
-    private Label tab3;
-
-    @Override
-    protected String getDescription() {
-        return "Tests prevention of selecting certain tabs. Selecting the tabs in order (1-2-3-1) should work, while selecting out of order should cause the current tab to remain selected. The selected tab will actually first be changed (by the client) and then changed back (on the server response).";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3199;
-    }
-
-    @Override
-    protected void setup() {
-        tabSheet = new TabSheet();
-        tabSheet.addListener(this);
-        tab1 = new Label("Tab 1 contents");
-        tab2 = new Label("Tab 2 contents");
-        tab3 = new Label("Tab 3 contents");
-
-        tabSheet.addTab(tab1, "The first tab", null);
-        tabSheet.addTab(tab2, "The second tab", null);
-        tabSheet.addTab(tab3, "The third tab", null);
-
-        lastTab = tab1;
-        tabSheet.setSelectedTab(tab1);
-
-        addComponent(tabSheet);
-    }
-
-    public void selectedTabChange(SelectedTabChangeEvent event) {
-
-        TabSheet tabsheet = event.getTabSheet();
-        if (lastTab == tab1) {
-            if (tabsheet.getSelectedTab() != tab2) {
-                tabsheet.setSelectedTab(lastTab);
-            }
-        } else if (lastTab == tab2) {
-            if (tabsheet.getSelectedTab() != tab3) {
-                tabsheet.setSelectedTab(lastTab);
-            }
-        } else if (lastTab == tab3) {
-            if (tabsheet.getSelectedTab() != tab1) {
-                tabsheet.setSelectedTab(lastTab);
-            }
-        }
-        lastTab = tabsheet.getSelectedTab();
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/RemoveTabs.java b/tests/src/com/vaadin/tests/components/tabsheet/RemoveTabs.java
deleted file mode 100644
index 8602a9a3b4..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/RemoveTabs.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractComponentContainer;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TabSheet.Tab;
-
-public class RemoveTabs extends TestBase {
-
-    protected TabSheet tabsheet;
-
-    protected Component[] tab = new Component[5];
-
-    private Button closeCurrent;
-    private Button closeCurrentWithTab;
-    private Button closeFirst;
-    private Button closeLast;
-    private Button reorderTabs;
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2425;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tests the removal of individual tabs from a Tabsheet. No matter what is done in this test the tab caption \"Tab X\" should always match the content \"Tab X\". Use \"remove first\" and \"remove active\" buttons to remove the first or the active tab. The \"reorder\" button reverses the order by adding and removing all components.";
-    }
-
-    @Override
-    protected void setup() {
-        tabsheet = new TabSheet();
-        for (int i = 1; i <= tab.length; i++) {
-            tab[i - 1] = new Label("This is the contents of tab " + i);
-            tab[i - 1].setCaption("Tab " + i);
-
-            tabsheet.addComponent(tab[i - 1]);
-        }
-
-        getLayout().addComponent(tabsheet);
-
-        closeCurrent = new Button("Close current tab");
-        closeCurrent.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                closeCurrentTab();
-
-            }
-        });
-
-        closeCurrentWithTab = new Button("Close current tab with Tab");
-        closeCurrentWithTab.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                closeCurrentTabWithTab();
-
-            }
-        });
-
-        closeFirst = new Button("close first tab");
-        closeFirst.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                closeFirstTab();
-
-            }
-        });
-
-        closeLast = new Button("close last tab");
-        closeLast.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                closeLastTab();
-
-            }
-        });
-
-        reorderTabs = new Button("reorder");
-        reorderTabs.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                reorder();
-
-            }
-        });
-
-        getLayout().addComponent(closeFirst);
-        getLayout().addComponent(closeLast);
-        getLayout().addComponent(closeCurrent);
-        getLayout().addComponent(closeCurrentWithTab);
-        getLayout().addComponent(reorderTabs);
-
-    }
-
-    private void closeCurrentTab() {
-        Component c = tabsheet.getSelectedTab();
-        if (c != null) {
-            tabsheet.removeComponent(c);
-        }
-    }
-
-    private void closeCurrentTabWithTab() {
-        Component c = tabsheet.getSelectedTab();
-        if (c != null) {
-            Tab t = tabsheet.getTab(c);
-            tabsheet.removeTab(t);
-        }
-    }
-
-    private void closeFirstTab() {
-        tabsheet.removeComponent(tabsheet.getComponentIterator().next());
-    }
-
-    private void closeLastTab() {
-        Iterator<Component> i = tabsheet.getComponentIterator();
-        Component last = null;
-        while (i.hasNext()) {
-            last = i.next();
-
-        }
-        tabsheet.removeComponent(last);
-    }
-
-    private void reorder() {
-        AbstractComponentContainer container = tabsheet;
-
-        if (container != null) {
-            List<Component> c = new ArrayList<Component>();
-            Iterator<Component> i = container.getComponentIterator();
-            while (i.hasNext()) {
-                Component comp = i.next();
-                c.add(comp);
-            }
-            container.removeAllComponents();
-
-            for (int j = c.size() - 1; j >= 0; j--) {
-                container.addComponent(c.get(j));
-            }
-
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/RemoveTabsTabsheet.html b/tests/src/com/vaadin/tests/components/tabsheet/RemoveTabsTabsheet.html
deleted file mode 100644
index 13f103b82d..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/RemoveTabsTabsheet.html
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>RemoveTabs</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">RemoveTabs</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tabsheet.RemoveTabs?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tabs-S1-2-3-4-5</td>
-</tr>
-<!--Close first-->
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tabs-S2-3-4-5</td>
-</tr>
-<!--Select tab 4-->
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<!--Close current tab-->
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tabs-S2-3-5</td>
-</tr>
-<!--Reorder tabs-->
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tabs-S5-3-2</td>
-</tr>
-<!--Close last tab-->
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<!--Select tab 3-->
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tabs-S5-3</td>
-</tr>
-<!--Close using removeTab-->
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tabs-S5</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabGetAndReplaceComponent.html b/tests/src/com/vaadin/tests/components/tabsheet/TabGetAndReplaceComponent.html
deleted file mode 100644
index fce39361e1..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabGetAndReplaceComponent.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tabsheet.TabGetAndReplaceComponent?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>18,13</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VLabel[1]</td>
-	<td>Content 2</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VLabel[1]</td>
-	<td>Replacement 2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>41,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>16,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>39,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>42,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>37,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VLabel[0]</td>
-	<td>Content 1</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabGetAndReplaceComponent.java b/tests/src/com/vaadin/tests/components/tabsheet/TabGetAndReplaceComponent.java
deleted file mode 100644
index c49133dd7c..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabGetAndReplaceComponent.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import java.util.Iterator;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TabSheet.Tab;
-
-public class TabGetAndReplaceComponent extends TestBase {
-
-    @Override
-    protected void setup() {
-        final TabSheet tabs = new TabSheet();
-
-        tabs.addTab(new Label("Content 1"), "Content 1", null);
-        tabs.addTab(new Label("Content 2"), "Content 2", null);
-        tabs.addTab(new Label("Content 3"), "Content 3", null);
-        tabs.addTab(new Label("Content 4"), "Content 4", null);
-        tabs.addTab(new Label("Content 5"), "Content 5", null);
-        addComponent(tabs);
-
-        Button replace2 = new Button("Replace Content 2",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        Iterator<Component> iter = tabs.getComponentIterator();
-                        iter.next();
-
-                        Component content2 = iter.next();
-                        Tab tab = tabs.getTab(content2);
-
-                        // Replace content
-                        tabs.replaceComponent(tab.getComponent(), new Label(
-                                "Replacement 2"));
-
-                    }
-                });
-        addComponent(replace2);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The tab should have a reference to the component it holds";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6188;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetBasicOperations.html b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetBasicOperations.html
deleted file mode 100644
index 5ee81a48d1..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetBasicOperations.html
+++ /dev/null
@@ -1,330 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tabsheet.TabSheetTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--hide log to avoid messing up screenshots-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item1</td>
-	<td>33,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>31,9</td>
-</tr>
-<!--Add some components-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
-	<td>21,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>49,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>16,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>49,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[3]/VMenuBar[0]#item0</td>
-	<td>94,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
-	<td>41,21</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>49,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>28,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>39,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[3]/VMenuBar[0]#item0</td>
-	<td>28,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
-	<td>52,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>74,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>50,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[2]/VMenuBar[0]#item3</td>
-	<td>72,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[3]/VMenuBar[0]#item5</td>
-	<td>51,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
-	<td>16,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>89,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>76,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>56,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[3]/VMenuBar[0]#item6</td>
-	<td>19,2</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>auto-auto-button</td>
-</tr>
-<!--Set width and height-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
-	<td>34,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>54,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>8,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[2]/VMenuBar[0]#item6</td>
-	<td>17,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
-	<td>42,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>47,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>19,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[2]/VMenuBar[0]#item5</td>
-	<td>29,3</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>500px-400px-button</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
-	<td>24,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>75,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
-	<td>46,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>40,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[3]/VMenuBar[0]#item0</td>
-	<td>18,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
-	<td>41,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>70,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
-	<td>62,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>20,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[3]/VMenuBar[0]#item0</td>
-	<td>19,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>selected-0-closable-0-2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
-	<td>1,21</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>selected-2-closable-0-2</td>
-</tr>
-<!--Close and selection listeners-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
-	<td>29,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>49,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>80,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
-	<td>18,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>67,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
-	<td>71,9</td>
-</tr>
-<!--show log to be able to assert-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item1</td>
-	<td>33,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>31,9</td>
-</tr>
-<!--close tab 2-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>10,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_SLog/ChildComponentContainer[1]/VLabel[0]</td>
-	<td>10. Tab 2 closed</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>11. Tab 0 selected</td>
-</tr>
-<!--select tab 1-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>32,7</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>12. Tab 1 selected</td>
-</tr>
-<!--select tab 2-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>46,9</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>13. Tab 2 selected</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetCaptions.html b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetCaptions.html
deleted file mode 100644
index d240d4b419..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetCaptions.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TabSheetCaptions</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TabSheetCaptions</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tabsheet.TabSheetCaptions</td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetCaptions::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>Panel initial caption (should also be tab caption)</td>
-</tr>
-<tr>
-	<td>verifyText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetCaptions::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VPanel[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>Panel initial caption (should also be tab caption)</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetCaptions::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetCaptions::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>This is a new tab caption Sun, 2001-Sep-09</td>
-</tr>
-<tr>
-	<td>verifyText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetCaptions::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VPanel[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>Panel initial caption (should also be tab caption)</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetCaptions::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetCaptions::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>This is a new tab caption Sun, 2001-Sep-09</td>
-</tr>
-<tr>
-	<td>verifyText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetCaptions::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VPanel[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>This is a new panel caption Sun, 2001-Sep-09</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetCaptions.java b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetCaptions.java
deleted file mode 100644
index 8449dd42bf..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetCaptions.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TabSheet;
-
-public class TabSheetCaptions extends TestBase {
-
-    Panel panel1;
-
-    @Override
-    protected String getDescription() {
-        return "Updating the tabsheet tab text should not change the caption of the component. Click on the button to change the tab text. This must update the tab and not touch the Panel's caption.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2846;
-    }
-
-    @Override
-    protected void setup() {
-        final TabSheet tabSheet = new TabSheet();
-        // Define date and locale so that it doesn't change for machine/time
-        final SimpleDateFormat dateFormatter = new SimpleDateFormat(
-                "EEE, yyyy-MMM-dd", Locale.ENGLISH);
-        final Date date = new Date();
-        date.setTime((long) 1000000000000.0);
-
-        panel1 = new Panel("Panel initial caption (should also be tab caption)");
-        panel1.setSizeFull();
-        panel1.getContent().setSizeFull();
-        panel1.addComponent(new Label("This is a panel"));
-        tabSheet.addTab(panel1);
-
-        Button button = new Button("Update tab caption");
-        button.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                tabSheet.getTab(panel1).setCaption(
-                        "This is a new tab caption "
-                                + dateFormatter.format(date));
-            }
-        });
-
-        Button button2 = new Button("Update panel caption");
-        button2.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                panel1.setCaption("This is a new panel caption "
-                        + dateFormatter.format(date));
-            }
-        });
-
-        addComponent(tabSheet);
-        addComponent(button);
-        addComponent(button2);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetDisabling.html b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetDisabling.html
deleted file mode 100644
index bc03f7687b..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetDisabling.html
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TabSheetDisabling</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TabSheetDisabling</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tabsheet.TabSheetDisabling</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[5]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>1</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>1</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[2]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[6]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>2</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[3]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>3</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[1]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[2]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>4</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetDisabling.java b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetDisabling.java
deleted file mode 100644
index 4f4ab836ed..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetDisabling.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.TabSheet;
-
-public class TabSheetDisabling extends TestBase {
-
-    private static final int NR_BUTTONS = 10;
-    private Button buttons[] = new Button[NR_BUTTONS];
-    private TabSheet tabSheet;
-
-    @Override
-    public void setup() {
-        tabSheet = new TabSheet();
-        for (int i = 0; i < NR_BUTTONS; i++) {
-            if (i % 2 == 0) {
-                buttons[i] = new Button("Disable this tab",
-                        new ClickListener() {
-
-                            public void buttonClick(ClickEvent event) {
-                                Button b = event.getButton();
-                                tabSheet.getTab(b).setEnabled(false);
-
-                            }
-
-                        });
-            } else {
-                buttons[i] = new Button("Hide this tab", new ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        Button b = event.getButton();
-                        tabSheet.getTab(b).setVisible(false);
-                    }
-
-                });
-            }
-            tabSheet.addTab(buttons[i]);
-        }
-
-        Button button = new Button("Enable/disable", new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                tabSheet.setEnabled(!tabSheet.isEnabled());
-            }
-        });
-        addComponent(tabSheet);
-        addComponent(button);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Switching the tabsheet between disabled and enabled should not change which tab is selected. Disabling the open tab should select the first enabled tab.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2658;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetDiscardsMovedComponents.html b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetDiscardsMovedComponents.html
deleted file mode 100644
index 4cb6925b28..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetDiscardsMovedComponents.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?> 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
-<head profile="http://selenium-ide.openqa.org/profiles/test-case"> 
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
-<link rel="selenium.base" href="" /> 
-<title>New Test</title> 
-</head> 
-<body> 
-<table cellpadding="1" cellspacing="1" border="1"> 
-<thead> 
-<tr><td rowspan="1" colspan="3">New Test</td></tr> 
-</thead><tbody> 
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tabsheet.TabSheetDiscardsMovedComponents?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDiscardsMovedComponents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDiscardsMovedComponents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>31,9</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDiscardsMovedComponents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VTextField[0]</td>
-	<td>Text</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDiscardsMovedComponents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDiscardsMovedComponents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
-	<td>33,4</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDiscardsMovedComponents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td>Button</td>
-</tr>
-</tbody></table> 
-</body> 
-</html> 
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetDiscardsMovedComponents.java b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetDiscardsMovedComponents.java
deleted file mode 100644
index 34b5dc86c8..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetDiscardsMovedComponents.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TextField;
-
-public class TabSheetDiscardsMovedComponents extends TestBase {
-
-    private GridLayout grid = new GridLayout();
-    private TabSheet tabSheet = new TabSheet();
-
-    @Override
-    public void setup() {
-        tabSheet.addTab(new Label("The tabSheet"), "Initial content");
-        tabSheet.setSizeUndefined();
-
-        grid.setColumns(2);
-        TextField textField = new TextField("Text field");
-        textField.setValue("Text");
-        addTestComponent(textField);
-        addTestComponent(new Button("Button"));
-
-        addComponent(tabSheet);
-        addComponent(grid);
-    }
-
-    private void addTestComponent(final Component component) {
-        grid.addComponent(component);
-        grid.addComponent(new Button("Move to tab", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                tabSheet.addTab(component);
-                grid.removeComponent(event.getButton());
-            }
-        }));
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Moving an already rendered component to a tabsheet and not immediately selecting the new tab should cause no problems";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2669;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.html b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.html
deleted file mode 100644
index 425da11af4..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TabSheetIcons</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TabSheetIcons</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tabsheet.TabSheetIcons</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.java b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.java
deleted file mode 100644
index 49c9784eb9..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetIcons.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TextField;
-
-public class TabSheetIcons extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Tests rendering of a Tabsheet with fixed/dynamic width when the TabSheet contains icons";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-    @Override
-    protected void setup() {
-        TabSheet ts1 = createTabsheet();
-        ts1.setHeight("100px");
-        TabSheet ts2 = createTabsheet();
-        ts2.setHeight("100px");
-        ts2.setWidth("400px");
-
-        addComponent(ts1);
-        addComponent(ts2);
-    }
-
-    private TabSheet createTabsheet() {
-        TabSheet tabsheet = new TabSheet();
-        tabsheet.setSizeUndefined();
-
-        Component[] tab = new Component[3];
-        tab[0] = new Label("This is tab 1");
-        tab[0].setIcon(new ThemeResource("../runo/icons/32/folder-add.png"));
-        tab[0].setCaption("tab number 1");
-        tab[1] = new TextField("This is tab 2", "Contents of tab 2 textfield");
-        tab[2] = new Label("This is tab 3");
-        tab[2].setIcon(new ThemeResource("../runo/icons/16/folder-add.png"));
-        tab[2].setCaption("tab number 3");
-
-        for (Component c : tab) {
-            tabsheet.addTab(c);
-        }
-
-        return tabsheet;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetIndexOperations.html b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetIndexOperations.html
deleted file mode 100644
index 8db5641603..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetIndexOperations.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tabsheet.TabSheetIndexOperations?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetIndexOperations::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetIndexOperations::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>Added Tab 1</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetIndexOperations::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetIndexOperations::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>1 baT deddA</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetIndexOperations::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetIndexOperations::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>Tab 1</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetIndexOperations.java b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetIndexOperations.java
deleted file mode 100644
index c106144144..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetIndexOperations.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TabSheet.Tab;
-
-public class TabSheetIndexOperations extends TestBase {
-
-    private int tabCounter = 1;
-
-    @Override
-    protected void setup() {
-        final TabSheet tabs = new TabSheet();
-        
-        // Add some tabs
-        tabs.addTab(new Label("Content 1"), "Tab 1", null);
-        tabs.addTab(new Label("Content 2"), "Tab 2", null);
-        tabs.addTab(new Label("Content 3"), "Tab 3", null);
-        
-        addComponent(tabs);
-        
-        Button addTab = new Button("Add tab at index 2", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                        tabs.addTab(new Label("Content " + tabCounter),
-                                "Added Tab " + tabCounter, null, 2);
-                        tabCounter++;
-                    }
-                });
-        addComponent(addTab);
-
-        Button setCaption = new Button("Invert tab caption at index 2",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        Tab tab = tabs.getTab(2);
-                        tab.setCaption(new StringBuffer(tab.getCaption())
-                                .reverse().toString());
-            }
-        });
-        addComponent(setCaption);
-
-        Button move = new Button("Move selected tab to index 2",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        tabs.setTabPosition(tabs.getTab(tabs.getSelectedTab()),
-                                2);
-                    }
-                });
-        addComponent(move);
-        
-        Button getIndex = new Button("Get selected tab index", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                        getMainWindow().showNotification(
-                                "Index: "
-                                        + tabs.getTabPosition(tabs.getTab(tabs
-                                                .getSelectedTab())));
-                
-            }
-        });
-        addComponent(getIndex);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "You can use indexes to add and reorder the TabSheet";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6188;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetMinimal.java b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetMinimal.java
deleted file mode 100644
index db647f7110..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetMinimal.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-
-public class TabSheetMinimal extends TestBase {
-
-    int index = 1;
-    TabSheet ts = new TabSheet();
-
-    @Override
-    protected void setup() {
-        ts.setStyleName("minimal");
-        Button b = new Button("Add a tab", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                ts.addTab(new Label("" + index), "Tab " + index, null);
-                index++;
-
-            }
-        });
-        addComponent(ts);
-        addComponent(b);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Adding tabs to a 'minimal' style TabSheet work properly even if the TabSheet is initially empty";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4227;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetTabStyleNames.html b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetTabStyleNames.html
deleted file mode 100644
index d49e2817d3..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetTabStyleNames.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TabSheetTabStyleNames</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TabSheetTabStyleNames</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tabsheet.TabSheetTabStyleNames?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTabStyleNames::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>v-tabsheet-tabitemcell-TabSheetTabStyleNames</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTabStyleNames::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertNotCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTabStyleNames::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>v-tabsheet-tabitemcell-TabSheetTabStyleNames</td>
-</tr>
-<tr>
-	<td>assertCSSClass</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTabStyleNames::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]</td>
-	<td>v-tabsheet-tabitemcell-TabSheetTabStyleNames_0</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetTabStyleNames.java b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetTabStyleNames.java
deleted file mode 100644
index 5c806b2ac2..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetTabStyleNames.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TabSheet.Tab;
-
-public class TabSheetTabStyleNames extends TestBase {
-
-    private static final String STYLE_NAME = "TabSheetTabStyleNames";
-
-    @Override
-    public void setup() {
-        setTheme("tests-tickets");
-
-        TabSheet tabsheet = new TabSheet();
-        final Tab tab1 = tabsheet.addTab(new Label(), "Tab 1");
-        final Tab tab2 = tabsheet.addTab(new Label(), "Tab 2");
-
-        tab1.setStyleName(STYLE_NAME);
-
-        addComponent(new Button("Update style names",
-                new Button.ClickListener() {
-                    int counter = 0;
-
-                    public void buttonClick(ClickEvent event) {
-                        if (tab1.getStyleName() == null) {
-                            tab1.setStyleName(STYLE_NAME);
-                        } else {
-                            tab1.setStyleName(null);
-                        }
-
-                        tab2.setStyleName(STYLE_NAME + "_" + (counter++));
-                    }
-                }));
-
-        addComponent(tabsheet);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tests setting style names for individual tabs.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5880;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetTabTheming.java b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetTabTheming.java
deleted file mode 100644
index 94b49d4ae0..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetTabTheming.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-
-public class TabSheetTabTheming extends TestBase {
-
-    @Override
-    public void setup() {
-        TabSheet tabsheet = new TabSheet();
-        tabsheet.setStyleName("pg");
-        tabsheet.addTab(new Label(), "Brown fox and the fence", null);
-        tabsheet.addTab(new Label(), "Something about using all the keys", null);
-        addComponent(tabsheet);
-        setTheme("tests-tickets");
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Changing tabs should not cause flickering, cut text or text that moves back and forth.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6781;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetTest.java b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetTest.java
deleted file mode 100644
index bbbe92f069..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetTest.java
+++ /dev/null
@@ -1,202 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import java.util.LinkedHashMap;
-
-import com.vaadin.terminal.Resource;
-import com.vaadin.tests.components.AbstractComponentContainerTest;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TabSheet.CloseHandler;
-import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
-import com.vaadin.ui.TabSheet.SelectedTabChangeListener;
-import com.vaadin.ui.TabSheet.Tab;
-
-public class TabSheetTest<T extends TabSheet> extends
-        AbstractComponentContainerTest<T> implements SelectedTabChangeListener {
-
-    private Command<T, Integer> setTabCaption = new Command<T, Integer>() {
-
-        public void execute(T c, Integer value, Object data) {
-            c.getTab(value).setCaption((String) data);
-
-        }
-    };
-    private Command<T, Integer> setTabIcon = new Command<T, Integer>() {
-
-        public void execute(T c, Integer value, Object data) {
-            c.getTab(value).setIcon((Resource) data);
-
-        }
-    };
-    private Command<T, Integer> setTabClosable = new Command<T, Integer>() {
-
-        public void execute(T c, Integer value, Object data) {
-            c.getTab(value).setClosable((Boolean) data);
-        }
-    };
-    private Command<T, Boolean> setCloseHandlerListener = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            if (value) {
-                c.setCloseHandler(new CloseHandler() {
-                    public void onTabClose(TabSheet tabsheet, Component c) {
-                        tabClosed(tabsheet, tabsheet.getTab(c));
-                        tabsheet.removeComponent(c);
-                    }
-
-                });
-            } else {
-                c.setCloseHandler(new CloseHandler() {
-                    public void onTabClose(TabSheet tabsheet, Component c) {
-                        tabsheet.removeComponent(c);
-                    }
-                });
-            }
-
-        }
-    };
-    private Command<T, Boolean> setSelectedTabListener = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((SelectedTabChangeListener) TabSheetTest.this);
-            } else {
-                c.removeListener((SelectedTabChangeListener) TabSheetTest.this);
-            }
-
-        }
-    };
-
-    private Command<T, Integer> selectTab = new Command<T, Integer>() {
-        public void execute(T c, Integer index, Object data) {
-            c.setSelectedTab(c.getTab(index).getComponent());
-        }
-    };
-    private Command<T, Boolean> hideTabs = new Command<T, Boolean>() {
-
-        public void execute(T c, Boolean value, Object data) {
-            c.hideTabs(value);
-
-        }
-    };
-
-    @Override
-    protected Class<T> getTestClass() {
-        return (Class<T>) TabSheet.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-        createSetTabCaptionIcon(CATEGORY_FEATURES);
-        createSelectTab(CATEGORY_FEATURES);
-        createClosableToggle(CATEGORY_FEATURES);
-        createCloseHandlerToggle(CATEGORY_LISTENERS);
-        createSelectListenerToggle(CATEGORY_LISTENERS);
-        createHideTabsToggle(CATEGORY_FEATURES);
-
-        // TODO
-        // Insert tab at x
-
-    }
-
-    private void createHideTabsToggle(String category) {
-        createBooleanAction("Hide tabs", category, false, hideTabs);
-
-    }
-
-    private void createSelectListenerToggle(String category) {
-        createBooleanAction("Selected tab listener", category, false,
-                setSelectedTabListener);
-
-    }
-
-    private void createCloseHandlerToggle(String category) {
-        createBooleanAction("Close event listener (handler)", category, false,
-                setCloseHandlerListener);
-
-    }
-
-    private void createClosableToggle(String category) {
-        String closableCategory = "Set tab closable";
-        createCategory(closableCategory, category);
-        for (int i = 0; i < 20; i++) {
-            String tabClosableCategory = "Tab " + i + " closable";
-
-            createCategory(tabClosableCategory, closableCategory);
-            createClickAction("true", tabClosableCategory, setTabClosable, i,
-                    true);
-            createClickAction("false", tabClosableCategory, setTabClosable, i,
-                    false);
-
-        }
-    }
-
-    private void createSelectTab(String category) {
-        String selectTabCategory = "Select tab";
-        createCategory(selectTabCategory, category);
-        for (int i = 0; i < 20; i++) {
-            createClickAction("Select tab " + i, selectTabCategory, selectTab,
-                    i);
-
-        }
-    }
-
-    private void createSetTabCaptionIcon(String category) {
-        String captionCategory = "Set tab caption";
-        String iconCategory = "Set tab icon";
-        createCategory(captionCategory, category);
-        createCategory(iconCategory, category);
-
-        String captionOptions[] = new String[] { "", "{id}", "Tab {id}",
-                "A long caption for tab {id}" };
-        LinkedHashMap<String, Resource> iconOptions = new LinkedHashMap<String, Resource>();
-        iconOptions.put("-", null);
-        iconOptions.put("16x16 (cachable)", ICON_16_USER_PNG_CACHEABLE);
-        iconOptions.put("16x16 (uncachable)", ICON_16_USER_PNG_UNCACHEABLE);
-        iconOptions.put("32x32 (cachable)", ICON_32_ATTENTION_PNG_CACHEABLE);
-        iconOptions
-                .put("32x32 (uncachable)", ICON_32_ATTENTION_PNG_UNCACHEABLE);
-        iconOptions.put("64x64 (cachable)", ICON_64_EMAIL_REPLY_PNG_CACHEABLE);
-        iconOptions.put("64x64 (uncachable)",
-                ICON_64_EMAIL_REPLY_PNG_UNCACHEABLE);
-
-        for (int i = 0; i < 20; i++) {
-            String tabCaptionCategory = "Tab " + i + " caption";
-            String tabIconCategory = "Tab " + i + " icon";
-
-            createCategory(tabCaptionCategory, captionCategory);
-            createCategory(tabIconCategory, iconCategory);
-
-            createClickAction("(null)", tabCaptionCategory, setTabCaption,
-                    Integer.valueOf(i), null);
-            createClickAction("(null)", tabIconCategory, setTabIcon,
-                    Integer.valueOf(i), null);
-
-            for (String option : captionOptions) {
-                option = option.replace("{id}", String.valueOf(i));
-                createClickAction(option, tabCaptionCategory, setTabCaption,
-                        Integer.valueOf(i), option);
-            }
-
-            for (String option : iconOptions.keySet()) {
-                Resource icon = iconOptions.get(option);
-                createClickAction(option, tabIconCategory, setTabIcon,
-                        Integer.valueOf(i), icon);
-            }
-
-        }
-
-    }
-
-    private void tabClosed(TabSheet tabSheet, Tab tab) {
-        log("Tab " + tabSheet.getTabPosition(tab) + " closed");
-    }
-
-    public void selectedTabChange(SelectedTabChangeEvent event) {
-        TabSheet ts = event.getTabSheet();
-        log("Tab " + ts.getTabPosition(ts.getTab(ts.getSelectedTab()))
-                + " selected");
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetWithoutTabCaption.html b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetWithoutTabCaption.html
deleted file mode 100644
index 36e85c1b37..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetWithoutTabCaption.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TabSheetWithoutTabCaption</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TabSheetWithoutTabCaption</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tabsheet.TabSheetWithoutTabCaption</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetWithoutTabCaption.java b/tests/src/com/vaadin/tests/components/tabsheet/TabSheetWithoutTabCaption.java
deleted file mode 100644
index d766277b48..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabSheetWithoutTabCaption.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-
-public class TabSheetWithoutTabCaption extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "There should be a tabsheet with one tab visible. The tab has no caption and contains a label saying 'Tab contents'.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    protected void setup() {
-        final TabSheet moduleArea = new TabSheet();
-        Label label = new Label("Tab contents");
-        moduleArea.addTab(label);
-        addComponent(moduleArea);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabsheetNPE.java b/tests/src/com/vaadin/tests/components/tabsheet/TabsheetNPE.java
deleted file mode 100644
index ac460dafbb..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabsheetNPE.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TabSheet.Tab;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class TabsheetNPE extends AbstractTestCase implements ClickListener {
-
-    @Override
-    protected String getDescription() {
-        return "Enable and activate tab should enable and activate the first tab.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3292;
-    }
-
-    private static final int TABS_COUNT = 3;
-    private TabSheet tabSheet;
-    private Label[] label = new Label[TABS_COUNT];
-    private Tab[] tab = new Tab[TABS_COUNT];
-
-    @Override
-    public void init() {
-        setMainWindow(new Window("TabSheet Demo", createMainLayout()));
-    }
-
-    private VerticalLayout createMainLayout() {
-        VerticalLayout layout = new VerticalLayout();
-
-        tabSheet = new TabSheet();
-        for (int i = 1; i <= TABS_COUNT; i++) {
-            label[i - 1] = new Label("Tab " + i);
-            tab[i - 1] = tabSheet.addTab(label[i - 1], "Tab " + i, null);
-            tab[i - 1].setEnabled(false);
-        }
-
-        layout.addComponent(tabSheet);
-        Button btn = new Button("Enable and activate tab");
-        btn.addListener(this);
-        layout.addComponent(btn);
-        return layout;
-    }
-
-    public void buttonClick(ClickEvent event) {
-        for (int i = 0; i < TABS_COUNT; i++) {
-            tab[i].setEnabled(true);
-        }
-        tabSheet.setSelectedTab(label[0]);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabsheetScrolling.html b/tests/src/com/vaadin/tests/components/tabsheet/TabsheetScrolling.html
deleted file mode 100644
index dd45e2c591..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabsheetScrolling.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TabsheetScrolling</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TabsheetScrolling</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tabsheet.TabsheetScrolling?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[1]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[1]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[1]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[1]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[1]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTabsheet[0]/VTabsheetPanel[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTabsheet[0]/VTabsheetPanel[0]/VButton[1]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[1]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[2]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[3]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[4]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[5]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[6]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabsheetScrolling.java b/tests/src/com/vaadin/tests/components/tabsheet/TabsheetScrolling.java
deleted file mode 100644
index 0880b57eed..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabsheetScrolling.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TabSheet.Tab;
-
-public class TabsheetScrolling extends TestBase {
-
-    private TabSheet fixedSizeTabSheet;
-    private TabSheet autoWideTabSheet;
-
-    @Override
-    protected void setup() {
-        fixedSizeTabSheet = new TabSheet();
-        fixedSizeTabSheet.setHeight("200px");
-        fixedSizeTabSheet.setWidth("400px");
-
-        for (int i = 0; i < 100; i++) {
-            Button b = new Button("Hide this tab (" + i + ")",
-                    new ClickListener() {
-
-                        public void buttonClick(ClickEvent event) {
-                            fixedSizeTabSheet.getTab(event.getButton())
-                                    .setVisible(false);
-                        }
-
-                    });
-            Tab t = fixedSizeTabSheet.addTab(b, "Tab " + i, null);
-            if (i % 2 == 0) {
-                t.setVisible(false);
-            }
-        }
-
-        addComponent(fixedSizeTabSheet);
-
-        autoWideTabSheet = new TabSheet();
-        autoWideTabSheet.setHeight("200px");
-        autoWideTabSheet.setWidth(null);
-
-        for (int i = 0; i < 10; i++) {
-            Button b = new Button("Hide this tab (" + i + ")",
-                    new ClickListener() {
-
-                        public void buttonClick(ClickEvent event) {
-                            autoWideTabSheet.getTab(event.getButton())
-                                    .setVisible(false);
-                        }
-                    });
-
-            Tab t = autoWideTabSheet.addTab(b, "Tab " + i, null);
-            if (i % 2 == 0) {
-                t.setVisible(false);
-
-            }
-        }
-
-        addComponent(autoWideTabSheet);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Two tabsheets, upper has fixed width, lower has dynamic width. Every other tab in both tabsheets are hidden (even numbered tabs). Scrolling the upper tab sheet should never display a hidden tab. Hiding a tab in the upper tabsheet should not affect scrolling. Hiding a tab in the lower tabsheet should make the tabsheet width change (auto wide).";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3141;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabsheetTooltip.html b/tests/src/com/vaadin/tests/components/tabsheet/TabsheetTooltip.html
deleted file mode 100644
index d133ab9937..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabsheetTooltip.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>TabsheetTooltip</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TabsheetTooltip</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tabsheet.TabsheetTooltip</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>no-tooltip</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip-tab1</td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>0,0</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tooltip-tab2</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/TabsheetTooltip.java b/tests/src/com/vaadin/tests/components/tabsheet/TabsheetTooltip.java
deleted file mode 100644
index 18934e9318..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/TabsheetTooltip.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import com.vaadin.terminal.UserError;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TabSheet.Tab;
-
-public class TabsheetTooltip extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The label inside the tabsheet should show a tooltip 'This is a label' and the tab should show a different tooltip 'This is a tab'";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2995;
-    }
-
-    @Override
-    protected void setup() {
-        TabSheet tabSheet = new TabSheet();
-        Label l = new Label("Label");
-        l.setDescription("This is a label");
-
-        Tab tab = tabSheet.addTab(l, "Tab", null);
-        tab.setDescription("This is a tab");
-        tab.setComponentError(new UserError("abc error"));
-
-        Tab tab2 = tabSheet.addTab(new Label("Another label, d'oh"), "Tab 2",
-                null);
-        tab2.setDescription("This is another tab");
-
-        addComponent(tabSheet);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/VerticalScrollbarPosition.html b/tests/src/com/vaadin/tests/components/tabsheet/VerticalScrollbarPosition.html
deleted file mode 100644
index 3da03edb6a..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/VerticalScrollbarPosition.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>VerticalScrollbarPosition</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">VerticalScrollbarPosition</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tabsheet.VerticalScrollbarPosition</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>1</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetVerticalScrollbarPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[1]/domChild[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>2</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetVerticalScrollbarPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>3</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstabsheetVerticalScrollbarPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>1</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tabsheet/VerticalScrollbarPosition.java b/tests/src/com/vaadin/tests/components/tabsheet/VerticalScrollbarPosition.java
deleted file mode 100644
index b6e00a1e59..0000000000
--- a/tests/src/com/vaadin/tests/components/tabsheet/VerticalScrollbarPosition.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.vaadin.tests.components.tabsheet;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TextArea;
-import com.vaadin.ui.TextField;
-
-public class VerticalScrollbarPosition extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "A vertical scrollbar in a TabSheet should always be placed at the right edge";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2473;
-    }
-
-    @Override
-    protected void setup() {
-        TabSheet tabsheet = new TabSheet();
-        tabsheet.setWidth(null);
-        tabsheet.setHeight("200px");
-        TextArea tf = new TextArea();
-        tf.setRows(2);
-        tf.setHeight("300px");
-        tf.setWidth("200px");
-        tabsheet.addTab(
-                tf,
-                "A text field that is 200px wide, the tab bar for the tabsheet is wider",
-                null);
-        TextField tf2 = new TextField("Another tab", "b");
-        tf2.setWidth("1000px");
-        tf2.setHeight("50px");
-        tabsheet.addTab(tf2);
-        addComponent(tabsheet);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/textarea/TextAreaBasicStates.html b/tests/src/com/vaadin/tests/components/textarea/TextAreaBasicStates.html
deleted file mode 100644
index 52be660ad2..0000000000
--- a/tests/src/com/vaadin/tests/components/textarea/TextAreaBasicStates.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.textarea.TextAreaTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--Write "content" -->
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_StestComponent</td>
-	<td>content</td>
-</tr>
-<!--Disable event log-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_Smenu#item1</td>
-	<td>26,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>20,8</td>
-</tr>
-<!-- Enabled state -->
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled</td>
-</tr>
-<!--Disable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_Smenu#item0</td>
-	<td>38,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>31,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>57,13</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled</td>
-</tr>
-<!--Set readonly-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_Smenu#item0</td>
-	<td>6,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>20,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled-readonly</td>
-</tr>
-<!--Enable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_Smenu#item0</td>
-	<td>43,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>42,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>53,5</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>readonly</td>
-</tr>
-<!--Set read-write-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_Smenu#item0</td>
-	<td>6,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>20,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/textarea/TextAreaNullRepresentation.html b/tests/src/com/vaadin/tests/components/textarea/TextAreaNullRepresentation.html
deleted file mode 100644
index eb62d30374..0000000000
--- a/tests/src/com/vaadin/tests/components/textarea/TextAreaNullRepresentation.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.textarea.TextAreaTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--ValueChangeListener-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_Smenu#item0</td>
-	<td>35,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>37,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>42,9</td>
-</tr>
-<!--Null representation-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_Smenu#item0</td>
-	<td>22,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>32,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>52,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>17,7</td>
-</tr>
-<!--Type null representation-->
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_StestComponent</td>
-	<td>This is empty</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
-	<td>176,130</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>2. ValueChangeEvent, new value: null</td>
-</tr>
-<!--Enter text-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_StestComponent</td>
-	<td>44,10</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_StestComponent</td>
-	<td>abc</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. ValueChangeEvent, new value: 'abc'</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_StestComponent</td>
-	<td>74,14</td>
-</tr>
-<!--Type null representation-->
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_StestComponent</td>
-	<td>This is empty</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
-	<td>176,130</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>4. ValueChangeEvent, new value: null</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/textarea/TextAreaTest.java b/tests/src/com/vaadin/tests/components/textarea/TextAreaTest.java
deleted file mode 100644
index 8d7b6b3dc9..0000000000
--- a/tests/src/com/vaadin/tests/components/textarea/TextAreaTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.vaadin.tests.components.textarea;
-
-import java.util.LinkedHashMap;
-
-import com.vaadin.tests.components.abstractfield.AbstractTextFieldTest;
-import com.vaadin.ui.TextArea;
-
-public class TextAreaTest extends AbstractTextFieldTest<TextArea> {
-
-    private Command<TextArea, Boolean> wordwrapCommand = new Command<TextArea, Boolean>() {
-        public void execute(TextArea c, Boolean value, Object data) {
-            c.setWordwrap(value);
-        }
-    };
-
-    private Command<TextArea, Integer> rowsCommand = new Command<TextArea, Integer>() {
-        public void execute(TextArea c, Integer value, Object data) {
-            c.setRows(value);
-        }
-    };
-
-    @Override
-    protected Class<TextArea> getTestClass() {
-        return TextArea.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-        createWordwrapAction(CATEGORY_FEATURES);
-        createRowsAction(CATEGORY_FEATURES);
-    }
-
-    private void createRowsAction(String category) {
-        LinkedHashMap<String, Integer> options = createIntegerOptions(20);
-        createSelectAction("Rows", category, options, "3", rowsCommand);
-    }
-
-    private void createWordwrapAction(String category) {
-        createBooleanAction("Wordwrap", category, false, wordwrapCommand);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/textarea/TextAreaWordwrap.html b/tests/src/com/vaadin/tests/components/textarea/TextAreaWordwrap.html
deleted file mode 100644
index 780e95a358..0000000000
--- a/tests/src/com/vaadin/tests/components/textarea/TextAreaWordwrap.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.textarea.Wordwrap?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>wrap-nowrap</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaWordwrap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
-	<td>98,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaWordwrap::</td>
-	<td>396,331</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>wrap-wrap</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaWordwrap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
-	<td>98,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextareaWordwrap::/VVerticalLayout[0]/domChild[0]/domChild[0]</td>
-	<td>387,96</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>wrap-nowrap</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/textarea/Wordwrap.java b/tests/src/com/vaadin/tests/components/textarea/Wordwrap.java
deleted file mode 100644
index 9a443ea757..0000000000
--- a/tests/src/com/vaadin/tests/components/textarea/Wordwrap.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.vaadin.tests.components.textarea;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.LoremIpsum;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.TextArea;
-
-public class Wordwrap extends TestBase {
-
-    @Override
-    public void setup() {
-        HorizontalLayout layout = new HorizontalLayout();
-
-        TextArea area1 = new TextArea("Wrapping");
-        area1.setWordwrap(true); // The default
-        area1.setValue(LoremIpsum.get(50) + "\n" + "Another row");
-
-        final TextArea area2 = new TextArea("Nonwrapping");
-        area2.setWordwrap(false);
-        area2.setValue(LoremIpsum.get(50) + "\n" + "Another row");
-
-        layout.addComponent(area1);
-        layout.addComponent(area2);
-        layout.setSpacing(true);
-
-        addComponent(layout);
-
-        CheckBox onoff = new CheckBox("Wrap state for the right field");
-        onoff.setValue(false);
-        onoff.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                boolean wrap = (Boolean) event.getProperty().getValue();
-                area2.setWordwrap(wrap);
-                if (wrap) {
-                    area2.setCaption("Wrapping");
-                } else {
-                    area2.setCaption("Nonwrapping");
-                }
-
-            }
-        });
-        onoff.setImmediate(true);
-
-        addComponent(onoff);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6003;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/textfield/EnterShortcutMaySendInputPromptAsValue.java b/tests/src/com/vaadin/tests/components/textfield/EnterShortcutMaySendInputPromptAsValue.java
deleted file mode 100644
index bf9924cdbb..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/EnterShortcutMaySendInputPromptAsValue.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.vaadin.tests.components.textfield;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.event.Action;
-import com.vaadin.event.ShortcutAction;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-
-public class EnterShortcutMaySendInputPromptAsValue extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "?";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2935;
-    }
-
-    @Override
-    protected void setup() {
-
-        final TextField testField = new TextField();
-        testField.setInputPrompt("Enter a value");
-
-        getMainWindow().addActionHandler(new Action.Handler() {
-
-            final Action enter = new ShortcutAction("enter",
-                    ShortcutAction.KeyCode.ENTER, null);
-
-            public Action[] getActions(Object target, Object sender) {
-                return new Action[] { enter };
-            }
-
-            public void handleAction(Action action, Object sender, Object target) {
-                if (action == enter) {
-
-                }
-            }
-
-        });
-        testField.addListener(new ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                String value = event.getProperty().getValue().toString();
-                addComponent(new Label("TextField sent value: " + value));
-                testField.setValue("");
-            }
-        });
-
-        addComponent(testField);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/textfield/IE6Cursor.java b/tests/src/com/vaadin/tests/components/textfield/IE6Cursor.java
deleted file mode 100644
index ed25567921..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/IE6Cursor.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.vaadin.tests.components.textfield;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.TextField;
-
-public class IE6Cursor extends TestBase {
-
-    @Override
-    protected void setup() {
-        TextField tf1 = new TextField("First");
-        TextField tf2 = new TextField("Second");
-        tf2.setInputPrompt("prompt");
-
-        addComponent(tf1);
-        addComponent(tf2);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tabbing from the first field to the second should clear the second textfield and show the normal, blinking cursor in the field";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3343;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/textfield/OutOfSyncIssueWithKeyboardShortcut.java b/tests/src/com/vaadin/tests/components/textfield/OutOfSyncIssueWithKeyboardShortcut.java
deleted file mode 100644
index cf59a9d7f4..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/OutOfSyncIssueWithKeyboardShortcut.java
+++ /dev/null
@@ -1,192 +0,0 @@
-package com.vaadin.tests.components.textfield;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.data.util.BeanContainer;
-import com.vaadin.data.util.BeanItem;
-import com.vaadin.event.ShortcutAction.KeyCode;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalSplitPanel;
-
-public class OutOfSyncIssueWithKeyboardShortcut extends TestBase {
-
-    public static class TestToppingsView extends CustomComponent {
-
-        public static class Topping {
-            private Long id;
-            private String name = "ham";
-
-            public void setId(Long id) {
-                this.id = id;
-            }
-
-            public Long getId() {
-                return id;
-            }
-
-            public void setName(String name) {
-                this.name = name;
-            }
-
-            public String getName() {
-                return name;
-            }
-        }
-
-        private Table table = new Table();
-
-        private Form form = new Form();
-
-        private Map<Long, Topping> toppings = new HashMap<Long, Topping>();
-        private long index = 1;
-
-        private String previousFragment = null;
-
-        public TestToppingsView() {
-            setSizeFull();
-
-            VerticalSplitPanel mainLayout = new VerticalSplitPanel();
-            mainLayout.setSplitPosition(30);
-            setCompositionRoot(mainLayout);
-
-            table.setSizeFull();
-            table.setImmediate(true);
-            table.setSelectable(true);
-
-            mainLayout.setFirstComponent(table);
-            mainLayout.setSecondComponent(form);
-
-            form.setImmediate(true);
-            // this is critical for the problem to occur
-            form.setWriteThrough(false);
-
-            HorizontalLayout footer = new HorizontalLayout();
-            footer.setSpacing(true);
-            form.setFooter(footer);
-            Button saveButton = new Button("Save");
-            footer.addComponent(saveButton);
-
-            // make saving the form the default action on Enter keypress
-            saveButton.setClickShortcut(KeyCode.ENTER);
-
-            table.addListener(new ValueChangeListener() {
-                public void valueChange(ValueChangeEvent event) {
-                    Object value = event.getProperty().getValue();
-                    if (value != null) {
-                        String fragment = "edit/"
-                                + String.valueOf(value)
-                                        .replaceAll("[^0-9]", "");
-                        if (!fragment.equals(previousFragment)) {
-                            navigateTo(fragment);
-                        }
-                    }
-                }
-            });
-
-            saveButton.addListener(new ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    form.commit();
-                    Topping entity = getEntityForItem(form.getItemDataSource());
-                    if (entity != null && entity.getId() == null) {
-                        entity.setId(index++);
-                        toppings.put(entity.getId(), entity);
-                    }
-                    refreshTable();
-                    navigateTo(null);
-                }
-            });
-
-            // create new entity at the beginning
-            refreshTable();
-            navigateTo("new");
-        }
-
-        public void navigateTo(String requestedDataId) {
-            previousFragment = requestedDataId;
-
-            if ("new".equals(requestedDataId)) {
-                table.setValue(null);
-                form.setVisible(true);
-                setCurrentEntity(new Topping());
-                form.focus();
-            } else if (requestedDataId != null
-                    && requestedDataId.startsWith("edit/")) {
-                try {
-                    Long id = Long.valueOf(requestedDataId.substring(5));
-                    setCurrentEntity(getEntityForItem(table.getItem(id)));
-                    form.focus();
-                } catch (NumberFormatException e) {
-                    setCurrentEntity(null);
-                }
-            } else {
-                setCurrentEntity(null);
-            }
-        }
-
-        private void refreshTable() {
-            // refresh table
-            BeanContainer<Long, Topping> container = new BeanContainer<Long, Topping>(
-                    Topping.class);
-            container.setBeanIdProperty("id");
-            for (Topping entity : toppings.values()) {
-                container.addBean(entity);
-            }
-            table.setContainerDataSource(container);
-        }
-
-        protected void setCurrentEntity(Topping entity) {
-            form.setVisible(entity != null);
-            if (entity != null) {
-                Item item = table.getItem(entity.getId());
-                if (item == null) {
-                    item = new BeanItem<Topping>(entity);
-                }
-                form.setItemDataSource(item, Collections.singleton("name"));
-            } else {
-                form.setItemDataSource(null);
-            }
-        }
-
-        public Topping getEntityForItem(Item item) {
-            if (item != null) {
-                return ((BeanItem<Topping>) item).getBean();
-            } else {
-                return null;
-            }
-        }
-
-    }
-
-    @Override
-    protected void setup() {
-        TestToppingsView testToppingsView = new TestToppingsView();
-        addComponent(testToppingsView);
-        getLayout().setSizeFull();
-        getLayout().setExpandRatio(testToppingsView, 1);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Focus the text field and press ENTER.\n"
-                + "Click on the table row to edit it, change the text to \"ahm\" using the keyboard and press ENTER again.\n"
-                + "Then select the table row again.\n"
-                + "This causes an Out of Sync error if the cursor position for the text field is sent too late to a component that is no longer in the layout.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6834;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/textfield/SelectionAndCursorPosition.html b/tests/src/com/vaadin/tests/components/textfield/SelectionAndCursorPosition.html
deleted file mode 100644
index c058d8d975..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/SelectionAndCursorPosition.html
+++ /dev/null
@@ -1,222 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>SelectionAndCursorPosition</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">SelectionAndCursorPosition</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.textfield.SelectionAndCursorPosition?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>singleline-all</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>79,13</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>5</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>15</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>109,16</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>109,16</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>10</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>singleline-partly</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[1]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>37,9</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[1]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>15</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[1]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>singleline-cursor</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VCheckBox[0]/domChild[0]</td>
-	<td>9,1</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>multiline-all</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>multiline-partly</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[1]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>multiline-cursor</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/textfield/SelectionAndCursorPosition.java b/tests/src/com/vaadin/tests/components/textfield/SelectionAndCursorPosition.java
deleted file mode 100644
index d362a3050d..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/SelectionAndCursorPosition.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.vaadin.tests.components.textfield;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.FormLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TextField;
-
-public class SelectionAndCursorPosition extends TestBase {
-
-    TextField tf = new TextField();
-
-    @Override
-    protected void setup() {
-
-        tf.setCaption("Text field");
-        tf.setValue("So we have some text to select");
-        tf.setWidth("400px");
-
-        FormLayout fl = new FormLayout();
-        Panel panel = new Panel(fl);
-        panel.setCaption("Hackers panel");
-        CheckBox ml = new CheckBox("Multiline");
-        ml.setImmediate(true);
-        ml.addListener(new Property.ValueChangeListener() {
-            @SuppressWarnings("deprecation")
-            public void valueChange(ValueChangeEvent event) {
-                if (tf.getHeight() < 0) {
-                    tf.setHeight("50px");
-                } else {
-                    tf.setSizeUndefined();
-                    tf.setRows(0);
-                }
-                tf.setWidth("400px");
-            }
-        });
-        fl.addComponent(ml);
-
-        Button b = new Button("Select all ( selectAll() )");
-        b.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                tf.selectAll();
-            }
-        });
-        fl.addComponent(b);
-
-        HorizontalLayout selectRange = new HorizontalLayout();
-        selectRange
-                .setCaption("Select range of text ( setSelectionRange(int start, int lengt) )");
-        final TextField start = new TextField("From:");
-        final TextField length = new TextField("Selection length:");
-        b = new Button("select");
-        b.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                int startPos = Integer.parseInt((String) start.getValue());
-                int lenght = Integer.parseInt((String) length.getValue());
-                tf.setSelectionRange(startPos, lenght);
-            }
-        });
-
-        selectRange.addComponent(start);
-        selectRange.addComponent(length);
-        selectRange.addComponent(b);
-        fl.addComponent(selectRange);
-
-        HorizontalLayout setCursorPosition = new HorizontalLayout();
-        final TextField pos = new TextField("Position:");
-        b = new Button("set");
-        b.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                int startPos = Integer.parseInt((String) pos.getValue());
-                tf.setCursorPosition(startPos);
-            }
-        });
-
-        setCursorPosition.addComponent(pos);
-        setCursorPosition.addComponent(b);
-        setCursorPosition
-                .setCaption("Set cursor position ( setCursorPosition(int pos) )");
-        fl.addComponent(setCursorPosition);
-
-        getLayout().addComponent(tf);
-        getLayout().addComponent(panel);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "For usability reasons it is often essential that developer "
-                + "can hint how to select the text in the "
-                + "field or where to set the cursor position.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2058;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/textfield/SetTabIndex.html b/tests/src/com/vaadin/tests/components/textfield/SetTabIndex.html
deleted file mode 100644
index b61b464f97..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/SetTabIndex.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8080/" />
-<title>SetTabIndex</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">SetTabIndex</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.textfield.SetTabIndex?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>39,10</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>111</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextField[0]</td>
-	<td>222</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>333</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
-	<td>444</td>
-</tr>
-<tr>
-	<td>pressSpecialKey</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VCheckBox[0]/domChild[0]</td>
-	<td>enter</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>333</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextField[0]</td>
-	<td>222</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
-	<td>444</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>111</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VCheckBox[0]/domChild[0]</td>
-	<td>-22,-191</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>readonly</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VCheckBox[0]/domChild[0]</td>
-	<td>8,11</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
-	<td>444</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
-	<td>555</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>666</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextField[0]</td>
-	<td>777</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>888</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
-	<td>555</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextField[0]</td>
-	<td>777</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>666</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>888</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/textfield/SetTabIndex.java b/tests/src/com/vaadin/tests/components/textfield/SetTabIndex.java
deleted file mode 100644
index d81d26591a..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/SetTabIndex.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.vaadin.tests.components.textfield;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.TextField;
-
-public class SetTabIndex extends TestBase {
-
-    @Override
-    protected void setup() {
-        final TextField field1 = new TextField("Field1 (tabindex 1)");
-        field1.setTabIndex(1);
-        addComponent(field1);
-
-        final TextField field3 = new TextField("Field3 (tabindex 3)");
-        field3.setTabIndex(3);
-        addComponent(field3);
-
-        final TextField field2 = new TextField("Field2 (tabindex 2)");
-        field2.setTabIndex(2);
-        addComponent(field2);
-
-        final TextField field0 = new TextField("Field2 (tabindex 0)");
-        addComponent(field0);
-
-        final CheckBox readonly = new CheckBox("Readonly");
-        readonly.setImmediate(true);
-        readonly.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                boolean readonly = Boolean.valueOf(event.getProperty()
-                        .getValue().toString());
-                field1.setReadOnly(readonly);
-                field2.setReadOnly(readonly);
-                field3.setReadOnly(readonly);
-                field0.setReadOnly(readonly);
-            }
-        });
-        addComponent(readonly);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "One should be able to set the TabIndex";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5487;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/textfield/SizedTextFields.java b/tests/src/com/vaadin/tests/components/textfield/SizedTextFields.java
deleted file mode 100644
index 93ab80b88a..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/SizedTextFields.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.vaadin.tests.components.textfield;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-public class SizedTextFields extends TestBase {
-
-    @SuppressWarnings("deprecation")
-    @Override
-    protected void setup() {
-
-        TextField tf;
-
-        VerticalLayout vl;
-
-        CssLayout cssLayout = new CssLayout() {
-            @Override
-            protected String getCss(Component c) {
-                return "margin-top: 20px; background:red;";
-            }
-        };
-
-        vl = new VerticalLayout();
-        vl.setHeight("40px");
-        vl.setWidth("200px");
-
-        tf = new TextField();
-        tf.setSizeFull();
-        vl.addComponent(tf);
-        vl.setCaption("Fullsize textfield in 40px height 200px width box");
-        cssLayout.addComponent(vl);
-
-        vl = new VerticalLayout();
-        vl.setHeight("40px");
-        vl.setWidth("200px");
-
-        tf = new TextField();
-        tf.setRows(2); // make it text area, instead of oneliner
-        tf.setSizeFull();
-        vl.addComponent(tf);
-        vl.setCaption("Fullsize textarea in 100px height 200px width box");
-        cssLayout.addComponent(vl);
-
-        vl = new VerticalLayout();
-        vl.setSizeUndefined();
-
-        tf = new TextField();
-        vl.addComponent(tf);
-        vl.setCaption("Normal textfield in natural size.");
-        cssLayout.addComponent(vl);
-
-        getLayout().addComponent(cssLayout);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "TextField sizing is problematic with old IE browsers. "
-                + "This test is to verify correct size. No red color should "
-                + "be visible in IE (at least with default windows themes) "
-                + "and textfields should not look clipped.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2058;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextChangeEvents.java b/tests/src/com/vaadin/tests/components/textfield/TextChangeEvents.java
deleted file mode 100644
index f754beb792..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextChangeEvents.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package com.vaadin.tests.components.textfield;
-
-import com.vaadin.event.FieldEvents.TextChangeEvent;
-import com.vaadin.event.FieldEvents.TextChangeListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.tests.util.TestUtils;
-import com.vaadin.ui.AbstractTextField.TextChangeEventMode;
-import com.vaadin.ui.TextArea;
-import com.vaadin.ui.TextField;
-
-public class TextChangeEvents extends TestBase {
-    Log l = new Log(10);
-
-    @Override
-    protected void setup() {
-
-        TextField tf = new TextField("Default");
-
-        TextChangeListener inputEventListener = new TextChangeListener() {
-
-            public void textChange(TextChangeEvent event) {
-                l.log("Text change event for  "
-                        + event.getComponent().getCaption()
-                        + ", text content currently:'" + event.getText()
-                        + "' Cursor at index:" + event.getCursorPosition());
-            }
-        };
-
-        tf.addListener(inputEventListener);
-
-        getLayout().addComponent(tf);
-
-        TextField eager = new TextField("Eager");
-        eager.addListener(inputEventListener);
-        eager.setTextChangeEventMode(TextChangeEventMode.EAGER);
-        getLayout().addComponent(eager);
-
-        TextField to = new TextField("Timeout 3s");
-        to.addListener(inputEventListener);
-        to.setTextChangeEventMode(TextChangeEventMode.TIMEOUT);
-        to.setTextChangeTimeout(3000);
-        getLayout().addComponent(to);
-
-        TextArea ta = new TextArea("Default text area");
-        ta.addListener(inputEventListener);
-        getLayout().addComponent(ta);
-
-        VaadinDeveloperNameField vd = new VaadinDeveloperNameField();
-        vd.addListener(inputEventListener);
-        getLayout().addComponent(vd);
-
-        getLayout().addComponent(l);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Simple TextChangeEvent test cases.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-    /**
-     * "Autosuggest"
-     * 
-     * Known issue is timing if suggestion comes while typing more content. IMO
-     * we will not support this kind of features in default TextField, but
-     * hopefully make it easily extendable to perfect suggest feature. MT
-     * 2010-10
-     * 
-     */
-    private class VaadinDeveloperNameField extends TextField implements
-            TextChangeListener {
-        private String[] names = new String[] { "Matti Tahvonen",
-                "Marc Englund", "Joonas Lehtinen", "Jouni Koivuviita",
-                "Marko Grönroos", "Artur Signell" };
-
-        public VaadinDeveloperNameField() {
-            setCaption("Start typing 'old' Vaadin developers.");
-            addListener((TextChangeListener) this);
-            setStyleName("nomatch");
-        }
-
-        @Override
-        public void attach() {
-            super.attach();
-            TestUtils.injectCSS(getWindow(), ".match { background:green ;} "
-                    + ".nomatch {background:red;}");
-        }
-
-        public void textChange(TextChangeEvent event) {
-            boolean atTheEndOfText = event.getText().length() == getCursorPosition();
-            String match = findMatch(event.getText());
-            if (match != null) {
-                setStyleName("match");
-                String curText = event.getText();
-                int matchlenght = curText.length();
-                // autocomplete if garret is at the end of the text
-                if (atTheEndOfText) {
-                    suggest(match, matchlenght);
-                } else {
-                    keepCurrentText(event.getText());
-                }
-            } else {
-                keepCurrentText(event.getText());
-                setStyleName("nomatch");
-            }
-        }
-
-        private void keepCurrentText(String curText) {
-            // keep the current text in the field despite the repaint due to
-            // classname change
-            setValue(curText);
-            setCursorPosition(getCursorPosition());
-        }
-
-        private void suggest(String match, int matchlenght) {
-            setValue(match);
-            setSelectionRange(matchlenght, match.length() - matchlenght);
-        }
-
-        private String findMatch(String currentTextContent) {
-            if (currentTextContent.length() > 0) {
-                for (int i = 0; i < names.length; i++) {
-                    if (names[i].startsWith(currentTextContent)) {
-                        return names[i];
-                    }
-                }
-            }
-            return null;
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextChangeEvents2.java b/tests/src/com/vaadin/tests/components/textfield/TextChangeEvents2.java
deleted file mode 100644
index b40ebb2434..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextChangeEvents2.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package com.vaadin.tests.components.textfield;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.event.FieldEvents.BlurEvent;
-import com.vaadin.event.FieldEvents.BlurListener;
-import com.vaadin.event.FieldEvents.FocusEvent;
-import com.vaadin.event.FieldEvents.FocusListener;
-import com.vaadin.event.FieldEvents.TextChangeEvent;
-import com.vaadin.event.FieldEvents.TextChangeListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractTextField.TextChangeEventMode;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-
-public class TextChangeEvents2 extends TestBase {
-    @Override
-    protected void setup() {
-
-        {
-            final TextField tf = new TextField("Debug");
-            getLayout().addComponent(tf);
-
-            tf.addListener(new TextChangeListener() {
-                public void textChange(TextChangeEvent event) {
-                    System.err.println(tf.getCaption() + " textChange");
-                }
-            });
-
-            tf.addListener(new ValueChangeListener() {
-                public void valueChange(ValueChangeEvent event) {
-                    System.err.println(tf.getCaption() + " valueChange");
-                }
-            });
-
-            tf.addListener(new BlurListener() {
-
-                public void blur(BlurEvent event) {
-                    System.err.println(tf.getCaption() + " blur");
-                }
-            });
-
-            tf.addListener(new FocusListener() {
-                public void focus(FocusEvent event) {
-                    System.err.println(tf.getCaption() + " focus");
-                }
-            });
-
-        }
-
-        {
-            final TextField tf = new TextField("Label");
-            getLayout().addComponent(tf);
-            final Label l = new Label();
-            getLayout().addComponent(l);
-            tf.addListener(new TextChangeListener() {
-                public void textChange(TextChangeEvent event) {
-                    l.setValue(event.getText());
-                }
-            });
-
-            tf.addListener(new ValueChangeListener() {
-                public void valueChange(ValueChangeEvent event) {
-                    System.err.println(tf.getCaption() + " valueChange");
-                }
-            });
-
-        }
-
-        {
-            final TextField tf = new TextField("Slow label");
-            tf.setTextChangeTimeout(2000);
-            tf.setImmediate(true);
-            getLayout().addComponent(tf);
-            final Label l = new Label();
-            getLayout().addComponent(l);
-            tf.addListener(new TextChangeListener() {
-
-                public void textChange(TextChangeEvent event) {
-                    l.setValue(event.getText());
-                }
-            });
-
-            tf.addListener(new ValueChangeListener() {
-                public void valueChange(ValueChangeEvent event) {
-                    System.err.println(tf.getCaption() + " valueChange");
-                }
-            });
-
-        }
-
-        {
-            final TextField tf = new TextField("Uppercase");
-            tf.setTextChangeTimeout(1);
-            getLayout().addComponent(tf);
-            final Label l = new Label();
-            getLayout().addComponent(l);
-            tf.addListener(new TextChangeListener() {
-
-                public void textChange(TextChangeEvent event) {
-                    tf.setValue(event.getText().toUpperCase());
-                }
-            });
-
-            tf.addListener(new ValueChangeListener() {
-                public void valueChange(ValueChangeEvent event) {
-                    System.err.println(tf.getCaption() + " valueChange");
-                }
-            });
-
-        }
-
-        {
-            final TextField[] tfs = new TextField[] { new TextField(),
-                    new TextField(), new TextField(), new TextField() };
-            HorizontalLayout hl = new HorizontalLayout();
-            hl.setCaption("Blää");
-            getLayout().addComponent(hl);
-            for (TextField tf : tfs) {
-                tf.setColumns(4);
-                tf.setTextChangeEventMode(TextChangeEventMode.EAGER);
-                hl.addComponent(tf);
-
-                tf.addListener(new TextChangeListener() {
-
-                    public void textChange(TextChangeEvent event) {
-                        String txt = event.getText();
-                        int len = txt.length();
-                        if (len >= 4) {
-                            int idx = 0;
-                            while (tfs[idx] != event.getComponent()) {
-                                idx++;
-                            }
-                            tfs[idx].setValue("");
-                            tfs[idx].setValue(txt.substring(0, 4));
-                            if (idx < tfs.length - 1) {
-                                TextField next = tfs[idx + 1];
-                                next.focus();
-                                if (len > 4) {
-                                    next.setValue(txt.substring(4, len > 8 ? 8
-                                            : len));
-                                } else {
-                                    next.selectAll();
-                                }
-                            }
-                        }
-                    }
-                });
-                tf.addListener(new ValueChangeListener() {
-
-                    public void valueChange(ValueChangeEvent event) {
-                        TextField tf = (TextField) event.getProperty();
-                        String val = (String) tf.getValue();
-                        if (val != null && val.length() > 4) {
-                            tf.setValue(val.substring(0, 4));
-                        }
-                    }
-                });
-            }
-
-        }
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Another set of simple use case/tests for TextChangeEvents";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2387;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextChangeEventsEternalLoop.html b/tests/src/com/vaadin/tests/components/textfield/TextChangeEventsEternalLoop.html
deleted file mode 100644
index 6f0772aa29..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextChangeEventsEternalLoop.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TextChangeEventsEternalLoop</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TextChangeEventsEternalLoop</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.textfield.TextChangeEventsEternalLoop?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextChangeEventsEternalLoop::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>99,4</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextChangeEventsEternalLoop::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>g</td>
-</tr>
-<tr>
-	<td>verifyValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextChangeEventsEternalLoop::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>g</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextChangeEventsEternalLoop.java b/tests/src/com/vaadin/tests/components/textfield/TextChangeEventsEternalLoop.java
deleted file mode 100644
index 22348bb5b5..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextChangeEventsEternalLoop.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.vaadin.tests.components.textfield;
-
-import com.vaadin.event.FieldEvents.TextChangeEvent;
-import com.vaadin.event.FieldEvents.TextChangeListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.TextField;
-
-public class TextChangeEventsEternalLoop extends TestBase {
-    @Override
-    protected void setup() {
-
-        final TextField tf = new TextField("Debug");
-        getLayout().addComponent(tf);
-
-        tf.addListener(new TextChangeListener() {
-            public void textChange(TextChangeEvent event) {
-                tf.setValue(event.getText());
-            }
-        });
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Moving current text to value in text change listener should not cause eternal loop.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6376;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextChangeEventsWithNonImmediateValueChange.java b/tests/src/com/vaadin/tests/components/textfield/TextChangeEventsWithNonImmediateValueChange.java
deleted file mode 100644
index a893739bff..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextChangeEventsWithNonImmediateValueChange.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.vaadin.tests.components.textfield;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.event.FieldEvents.TextChangeEvent;
-import com.vaadin.event.FieldEvents.TextChangeListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.TextField;
-
-public class TextChangeEventsWithNonImmediateValueChange extends TestBase {
-    Log l = new Log(5);
-
-    @Override
-    protected void setup() {
-
-        TextField tf = new TextField("Default");
-
-        TextChangeListener inputEventListener = new TextChangeListener() {
-
-            public void textChange(TextChangeEvent event) {
-                l.log("Text change event for  "
-                        + event.getComponent().getCaption()
-                        + ", text content currently:'" + event.getText()
-                        + "' Cursor at index:" + event.getCursorPosition());
-            }
-        };
-
-        tf.addListener(inputEventListener);
-
-        // tf.setImmediate(true); // works when this is set
-
-        tf.addListener(new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                l.log("Value change:" + event.getProperty().toString());
-            }
-        });
-
-        getLayout().addComponent(tf);
-
-        getLayout().addComponent(l);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Type a, pause for a second, type ENTER,  type a. Text field should not forget the last textchange event right after valuechange (enter).";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6866;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextChangeTimeoutAfterDetach.html b/tests/src/com/vaadin/tests/components/textfield/TextChangeTimeoutAfterDetach.html
deleted file mode 100644
index 544cea9faa..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextChangeTimeoutAfterDetach.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.textfield.TextChangeTimeoutAfterDetach?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextChangeTimeoutAfterDetach::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>119,12</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextChangeTimeoutAfterDetach::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>aaaa</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextChangeTimeoutAfterDetach::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<!--Wait for 3 seconds so the timeout occurs-->
-<tr>
-	<td>pause</td>
-	<td>3000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextChangeTimeoutAfterDetach.java b/tests/src/com/vaadin/tests/components/textfield/TextChangeTimeoutAfterDetach.java
deleted file mode 100644
index d1f856f40c..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextChangeTimeoutAfterDetach.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.vaadin.tests.components.textfield;
-
-import com.vaadin.event.FieldEvents.TextChangeEvent;
-import com.vaadin.event.FieldEvents.TextChangeListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractTextField.TextChangeEventMode;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-
-public class TextChangeTimeoutAfterDetach extends TestBase {
-
-    @Override
-    protected void setup() {
-        final TextField field = new TextField();
-        field.setImmediate(false);
-        field.setTextChangeTimeout(2000);
-        field.setTextChangeEventMode(TextChangeEventMode.TIMEOUT);
-        field.addListener(new TextChangeListener() {
-            public void textChange(TextChangeEvent event) {
-                // Need to add a listener for events to occur
-            }
-        });
-        addComponent(field);
-        
-        Button detachBtn = new Button("detach field",
-                new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                        removeComponent(field);
-                        getLayout().addComponentAsFirst(
-                                new Label("Field detached!"));
-            }
-        });
-        addComponent(detachBtn);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The textfield has a TextChangeTimout of 1 second. Edit the field and immidietly detach the field and you will cause an \"Out Of Sync\" error.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6507;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextFieldBasicStates.html b/tests/src/com/vaadin/tests/components/textfield/TextFieldBasicStates.html
deleted file mode 100644
index 823cbeb4e7..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextFieldBasicStates.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.textfield.TextFieldTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--Write "content" -->
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>content</td>
-</tr>
-<!--Disable event log-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item1</td>
-	<td>26,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>20,8</td>
-</tr>
-<!-- Enabled state -->
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled</td>
-</tr>
-<!--Disable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>38,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>31,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>57,13</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled</td>
-</tr>
-<!--Set readonly-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>6,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>20,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled-readonly</td>
-</tr>
-<!--Enable-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>43,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>42,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>53,5</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>readonly</td>
-</tr>
-<!--Set read-write-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>6,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>20,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextFieldEagerRepaint.html b/tests/src/com/vaadin/tests/components/textfield/TextFieldEagerRepaint.html
deleted file mode 100644
index ecd0467fb2..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextFieldEagerRepaint.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.textfield.TextFieldEagerRepaint?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>78,8</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>abCDef</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td></td>
-	<td>100</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>abef</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>73,15</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>a</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td></td>
-	<td>100</td>
-</tr>
-<tr>
-	<td>assertElementWidth</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>150</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>aB</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td></td>
-	<td>100</td>
-</tr>
-<tr>
-	<td>assertElementWidth</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>100</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
-	<td>aB</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextFieldEagerRepaint.java b/tests/src/com/vaadin/tests/components/textfield/TextFieldEagerRepaint.java
deleted file mode 100644
index 08751a59fd..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextFieldEagerRepaint.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.vaadin.tests.components.textfield;
-
-import com.vaadin.event.FieldEvents.TextChangeEvent;
-import com.vaadin.event.FieldEvents.TextChangeListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractTextField.TextChangeEventMode;
-import com.vaadin.ui.TextField;
-
-public class TextFieldEagerRepaint extends TestBase {
-
-    @Override
-    protected void setup() {
-
-        final TextField tf1 = new TextField("Updates value");
-        tf1.setTextChangeEventMode(TextChangeEventMode.EAGER);
-        tf1.addListener(new TextChangeListener() {
-            public void textChange(TextChangeEvent event) {
-                String text = event.getText();
-                if (!text.matches("[a-z]*")) {
-                    String newValue = text.replaceAll("[^a-z]", "");
-                    tf1.setValue(newValue);
-                }
-            }
-        });
-
-        final TextField tf2 = new TextField("Updates width");
-        tf2.setTextChangeEventMode(TextChangeEventMode.EAGER);
-        tf2.addListener(new TextChangeListener() {
-            public void textChange(TextChangeEvent event) {
-                String text = event.getText();
-                if (!text.matches("[a-z]*")) {
-                    tf2.setWidth("100px");
-                } else {
-                    tf2.setWidth("150px");
-                }
-            }
-        });
-
-        addComponent(tf1);
-        addComponent(tf2);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Updating the value in an EAGER TextChangeListener should send the new value to the client while updating something else (e.g. the width) should preserve the text in the field. Both fields react when the field contains anything else than lower case letters a-z";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return Integer.valueOf(6588);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextFieldFocusAndBlurListeners.java b/tests/src/com/vaadin/tests/components/textfield/TextFieldFocusAndBlurListeners.java
deleted file mode 100644
index e2f5c45b72..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextFieldFocusAndBlurListeners.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.vaadin.tests.components.textfield;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.event.FieldEvents.BlurEvent;
-import com.vaadin.event.FieldEvents.BlurListener;
-import com.vaadin.event.FieldEvents.FocusEvent;
-import com.vaadin.event.FieldEvents.FocusListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.TextField;
-
-public class TextFieldFocusAndBlurListeners extends TestBase implements
-        FocusListener, BlurListener, ValueChangeListener {
-    private Log log = new Log(5).setNumberLogRows(false);
-
-    @Override
-    protected String getDescription() {
-        return "Tests the focus and blur functionality of TextField";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3544;
-    }
-
-    @Override
-    public void setup() {
-        addComponent(log);
-        TextField tf1 = new TextField("TextField 1",
-                "Has focus and blur listeners");
-        tf1.setWidth("300px");
-        tf1.addListener((FocusListener) this);
-        tf1.addListener((BlurListener) this);
-
-        addComponent(tf1);
-
-        TextField tf2 = new TextField("TextField 2",
-                "Has focus, blur and valuechange listeners");
-        tf2.setWidth("300px");
-        tf2.addListener(new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                TextFieldFocusAndBlurListeners.this.valueChange(event);
-            }
-        });
-        tf2.addListener(new FocusListener() {
-
-            public void focus(FocusEvent event) {
-                TextFieldFocusAndBlurListeners.this.focus(event);
-            }
-
-        });
-        tf2.addListener(new BlurListener() {
-
-            public void blur(BlurEvent event) {
-                TextFieldFocusAndBlurListeners.this.blur(event);
-            }
-        });
-
-        addComponent(tf2);
-
-        TextField tf3 = new TextField("TextField 3",
-                "Has non-immediate valuechange listener");
-        tf3.setWidth("300px");
-        tf3.addListener((ValueChangeListener) this);
-
-        addComponent(tf3);
-
-        TextField tf4 = new TextField("TextField 4",
-                "Has immediate valuechange listener");
-        tf4.setWidth("300px");
-        tf4.setImmediate(true);
-        tf4.addListener((ValueChangeListener) this);
-
-        addComponent(tf4);
-    }
-
-    public void focus(FocusEvent event) {
-        log.log(event.getComponent().getCaption() + ": Focus");
-
-    }
-
-    public void blur(BlurEvent event) {
-        TextField tf = (TextField) event.getComponent();
-        log.log(tf.getCaption() + ": Blur. Value is: "
-                + tf.getValue().toString());
-
-    }
-
-    public void valueChange(ValueChangeEvent event) {
-        TextField tf = (TextField) event.getProperty();
-        log.log(tf.getCaption() + ": ValueChange: " + tf.getValue().toString());
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextFieldInLayoutInTable.html b/tests/src/com/vaadin/tests/components/textfield/TextFieldInLayoutInTable.html
deleted file mode 100644
index e53e8ed601..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextFieldInLayoutInTable.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.textfield.TextFieldInLayoutInTable</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextFieldInLayoutInTable.java b/tests/src/com/vaadin/tests/components/textfield/TextFieldInLayoutInTable.java
deleted file mode 100644
index 451bc03f05..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextFieldInLayoutInTable.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.vaadin.tests.components.textfield;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-@SuppressWarnings("serial")
-public class TextFieldInLayoutInTable extends Application {
-
-    @Override
-    public void init() {
-
-        final Window mainWindow = new Window(this.getClass().getName());
-        setMainWindow(mainWindow);
-
-        final Table table = new Table();
-        table.addContainerProperty("column1", Component.class, null);
-        final Panel panel = new Panel("Panel");
-        ((VerticalLayout) panel.getContent()).setMargin(false);
-        VerticalLayout vl = new VerticalLayout();
-        final TextField textField = new TextField();
-        vl.addComponent(textField);
-
-        table.addItem(new Object[] { vl }, 1);
-
-        table.setSizeFull();
-        mainWindow.addComponent(table);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextFieldMaxLength.html b/tests/src/com/vaadin/tests/components/textfield/TextFieldMaxLength.html
deleted file mode 100644
index 01c35aeea0..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextFieldMaxLength.html
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TextFieldMaxLength</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TextFieldMaxLength</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.textfield.TextFieldTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--ValueChangeListener-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>38,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>30,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>62,12</td>
-</tr>
-<!--MaxLength 5-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>29,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>38,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>76,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item5</td>
-	<td>22,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>57,13</td>
-</tr>
-<!--Enter some text-->
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>123456789012345</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>12345</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>2. ValueChangeEvent, new value: '12345'</td>
-</tr>
-<!--MaxLength 10-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>29,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>38,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>76,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item10</td>
-	<td>22,8</td>
-</tr>
-<!--Firefox 4 beta needs a brief pause to update the max length-->
-<tr>
-	<td>pause</td>
-	<td>1000</td>
-	<td></td>
-</tr>
-<!--Enter some text-->
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>123456789012345</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>1234567890</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>4. ValueChangeEvent, new value: '1234567890'</td>
-</tr>
-<!--Remove max length-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>29,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>38,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>76,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item14</td>
-	<td>22,8</td>
-</tr>
-<!--Enter some text-->
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>123456789012345</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>123456789012345</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>6. ValueChangeEvent, new value: '123456789012345'</td>
-</tr>
-<!--MaxLength 0-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>20,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>33,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>51,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>9,9</td>
-</tr>
-<!--Enter some text-->
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>123456789012345</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>8. ValueChangeEvent, new value: ''</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextFieldNullRepresentation.html b/tests/src/com/vaadin/tests/components/textfield/TextFieldNullRepresentation.html
deleted file mode 100644
index 5506351d34..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextFieldNullRepresentation.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.textfield.TextFieldTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--ValueChangeListener-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>35,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>37,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>42,9</td>
-</tr>
-<!--Null representation-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>22,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>32,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>52,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>17,7</td>
-</tr>
-<!--Type null representation-->
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>This is empty</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
-	<td>176,130</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>2. ValueChangeEvent, new value: null</td>
-</tr>
-<!--Enter text-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>44,10</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>abc</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. ValueChangeEvent, new value: 'abc'</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>74,14</td>
-</tr>
-<!--Type null representation-->
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>This is empty</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
-	<td>176,130</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>4. ValueChangeEvent, new value: null</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextFieldNullRepresentationAndSelection.html b/tests/src/com/vaadin/tests/components/textfield/TextFieldNullRepresentationAndSelection.html
deleted file mode 100644
index d1882575d1..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextFieldNullRepresentationAndSelection.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.textfield.TextFieldTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--ValueChangeListener-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>38,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>30,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>62,12</td>
-</tr>
-<!--Null representation "This is empty"-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>1,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>27,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>64,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>64,8</td>
-</tr>
-<!--non-empty contents-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>90,11</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>Not empty</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>2. ValueChangeEvent, new value: 'Not empty'</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>Not empty</td>
-</tr>
-<!--empty contents "This is empty"-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>102,10</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>This is empty</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
-	<td>114,149</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. ValueChangeEvent, new value: null</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>This is empty</td>
-</tr>
-<!--Turn off null selection allowed-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>28,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>23,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>94,10</td>
-</tr>
-<!--Change text to something else and back to null representation-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>84,13</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>This is empty2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
-	<td>120,102</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>5. ValueChangeEvent, new value: 'This is empty2'</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>This is empty2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>101,19</td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>This is empty</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
-	<td>163,129</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>6. ValueChangeEvent, new value: 'This is empty'</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>This is empty</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextFieldSecret.html b/tests/src/com/vaadin/tests/components/textfield/TextFieldSecret.html
deleted file mode 100644
index 1e5a295971..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextFieldSecret.html
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.textfield.TextFieldTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--Disable event log-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item1</td>
-	<td>19,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>24,1</td>
-</tr>
-<!--Enter "s3cr3t" in the TextField-->
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>s3cr3t</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>normal</td>
-</tr>
-<!--Change to secret-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>38,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item6</td>
-	<td>25,12</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>secret</td>
-</tr>
-<!--Change to normal-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>38,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item6</td>
-	<td>25,12</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>normal</td>
-</tr>
-<!--Change to secret-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>38,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item6</td>
-	<td>25,12</td>
-</tr>
-<!--ValueChangeListener-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>38,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>30,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>62,12</td>
-</tr>
-<!--Enable and clear event log-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item1</td>
-	<td>19,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>24,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item1</td>
-	<td>19,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item1</td>
-	<td>24,1</td>
-</tr>
-<!--Value -> Test-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>21,2</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
-	<td>24,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>37,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>37,4</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>1. ValueChangeEvent, new value: 'Test'</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>Test</td>
-</tr>
-<!--Change to normal-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>38,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>51,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item6</td>
-	<td>25,12</td>
-</tr>
-<tr>
-	<td>assertValue</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>Test</td>
-</tr>
-<!---->
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextFieldTest.java b/tests/src/com/vaadin/tests/components/textfield/TextFieldTest.java
deleted file mode 100644
index 81b753d6e4..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextFieldTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.vaadin.tests.components.textfield;
-
-import java.util.LinkedHashMap;
-
-import com.vaadin.event.FieldEvents.TextChangeListener;
-import com.vaadin.tests.components.abstractfield.AbstractTextFieldTest;
-import com.vaadin.ui.TextField;
-
-public class TextFieldTest extends AbstractTextFieldTest<TextField> implements
-        TextChangeListener {
-
-    private Command<TextField, Boolean> secretCommand = new Command<TextField, Boolean>() {
-        @SuppressWarnings("deprecation")
-        public void execute(TextField c, Boolean value, Object data) {
-            c.setSecret(value);
-        }
-    };
-
-    private Command<TextField, Boolean> wordwrapCommand = new Command<TextField, Boolean>() {
-        @SuppressWarnings("deprecation")
-        public void execute(TextField c, Boolean value, Object data) {
-            c.setWordwrap(value);
-        }
-    };
-
-    private Command<TextField, Integer> rowsCommand = new Command<TextField, Integer>() {
-        @SuppressWarnings("deprecation")
-        public void execute(TextField c, Integer value, Object data) {
-            c.setRows(value);
-        }
-    };
-
-    @Override
-    protected Class<TextField> getTestClass() {
-        return TextField.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-        createSecretAction(CATEGORY_FEATURES);
-        createWordwrapAction(CATEGORY_FEATURES);
-        createRowsAction(CATEGORY_FEATURES);
-    }
-
-    private void createRowsAction(String category) {
-        LinkedHashMap<String, Integer> options = createIntegerOptions(20);
-        createSelectAction("Rows", category, options, "0", rowsCommand);
-    }
-
-    private void createSecretAction(String category) {
-        createBooleanAction("Secret", category, false, secretCommand);
-    }
-
-    private void createWordwrapAction(String category) {
-        createBooleanAction("Wordwrap", category, false, wordwrapCommand);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextFieldTextChangeEvent.htm b/tests/src/com/vaadin/tests/components/textfield/TextFieldTextChangeEvent.htm
deleted file mode 100644
index e6ccc0f254..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextFieldTextChangeEvent.htm
+++ /dev/null
@@ -1,359 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<!-- Only works properly in Firefox and therefore named .htm instead of .html. Other browsers do not enter text with keydown,keypress,keyup combo. Cannot use pressSpecialKey either for some reason (not even in Firefox) -->
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.textfield.TextFieldTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--Enable text change listener-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>37,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>36,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>73,6</td>
-</tr>
-<!--Eager mode-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>36,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>36,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>98,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>30,5</td>
-</tr>
-<!--Enter "abc" and ensure there is one event for each change-->
-<tr>
-	<td>keyDown</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>a</td>
-</tr>
-<tr>
-	<td>keyPress</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>a</td>
-</tr>
-<tr>
-	<td>keyUp</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>a</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>keyDown</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>b</td>
-</tr>
-<tr>
-	<td>keyPress</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>b</td>
-</tr>
-<tr>
-	<td>keyUp</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>b</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>keyDown</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>c</td>
-</tr>
-<tr>
-	<td>keyPress</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>c</td>
-</tr>
-<tr>
-	<td>keyUp</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>c</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<!--Type is needed for a ValueChange to be sent when blurring the field-->
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>abc</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[2]/VLabel[0]</td>
-	<td>2. TextChangeEvent: text='a', cursor position=1 (field cursor pos: 1)</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[1]/VLabel[0]</td>
-	<td>3. TextChangeEvent: text='ab', cursor position=2 (field cursor pos: 2)</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>4. TextChangeEvent: text='abc', cursor position=3 (field cursor pos: 3)</td>
-</tr>
-<!--Lazy mode-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>36,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>36,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>98,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>30,5</td>
-</tr>
-<!--Set timeout to 5s-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>11,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>28,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item5</td>
-	<td>74,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item5</td>
-	<td>49,15</td>
-</tr>
-<!--Enter "def" and ensure there is only one text change event-->
-<tr>
-	<td>keyDown</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>d</td>
-</tr>
-<tr>
-	<td>keyPress</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>d</td>
-</tr>
-<tr>
-	<td>keyUp</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>d</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>1000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>keyDown</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>e</td>
-</tr>
-<tr>
-	<td>keyPress</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>e</td>
-</tr>
-<tr>
-	<td>keyUp</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>e</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>3000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>keyDown</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>f</td>
-</tr>
-<tr>
-	<td>keyPress</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>f</td>
-</tr>
-<tr>
-	<td>keyUp</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>f</td>
-</tr>
-<!--Wait for the timeout-->
-<tr>
-	<td>pause</td>
-	<td>5000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>7. TextChangeEvent: text='abcdef', cursor position=6 (field cursor pos: 6)</td>
-</tr>
-<!--Clear the value-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>-18,15</td>
-</tr>
-<tr>
-	<td>type</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>8. TextChangeEvent: text='', cursor position=0 (field cursor pos: 0)</td>
-</tr>
-<!--Timeout mode (5s)-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
-	<td>41,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>28,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>110,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>33,9</td>
-</tr>
-<!--Slowly enter "def" and ensure there are several events (one after 500ms with de, another one afterwards with def)-->
-<tr>
-	<td>keyDown</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>d</td>
-</tr>
-<tr>
-	<td>keyPress</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>d</td>
-</tr>
-<tr>
-	<td>keyUp</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>d</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>4000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>keyDown</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>e</td>
-</tr>
-<tr>
-	<td>keyPress</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>e</td>
-</tr>
-<tr>
-	<td>keyUp</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>e</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>4000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>10. TextChangeEvent: text='de', cursor position=2 (field cursor pos: 2)</td>
-</tr>
-<tr>
-	<td>keyDown</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>f</td>
-</tr>
-<tr>
-	<td>keyPress</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>f</td>
-</tr>
-<tr>
-	<td>keyUp</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
-	<td>f</td>
-</tr>
-<!--Wait for the timeout-->
-<tr>
-	<td>pause</td>
-	<td>6000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>11. TextChangeEvent: text='def', cursor position=3 (field cursor pos: 3)</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextFields.html b/tests/src/com/vaadin/tests/components/textfield/TextFields.html
deleted file mode 100644
index 3a13fdbdcf..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextFields.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>TextFields</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TextFields</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.textfield.TextFields?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>enabled</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFields::PID_Scheckboxaction-Required/domChild[0]</td>
-	<td>3,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFields::PID_Scheckboxaction-Error indicators/domChild[0]</td>
-	<td>31,13</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>required-and-error</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFields::PID_Scheckboxaction-Readonly/domChild[0]</td>
-	<td>17,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>required-error-readonly</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFields::PID_Scheckboxaction-Enabled/domChild[0]</td>
-	<td>16,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFields::PID_Scheckboxaction-Error indicators/domChild[0]</td>
-	<td>32,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFields::PID_Scheckboxaction-Required/domChild[0]</td>
-	<td>23,4</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>readonly-disabled</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstextfieldTextFields::PID_Scheckboxaction-Readonly/domChild[0]</td>
-	<td>30,11</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>disabled</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/textfield/TextFields.java b/tests/src/com/vaadin/tests/components/textfield/TextFields.java
deleted file mode 100644
index 994769b1d1..0000000000
--- a/tests/src/com/vaadin/tests/components/textfield/TextFields.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.vaadin.tests.components.textfield;
-
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.ui.TextField;
-
-public class TextFields extends ComponentTestCase<TextField> {
-
-    @Override
-    protected Class<TextField> getTestClass() {
-        return TextField.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-        TextField tf;
-
-        tf = createTextField("TextField 100% wide");
-        tf.setWidth("100%");
-        addTestComponent(tf);
-
-        tf = createTextField(null, "TextField 100% wide, no caption");
-        tf.setWidth("100%");
-        addTestComponent(tf);
-
-        tf = createTextField("TextField auto wide");
-        addTestComponent(tf);
-
-        tf = createTextField("TextField with input prompt");
-        tf.setInputPrompt("Please enter a value");
-        addTestComponent(tf);
-
-        tf = createTextField("100px wide textfield");
-        tf.setWidth("100px");
-        addTestComponent(tf);
-
-        tf = createTextField("150px wide, 120px high textfield");
-        tf.setWidth("150px");
-        tf.setHeight("120px");
-        addTestComponent(tf);
-
-        tf = createTextField("50px high textfield");
-        tf.setHeight("50px");
-        addTestComponent(tf);
-
-        tf = createTextField(null, "No caption");
-        addTestComponent(tf);
-
-        tf = createTextField(null, "No caption and input prompt");
-        tf.setInputPrompt("Enter a value");
-        addTestComponent(tf);
-
-    }
-
-    private TextField createTextField(String caption, String value) {
-        TextField tf = new TextField(caption);
-        tf.setValue(value);
-
-        return tf;
-    }
-
-    private TextField createTextField(String caption) {
-        return createTextField(caption, "");
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/ActionsOnTreeBackground.html b/tests/src/com/vaadin/tests/components/tree/ActionsOnTreeBackground.html
deleted file mode 100644
index 8b679208d0..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/ActionsOnTreeBackground.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>actions-on-table-background</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">actions-on-table-background</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tree.Trees?restartApplication</td>
-	<td></td>
-</tr>
-<!--Set tree height so we get empty space-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_Smenu#item0</td>
-	<td>26,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-	<td>6,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-	<td>15,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[2]/VMenuBar[0]#item4</td>
-	<td>9,11</td>
-</tr>
-<!--Add context menu item-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_Smenu#item0</td>
-	<td>25,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>6,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>60,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>54,12</td>
-</tr>
-<!--Open context menu on empty space-->
-<tr>
-	<td>contextmenu</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_StestComponent</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertVisible</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VContextMenu[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VContextMenu[0]#option0</td>
-	<td>8,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_SLog_row_0</td>
-	<td>2. Action No icon performed on null</td>
-</tr>
-<!--Open context menu on item-->
-<tr>
-	<td>contextmenu</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_StestComponent#n[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertVisible</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VContextMenu[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VContextMenu[0]#option0</td>
-	<td>12,5</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_SLog_row_0</td>
-	<td>3. Action No icon performed on Item 2</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/CtrlShiftMultiselect.java b/tests/src/com/vaadin/tests/components/tree/CtrlShiftMultiselect.java
deleted file mode 100644
index 69956e4d2c..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/CtrlShiftMultiselect.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import java.util.Set;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Tree;
-
-public class CtrlShiftMultiselect extends TestBase {
-
-    private final Tree tree = new Tree();
-    private final Label valueLbl = new Label("No selection");
-
-    @Override
-    protected void setup() {
-
-        getLayout().setSpacing(true);
-
-        tree.setContainerDataSource(createContainer());
-        tree.setItemCaptionPropertyId("name");
-        tree.setWidth("300px");
-        tree.setImmediate(true);
-        tree.setSelectable(true);
-        tree.setMultiSelect(true);
-        tree.expandItemsRecursively("Item 1");
-        tree.expandItemsRecursively("Item 4");
-
-        tree.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                if (tree.getValue() instanceof Set) {
-                    @SuppressWarnings("unchecked")
-                    // safe cast after instanceof check
-                    Set<Object> itemIds = (Set<Object>) tree.getValue();
-                    if (itemIds.size() == 0) {
-                        valueLbl.setValue("No selection");
-                    } else {
-                        valueLbl.setValue(itemIds);
-                    }
-                } else {
-                    valueLbl.setValue(tree.getValue());
-                }
-            }
-        });
-
-        addComponent(tree);
-
-        valueLbl.setWidth("300px");
-        valueLbl.setHeight("600px");
-        addComponent(valueLbl);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Add ctlr+shift multi selection in Tree";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4259;
-    }
-
-    private HierarchicalContainer createContainer() {
-        HierarchicalContainer cont = new HierarchicalContainer();
-        cont.addContainerProperty("name", String.class, "");
-
-        for (int i = 0; i < 20; i++) {
-            Item item = cont.addItem("Item " + i);
-            item.getItemProperty("name").setValue("Item " + i);
-            cont.setChildrenAllowed("Item " + i, false);
-
-            if (i == 1 || i == 4) {
-                cont.setChildrenAllowed("Item " + i, true);
-            }
-
-            // Add three items to item 1
-            if (i > 1 && i < 4) {
-                cont.setParent("Item " + i, "Item 1");
-            }
-
-            // Add 5 items to item 4
-            if (i > 4 && i < 10) {
-                cont.setChildrenAllowed("Item " + i, true);
-
-                if (i == 7) {
-                    item = cont.addItem("Item 71");
-                    item.getItemProperty("name").setValue("Item 71");
-                    cont.setParent("Item 71", "Item " + i);
-                    cont.setChildrenAllowed("Item 71", false);
-
-                    item = cont.addItem("Item 72");
-                    item.getItemProperty("name").setValue("Item 72");
-                    cont.setParent("Item 72", "Item " + i);
-                    cont.setChildrenAllowed("Item 72", true);
-
-                    item = cont.addItem("Item 73");
-                    item.getItemProperty("name").setValue("Item 73");
-                    cont.setParent("Item 73", "Item 72");
-                    cont.setChildrenAllowed("Item 73", true);
-
-                    item = cont.addItem("Item 74");
-                    item.getItemProperty("name").setValue("Item 74");
-                    cont.setParent("Item 74", "Item " + i);
-                    cont.setChildrenAllowed("Item 74", true);
-                }
-
-                cont.setParent("Item " + i, "Item " + (i - 1));
-
-            }
-        }
-
-        return cont;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/ExpandCollapseTree.html b/tests/src/com/vaadin/tests/components/tree/ExpandCollapseTree.html
deleted file mode 100644
index 6ebb0c4cb3..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/ExpandCollapseTree.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tree.ExpandCollapseTree?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeExpandCollapseTree::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]/n[0]/n[0]/n[0]/expand</td>
-	<td>6,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeExpandCollapseTree::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]/n[0]/n[0]/expand</td>
-	<td>9,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeExpandCollapseTree::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[1]/expand</td>
-	<td>9,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>collapsed-1-6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeExpandCollapseTree::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]/n[0]/n[0]/expand</td>
-	<td>9,9</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>collapsed-1-7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeExpandCollapseTree::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]/n[0]/n[0]/n[0]/expand</td>
-	<td>8,9</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>collapsed-1</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/ExpandCollapseTree.java b/tests/src/com/vaadin/tests/components/tree/ExpandCollapseTree.java
deleted file mode 100644
index e23213fafc..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/ExpandCollapseTree.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import java.util.Set;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Tree;
-
-public class ExpandCollapseTree extends TestBase {
-
-    private final Tree tree = new Tree();
-    private final Label valueLbl = new Label("No selection");
-
-    @Override
-    protected void setup() {
-
-        getLayout().setSpacing(true);
-
-        tree.setContainerDataSource(createContainer());
-        tree.setItemCaptionPropertyId("name");
-        tree.setWidth("300px");
-        tree.setImmediate(true);
-        tree.setSelectable(true);
-        tree.setMultiSelect(true);
-        tree.expandItemsRecursively("Item 1");
-        tree.expandItemsRecursively("Item 4");
-
-        tree.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                if (tree.getValue() instanceof Set) {
-                    @SuppressWarnings("unchecked")
-                    // safe cast after instanceof check
-                    Set<Object> itemIds = (Set<Object>) tree.getValue();
-                    if (itemIds.size() == 0) {
-                        valueLbl.setValue("No selection");
-                    } else {
-                        valueLbl.setValue(itemIds);
-                    }
-                } else {
-                    valueLbl.setValue(tree.getValue());
-                }
-            }
-        });
-
-        addComponent(tree);
-
-        valueLbl.setWidth("300px");
-        valueLbl.setHeight("600px");
-        addComponent(valueLbl);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Test collapsing and expansion of tree nodes";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5439;
-    }
-
-    private HierarchicalContainer createContainer() {
-        HierarchicalContainer cont = new HierarchicalContainer();
-        cont.addContainerProperty("name", String.class, "");
-
-        for (int i = 0; i < 20; i++) {
-            Item item = cont.addItem("Item " + i);
-            item.getItemProperty("name").setValue("Item " + i);
-            cont.setChildrenAllowed("Item " + i, false);
-
-            if (i == 1 || i == 4) {
-                cont.setChildrenAllowed("Item " + i, true);
-            }
-
-            // Add three items to item 1
-            if (i > 1 && i < 4) {
-                cont.setParent("Item " + i, "Item 1");
-            }
-
-            // Add 5 items to item 4
-            if (i > 4 && i < 10) {
-                cont.setChildrenAllowed("Item " + i, true);
-
-                if (i == 7) {
-                    item = cont.addItem("Item 71");
-                    item.getItemProperty("name").setValue("Item 71");
-                    cont.setParent("Item 71", "Item " + i);
-                    cont.setChildrenAllowed("Item 71", false);
-
-                    item = cont.addItem("Item 72");
-                    item.getItemProperty("name").setValue("Item 72");
-                    cont.setParent("Item 72", "Item " + i);
-                    cont.setChildrenAllowed("Item 72", true);
-
-                    item = cont.addItem("Item 73");
-                    item.getItemProperty("name").setValue("Item 73");
-                    cont.setParent("Item 73", "Item 72");
-                    cont.setChildrenAllowed("Item 73", true);
-
-                    item = cont.addItem("Item 74");
-                    item.getItemProperty("name").setValue("Item 74");
-                    cont.setParent("Item 74", "Item " + i);
-                    cont.setChildrenAllowed("Item 74", true);
-                }
-
-                cont.setParent("Item " + i, "Item " + (i - 1));
-
-            }
-        }
-
-        return cont;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/ItemStyleGenerator.java b/tests/src/com/vaadin/tests/components/tree/ItemStyleGenerator.java
deleted file mode 100644
index f2ca2a85bd..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/ItemStyleGenerator.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CustomLayout;
-import com.vaadin.ui.Tree;
-
-public class ItemStyleGenerator extends TestBase {
-
-    private Component styles;
-    private String css = "<style type=\"text/css\">"
-            + ".v-tree-node-red {color: red;}"
-            + ".v-tree-node-green {color: green;}"
-            + ".v-tree-node-caption-blue {color:blue;}" //
-            + "</style>";
-
-    @Override
-    protected String getDescription() {
-        return "Item Style generator can be used to style items.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3070;
-    }
-
-    @Override
-    protected void setup() {
-        styles = new CustomLayout(css);
-        addComponent(styles);
-
-        Tree tree = new Tree();
-
-        tree.setItemStyleGenerator(new Tree.ItemStyleGenerator() {
-            public String getStyle(Object itemId) {
-                // simple return itemId as css style name
-                return itemId.toString();
-            }
-        });
-
-        tree.addItem("red");
-        tree.setChildrenAllowed("red", false);
-        tree.addItem("green");
-        tree.addItem("green children");
-        tree.setParent("green children", "green");
-        tree.addItem("blue");
-        tree.addItem("non-blue-childnode");
-        tree.setParent("non-blue-childnode", "blue");
-
-        addComponent(tree);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/PreselectedTreeVisible.html b/tests/src/com/vaadin/tests/components/tree/PreselectedTreeVisible.html
deleted file mode 100644
index 7f8bb408aa..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/PreselectedTreeVisible.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tree.PreselectedTreeVisible</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/PreselectedTreeVisible.java b/tests/src/com/vaadin/tests/components/tree/PreselectedTreeVisible.java
deleted file mode 100644
index b812c9e955..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/PreselectedTreeVisible.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Tree;
-
-@SuppressWarnings("serial")
-public class PreselectedTreeVisible extends TestBase {
-
-    @Override
-    protected void setup() {
-
-        String itemId1 = "Item 1";
-        String itemId2 = "Item 2";
-
-        Tree tree = new Tree();
-
-        tree.addItem(itemId1);
-        tree.addItem(itemId2);
-
-        // Removing this line causes the tree to show normally in Firefox
-        tree.select(itemId1);
-        addComponent(tree);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tree should be visible when a item has been selected.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5396;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeConnectors.html b/tests/src/com/vaadin/tests/components/tree/TreeConnectors.html
deleted file mode 100644
index b76c65fa69..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeConnectors.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="/" />
-<title>TreeConnectors</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TreeConnectors</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/TreeConnectors?theme=base</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>base</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/TreeConnectors?theme=reindeer</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>reindeer</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/TreeConnectors?theme=runo</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>runo</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/TreeConnectors?theme=liferay</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>liferay</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/TreeConnectors?theme=chameleon</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>chameleon</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeConnectors.java b/tests/src/com/vaadin/tests/components/tree/TreeConnectors.java
deleted file mode 100644
index 81c6d2df9e..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeConnectors.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.acceptcriteria.AcceptAll;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.Tree.TreeDragMode;
-import com.vaadin.ui.themes.BaseTheme;
-
-@SuppressWarnings("serial")
-public class TreeConnectors extends TestBase {
-
-    @Override
-    protected void setup() {
-        HorizontalLayout l = new HorizontalLayout();
-        l.setSpacing(true);
-
-        l.addComponent(createTree());
-        Tree connectors = createTree();
-        connectors.addStyleName(BaseTheme.TREE_CONNECTORS);
-        l.addComponent(connectors);
-
-        addComponent(l);
-    }
-
-    private Tree createTree() {
-        final Tree tree = new Tree(null, createContainer());
-        tree.setWidth("300px");
-        for (Object rootItems : tree.rootItemIds()) {
-            tree.expandItemsRecursively(rootItems);
-        }
-        tree.setChildrenAllowed("Item 73", false);
-
-        tree.setDragMode(TreeDragMode.NODE);
-        tree.setDropHandler(new DropHandler() {
-
-            public void drop(DragAndDropEvent event) {
-                // TODO Auto-generated method stub
-
-            }
-
-            public AcceptCriterion getAcceptCriterion() {
-                return AcceptAll.get();
-            }
-
-        });
-
-        tree.setItemIcon("Item 1", new ThemeResource(
-                "../runo/icons/32/folder.png"));
-        tree.setItemIcon("Item 3", new ThemeResource(
-                "../runo/icons/32/document.png"));
-        tree.setItemIcon("Item 13", new ThemeResource(
-                "../runo/icons/64/user.png"));
-        tree.setItemIcon("Item 72", new ThemeResource(
-                "../runo/icons/64/users.png"));
-        tree.setItemIcon("Item 17", new ThemeResource(
-                "../runo/icons/16/document-pdf.png"));
-        tree.setItemIcon("Item 6", new ThemeResource(
-                "../runo/icons/16/folder-add.png"));
-
-        return tree;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The second tree's nodes should be connected with lines indicating the hierarchy. The first tree should be without connectors.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6745;
-    }
-
-    private HierarchicalContainer createContainer() {
-        HierarchicalContainer cont = new HierarchicalContainer();
-        cont.addContainerProperty("name", String.class, "");
-
-        for (int i = 0; i < 20; i++) {
-            Item item = cont.addItem("Item " + i);
-            item.getItemProperty("name").setValue("Item " + i);
-            cont.setChildrenAllowed("Item " + i, false);
-
-            if (i == 1 || i == 4) {
-                cont.setChildrenAllowed("Item " + i, true);
-            }
-
-            // Add three items to item 1
-            if (i > 1 && i < 4) {
-                cont.setParent("Item " + i, "Item 1");
-            }
-
-            // Add 5 items to item 4
-            if (i > 4 && i < 10) {
-                cont.setChildrenAllowed("Item " + i, true);
-
-                if (i == 7) {
-                    item = cont.addItem("Item 71");
-                    item.getItemProperty("name").setValue("Item 71");
-                    cont.setParent("Item 71", "Item " + i);
-                    cont.setChildrenAllowed("Item 71", false);
-
-                    item = cont.addItem("Item 72");
-                    item.getItemProperty("name").setValue("Item 72");
-                    cont.setParent("Item 72", "Item " + i);
-                    cont.setChildrenAllowed("Item 72", true);
-
-                    item = cont.addItem("Item 73");
-                    item.getItemProperty("name").setValue("Item 73");
-                    cont.setParent("Item 73", "Item 72");
-                    cont.setChildrenAllowed("Item 73", true);
-
-                    item = cont.addItem("Item 74");
-                    item.getItemProperty("name").setValue("Item 74");
-                    cont.setParent("Item 74", "Item " + i);
-                    cont.setChildrenAllowed("Item 74", true);
-                }
-
-                cont.setParent("Item " + i, "Item " + (i - 1));
-
-            }
-        }
-
-        return cont;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeContainerChange b/tests/src/com/vaadin/tests/components/tree/TreeContainerChange
deleted file mode 100644
index 8ea2dcc107..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeContainerChange
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TreeContainerChange</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TreeContainerChange</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tree.TreeContainerChange?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeContainerChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeContainerChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[0]/domChild[3]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>24,5</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>ds1-selected-value-ds1-3</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeContainerChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>ds2-selected-value-null</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeContainerChange.java b/tests/src/com/vaadin/tests/components/tree/TreeContainerChange.java
deleted file mode 100644
index f33bbae7b5..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeContainerChange.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Tree;
-
-@SuppressWarnings("serial")
-public class TreeContainerChange extends TestBase {
-
-    private Tree tree;
-
-    @Override
-    protected void setup() {
-        final IndexedContainer ds1 = new IndexedContainer();
-        // ds1.addContainerProperty("caption", String.class, "");
-        for (int i = 0; i < 32; i++) {
-            ds1.addItem("ds1-" + i);
-        }
-
-        final IndexedContainer ds2 = new IndexedContainer();
-        // ds2.addContainerProperty("caption", String.class, "");
-        for (int i = 0; i < 32; i++) {
-            ds2.addItem("ds2-" + i);
-        }
-
-        HorizontalLayout hl = new HorizontalLayout();
-        hl.setWidth("100%");
-
-        tree = new Tree();
-        tree.setImmediate(true);
-        hl.addComponent(tree);
-        HorizontalLayout state = new HorizontalLayout();
-        state.setSpacing(true);
-        hl.addComponent(state);
-
-        final Label currentValue = new Label();
-        currentValue.setCaption("Current Value:");
-        currentValue.setSizeUndefined();
-        final Label currentDS = new Label();
-        currentDS.setCaption("Current DS:");
-        currentDS.setSizeUndefined();
-        state.addComponent(currentValue);
-        state.addComponent(currentDS);
-
-        Table t = new Table("ds1");
-        t.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-        t.setContainerDataSource(ds1);
-        state.addComponent(t);
-
-        Button b = new Button("Use ds1");
-        b.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                tree.setContainerDataSource(ds1);
-                currentDS.setValue("ds1");
-            }
-        });
-        state.addComponent(b);
-
-        t = new Table("ds2");
-        t.setContainerDataSource(ds2);
-        t.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-        state.addComponent(t);
-
-        b = new Button("Use ds2");
-        b.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                tree.setContainerDataSource(ds2);
-                currentDS.setValue("ds2");
-            }
-        });
-        state.addComponent(b);
-
-        addComponent(hl);
-
-        tree.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                currentValue.setValue(event.getProperty().getValue());
-            }
-        });
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A test for tree and its container changes. Value should be cleared on container change.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5281;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeContextMenuAndIcons.html b/tests/src/com/vaadin/tests/components/tree/TreeContextMenuAndIcons.html
deleted file mode 100644
index d3eaf3470e..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeContextMenuAndIcons.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tree.Trees?restartApplication</td>
-	<td></td>
-</tr>
-<!--Hide event log-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_Smenu#item1</td>
-	<td>19,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>32,7</td>
-</tr>
-<!--Simple context menu-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_Smenu#item0</td>
-	<td>28,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>57,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>68,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>69,7</td>
-</tr>
-<tr>
-	<td>contextMenuAt</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_StestComponent#n[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>contextmenu-noicon</td>
-</tr>
-<!--Two actions, without and with icon-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_Smenu#item0</td>
-	<td>42,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>52,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>53,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>31,4</td>
-</tr>
-<tr>
-	<td>contextMenuAt</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_StestComponent#n[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>caption-only-and-has-icon</td>
-</tr>
-<!--Large icon-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_Smenu#item0</td>
-	<td>42,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>52,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>53,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[2]/VMenuBar[0]#item3</td>
-	<td>31,4</td>
-</tr>
-<tr>
-	<td>contextMenuAt</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_StestComponent#n[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>large-icon</td>
-</tr>
-<!--Simple context menu again to ensure it is properly updated (icons removed)-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_Smenu#item0</td>
-	<td>28,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[0]/VMenuBar[0]#item6</td>
-	<td>57,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>68,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>69,7</td>
-</tr>
-<tr>
-	<td>contextMenuAt</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_StestComponent#n[1]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>contextmenu-noicon</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeFiltering.html b/tests/src/com/vaadin/tests/components/tree/TreeFiltering.html
deleted file mode 100644
index 06ae7600f7..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeFiltering.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TreeFiltering</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tree.TreeFiltering?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>unfiltered</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFiltering::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>all-removed</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFiltering::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[8]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>unfiltered</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFiltering::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>filter-0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFiltering::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
-	<td>69,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>filter-0-no-parents</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFiltering::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
-	<td>69,10</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFiltering::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>all-removed</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeFiltering.java b/tests/src/com/vaadin/tests/components/tree/TreeFiltering.java
deleted file mode 100644
index ff1ac96e26..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeFiltering.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Tree;
-
-public class TreeFiltering extends TestBase {
-
-    @Override
-    public void setup() {
-
-        final Tree ccTree = new Tree();
-        addComponent(ccTree);
-        final HierarchicalContainer cont = new HierarchicalContainer();
-        cont.addContainerProperty("caption", String.class, "");
-
-        Item item;
-        for (int i = 0; i < 5; i++) {
-            item = cont.addItem(i);
-            item.getItemProperty("caption").setValue("Number " + i);
-            cont.setParent(i, i - 1);
-        }
-
-        for (int i = 0; i < 5; i++) {
-            Object id = cont.addItem();
-            item = cont.getItem(id);
-            item.getItemProperty("caption").setValue("0-" + i);
-            cont.setParent(id, 0);
-        }
-
-        ccTree.setContainerDataSource(cont);
-        ccTree.setItemCaptionPropertyId("caption");
-
-        for (final Object o : ccTree.getItemIds()) {
-            ccTree.expandItem(o);
-        }
-
-        final CheckBox filterType = new CheckBox(
-                "Include parent when filtering", true);
-        filterType.setImmediate(true);
-        filterType.addListener(new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                cont.setIncludeParentsWhenFiltering(((CheckBox) event
-                        .getProperty()).booleanValue());
-                ccTree.requestRepaint();
-            }
-        });
-        addComponent(filterType);
-
-        final Button b = new Button("Add filter 'foo'", new ClickListener() {
-            public void buttonClick(final ClickEvent event) {
-                cont.addContainerFilter("caption", "foo", true, false);
-
-            }
-        });
-        addComponent(b);
-        final Button b2 = new Button("Add filter 'Num'", new ClickListener() {
-            public void buttonClick(final ClickEvent event) {
-                cont.addContainerFilter("caption", "Num", true, false);
-
-            }
-        });
-
-        addComponent(b2);
-        final Button num = new Button("Add filter '0'", new ClickListener() {
-            public void buttonClick(final ClickEvent event) {
-                cont.addContainerFilter("caption", "0", true, false);
-
-            }
-        });
-
-        addComponent(num);
-        final Button num2 = new Button("Add filter '0-'", new ClickListener() {
-            public void buttonClick(final ClickEvent event) {
-                cont.addContainerFilter("caption", "0-", true, false);
-
-            }
-        });
-
-        addComponent(num2);
-        final Button num3 = new Button("Add filter 'Number 4'",
-                new ClickListener() {
-                    public void buttonClick(final ClickEvent event) {
-                        cont.addContainerFilter("caption", "Number 4", true,
-                                false);
-
-                    }
-                });
-
-        addComponent(num3);
-        final Button p1 = new Button("Set Number 3 parent to Number 0",
-                new ClickListener() {
-                    public void buttonClick(final ClickEvent event) {
-                        cont.setParent(3, 0);
-
-                    }
-                });
-        addComponent(p1);
-        final Button r = new Button("Remove filters", new ClickListener() {
-            public void buttonClick(final ClickEvent event) {
-                cont.removeAllContainerFilters();
-
-            }
-        });
-        addComponent(r);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Filtering in a tree should work as expected. Roots and their children which match the filter should be shown. Other nodes should be hidden";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4192;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeFocusGaining.html b/tests/src/com/vaadin/tests/components/tree/TreeFocusGaining.html
deleted file mode 100644
index 74a69ec203..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeFocusGaining.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TreeFocusGaining</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TreeFocusGaining</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tree.TreeFocusGaining?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>57,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>57,13</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>foo</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTree[0]#n[0]</td>
-	<td>24,12</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::PID_SLog_row_1</td>
-	<td>1. TF value now:foo</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::PID_SLog_row_0</td>
-	<td>2. Tree value now:Item1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>-18,10</td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
-	<td>bar</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTree[0]#n[0]</td>
-	<td>4,9</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::PID_SLog_row_1</td>
-	<td>3. TF value now:bar</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::PID_SLog_row_0</td>
-	<td>4. Item click event</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeFocusGaining.java b/tests/src/com/vaadin/tests/components/tree/TreeFocusGaining.java
deleted file mode 100644
index e784009bce..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeFocusGaining.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.event.ItemClickEvent;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Tree;
-
-@SuppressWarnings("serial")
-public class TreeFocusGaining extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Log log = new Log(5);
-
-        TextField textField = new TextField(
-                "My value should get to server when tree is clicked");
-        addComponent(textField);
-        textField.addListener(new Property.ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                log.log("TF value now:" + event.getProperty());
-            }
-        });
-
-        Tree tree = new Tree("Simple selectable tree (immediate)");
-        tree.addItem("Item1");
-        addComponent(tree);
-        tree.addListener(new Property.ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                log.log("Tree value now:" + event.getProperty());
-            }
-        });
-        tree.setImmediate(true);
-
-        tree = new Tree("Simple tree with itemm click listener");
-        tree.addItem("Item1");
-        tree.addListener(new ItemClickEvent.ItemClickListener() {
-            public void itemClick(ItemClickEvent event) {
-                log.log("Item click event");
-            }
-        });
-        addComponent(tree);
-
-        addComponent(log);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tree should get focus before sending variables to server.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6374;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeHorizontalResize.html b/tests/src/com/vaadin/tests/components/tree/TreeHorizontalResize.html
deleted file mode 100644
index 8e882e215d..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeHorizontalResize.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tree.TreeHorizontalResize?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[0]</td>
-	<td>57,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[0]</td>
-	<td>71,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>all-expanded-gx240-focused</td>
-</tr>
-<!--Collapse all tree nodes-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/expand</td>
-	<td>11,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[1]/expand</td>
-	<td>11,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]/expand</td>
-	<td>10,11</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>all-collapsed-nothing-focused</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/expand</td>
-	<td>9,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[0]</td>
-	<td>57,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[0]</td>
-	<td>64,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>desktops-expanded-gx240-focused</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[1]/expand</td>
-	<td>6,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]/expand</td>
-	<td>8,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[0]</td>
-	<td>45,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[0]</td>
-	<td>57,7</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>all-expanded-gx240-focused-2</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeHorizontalResize.java b/tests/src/com/vaadin/tests/components/tree/TreeHorizontalResize.java
deleted file mode 100644
index e25b2d6760..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeHorizontalResize.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import java.util.Iterator;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Tree;
-
-public class TreeHorizontalResize extends TestBase {
-
-    // copied from Sampler to eliminate dependency
-    public static final Object hw_PROPERTY_NAME = "name";
-    public static final Object hw_PROPERTY_ICON = "icon";
-    private static final String[][] hardware = { //
-            { "Desktops", "Dell OptiPlex GX240", "Dell OptiPlex GX260",
-                    "Dell OptiPlex GX280" },
-            { "Monitors", "Benq T190HD", "Benq T220HD", "Benq T240HD" },
-            { "Laptops", "IBM ThinkPad T40", "IBM ThinkPad T43",
-                    "IBM ThinkPad T60" } };
-
-    @Override
-    protected void setup() {
-        Panel treePanel = new Panel();
-        treePanel.setHeight("500px");
-        treePanel.setWidth(null);
-        treePanel.getContent().setSizeUndefined();
-        addComponent(treePanel);
-
-        Tree tree = new Tree();
-        tree.setContainerDataSource(getHardwareContainer());
-        tree.setItemCaptionPropertyId(hw_PROPERTY_NAME);
-        for (Iterator<?> it = tree.rootItemIds().iterator(); it.hasNext();) {
-            tree.expandItemsRecursively(it.next());
-        }
-        treePanel.addComponent(tree);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The Tree should be properly resized horizontally when collapsing/expanding nodes. The height is fixed to 500px.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6230;
-    }
-
-    public static HierarchicalContainer getHardwareContainer() {
-        Item item = null;
-        int itemId = 0; // Increasing numbering for itemId:s
-
-        // Create new container
-        HierarchicalContainer hwContainer = new HierarchicalContainer();
-        // Create containerproperty for name
-        hwContainer.addContainerProperty(hw_PROPERTY_NAME, String.class, null);
-        // Create containerproperty for icon
-        hwContainer.addContainerProperty(hw_PROPERTY_ICON, ThemeResource.class,
-                new ThemeResource("../runo/icons/16/document.png"));
-        for (int i = 0; i < hardware.length; i++) {
-            // Add new item
-            item = hwContainer.addItem(itemId);
-            // Add name property for item
-            item.getItemProperty(hw_PROPERTY_NAME).setValue(hardware[i][0]);
-            // Allow children
-            hwContainer.setChildrenAllowed(itemId, true);
-            itemId++;
-            for (int j = 1; j < hardware[i].length; j++) {
-                if (j == 1) {
-                    item.getItemProperty(hw_PROPERTY_ICON).setValue(
-                            new ThemeResource("../runo/icons/16/folder.png"));
-                }
-                // Add child items
-                item = hwContainer.addItem(itemId);
-                item.getItemProperty(hw_PROPERTY_NAME).setValue(hardware[i][j]);
-                hwContainer.setParent(itemId, itemId - j);
-                hwContainer.setChildrenAllowed(itemId, false);
-
-                itemId++;
-            }
-        }
-        return hwContainer;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeItemClickListening.html b/tests/src/com/vaadin/tests/components/tree/TreeItemClickListening.html
deleted file mode 100644
index 841565df2f..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeItemClickListening.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tree.TreeItemClickListening?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]</td>
-	<td>36,7</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::PID_SLog_row_0</td>
-	<td>1. Left Click</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[1]</td>
-	<td>45,7</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::PID_SLog_row_0</td>
-	<td>2. Left Click</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]</td>
-	<td>37,13</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::PID_SLog_row_0</td>
-	<td>3. Left Click</td>
-</tr>
-<tr>
-	<td>mouseDownRight</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[3]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseUpRight</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[3]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::PID_SLog_row_0</td>
-	<td>4. Right Click</td>
-</tr>
-<tr>
-	<td>mouseDownRight</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[4]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseUpRight</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[4]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::PID_SLog_row_0</td>
-	<td>5. Right Click</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeItemClickListening.java b/tests/src/com/vaadin/tests/components/tree/TreeItemClickListening.java
deleted file mode 100644
index e772be7cde..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeItemClickListening.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import com.vaadin.event.ItemClickEvent;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.Tree;
-
-public class TreeItemClickListening extends TestBase {
-
-    private int clickCounter = 0;
-
-    private Log log = new Log(5);
-
-    @Override
-    protected void setup() {
-
-        Tree tree = new Tree();
-        tree.setImmediate(true);
-
-        tree.addContainerProperty("caption", String.class, "");
-        for (int i = 1; i <= 10; i++) {
-            String item = "Node " + i;
-            tree.addItem(item);
-            tree.getContainerProperty(item, "caption").setValue("Caption " + i);
-            tree.setChildrenAllowed(item, false);
-        }
-        tree.setItemCaptionMode(Tree.ITEM_CAPTION_MODE_PROPERTY);
-        tree.setItemCaptionPropertyId("caption");
-
-        tree.addListener(new ItemClickEvent.ItemClickListener() {
-            public void itemClick(ItemClickEvent event) {
-                clickCounter++;
-                switch (event.getButton()) {
-                case ItemClickEvent.BUTTON_LEFT:
-                    log.log("Left Click");
-                    break;
-                case ItemClickEvent.BUTTON_RIGHT:
-                    log.log("Right Click");
-                    break;
-                case ItemClickEvent.BUTTON_MIDDLE:
-                    log.log("Middle Click");
-                    break;
-                }
-            }
-        });
-
-        addComponent(tree);
-        addComponent(log);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Item click event should be triggered from all mouse button clicks";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6845;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationScroll b/tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationScroll
deleted file mode 100644
index 8d03e3aaf3..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationScroll
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TreeKeyboardNavigationScroll</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-    <td>open</td>
-    <td>/run/com.vaadin.tests.components.tree.TreeKeyboardNavigationScrolls?restartApplication</td>
-    <td></td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]</td>
-    <td>4,3</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>right</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>right</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>right</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>screenCapture</td>
-    <td></td>
-    <td>noscroll</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationScrolls.java b/tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationScrolls.java
deleted file mode 100644
index 5bbc5423ab..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationScrolls.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-package com.vaadin.tests.components.tree;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.data.validator.AbstractValidator;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Tree;
-
-public class TreeKeyboardNavigationScrolls extends TestBase {
-
-    @Override
-    protected void setup() {
-        Tree tree = new Tree();
-        tree.setContainerDataSource(generateHierarchicalContainer());
-        tree.setImmediate(true);
-        tree.addValidator(new AbstractValidator("failed") {
-            public boolean isValid(Object value) {
-                return false;
-            }
-
-        });
-        addComponent(tree);
-    }
-
-    private Container generateHierarchicalContainer() {
-        HierarchicalContainer cont = new HierarchicalContainer();
-        for (int i = 1; i < 6; i++) {
-            cont.addItem(i);
-            for (int j = 1; j < 3; j++) {
-                String id = i
-                        + " foo bar baz make this node really wide so that we don't have to fiddle with resizing the browser window -> what would you do if you had one of your legs on backwards? it's legs time! everybody get your legs! "
-                        + j;
-                cont.addItem(id);
-                cont.setChildrenAllowed(id, false);
-                cont.setParent(id, i);
-            }
-        }
-        return cont;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The tree scrolls right if the focused node is too wide when navigating with the keyboard";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 7230;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators b/tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators
deleted file mode 100644
index 8b9722df94..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TreeKeyboardNavigationValidators</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-    <td>open</td>
-    <td>/run/com.vaadin.tests.components.tree.TreeKeyboardNavigationValidators?restartApplication</td>
-    <td></td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]</td>
-    <td>7,10</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>right</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>right</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>right</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>pressSpecialKey</td>
-    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
-    <td>down</td>
-</tr>
-<tr>
-    <td>screenCapture</td>
-    <td></td>
-    <td>5-2-sel</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators.java b/tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators.java
deleted file mode 100644
index 2a545065c4..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.data.validator.AbstractValidator;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Tree;
-
-public class TreeKeyboardNavigationValidators extends TestBase {
-
-    @Override
-    protected void setup() {
-        addComponent(getTree());
-    }
-
-    private Tree getTree() {
-        Tree tree = new Tree();
-        tree.setSizeFull();
-        tree.setContainerDataSource(generateHierarchicalContainer());
-        tree.setImmediate(true);
-        tree.addValidator(new AbstractValidator("failed") {
-            public boolean isValid(Object value) {
-                return false;
-            }
-
-        });
-        return tree;
-    }
-
-    private Container generateHierarchicalContainer() {
-        HierarchicalContainer cont = new HierarchicalContainer();
-        for (int i = 1; i < 6; i++) {
-            cont.addItem(i);
-            for (int j = 1; j < 3; j++) {
-                String id = i + " -> " + j;
-                cont.addItem(id);
-                cont.setChildrenAllowed(id, false);
-                cont.setParent(id, i);
-            }
-        }
-        return cont;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Keyboard navigation should still work in a tree with validators.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 7057;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeNodeCaptionWrapping.html b/tests/src/com/vaadin/tests/components/tree/TreeNodeCaptionWrapping.html
deleted file mode 100644
index f98482f4c7..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeNodeCaptionWrapping.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TreeNodeCaptionWrapping</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TreeNodeCaptionWrapping</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tree.TreeNodeCaptionWrapping</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>A very long item that should not wrap</td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>Subitem - also long</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeNodeCaptionWrapping.java b/tests/src/com/vaadin/tests/components/tree/TreeNodeCaptionWrapping.java
deleted file mode 100644
index 2101abb630..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeNodeCaptionWrapping.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Tree;
-
-public class TreeNodeCaptionWrapping extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The text should not wrap to the following line but instead be cut off when there is too little horizontal space.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3098;
-    }
-
-    @Override
-    protected void setup() {
-        setTheme("runo");
-        Tree tree = new Tree();
-        tree.setWidth("100px");
-
-        tree.addItem("1");
-        tree.setItemIcon("1", new ThemeResource("../runo/icons/16/ok.png"));
-
-        String mainItem = "A very long item that should not wrap";
-        String subItem = "Subitem - also long";
-
-        tree.addItem(mainItem);
-        tree.setItemIcon(mainItem, new ThemeResource(
-                "../runo/icons/16/error.png"));
-
-        tree.addItem(subItem);
-        tree.setParent(subItem, mainItem);
-
-        tree.expandItem("1");
-        tree.expandItem(mainItem);
-        tree.expandItem(subItem);
-
-        addComponent(tree);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/TreePerformanceTest.java b/tests/src/com/vaadin/tests/components/tree/TreePerformanceTest.java
deleted file mode 100644
index de72a6efeb..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreePerformanceTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class TreePerformanceTest extends AbstractTestCase {
-
-    @Override
-    protected String getDescription() {
-        return "Trees rendering type may become slow escpecially with FF and big tree in a deep component tree.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-    @Override
-    public void init() {
-        Window w = new Window();
-        setMainWindow(w);
-
-        Layout layout = null;
-
-        for (int i = 0; i < getLayoutCount(); i++) {
-            Layout newlayout = createLayout();
-            // newlayout.setHeight("100%");
-            if (i == 0) {
-                w.setContent(newlayout);
-            } else {
-                layout.addComponent(newlayout);
-            }
-            layout = newlayout;
-        }
-
-        Tree tree = new Tree();
-
-        for (int i = 0; i < getItemCount(); i++) {
-            String text = "ITEM " + i;
-            tree.addItem(text);
-            for (int j = 0; j < getSubItemCount(); j++) {
-                String subtext = " SUBITEM " + j + " for " + text;
-                tree.addItem(subtext);
-                tree.setParent(subtext, text);
-            }
-            tree.expandItemsRecursively(text);
-        }
-
-        // One can test that the slugginesh is actually verticallayout issue
-        // Table testTable = TestForTablesInitialColumnWidthLogicRendering
-        // .getTestTable(12, 60);
-        // testTable.setPageLength(0);
-        layout.addComponent(tree);
-
-    }
-
-    private Layout createLayout() {
-        return new VerticalLayout();
-    }
-
-    private int getLayoutCount() {
-        return 10;
-    }
-
-    private int getSubItemCount() {
-        return 3;
-    }
-
-    private int getItemCount() {
-        return 200;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeScrolling.html b/tests/src/com/vaadin/tests/components/tree/TreeScrolling.html
deleted file mode 100644
index 55c5aacbda..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeScrolling.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tree.TreeScrolling?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeScrolling::/VVerticalLayout[0]/ChildComponentContainer[2]/VTree[0]#n[0]/n[14]</td>
-	<td>67,8</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>selected-0-14</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeScrolling.java b/tests/src/com/vaadin/tests/components/tree/TreeScrolling.java
deleted file mode 100644
index 38bf07ef59..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeScrolling.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.RichTextArea;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class TreeScrolling extends AbstractTestCase {
-
-    @Override
-    public void init() {
-        VerticalLayout layout = new VerticalLayout();
-        layout.setSizeUndefined();
-        Window w = new Window("", layout);
-        setMainWindow(w);
-
-        TextField filler1 = new TextField();
-        RichTextArea filler2 = new RichTextArea();
-        Tree tree = new Tree();
-        for (int i = 0; i < 20; i++) {
-            String parentId = "Item " + i;
-            // Item parentItem =
-            tree.addItem(parentId);
-            for (int j = 0; j < 20; j++) {
-                String subId = "Item " + i + " - " + j;
-                // Item subItem =
-                tree.addItem(subId);
-                tree.setParent(subId, parentId);
-            }
-
-        }
-
-        for (Object id : tree.rootItemIds()) {
-            tree.expandItemsRecursively(id);
-        }
-
-        layout.addComponent(filler1);
-        layout.addComponent(filler2);
-        layout.addComponent(tree);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tests what happens when a tree is partly out of view when an item is selected";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5400;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeScrollingOnSelection.html b/tests/src/com/vaadin/tests/components/tree/TreeScrollingOnSelection.html
deleted file mode 100644
index bd8e944c32..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeScrollingOnSelection.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tree.TreeScrollingOnSelection?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeScrollingOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[4]</td>
-	<td>32,7</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>epsilon-selected</td>
-</tr>
-<tr>
-	<td>scroll</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeScrollingOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/domChild[1]</td>
-	<td>256</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeScrollingOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[21]</td>
-	<td>18,-245</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>scrolled-down-chi-selected</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tree.TreeScrollingOnSelection?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>scroll</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeScrollingOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/domChild[1]</td>
-	<td>500</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>300</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeScrollingOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[11]</td>
-	<td>14,-248</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>scrolled-down-my-selected</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeScrollingOnSelection.java b/tests/src/com/vaadin/tests/components/tree/TreeScrollingOnSelection.java
deleted file mode 100644
index 42c9087fc3..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeScrollingOnSelection.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.event.ItemClickEvent;
-import com.vaadin.event.ItemClickEvent.ItemClickListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Tree;
-
-public class TreeScrollingOnSelection extends TestBase {
-    private static final long serialVersionUID = 4082075610259697145L;
-
-    private static final String GREEK_ALPHABET = "greek alphabet";
-
-    private static final String[] ALPHABET = { "Alpha", "Beta", "Gamma",
-            "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa",
-            "Lambda", "My", "Ny", "Xi", "Omikron", "Pi", "Rho", "Sigma", "Tau",
-            "Ypsilon", "Phi", "Chi", "Psi", "Omega" };
-
-    @Override
-    public void setup() {
-        final Label charLabel = new Label();
-        charLabel.setWidth("200px");
-
-        Tree tree = new Tree("alphabets", getContainer());
-        tree.expandItem(GREEK_ALPHABET);
-        tree.addListener(new ItemClickListener() {
-
-            private static final long serialVersionUID = 5955518276555388126L;
-
-            public void itemClick(ItemClickEvent event) {
-                charLabel.setValue(event.getItemId().toString());
-            }
-        });
-        tree.setImmediate(true);
-
-        Panel panel = new Panel();
-        panel.setScrollable(true);
-        panel.addComponent(tree);
-        panel.setWidth("200px");
-        panel.setHeight("300px");
-
-        addComponent(panel);
-
-        addComponent(charLabel);
-    }
-
-    private HierarchicalContainer getContainer() {
-        HierarchicalContainer container = new HierarchicalContainer();
-
-        container.addItem(GREEK_ALPHABET);
-
-        for (String character : ALPHABET) {
-            container.addItem(character);
-            container.setChildrenAllowed(character, false);
-            container.setParent(character, GREEK_ALPHABET);
-        }
-
-        return container;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Selecting an item in the tree inside the Panel should not cause the panel scroll position to change.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6731;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeToolTips.java b/tests/src/com/vaadin/tests/components/tree/TreeToolTips.java
deleted file mode 100644
index c6e29bc3b8..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeToolTips.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractSelect;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Tree;
-
-public class TreeToolTips extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Tree tree = new Tree(null, createContainer());
-        tree.setItemDescriptionGenerator(new AbstractSelect.ItemDescriptionGenerator() {
-            public String generateDescription(Component source, Object itemId,
-                    Object propertyId) {
-                return "This is a tooltip for item id '" + itemId + "'";
-            }
-        });
-
-        for (Object rootItems : tree.rootItemIds())
-            tree.expandItemsRecursively(rootItems);
-
-        addComponent(tree);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tree items should have tooltips";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6637;
-    }
-
-    private HierarchicalContainer createContainer() {
-        HierarchicalContainer cont = new HierarchicalContainer();
-        cont.addContainerProperty("name", String.class, "");
-
-        for (int i = 0; i < 20; i++) {
-            Item item = cont.addItem("Item " + i);
-            item.getItemProperty("name").setValue("Item " + i);
-            cont.setChildrenAllowed("Item " + i, false);
-
-            if (i == 1 || i == 4) {
-                cont.setChildrenAllowed("Item " + i, true);
-            }
-
-            // Add three items to item 1
-            if (i > 1 && i < 4) {
-                cont.setParent("Item " + i, "Item 1");
-            }
-
-            // Add 5 items to item 4
-            if (i > 4 && i < 10) {
-                cont.setChildrenAllowed("Item " + i, true);
-
-                if (i == 7) {
-                    item = cont.addItem("Item 71");
-                    item.getItemProperty("name").setValue("Item 71");
-                    cont.setParent("Item 71", "Item " + i);
-                    cont.setChildrenAllowed("Item 71", false);
-
-                    item = cont.addItem("Item 72");
-                    item.getItemProperty("name").setValue("Item 72");
-                    cont.setParent("Item 72", "Item " + i);
-                    cont.setChildrenAllowed("Item 72", true);
-
-                    item = cont.addItem("Item 73");
-                    item.getItemProperty("name").setValue("Item 73");
-                    cont.setParent("Item 73", "Item 72");
-                    cont.setChildrenAllowed("Item 73", true);
-
-                    item = cont.addItem("Item 74");
-                    item.getItemProperty("name").setValue("Item 74");
-                    cont.setParent("Item 74", "Item " + i);
-                    cont.setChildrenAllowed("Item 74", true);
-                }
-
-                cont.setParent("Item " + i, "Item " + (i - 1));
-
-            }
-        }
-
-        return cont;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeTooltip.html b/tests/src/com/vaadin/tests/components/tree/TreeTooltip.html
deleted file mode 100644
index afebdaacd5..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeTooltip.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tree.TreeToolTips?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeToolTips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]</td>
-	<td>20,9</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>1000</td>
-	<td>1000</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>This is a tooltip for item id 'Item 0'</td>
-</tr>
-<tr>
-	<td>showTooltip</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeToolTips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]/n[0]/n[0]/n[0]</td>
-	<td>25,8</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>1000</td>
-	<td>1000</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
-	<td>This is a tooltip for item id 'Item 7'</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeWithIcons.html b/tests/src/com/vaadin/tests/components/tree/TreeWithIcons.html
deleted file mode 100644
index 0b01807054..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeWithIcons.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.tree.TreeWithIcons?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>large-icon</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeWithIcons::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/expand</td>
-	<td>9,6</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>two-large-icons</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreeTreeWithIcons::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[1]/expand</td>
-	<td>8,9</td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>100</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>huge-and-two-large-icons</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeWithIcons.java b/tests/src/com/vaadin/tests/components/tree/TreeWithIcons.java
deleted file mode 100644
index fbf4a3c1d1..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeWithIcons.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import java.util.Date;
-
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.LoremIpsum;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.themes.Reindeer;
-
-public class TreeWithIcons extends TestBase {
-
-    @Override
-    protected void setup() {
-        ThemeResource notCachedFolderIconHuge = new ThemeResource(
-                "../runo/icons/64/folder.png?" + new Date().getTime());
-        ThemeResource notCachedFolderIconLarge = new ThemeResource(
-                "../runo/icons/32/folder.png?" + new Date().getTime());
-        ThemeResource notCachedFolderIconLargeOther = new ThemeResource(
-                "../runo/icons/32/ok.png?" + new Date().getTime());
-        Tree t = new Tree();
-        t.setImmediate(true);
-
-        t.addItem("Root 1");
-        t.addItem("Root 11");
-        t.addItem("Root 111");
-        t.addItem("Root 1111");
-        t.addItem("Sub 1");
-        t.setItemIcon("Sub 1", notCachedFolderIconLargeOther);
-        t.setParent("Sub 1", "Root 1");
-        String longItemId = LoremIpsum.get(50);
-        t.addItem(longItemId);
-        t.setItemIcon(longItemId, notCachedFolderIconHuge);
-        t.setParent(longItemId, "Root 11");
-        t.addItem("abcdefghijklmn");
-
-        String first = "abcdefghijklmnop";
-        String second = "abcdefghijklmnopqrst";
-        t.addItem(first);
-        t.addItem(second);
-        t.setParent(second, first);
-        t.setItemIcon(first, notCachedFolderIconLarge);
-
-        HorizontalLayout hlay = new HorizontalLayout();
-        hlay.setStyleName(Reindeer.LAYOUT_BLUE);
-        hlay.addComponent(t);
-        hlay.setWidth(-1, Sizeable.UNITS_PIXELS);
-
-        Panel p = new Panel();
-        p.setSizeUndefined();
-        p.setContent(hlay);
-
-        addComponent(p);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A tree with icons should resize itself correctly so the nodes are not cut either horizontally or vertically.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3529;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/tree/TreeWithPreselectedItemNotShown.java b/tests/src/com/vaadin/tests/components/tree/TreeWithPreselectedItemNotShown.java
deleted file mode 100644
index 92c82a6ccf..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/TreeWithPreselectedItemNotShown.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.Window;
-
-public class TreeWithPreselectedItemNotShown extends TestBase {
-
-    @Override
-    protected void setup() {
-        Button open = new Button("Open modal window with tree",
-                new Button.ClickListener() {
-                    public void buttonClick(Button.ClickEvent event) {
-                        getMainWindow().addWindow(new SubwindowWithTree());
-                    }
-                });
-
-        addComponent(open);
-    }
-
-    private class SubwindowWithTree extends Window {
-
-        private SubwindowWithTree() {
-            super("Tree here");
-
-            String itemId1 = "Item 1";
-            String itemId2 = "Item 2";
-
-            Tree tree = new Tree();
-
-            tree.addItem(itemId1);
-            tree.addItem(itemId2);
-
-            // todo error here
-            tree.select(itemId1);
-
-            addComponent(tree);
-        }
-    }
-
-    @Override
-    protected String getDescription() {
-        return "IE8 doesn't display a tree if an item has been selected before the tree becomes visible";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6878;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/tree/Trees.java b/tests/src/com/vaadin/tests/components/tree/Trees.java
deleted file mode 100644
index 076e0c9dda..0000000000
--- a/tests/src/com/vaadin/tests/components/tree/Trees.java
+++ /dev/null
@@ -1,391 +0,0 @@
-package com.vaadin.tests.components.tree;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Container.Hierarchical;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.event.Action;
-import com.vaadin.event.Action.Handler;
-import com.vaadin.tests.components.select.AbstractSelectTestCase;
-import com.vaadin.ui.AbstractSelect.MultiSelectMode;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.Tree.CollapseEvent;
-import com.vaadin.ui.Tree.CollapseListener;
-import com.vaadin.ui.Tree.ExpandEvent;
-import com.vaadin.ui.Tree.ExpandListener;
-import com.vaadin.ui.Tree.ItemStyleGenerator;
-
-public class Trees extends AbstractSelectTestCase<Tree> implements
-        ExpandListener, CollapseListener {
-
-    private int rootItemIds = 3;
-
-    private ItemStyleGenerator rootGreenSecondLevelRed = new com.vaadin.ui.Tree.ItemStyleGenerator() {
-
-        public String getStyle(Object itemId) {
-            Hierarchical c = (Container.Hierarchical) getComponent()
-                    .getContainerDataSource();
-            if (c.isRoot(itemId)) {
-                return "green";
-            }
-
-            Object parent = c.getParent(itemId);
-            if (!c.isRoot(parent)) {
-                return "red";
-            }
-
-            return null;
-        }
-
-        @Override
-        public String toString() {
-            return "Root green, second level red";
-        };
-
-    };
-
-    private ItemStyleGenerator evenItemsBold = new com.vaadin.ui.Tree.ItemStyleGenerator() {
-
-        public String getStyle(Object itemId) {
-            Hierarchical c = (Container.Hierarchical) getComponent()
-                    .getContainerDataSource();
-            int idx = 0;
-
-            for (Iterator<?> i = c.getItemIds().iterator(); i.hasNext();) {
-                Object id = i.next();
-                if (id == itemId) {
-                    if (idx % 2 == 1) {
-                        return "bold";
-                    } else {
-                        return null;
-                    }
-                }
-
-                idx++;
-            }
-
-            return null;
-        }
-
-        @Override
-        public String toString() {
-            return "Even items bold";
-        };
-
-    };
-
-    private Command<Tree, ContextMenu> contextMenuCommand = new Command<Tree, ContextMenu>() {
-
-        public void execute(Tree c, final ContextMenu value, Object data) {
-            c.removeAllActionHandlers();
-            if (value != null) {
-                c.addActionHandler(new Handler() {
-
-                    public void handleAction(Action action, Object sender,
-                            Object target) {
-                        log("Action " + action.getCaption() + " performed on "
-                                + target);
-                    }
-
-                    public Action[] getActions(Object target, Object sender) {
-                        return value.getActions(target, sender);
-                    }
-                });
-            }
-        }
-    };
-
-    @Override
-    protected Class<Tree> getTestClass() {
-        return Tree.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-
-        // Causes container changes so doing this first..
-        createRootItemSelectAction(CATEGORY_DATA_SOURCE);
-
-        createExpandCollapseActions(CATEGORY_FEATURES);
-        createSelectionModeSelect(CATEGORY_SELECTION);
-        createChildrenAllowedAction(CATEGORY_DATA_SOURCE);
-
-        createListeners(CATEGORY_LISTENERS);
-        createItemStyleGenerator(CATEGORY_FEATURES);
-        createContextMenuAction(CATEGORY_FEATURES);
-        // TODO: DropHandler
-        // TODO: DragMode
-        // TODO: ActionHandler
-
-    }
-
-    private void createContextMenuAction(String category) {
-        LinkedHashMap<String, ContextMenu> options = new LinkedHashMap<String, ContextMenu>();
-        options.put("None", null);
-        options.put("Item without icon", new ContextMenu("No icon", null));
-        ContextMenu cm = new ContextMenu();
-        cm.addItem("Caption only", null);
-        cm.addItem("Has icon", ICON_16_USER_PNG_UNCACHEABLE);
-        options.put("With and without icon", cm);
-        options.put("Only one large icon", new ContextMenu("Icon",
-                ICON_64_EMAIL_REPLY_PNG_UNCACHEABLE));
-
-        createSelectAction("Context menu", category, options, "None",
-                contextMenuCommand, true);
-    }
-
-    private void createItemStyleGenerator(String category) {
-
-        LinkedHashMap<String, com.vaadin.ui.Tree.ItemStyleGenerator> options = new LinkedHashMap<String, com.vaadin.ui.Tree.ItemStyleGenerator>();
-
-        options.put("-", null);
-        options.put(rootGreenSecondLevelRed.toString(), rootGreenSecondLevelRed);
-        options.put(evenItemsBold.toString(), evenItemsBold);
-
-        createSelectAction("Item Style generator", category, options, "-",
-                itemStyleGeneratorCommand);
-
-    }
-
-    private void createListeners(String category) {
-        createBooleanAction("Expand listener", category, false,
-                expandListenerCommand);
-        createBooleanAction("Collapse listener", category, false,
-                collapseListenerCommand);
-        createBooleanAction("Item click listener", category, false,
-                itemClickListenerCommand);
-
-    }
-
-    private enum SelectMode {
-        NONE, SINGLE, MULTI_SIMPLE, MULTI;
-    }
-
-    protected void createSelectionModeSelect(String category) {
-        LinkedHashMap<String, SelectMode> options = new LinkedHashMap<String, SelectMode>();
-        options.put("None", SelectMode.NONE);
-        options.put("Single", SelectMode.SINGLE);
-        options.put("Multi - simple", SelectMode.MULTI_SIMPLE);
-        options.put("Multi - ctrl/shift", SelectMode.MULTI);
-
-        createSelectAction("Selection Mode", category, options,
-                "Multi - ctrl/shift", new Command<Tree, SelectMode>() {
-
-                    public void execute(Tree t, SelectMode value, Object data) {
-                        switch (value) {
-                        case NONE:
-                            t.setSelectable(false);
-                            break;
-                        case SINGLE:
-                            t.setMultiSelect(false);
-                            t.setSelectable(true);
-                            break;
-                        case MULTI_SIMPLE:
-                            t.setSelectable(true);
-                            t.setMultiSelect(true);
-                            t.setMultiselectMode(MultiSelectMode.SIMPLE);
-                            break;
-                        case MULTI:
-                            t.setSelectable(true);
-                            t.setMultiSelect(true);
-                            t.setMultiselectMode(MultiSelectMode.DEFAULT);
-                            break;
-                        }
-                    }
-                });
-    }
-
-    @Override
-    protected Container createContainer(int properties, int items) {
-        return createHierarchicalContainer(properties, items, rootItemIds);
-    }
-
-    private Container.Hierarchical createHierarchicalContainer(int properties,
-            int items, int roots) {
-        Container.Hierarchical c = new HierarchicalContainer();
-
-        populateContainer(c, properties, items);
-
-        if (items <= roots) {
-            return c;
-        }
-
-        // "roots" roots, each with
-        // "firstLevel" children, two with no children (one with childAllowed,
-        // one without)
-        // ("firstLevel"-2)*"secondLevel" children ("secondLevel"/2 with
-        // childAllowed, "secondLevel"/2 without)
-
-        // N*M+N*(M-2)*C = items
-        // items=N(M+MC-2C)
-
-        // Using secondLevel=firstLevel/2 =>
-        // items = roots*(firstLevel+firstLevel*firstLevel/2-2*firstLevel/2)
-        // =roots*(firstLevel+firstLevel^2/2-firstLevel)
-        // = roots*firstLevel^2/2
-        // => firstLevel = sqrt(items/roots*2)
-
-        int firstLevel = (int) Math.ceil(Math.sqrt(items / roots * 2.0));
-        int secondLevel = firstLevel / 2;
-
-        while (roots * (1 + 2 + (firstLevel - 2) * secondLevel) < items) {
-            // Increase something so we get enough items
-            secondLevel++;
-        }
-
-        List<Object> itemIds = new ArrayList<Object>(c.getItemIds());
-
-        int nextItemId = roots;
-        for (int rootIndex = 0; rootIndex < roots; rootIndex++) {
-            // roots use items 0..roots-1
-            Object rootItemId = itemIds.get(rootIndex);
-
-            // force roots to be roots even though they automatically should be
-            c.setParent(rootItemId, null);
-
-            for (int firstLevelIndex = 0; firstLevelIndex < firstLevel; firstLevelIndex++) {
-                if (nextItemId >= items) {
-                    break;
-                }
-                Object firstLevelItemId = itemIds.get(nextItemId++);
-                c.setParent(firstLevelItemId, rootItemId);
-
-                if (firstLevelIndex < 2) {
-                    continue;
-                }
-
-                // firstLevelChildren 2.. have child nodes
-                for (int secondLevelIndex = 0; secondLevelIndex < secondLevel; secondLevelIndex++) {
-                    if (nextItemId >= items) {
-                        break;
-                    }
-
-                    Object secondLevelItemId = itemIds.get(nextItemId++);
-                    c.setParent(secondLevelItemId, firstLevelItemId);
-                }
-            }
-        }
-
-        return c;
-    }
-
-    private void createRootItemSelectAction(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        for (int i = 1; i <= 10; i++) {
-            options.put(String.valueOf(i), i);
-        }
-        options.put("20", 20);
-        options.put("50", 50);
-        options.put("100", 100);
-
-        createSelectAction("Number of root items", category, options, "3",
-                rootItemIdsCommand);
-    }
-
-    private void createExpandCollapseActions(String category) {
-        LinkedHashMap<String, Object> options = new LinkedHashMap<String, Object>();
-
-        for (Object id : getComponent().getItemIds()) {
-            options.put(id.toString(), id);
-        }
-        createMultiClickAction("Expand", category, options, expandItemCommand,
-                null);
-        createMultiClickAction("Expand recursively", category, options,
-                expandItemRecursivelyCommand, null);
-        createMultiClickAction("Collapse", category, options,
-                collapseItemCommand, null);
-
-    }
-
-    private void createChildrenAllowedAction(String category) {
-        LinkedHashMap<String, Object> options = new LinkedHashMap<String, Object>();
-
-        for (Object id : getComponent().getItemIds()) {
-            options.put(id.toString(), id);
-        }
-        createMultiToggleAction("Children allowed", category, options,
-                setChildrenAllowedCommand, true);
-
-    }
-
-    /*
-     * COMMANDS
-     */
-    private Command<Tree, Integer> rootItemIdsCommand = new Command<Tree, Integer>() {
-
-        public void execute(Tree c, Integer value, Object data) {
-            rootItemIds = value;
-            updateContainer();
-        }
-    };
-
-    private Command<Tree, Object> expandItemCommand = new Command<Tree, Object>() {
-
-        public void execute(Tree c, Object itemId, Object data) {
-            c.expandItem(itemId);
-        }
-    };
-    private Command<Tree, Object> expandItemRecursivelyCommand = new Command<Tree, Object>() {
-
-        public void execute(Tree c, Object itemId, Object data) {
-            c.expandItemsRecursively(itemId);
-        }
-    };
-
-    private Command<Tree, Object> collapseItemCommand = new Command<Tree, Object>() {
-
-        public void execute(Tree c, Object itemId, Object data) {
-            c.collapseItem(itemId);
-        }
-    };
-
-    private Command<Tree, Boolean> setChildrenAllowedCommand = new Command<Tree, Boolean>() {
-
-        public void execute(Tree c, Boolean areChildrenAllowed, Object itemId) {
-            c.setChildrenAllowed(itemId, areChildrenAllowed);
-        }
-    };
-
-    private Command<Tree, Boolean> expandListenerCommand = new Command<Tree, Boolean>() {
-        public void execute(Tree c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((ExpandListener) Trees.this);
-            } else {
-                c.removeListener((ExpandListener) Trees.this);
-            }
-        }
-    };
-
-    private Command<Tree, Boolean> collapseListenerCommand = new Command<Tree, Boolean>() {
-        public void execute(Tree c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((CollapseListener) Trees.this);
-            } else {
-                c.removeListener((CollapseListener) Trees.this);
-            }
-        }
-    };
-
-    private Command<Tree, com.vaadin.ui.Tree.ItemStyleGenerator> itemStyleGeneratorCommand = new Command<Tree, com.vaadin.ui.Tree.ItemStyleGenerator>() {
-
-        public void execute(Tree c,
-                com.vaadin.ui.Tree.ItemStyleGenerator value, Object data) {
-            c.setItemStyleGenerator(value);
-
-        }
-    };
-
-    public void nodeCollapse(CollapseEvent event) {
-        log(event.getClass().getSimpleName() + ": " + event.getItemId());
-    }
-
-    public void nodeExpand(ExpandEvent event) {
-        log(event.getClass().getSimpleName() + ": " + event.getItemId());
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/treetable/ExpandAndCollapseListeners.html b/tests/src/com/vaadin/tests/components/treetable/ExpandAndCollapseListeners.html
deleted file mode 100644
index 81a62aaa50..0000000000
--- a/tests/src/com/vaadin/tests/components/treetable/ExpandAndCollapseListeners.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.treetable.TreeTableTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--expand and collapse listeners-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
-	<td>23,12</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>23,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item7</td>
-	<td>75,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
-	<td>4,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
-	<td>79,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item8</td>
-	<td>57,11</td>
-</tr>
-<!--expand and assert events-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>9,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[6]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>10,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>25,4</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_SLog_row_2</td>
-	<td>2. ExpandEvent: Item 1</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_SLog_row_1</td>
-	<td>3. ExpandEvent: Item 3</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_SLog_row_0</td>
-	<td>4. ExpandEvent: Item 9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>30,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>30,7</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_SLog_row_1</td>
-	<td>5. ExpandEvent: Item 4</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_SLog_row_0</td>
-	<td>6. CollapseEvent: Item 4</td>
-</tr>
-<!--click around to see that we do not get extra expand/collapse events-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[6]/domChild[1]/domChild[0]</td>
-	<td>60,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[1]/domChild[0]</td>
-	<td>64,15</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[8]/domChild[1]/domChild[0]</td>
-	<td>51,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[1]/domChild[0]</td>
-	<td>57,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[6]/domChild[1]/domChild[0]</td>
-	<td>66,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[8]/domChild[1]/domChild[0]</td>
-	<td>41,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[1]/domChild[0]</td>
-	<td>63,0</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td>63,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
-	<td>60,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[0]/domChild[0]</td>
-	<td>58,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[5]/domChild[0]/domChild[0]</td>
-	<td>66,12</td>
-</tr>
-<!--some collapse testing-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>11,5</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_SLog_row_0</td>
-	<td>7. CollapseEvent: Item 1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>11,6</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_SLog_row_0</td>
-	<td>8. CollapseEvent: Item 3</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/treetable/ExpandAnimationsInChameleon.java b/tests/src/com/vaadin/tests/components/treetable/ExpandAnimationsInChameleon.java
deleted file mode 100644
index ca1c7aeb9c..0000000000
--- a/tests/src/com/vaadin/tests/components/treetable/ExpandAnimationsInChameleon.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.vaadin.tests.components.treetable;
-
-import com.vaadin.data.Container.Hierarchical;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TreeTable;
-
-public class ExpandAnimationsInChameleon extends TestBase {
-
-    @Override
-    protected void setup() {
-        Layout grid = getGridLayout();
-
-        TreeTable t = getTreeTable(null);
-        grid.addComponent(t);
-
-        t = getTreeTable("small");
-        grid.addComponent(t);
-
-        t = getTreeTable("big");
-        grid.addComponent(t);
-
-        t = getTreeTable("striped");
-        grid.addComponent(t);
-
-        t = getTreeTable("small striped");
-        grid.addComponent(t);
-
-        t = getTreeTable("big striped");
-        grid.addComponent(t);
-
-        t = getTreeTable("strong");
-        grid.addComponent(t);
-
-        t = getTreeTable("small strong");
-        grid.addComponent(t);
-
-        t = getTreeTable("big strong");
-        grid.addComponent(t);
-
-        t = getTreeTable("borderless");
-        grid.addComponent(t);
-
-        t = getTreeTable("striped");
-        t.setColumnHeaderMode(Table.COLUMN_HEADER_MODE_HIDDEN);
-        t.setCaption(t.getCaption() + ", hidden headers");
-        grid.addComponent(t);
-
-        addComponent(grid);
-    }
-
-    GridLayout getGridLayout() {
-        GridLayout grid = new GridLayout(3, 1) {
-            @Override
-            public void addComponent(Component c) {
-                super.addComponent(c);
-                setComponentAlignment(c, Alignment.MIDDLE_CENTER);
-                if (c.getStyleName() != "") {
-                    ((AbstractComponent) c).setDescription(c.getClass()
-                            .getSimpleName()
-                            + ".addStyleName(\""
-                            + c.getStyleName() + "\")");
-                } else {
-                    ((AbstractComponent) c).setDescription("new "
-                            + c.getClass().getSimpleName() + "()");
-                }
-            }
-        };
-        grid.setWidth("100%");
-        grid.setSpacing(true);
-        grid.setMargin(true);
-        grid.setStyleName("preview-grid");
-        return grid;
-    }
-
-    public TreeTable getTreeTable(String style) {
-        TreeTable t = new TreeTable();
-        t.setAnimationsEnabled(true);
-        t.setWidth("250px");
-        t.setPageLength(5);
-        t.setSelectable(true);
-        t.setColumnCollapsingAllowed(true);
-        t.setColumnReorderingAllowed(true);
-
-        if (style != null) {
-            t.setStyleName(style);
-            t.setCaption("Table.addStyleName(\"" + style + "\")");
-        }
-
-        t.addContainerProperty("First", String.class, null);
-        t.addContainerProperty("Second", String.class, null);
-        t.addContainerProperty("Third", String.class, null);
-
-        for (int j = 1; j < 100; j++) {
-            t.addItem(new Object[] { "Foo " + j, "Bar " + j, "Lorem " + j }, j);
-        }
-        Hierarchical hc = t.getContainerDataSource();
-        hc.setChildrenAllowed(2, true);
-        for (int j = 4; j < 100; j++) {
-            hc.setParent(j, 2);
-        }
-
-        t.setColumnIcon("Third", new ThemeResource(
-                "../runo/icons/16/document.png"));
-        t.select(1);
-
-        return t;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Colors should be correct while animating expands/collapses";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6723;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/treetable/KeepAllItemsVisible.html b/tests/src/com/vaadin/tests/components/treetable/KeepAllItemsVisible.html
deleted file mode 100644
index 0d92deec16..0000000000
--- a/tests/src/com/vaadin/tests/components/treetable/KeepAllItemsVisible.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.treetable.KeepAllItemsVisible?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableKeepAllItemsVisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>8,3</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>Root3Expanded</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableKeepAllItemsVisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[21]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>10,6</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>Root16Expanded</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableKeepAllItemsVisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[21]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>13,7</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>Root3ExpandedRoot16Collapsed</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/treetable/KeepAllItemsVisible.java b/tests/src/com/vaadin/tests/components/treetable/KeepAllItemsVisible.java
deleted file mode 100644
index ad0255a2da..0000000000
--- a/tests/src/com/vaadin/tests/components/treetable/KeepAllItemsVisible.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.vaadin.tests.components.treetable;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Tree.CollapseEvent;
-import com.vaadin.ui.Tree.CollapseListener;
-import com.vaadin.ui.Tree.ExpandEvent;
-import com.vaadin.ui.Tree.ExpandListener;
-import com.vaadin.ui.TreeTable;
-
-public class KeepAllItemsVisible extends TestBase implements ExpandListener,
-        CollapseListener {
-
-    private static final String CAPTION = "caption";
-
-    @Override
-    protected void setup() {
-        getMainWindow().getContent().setHeight(null);
-        final TreeTable tt = new TreeTable();
-        tt.setWidth("400px");
-        tt.addContainerProperty(CAPTION, String.class, "");
-        for (int i = 0; i < 20; i++) {
-            String id = "Root " + i;
-            Item item = tt.addItem(id);
-            item.getItemProperty(CAPTION).setValue(id);
-            addChildren(tt, id, 5, 2);
-        }
-
-        tt.setSelectable(true);
-        tt.setImmediate(true);
-
-        tt.addListener((ExpandListener) this);
-        tt.addListener((CollapseListener) this);
-        tt.addListener(new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                recalculatePageLength(tt);
-                tt.requestRepaint();
-            }
-        });
-        addComponent(tt);
-
-        recalculatePageLength(tt);
-
-        Button b = new Button("Set pagelength to 10",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        tt.setPageLength(10);
-                    }
-                });
-        addComponent(b);
-        b = new Button("Set pagelength to 20", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                tt.setPageLength(20);
-            }
-        });
-        addComponent(b);
-        b = new Button("Set pagelength to 0", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                tt.setPageLength(0);
-            }
-        });
-        addComponent(b);
-    }
-
-    private void recalculatePageLength(TreeTable tt) {
-        tt.setPageLength(getVisibleNodeCount(tt));
-    }
-
-    private int getVisibleNodeCount(TreeTable tt) {
-        int count = 0;
-        for (Object rootId : tt.rootItemIds()) {
-            count += countVisibleNodes(tt, rootId);
-        }
-
-        return count;
-
-    }
-
-    private int countVisibleNodes(TreeTable tt, Object node) {
-        int count = 1;
-        if (!tt.isCollapsed(node) && tt.hasChildren(node)) {
-            for (Object childId : tt.getChildren(node)) {
-                count += countVisibleNodes(tt, childId);
-            }
-        }
-
-        return count;
-    }
-
-    private void addChildren(TreeTable tt, String parentId, int nr,
-            int maxNesting) {
-        if (maxNesting < 1) {
-            return;
-        }
-
-        for (int i = 1; i <= nr; i++) {
-            String id = parentId + "/" + i;
-            Item item = tt.addItem(id);
-            item.getItemProperty(CAPTION).setValue(id);
-            tt.setParent(id, parentId);
-            addChildren(tt, id, nr, maxNesting - 1);
-        }
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Keeps the TreeTable pagelength so that all expanded items are shown.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 7292;
-    }
-
-    public void nodeCollapse(CollapseEvent event) {
-        recalculatePageLength((TreeTable) event.getSource());
-
-    }
-
-    public void nodeExpand(ExpandEvent event) {
-        recalculatePageLength((TreeTable) event.getSource());
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/treetable/ProgrammaticSelect.java b/tests/src/com/vaadin/tests/components/treetable/ProgrammaticSelect.java
deleted file mode 100644
index fc68d0be15..0000000000
--- a/tests/src/com/vaadin/tests/components/treetable/ProgrammaticSelect.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package com.vaadin.tests.components.treetable;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.TreeTable;
-
-public class ProgrammaticSelect extends TestBase {
-
-    @Override
-    protected void setup() {
-        final TreeTable tt = new TreeTable();
-        tt.setContainerDataSource(buildDataSource(10, 100, 50));
-        tt.setSelectable(true);
-        addComponent(tt);
-
-        Button selectItem = new Button("Select first row",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        Object id = tt.getItemIds().iterator().next();
-                        tt.select(id);
-                    }
-                });
-
-        addComponent(selectItem);
-    }
-
-    private Container buildDataSource(int properties, int items, int roots) {
-        Container.Hierarchical c = new HierarchicalContainer();
-
-        populateContainer(c, properties, items);
-
-        if (items <= roots) {
-            return c;
-        }
-
-        // "roots" roots, each with
-        // "firstLevel" children, two with no children (one with childAllowed,
-        // one without)
-        // ("firstLevel"-2)*"secondLevel" children ("secondLevel"/2 with
-        // childAllowed, "secondLevel"/2 without)
-
-        // N*M+N*(M-2)*C = items
-        // items=N(M+MC-2C)
-
-        // Using secondLevel=firstLevel/2 =>
-        // items = roots*(firstLevel+firstLevel*firstLevel/2-2*firstLevel/2)
-        // =roots*(firstLevel+firstLevel^2/2-firstLevel)
-        // = roots*firstLevel^2/2
-        // => firstLevel = sqrt(items/roots*2)
-
-        int firstLevel = (int) Math.ceil(Math.sqrt(items / roots * 2.0));
-        int secondLevel = firstLevel / 2;
-
-        while (roots * (1 + 2 + (firstLevel - 2) * secondLevel) < items) {
-            // Increase something so we get enough items
-            secondLevel++;
-        }
-
-        List<Object> itemIds = new ArrayList<Object>(c.getItemIds());
-
-        int nextItemId = roots;
-        for (int rootIndex = 0; rootIndex < roots; rootIndex++) {
-            // roots use items 0..roots-1
-            Object rootItemId = itemIds.get(rootIndex);
-
-            // force roots to be roots even though they automatically should be
-            c.setParent(rootItemId, null);
-
-            for (int firstLevelIndex = 0; firstLevelIndex < firstLevel; firstLevelIndex++) {
-                if (nextItemId >= items) {
-                    break;
-                }
-                Object firstLevelItemId = itemIds.get(nextItemId++);
-                c.setParent(firstLevelItemId, rootItemId);
-
-                if (firstLevelIndex < 2) {
-                    continue;
-                }
-
-                // firstLevelChildren 2.. have child nodes
-                for (int secondLevelIndex = 0; secondLevelIndex < secondLevel; secondLevelIndex++) {
-                    if (nextItemId >= items) {
-                        break;
-                    }
-
-                    Object secondLevelItemId = itemIds.get(nextItemId++);
-                    c.setParent(secondLevelItemId, firstLevelItemId);
-                }
-            }
-        }
-
-        return c;
-    }
-
-    private void populateContainer(Container c, int properties, int items) {
-        c.removeAllItems();
-        for (int i = 1; i <= properties; i++) {
-            c.addContainerProperty("Property " + i, String.class, "");
-        }
-        for (int i = 1; i <= items; i++) {
-            Item item = c.addItem("Item " + i);
-            for (int j = 1; j <= properties; j++) {
-                item.getItemProperty("Property " + j).setValue(
-                        "Item " + i + "," + j);
-            }
-        }
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Programmatically selecting an item should not cause a complete repaint";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6766;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/treetable/TreeTableExpandWithRowStyle.html b/tests/src/com/vaadin/tests/components/treetable/TreeTableExpandWithRowStyle.html
deleted file mode 100644
index 2143de2607..0000000000
--- a/tests/src/com/vaadin/tests/components/treetable/TreeTableExpandWithRowStyle.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-    <td>open</td>
-    <td>/run/com.vaadin.tests.components.treetable.TreeTableTest?restartApplication</td>
-    <td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item1</td>
-	<td>26,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
-	<td>25,8</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
-    <td>27,4</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-    <td>49,10</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item5</td>
-    <td>104,7</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-    <td>40,10</td>
-</tr>
-<tr>
-    <td>screenCapture</td>
-    <td></td>
-    <td>redrow</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
-    <td>10,4</td>
-</tr>
-<tr>
-    <td>pause</td>
-    <td></td>
-    <td>200</td>
-</tr>
-<tr>
-    <td>screenCapture</td>
-    <td></td>
-    <td>redrowexpanded</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/treetable/TreeTableGeneratedColumns.html b/tests/src/com/vaadin/tests/components/treetable/TreeTableGeneratedColumns.html
deleted file mode 100644
index 09014f3aa0..0000000000
--- a/tests/src/com/vaadin/tests/components/treetable/TreeTableGeneratedColumns.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.treetable.TreeTableTest?restartApplication</td>
-	<td></td>
-</tr>
-<!--3 properties-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
-	<td>38,13</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-	<td>50,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
-	<td>63,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item3</td>
-	<td>32,14</td>
-</tr>
-<!--100px label-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
-	<td>38,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>46,7</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>76,6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item4</td>
-	<td>101,11</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/FocusableScrollPanel[0]/VTreeTable$VTreeTableScrollBody[0]/VTreeTable$VTreeTableScrollBody$VTreeTableRow[0]/VLabel[0]</td>
-	<td>Item 1/Generated 1</td>
-</tr>
-<!--100px html label-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
-	<td>49,19</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>54,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>96,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item9</td>
-	<td>101,9</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/FocusableScrollPanel[0]/VTreeTable$VTreeTableScrollBody[0]/VTreeTable$VTreeTableScrollBody$VTreeTableRow[0]/VLabel[1]</td>
-	<td>Item 1/Generated 2</td>
-</tr>
-<!--plain string-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
-	<td>32,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>44,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>71,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item7</td>
-	<td>143,11</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[5]/domChild[0]</td>
-	<td>Item 1/Generated 3</td>
-</tr>
-<!--html string-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
-	<td>43,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>49,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
-	<td>90,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item8</td>
-	<td>135,14</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[6]/domChild[0]</td>
-	<td>&lt;i&gt;Item 1&lt;/i&gt;/&lt;b&gt;Generated 4&lt;/b&gt;</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>generated-columns-label-label-string-string</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/treetable/TreeTableGeneratedRows.html b/tests/src/com/vaadin/tests/components/treetable/TreeTableGeneratedRows.html
deleted file mode 100644
index 6419a8c251..0000000000
--- a/tests/src/com/vaadin/tests/components/treetable/TreeTableGeneratedRows.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-    <td>open</td>
-    <td>/run/com.vaadin.tests.components.treetable.TreeTableTest?restartApplication=</td>
-    <td></td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
-    <td>30,7</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-    <td>36,4</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
-    <td>75,6</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item13</td>
-    <td>34,10</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
-    <td>39,9</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
-    <td>43,2</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
-    <td>45,4</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item10</td>
-    <td>41,8</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
-    <td>10,9</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
-    <td>35,7</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-    <td>32,8</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item3</td>
-    <td>54,7</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
-    <td>20,4</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-    <td>42,5</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item6</td>
-    <td>92,5</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-    <td>65,8</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[0]/domChild[0]/domChild[0]</td>
-    <td>12,8</td>
-</tr>
-<tr>
-    <td>screenCapture</td>
-    <td></td>
-    <td>spanned</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[0]/domChild[0]/domChild[0]</td>
-    <td>12,4</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
-    <td>22,2</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-    <td>44,0</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item6</td>
-    <td>87,3</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-    <td>68,12</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[0]/domChild[0]/domChild[0]</td>
-    <td>11,6</td>
-</tr>
-<tr>
-    <td>screenCapture</td>
-    <td></td>
-    <td>nospan</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[0]/domChild[0]/domChild[0]</td>
-    <td>11,6</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
-    <td>7,12</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-    <td>24,1</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item6</td>
-    <td>93,8</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item3</td>
-    <td>61,6</td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[7]/domChild[0]/domChild[0]/domChild[0]</td>
-    <td>12,7</td>
-</tr>
-<tr>
-    <td>screenCapture</td>
-    <td></td>
-    <td>html</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/treetable/TreeTableOutOfSync.html b/tests/src/com/vaadin/tests/components/treetable/TreeTableOutOfSync.html
deleted file mode 100644
index b8d6cdb22e..0000000000
--- a/tests/src/com/vaadin/tests/components/treetable/TreeTableOutOfSync.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TreeTableOutOfSync</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TreeTableOutOfSync</td></tr>
-</thead><tbody>
-<tr>
-    <td>open</td>
-    <td>/run/com.vaadin.tests.components.treetable.TreeTableOutOfSync?restartApplication</td>
-    <td></td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableOutOfSync::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-    <td>10,7</td>
-</tr>
-<tr>
-    <td>click</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableOutOfSync::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/FocusableScrollPanel[0]/VTreeTable$VTreeTableScrollBody[0]/VTreeTable$VTreeTableScrollBody$VTreeTableRow[2]/VButton[0]/domChild[0]/domChild[0]</td>
-    <td></td>
-</tr>
-<tr>
-    <td>verifyTextNotPresent</td>
-    <td>Something has caused us to be out of sync with the server.<br />Take note of any unsaved data, and click here to re-sync.</td>
-    <td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/treetable/TreeTableOutOfSync.java b/tests/src/com/vaadin/tests/components/treetable/TreeTableOutOfSync.java
deleted file mode 100644
index 09b42cce31..0000000000
--- a/tests/src/com/vaadin/tests/components/treetable/TreeTableOutOfSync.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-package com.vaadin.tests.components.treetable;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TreeTable;
-
-public class TreeTableOutOfSync extends TestBase {
-
-    @Override
-    protected void setup() {
-        TreeTable tt = new TreeTable();
-        tt.addContainerProperty("i", Integer.class, null);
-        tt.addGeneratedColumn("text", new Table.ColumnGenerator() {
-            public Object generateCell(Table source, Object itemId,
-                    Object columnId) {
-                if ("text".equals(columnId)) {
-                    Button button = new Button("text "
-                            + source.getContainerDataSource().getItem(itemId)
-                                    .getItemProperty("i").getValue());
-                    button.addListener(new Button.ClickListener() {
-                        public void buttonClick(ClickEvent event) {
-                            getMainWindow().showNotification("click");
-                        }
-                    });
-                    return button;
-                }
-                return null;
-            }
-        });
-
-        Object item1 = tt.addItem(new Object[] { 1 }, null);
-        Object item2 = tt.addItem(new Object[] { 2 }, null);
-        tt.addItem(new Object[] { 3 }, null);
-        tt.setParent(item2, item1);
-
-        addComponent(tt);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "When a root node is expanded, components created by a column generator go out of sync";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 7620;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/treetable/TreeTablePartialUpdates-LongScroll.html b/tests/src/com/vaadin/tests/components/treetable/TreeTablePartialUpdates-LongScroll.html
deleted file mode 100644
index 276725e6bd..0000000000
--- a/tests/src/com/vaadin/tests/components/treetable/TreeTablePartialUpdates-LongScroll.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-    <td>open</td>
-    <td>/run/com.vaadin.tests.components.treetable.TreeTablePartialUpdates?restartApplication</td>
-    <td></td>
-</tr>
-<tr>
-    <td>mouseClick</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTablePartialUpdates::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-    <td>12,6</td>
-</tr>
-<tr>
-    <td>scroll</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTablePartialUpdates::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/domChild[1]</td>
-    <td>1692</td>
-</tr>
-<tr>
-    <td>pause</td>
-    <td>300</td>
-    <td></td>
-</tr>
-<!-- scroll 6000 to make sure to actually hit bottom -->
-<tr>
-    <td>scroll</td>
-    <td>vaadin=runcomvaadintestscomponentstreetableTreeTablePartialUpdates::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/domChild[1]</td>
-    <td>6000</td>
-</tr>
-<tr>
-    <td>pause</td>
-    <td>300</td>
-    <td></td>
-</tr>
-<tr>
-    <td>screenCapture</td>
-    <td></td>
-    <td>treetable-long-scroll</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/treetable/TreeTablePartialUpdates.java b/tests/src/com/vaadin/tests/components/treetable/TreeTablePartialUpdates.java
deleted file mode 100644
index 23eaa5dfea..0000000000
--- a/tests/src/com/vaadin/tests/components/treetable/TreeTablePartialUpdates.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.vaadin.tests.components.treetable;
-
-import com.vaadin.data.Container.Hierarchical;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.TreeTable;
-
-public class TreeTablePartialUpdates extends TestBase {
-
-    @Override
-    protected void setup() {
-        TreeTable tt = new TreeTable();
-        tt.setContainerDataSource(makeHierarchicalContainer());
-        tt.setWidth("300px");
-        addComponent(tt);
-    }
-
-    private Hierarchical makeHierarchicalContainer() {
-        HierarchicalContainer hc = new HierarchicalContainer();
-        hc.addContainerProperty("p1", String.class, "");
-        hc.addContainerProperty("p2", String.class, "");
-
-        Object r1 = hc.addItem();
-        hc.getItem(r1).getItemProperty("p1").setValue("root1");
-        hc.getItem(r1).getItemProperty("p2").setValue("root1");
-
-        Object r2 = hc.addItem();
-        hc.getItem(r2).getItemProperty("p1").setValue("root2");
-        hc.getItem(r2).getItemProperty("p2").setValue("root2");
-
-        Object r3 = hc.addItem();
-        hc.getItem(r3).getItemProperty("p1").setValue("root3");
-        hc.getItem(r3).getItemProperty("p2").setValue("root3");
-
-        Object r4 = hc.addItem();
-        hc.getItem(r4).getItemProperty("p1").setValue("END");
-        hc.setChildrenAllowed(r4, false);
-
-        addNodesToRoot(hc, r1, 200);
-        addNodesToRoot(hc, r2, 200);
-        addNodesToRoot(hc, r3, 200);
-        return hc;
-    }
-
-    private void addNodesToRoot(HierarchicalContainer hc, Object root, int count) {
-        for (int ix = 0; ix < count; ix++) {
-            Object id = hc.addItem();
-            hc.getItem(id).getItemProperty("p1").setValue(String.valueOf(ix));
-            hc.setParent(id, root);
-        }
-    }
-
-    @Override
-    protected String getDescription() {
-        return "";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6722;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/treetable/TreeTableSetCollapsed.html b/tests/src/com/vaadin/tests/components/treetable/TreeTableSetCollapsed.html
deleted file mode 100644
index 5c878dba42..0000000000
--- a/tests/src/com/vaadin/tests/components/treetable/TreeTableSetCollapsed.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8080/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.treetable.TreeTableSetCollapsed?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementPresent</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableSetCollapsed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableSetCollapsed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementPresent</td>
-	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableSetCollapsed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTreeTable[0]/domChild[1]</td>
-	<td></td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/treetable/TreeTableSetCollapsed.java b/tests/src/com/vaadin/tests/components/treetable/TreeTableSetCollapsed.java
deleted file mode 100644
index 2a14c946f3..0000000000
--- a/tests/src/com/vaadin/tests/components/treetable/TreeTableSetCollapsed.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.vaadin.tests.components.treetable;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.TreeTable;
-
-public class TreeTableSetCollapsed extends TestBase {
-
-    @Override
-    protected void setup() {
-        createTreeTableAndPopulate();
-        addComponent(new Button("Create another TreeTable",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        createTreeTableAndPopulate();
-                    }
-                }));
-    }
-
-    private void createTreeTableAndPopulate() {
-        TreeTable tt = new TreeTable();
-        tt.addContainerProperty("Foo", String.class, "");
-        tt.addContainerProperty("Bar", String.class, "");
-
-        Object item1 = tt.addItem(new Object[] { "Foo", "Bar" }, null);
-        Object item2 = tt.addItem(new Object[] { "Foo2", "Bar2" }, null);
-
-        tt.setParent(item2, item1);
-
-        tt.setCollapsed(item1, false);
-
-        addComponent(tt);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Using setCollapsed before the treetable has initially been rendered should not cause any problems";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return Integer.valueOf(7605);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/treetable/TreeTableTest.java b/tests/src/com/vaadin/tests/components/treetable/TreeTableTest.java
deleted file mode 100644
index 010c735047..0000000000
--- a/tests/src/com/vaadin/tests/components/treetable/TreeTableTest.java
+++ /dev/null
@@ -1,300 +0,0 @@
-package com.vaadin.tests.components.treetable;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Container.Hierarchical;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.tests.components.table.Tables;
-import com.vaadin.ui.Table.CellStyleGenerator;
-import com.vaadin.ui.Tree.CollapseEvent;
-import com.vaadin.ui.Tree.CollapseListener;
-import com.vaadin.ui.Tree.ExpandEvent;
-import com.vaadin.ui.Tree.ExpandListener;
-import com.vaadin.ui.TreeTable;
-
-public class TreeTableTest extends Tables<TreeTable> implements
-        CollapseListener, ExpandListener {
-
-    @Override
-    protected Class<TreeTable> getTestClass() {
-        return TreeTable.class;
-    }
-
-    private int rootItemIds = 3;
-    private CellStyleGenerator rootGreenSecondLevelRed = new com.vaadin.ui.Table.CellStyleGenerator() {
-
-        public String getStyle(Object itemId, Object propertyId) {
-            if (propertyId != null) {
-                return null;
-            }
-
-            Hierarchical c = getComponent().getContainerDataSource();
-            if (c.isRoot(itemId)) {
-                return "green";
-            }
-
-            Object parent = c.getParent(itemId);
-            if (!c.isRoot(parent)) {
-                return "red";
-            }
-
-            return null;
-        }
-
-        @Override
-        public String toString() {
-            return "Root green, second level red";
-        }
-
-    };
-
-    private CellStyleGenerator evenItemsBold = new CellStyleGenerator() {
-
-        public String getStyle(Object itemId, Object propertyId) {
-            if (propertyId != null) {
-                return null;
-            }
-
-            Hierarchical c = getComponent().getContainerDataSource();
-            int idx = 0;
-
-            for (Iterator<?> i = c.getItemIds().iterator(); i.hasNext();) {
-                Object id = i.next();
-                if (id == itemId) {
-                    if (idx % 2 == 1) {
-                        return "bold";
-                    } else {
-                        return null;
-                    }
-                }
-
-                idx++;
-            }
-
-            return null;
-        }
-
-        @Override
-        public String toString() {
-            return "Even items bold";
-        };
-
-    };
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-
-        // Causes container changes so doing this first..
-        createRootItemSelectAction(CATEGORY_DATA_SOURCE);
-
-        createExpandCollapseActions(CATEGORY_FEATURES);
-        createChildrenAllowedAction(CATEGORY_DATA_SOURCE);
-
-        createListeners(CATEGORY_LISTENERS);
-        // createItemStyleGenerator(CATEGORY_FEATURES);
-
-        createBooleanAction("Animate collapse/expand", CATEGORY_STATE, false,
-                animationCommand);
-
-        // TODO: DropHandler
-        // TODO: DragMode
-        // TODO: ActionHandler
-
-    }
-
-    @Override
-    protected Container createContainer(int properties, int items) {
-        return createHierarchicalContainer(properties, items, rootItemIds);
-    }
-
-    private void createListeners(String category) {
-        createBooleanAction("Item click listener", category, false,
-                itemClickListenerCommand);
-        createBooleanAction("Expand listener", category, false,
-                expandListenerCommand);
-        createBooleanAction("Collapse listener", category, false,
-                collapseListenerCommand);
-
-    }
-
-    private Container.Hierarchical createHierarchicalContainer(int properties,
-            int items, int roots) {
-        Container.Hierarchical c = new HierarchicalContainer();
-
-        populateContainer(c, properties, items);
-
-        if (items <= roots) {
-            return c;
-        }
-
-        // "roots" roots, each with
-        // "firstLevel" children, two with no children (one with childAllowed,
-        // one without)
-        // ("firstLevel"-2)*"secondLevel" children ("secondLevel"/2 with
-        // childAllowed, "secondLevel"/2 without)
-
-        // N*M+N*(M-2)*C = items
-        // items=N(M+MC-2C)
-
-        // Using secondLevel=firstLevel/2 =>
-        // items = roots*(firstLevel+firstLevel*firstLevel/2-2*firstLevel/2)
-        // =roots*(firstLevel+firstLevel^2/2-firstLevel)
-        // = roots*firstLevel^2/2
-        // => firstLevel = sqrt(items/roots*2)
-
-        int firstLevel = (int) Math.ceil(Math.sqrt(items / roots * 2.0));
-        int secondLevel = firstLevel / 2;
-
-        while (roots * (1 + 2 + (firstLevel - 2) * secondLevel) < items) {
-            // Increase something so we get enough items
-            secondLevel++;
-        }
-
-        List<Object> itemIds = new ArrayList<Object>(c.getItemIds());
-
-        int nextItemId = roots;
-        for (int rootIndex = 0; rootIndex < roots; rootIndex++) {
-            // roots use items 0..roots-1
-            Object rootItemId = itemIds.get(rootIndex);
-
-            // force roots to be roots even though they automatically should be
-            c.setParent(rootItemId, null);
-
-            for (int firstLevelIndex = 0; firstLevelIndex < firstLevel; firstLevelIndex++) {
-                if (nextItemId >= items) {
-                    break;
-                }
-                Object firstLevelItemId = itemIds.get(nextItemId++);
-                c.setParent(firstLevelItemId, rootItemId);
-
-                if (firstLevelIndex < 2) {
-                    continue;
-                }
-
-                // firstLevelChildren 2.. have child nodes
-                for (int secondLevelIndex = 0; secondLevelIndex < secondLevel; secondLevelIndex++) {
-                    if (nextItemId >= items) {
-                        break;
-                    }
-
-                    Object secondLevelItemId = itemIds.get(nextItemId++);
-                    c.setParent(secondLevelItemId, firstLevelItemId);
-                }
-            }
-        }
-
-        return c;
-    }
-
-    private void createRootItemSelectAction(String category) {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        for (int i = 1; i <= 10; i++) {
-            options.put(String.valueOf(i), i);
-        }
-        options.put("20", 20);
-        options.put("50", 50);
-        options.put("100", 100);
-
-        createSelectAction("Number of root items", category, options, "3",
-                rootItemIdsCommand);
-    }
-
-    private void createExpandCollapseActions(String category) {
-        LinkedHashMap<String, Object> options = new LinkedHashMap<String, Object>();
-
-        for (Object id : getComponent().getItemIds()) {
-            options.put(id.toString(), id);
-        }
-        createMultiClickAction("Expand", category, options, expandItemCommand,
-                null);
-        // createMultiClickAction("Expand recursively", category, options,
-        // expandItemRecursivelyCommand, null);
-        createMultiClickAction("Collapse", category, options,
-                collapseItemCommand, null);
-
-    }
-
-    private void createChildrenAllowedAction(String category) {
-        LinkedHashMap<String, Object> options = new LinkedHashMap<String, Object>();
-
-        for (Object id : getComponent().getItemIds()) {
-            options.put(id.toString(), id);
-        }
-        createMultiToggleAction("Children allowed", category, options,
-                setChildrenAllowedCommand, true);
-
-    }
-
-    /*
-     * COMMANDS
-     */
-    private Command<TreeTable, Integer> rootItemIdsCommand = new Command<TreeTable, Integer>() {
-
-        public void execute(TreeTable c, Integer value, Object data) {
-            rootItemIds = value;
-            updateContainer();
-        }
-    };
-
-    private Command<TreeTable, Object> expandItemCommand = new Command<TreeTable, Object>() {
-
-        public void execute(TreeTable c, Object itemId, Object data) {
-            c.setCollapsed(itemId, false);
-        }
-    };
-
-    private Command<TreeTable, Object> collapseItemCommand = new Command<TreeTable, Object>() {
-
-        public void execute(TreeTable c, Object itemId, Object data) {
-            c.setCollapsed(itemId, true);
-        }
-    };
-
-    private Command<TreeTable, Boolean> setChildrenAllowedCommand = new Command<TreeTable, Boolean>() {
-
-        public void execute(TreeTable c, Boolean areChildrenAllowed,
-                Object itemId) {
-            c.setChildrenAllowed(itemId, areChildrenAllowed);
-        }
-    };
-
-    private Command<TreeTable, Boolean> expandListenerCommand = new Command<TreeTable, Boolean>() {
-        public void execute(TreeTable c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((ExpandListener) TreeTableTest.this);
-            } else {
-                c.removeListener((ExpandListener) TreeTableTest.this);
-            }
-        }
-    };
-
-    private Command<TreeTable, Boolean> collapseListenerCommand = new Command<TreeTable, Boolean>() {
-        public void execute(TreeTable c, Boolean value, Object data) {
-            if (value) {
-                c.addListener((CollapseListener) TreeTableTest.this);
-            } else {
-                c.removeListener((CollapseListener) TreeTableTest.this);
-            }
-        }
-    };
-
-    protected Command<TreeTable, Boolean> animationCommand = new Command<TreeTable, Boolean>() {
-
-        public void execute(TreeTable c, Boolean enabled, Object data) {
-            c.setAnimationsEnabled(enabled);
-        }
-    };
-
-    public void nodeCollapse(CollapseEvent event) {
-        log(event.getClass().getSimpleName() + ": " + event.getItemId());
-    }
-
-    public void nodeExpand(ExpandEvent event) {
-        log(event.getClass().getSimpleName() + ": " + event.getItemId());
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/twincolselect/TwinColSelectSelection.html b/tests/src/com/vaadin/tests/components/twincolselect/TwinColSelectSelection.html
deleted file mode 100644
index c36b3922a2..0000000000
--- a/tests/src/com/vaadin/tests/components/twincolselect/TwinColSelectSelection.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.select.TwinColSelects?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>addSelection</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#leftSelect</td>
-	<td>label=5</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#add</td>
-	<td></td>
-</tr>
-<tr>
-	<td>addSelection</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#leftSelect</td>
-	<td>label=1</td>
-</tr>
-<tr>
-	<td>removeSelection</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#leftSelect</td>
-	<td>label=4</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#add</td>
-	<td></td>
-</tr>
-<tr>
-	<td>removeSelection</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#leftSelect</td>
-	<td>label=0</td>
-</tr>
-<tr>
-	<td>addSelection</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#leftSelect</td>
-	<td>label=8</td>
-</tr>
-<tr>
-	<td>addSelection</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#leftSelect</td>
-	<td>label=4</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#add</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
-	<td>5148</td>
-</tr>
-<tr>
-	<td>removeSelection</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
-	<td>label=5</td>
-</tr>
-<tr>
-	<td>removeSelection</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
-	<td>label=4</td>
-</tr>
-<tr>
-	<td>removeSelection</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
-	<td>label=8</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#remove</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
-	<td>548</td>
-</tr>
-<tr>
-	<td>removeSelection</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
-	<td>label=5</td>
-</tr>
-<tr>
-	<td>addSelection</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
-	<td>label=8</td>
-</tr>
-<tr>
-	<td>addSelection</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
-	<td>label=5</td>
-</tr>
-<tr>
-	<td>addSelection</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
-	<td>label=4</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#remove</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#leftSelect</td>
-	<td>023679101112131415161718191548</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/twincolselect/TwinColSelects.java b/tests/src/com/vaadin/tests/components/twincolselect/TwinColSelects.java
deleted file mode 100644
index ebbddc5f6a..0000000000
--- a/tests/src/com/vaadin/tests/components/twincolselect/TwinColSelects.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.vaadin.tests.components.twincolselect;
-
-import java.util.LinkedHashMap;
-
-import com.vaadin.tests.components.select.AbstractSelectTestCase;
-import com.vaadin.ui.TwinColSelect;
-
-public class TwinColSelects extends AbstractSelectTestCase<TwinColSelect> {
-
-    @Override
-    protected Class<TwinColSelect> getTestClass() {
-        return TwinColSelect.class;
-    }
-
-    @Override
-    protected void createActions() {
-        super.createActions();
-        createColumnSelectAction();
-        createRowSelectAction();
-    }
-
-    private void createColumnSelectAction() {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("-", 0);
-        for (int i = 1; i <= 10; i++) {
-            options.put(String.valueOf(i), i);
-        }
-        options.put("50", 50);
-        options.put("100", 100);
-        options.put("1000", 1000);
-
-        super.createSelectAction("Columns", CATEGORY_DATA_SOURCE, options, "-",
-                columnsAction);
-
-    }
-
-    private void createRowSelectAction() {
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
-        options.put("-", 0);
-        for (int i = 1; i <= 10; i++) {
-            options.put(String.valueOf(i), i);
-        }
-        options.put("50", 50);
-        options.put("100", 100);
-        options.put("1000", 1000);
-
-        super.createSelectAction("Rows", CATEGORY_DATA_SOURCE, options, "-",
-                rowsAction);
-
-    }
-
-    private Command<TwinColSelect, Integer> columnsAction = new Command<TwinColSelect, Integer>() {
-
-        public void execute(TwinColSelect c, Integer value, Object data) {
-            c.setColumns(value);
-        }
-    };
-    private Command<TwinColSelect, Integer> rowsAction = new Command<TwinColSelect, Integer>() {
-
-        public void execute(TwinColSelect c, Integer value, Object data) {
-            c.setRows(value);
-        }
-    };
-}
diff --git a/tests/src/com/vaadin/tests/components/upload/ForceSubmit.java b/tests/src/com/vaadin/tests/components/upload/ForceSubmit.java
deleted file mode 100644
index 9f5c2b67e2..0000000000
--- a/tests/src/com/vaadin/tests/components/upload/ForceSubmit.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.vaadin.tests.components.upload;
-
-import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Upload;
-import com.vaadin.ui.Upload.FailedEvent;
-import com.vaadin.ui.Upload.FinishedEvent;
-import com.vaadin.ui.Upload.Receiver;
-import com.vaadin.ui.Upload.StartedEvent;
-
-public class ForceSubmit extends TestBase implements Receiver {
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6630;
-    }
-
-    public OutputStream receiveUpload(String filename, String MIMEType) {
-        return new ByteArrayOutputStream();
-    }
-
-    @Override
-    protected void setup() {
-
-        final TextField textField = new TextField("Test field");
-        addComponent(textField);
-
-        final Upload u;
-
-        u = new Upload("Upload", this);
-
-        u.setButtonCaption(null);
-
-        addComponent(u);
-
-        u.addListener(new Upload.FinishedListener() {
-            public void uploadFinished(FinishedEvent event) {
-                String filename = event.getFilename();
-                long length = event.getLength();
-                getMainWindow().showNotification(
-                        "Done. Filename : " + filename + " Lenght: " + length);
-            }
-        });
-
-        u.addListener(new Upload.FailedListener() {
-            public void uploadFailed(FailedEvent event) {
-                getMainWindow().showNotification("Failed. No file selected?");
-            }
-        });
-
-        u.addListener(new Upload.StartedListener() {
-            public void uploadStarted(StartedEvent event) {
-                getMainWindow().showNotification(
-                        "Started upload. TF value :" + textField.getValue());
-            }
-        });
-
-        Button button = new Button(
-                "I'm an external button (not the uploads builtin), hit me to start upload.");
-        button.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                u.submitUpload();
-            }
-        });
-
-        addComponent(button);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Some wireframists are just so web 1.0. If requirements "
-                + "say the upload must not start until the whole form "
-                + "is 'Oukeyd', that is what we gotta do. In these cases "
-                + "developers most probably also want to hide the uploads"
-                + " internal button by setting its caption to null.";
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/upload/TestImmediateUploadInFormLayout.java b/tests/src/com/vaadin/tests/components/upload/TestImmediateUploadInFormLayout.java
deleted file mode 100644
index d1a77d0e49..0000000000
--- a/tests/src/com/vaadin/tests/components/upload/TestImmediateUploadInFormLayout.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.vaadin.tests.components.upload;
-
-import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
-import java.util.Collections;
-import java.util.List;
-
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.FormLayout;
-import com.vaadin.ui.Upload;
-import com.vaadin.ui.Upload.Receiver;
-
-public class TestImmediateUploadInFormLayout extends
-        ComponentTestCase<FormLayout> implements Receiver {
-
-    @Override
-    protected String getDescription() {
-        return "On Firefox 3.5 and Opera 10.10, clicking on an immediate upload in a wide FormLayout has no effect";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4359;
-    }
-
-    @Override
-    protected Class<FormLayout> getTestClass() {
-        return FormLayout.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-
-        FormLayout formLayout = new FormLayout();
-        formLayout.setWidth("100%");
-        Upload u = new Upload("Upload in FormLayout", this);
-        u.setImmediate(true);
-        formLayout.addComponent(u);
-        addTestComponent(formLayout);
-
-    }
-
-    @Override
-    protected List<Component> createActions() {
-        return Collections.emptyList();
-    }
-
-    public OutputStream receiveUpload(String filename, String MIMEType) {
-        getMainWindow().showNotification("Receiving upload");
-        return new ByteArrayOutputStream();
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/upload/TestUpload.java b/tests/src/com/vaadin/tests/components/upload/TestUpload.java
deleted file mode 100644
index 6690603958..0000000000
--- a/tests/src/com/vaadin/tests/components/upload/TestUpload.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.vaadin.tests.components.upload;
-
-import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Upload;
-import com.vaadin.ui.Upload.FinishedEvent;
-import com.vaadin.ui.Upload.Receiver;
-
-public class TestUpload extends ComponentTestCase<Upload> implements Receiver {
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3525;
-    }
-
-    @Override
-    protected Class<Upload> getTestClass() {
-        return Upload.class;
-    }
-
-    @Override
-    protected void initializeComponents() {
-        Upload u;
-
-        u = new Upload("Undefined wide upload", this);
-        u.setSizeUndefined();
-        addTestComponent(u);
-
-        u.addListener(new Upload.FinishedListener() {
-            public void uploadFinished(FinishedEvent event) {
-                getMainWindow().showNotification("Done");
-            }
-        });
-
-        u = new Upload("300px wide upload", this);
-        u.setWidth("300px");
-        addTestComponent(u);
-
-    }
-
-    @Override
-    protected List<Component> createActions() {
-        List<Component> actions = new ArrayList<Component>();
-        actions.add(createEnabledAction(true));
-
-        return actions;
-    }
-
-    public OutputStream receiveUpload(String filename, String MIMEType) {
-        getMainWindow().showNotification("Receiving upload");
-        return new ByteArrayOutputStream();
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/upload/TestUploadAndDisableOnSuccess.java b/tests/src/com/vaadin/tests/components/upload/TestUploadAndDisableOnSuccess.java
deleted file mode 100644
index 009cc63168..0000000000
--- a/tests/src/com/vaadin/tests/components/upload/TestUploadAndDisableOnSuccess.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.vaadin.tests.components.upload;
-
-import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import com.vaadin.tests.components.ComponentTestCase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Upload;
-import com.vaadin.ui.Upload.FinishedEvent;
-import com.vaadin.ui.Upload.Receiver;
-import com.vaadin.ui.Upload.StartedEvent;
-
-public class TestUploadAndDisableOnSuccess extends ComponentTestCase<Upload>
-        implements Receiver {
-
-    @Override
-    protected String getDescription() {
-        return "If upload is detached and attached during upload, the client side componenent never receives information that the upload has finished. Second update will not be successful.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4605;
-    }
-
-    @Override
-    protected Class<Upload> getTestClass() {
-        return Upload.class;
-    }
-
-    int counter = 0;
-    private Label l;
-
-    @Override
-    protected void initializeComponents() {
-
-        final Label labe = new Label();
-
-        addComponent(labe);
-
-        final Upload u;
-        u = new Upload(null, this);
-        u.setImmediate(true);
-        addTestComponent(u);
-
-        l = new Label(getUploadcount());
-        addComponent(l);
-
-        u.addListener(new Upload.StartedListener() {
-
-            public void uploadStarted(StartedEvent event) {
-                /*
-                 * Remove component before upload from the same vertical layout.
-                 * Causes upload to be detached/attached -> upload loses it
-                 * target iframes onload listener -> puts VUpload inappropriate
-                 * state.
-                 */
-                getLayout().removeComponent(labe);
-            }
-        });
-
-        u.addListener(new Upload.FinishedListener() {
-            public void uploadFinished(FinishedEvent event) {
-                getMainWindow().showNotification("Done");
-                l.setValue(getUploadcount());
-            }
-        });
-
-    }
-
-    private String getUploadcount() {
-        return counter++ + " uploads";
-    }
-
-    @Override
-    protected List<Component> createActions() {
-        List<Component> actions = new ArrayList<Component>();
-        actions.add(createButtonAction("Toggle Enabled",
-                new Command<Upload, Boolean>() {
-
-                    public void execute(Upload c, Boolean value, Object data) {
-                        c.setEnabled(!c.isEnabled());
-                    }
-                }));
-
-        return actions;
-    }
-
-    public OutputStream receiveUpload(String filename, String MIMEType) {
-        // sleep to ensure change before upload is complete
-        try {
-            Thread.sleep(1000);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-        return new ByteArrayOutputStream();
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/upload/TestUploadFilename.java b/tests/src/com/vaadin/tests/components/upload/TestUploadFilename.java
deleted file mode 100644
index 12006412f2..0000000000
--- a/tests/src/com/vaadin/tests/components/upload/TestUploadFilename.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.vaadin.tests.components.upload;
-
-import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Upload;
-import com.vaadin.ui.Upload.FinishedEvent;
-import com.vaadin.ui.Upload.Receiver;
-
-public class TestUploadFilename extends TestBase {
-
-    private Label result = new Label("Waiting for upload");
-    private UploadReceiver receiver = new UploadReceiver();
-
-    @Override
-    protected void setup() {
-
-        Upload upload = new Upload("Upload a file", receiver);
-
-        addComponent(upload);
-        addComponent(result);
-
-        upload.addListener(new Upload.FinishedListener() {
-            public void uploadFinished(FinishedEvent event) {
-                result.setValue("Got file (should not contain path): "
-                        + receiver.getFilename());
-            }
-        });
-
-    }
-
-    public static class UploadReceiver implements Receiver {
-
-        private String filename;
-
-        public OutputStream receiveUpload(String filename, String MIMEType) {
-            this.filename = filename;
-            return new ByteArrayOutputStream();
-        }
-
-        public String getFilename() {
-            return filename;
-        }
-
-    }
-
-    @Override
-    protected String getDescription() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/window/CenteredWindowWithUndefinedSize.html b/tests/src/com/vaadin/tests/components/window/CenteredWindowWithUndefinedSize.html
deleted file mode 100644
index 2e15d8d645..0000000000
--- a/tests/src/com/vaadin/tests/components/window/CenteredWindowWithUndefinedSize.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>CenteredWindowWithUndefinedSize</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">CenteredWindowWithUndefinedSize</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.window.CenteredWindowWithUndefinedSize</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/window/CenteredWindowWithUndefinedSize.java b/tests/src/com/vaadin/tests/components/window/CenteredWindowWithUndefinedSize.java
deleted file mode 100644
index a7fcda3cf1..0000000000
--- a/tests/src/com/vaadin/tests/components/window/CenteredWindowWithUndefinedSize.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class CenteredWindowWithUndefinedSize extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The centered sub-window with undefined height and a 100% high layout should be rendered in the center of the screen and not in the top-left corner.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2702;
-    }
-
-    @Override
-    protected void setup() {
-        Window centered = new Window("A window");
-        centered.setSizeUndefined();
-        centered.getContent().setSizeFull();
-        centered.center();
-
-        Label l = new Label("This window should be centered");
-        l.setSizeUndefined();
-        centered.addComponent(l);
-
-        getMainWindow().addWindow(centered);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/window/CloseSubWindow.html b/tests/src/com/vaadin/tests/components/window/CloseSubWindow.html
deleted file mode 100644
index 36e9134566..0000000000
--- a/tests/src/com/vaadin/tests/components/window/CloseSubWindow.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>CloseSubWindow</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">CloseSubWindow</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.window.CloseSubWindow?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::PID_Sopennative</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>1. Window 'Sub-window' closed</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::PID_Sopennative</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>2. Window 'Sub-window' closed</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForPopUp</td>
-	<td>nativewindow</td>
-	<td>30000</td>
-</tr>
-<tr>
-	<td>selectWindow</td>
-	<td>name=nativewindow</td>
-	<td></td>
-</tr>
-<tr>
-	<td>close</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>selectWindow</td>
-	<td>title=com.vaadin.tests.components.window.CloseSubWindow</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::PID_Spoll/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>3. Browser window closed</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/window/CloseSubWindow.java b/tests/src/com/vaadin/tests/components/window/CloseSubWindow.java
deleted file mode 100644
index 9a5fff18ed..0000000000
--- a/tests/src/com/vaadin/tests/components/window/CloseSubWindow.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import java.net.URL;
-
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Window.CloseEvent;
-import com.vaadin.ui.Window.CloseListener;
-
-public class CloseSubWindow extends TestBase {
-
-    private Window browserWindow;
-    private Log log = new Log(5);
-
-    @Override
-    protected void setup() {
-        Button openWindowButton = new Button("Open sub-window");
-        openWindowButton.setDebugId("opensub");
-        openWindowButton.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                Window sub = createClosableSubWindow("Sub-window");
-                getMainWindow().addWindow(sub);
-            }
-        });
-
-        addComponent(log);
-        addComponent(openWindowButton);
-
-        Button openBrowserWindowButton = new Button("Open browser window");
-        openWindowButton.setDebugId("opennative");
-        openBrowserWindowButton.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                browserWindow = new Window("Window");
-                Button closeButton = new Button("Close this window",
-                        new ClickListener() {
-
-                            public void buttonClick(ClickEvent event) {
-                                event.getButton().getWindow()
-                                        .executeJavaScript("window.close();");
-
-                            }
-                        });
-                browserWindow.addComponent(closeButton);
-
-                browserWindow.addListener(new CloseListener() {
-                    public void windowClose(CloseEvent e) {
-                        logBrowserWindowClosed();
-                        // there is no push, so the user needs to click a button
-                        // to see the notification
-
-                        // Opera does not send a notification about the window
-                        // having been closed
-                    }
-
-                });
-
-                addWindow(browserWindow);
-                URL windowUrl = browserWindow.getURL();
-                // named for easier access by test tools
-                getMainWindow().open(new ExternalResource(windowUrl),
-                        "nativewindow");
-                if (getBrowser().isOpera()) {
-                    // Immediately log a close event in Opera so this test can
-                    // be run for all browsers. Vaadin ticket #5687.
-                    logBrowserWindowClosed();
-                }
-            }
-        });
-
-        addComponent(openBrowserWindowButton);
-
-        Button pollButton = new Button("Poll server");
-        pollButton.setDebugId("poll");
-        addComponent(pollButton);
-
-    }
-
-    private Window createClosableSubWindow(final String title) {
-        final Window window = new Window(title);
-        window.setSizeUndefined();
-        window.getContent().setSizeFull();
-        window.setClosable(true);
-
-        Button closeButton = new Button("Close");
-        closeButton.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                window.getParent().removeWindow(window);
-            }
-        });
-        window.addComponent(closeButton);
-
-        Button removeButton = new Button("Remove from parent");
-        removeButton.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                window.getParent().removeWindow(window);
-            }
-        });
-        window.addComponent(closeButton);
-
-        window.addListener(new CloseListener() {
-            public void windowClose(CloseEvent e) {
-                log.log("Window '" + title + "' closed");
-            }
-        });
-
-        return window;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Close sub-windows both from code and with the close button in the window title bar, and check for close events. Contains an ugly workaround for the Opera bug (Opera does not send close events)";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3865;
-    }
-
-    private void logBrowserWindowClosed() {
-        log.log("Browser window closed");
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/window/EmbeddedInSubWindow.html b/tests/src/com/vaadin/tests/components/window/EmbeddedInSubWindow.html
deleted file mode 100644
index d74e09dd6a..0000000000
--- a/tests/src/com/vaadin/tests/components/window/EmbeddedInSubWindow.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>EmbeddedInSubWindow</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">EmbeddedInSubWindow</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.window.EmbeddedInSubWindow</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/window/EmbeddedInSubWindow.java b/tests/src/com/vaadin/tests/components/window/EmbeddedInSubWindow.java
deleted file mode 100644
index cd990f94b7..0000000000
--- a/tests/src/com/vaadin/tests/components/window/EmbeddedInSubWindow.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.Window;
-
-public class EmbeddedInSubWindow extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The sub window contains a large icon and should be sized according to the icon. The icon contains a blue border of 10px at the outer edges. The layout in the sub window has margins enabled.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-    @Override
-    protected void setup() {
-        setTheme("tests-tickets");
-        Window zoom = new Window("Image Preview");
-        zoom.setSizeUndefined();
-        zoom.getContent().setSizeUndefined();
-
-        String res = "icons/EmbeddedInSubWindow-image.png";
-        Embedded imagePreview = new Embedded(null, new ThemeResource(res));
-        imagePreview.setSizeUndefined();
-
-        zoom.addComponent(imagePreview);
-        zoom.setModal(true);
-        zoom.setResizable(false);
-
-        getMainWindow().addWindow(zoom);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/window/ExecuteJavaScript.java b/tests/src/com/vaadin/tests/components/window/ExecuteJavaScript.java
deleted file mode 100644
index dfa0e80368..0000000000
--- a/tests/src/com/vaadin/tests/components/window/ExecuteJavaScript.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Window;
-
-public class ExecuteJavaScript extends AbstractTestCase {
-
-    @Override
-    public void init() {
-        final Window mainWindow = new Window("Test");
-        setMainWindow(mainWindow);
-
-        for (final String script : new String[] { "alert('foo');",
-                "window.print()", "document.write('foo')" }) {
-            Panel p = new Panel("Example: " + script);
-            p.addComponent(createScriptButton(script));
-            mainWindow.addComponent(p);
-        }
-
-    }
-
-    private Button createScriptButton(final String script) {
-        Button b = new Button(script);
-        b.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                getMainWindow().executeJavaScript(script);
-            }
-        });
-
-        return b;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Test for the Window.executeJavaScript method. Click a button to execute the javascript";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3589;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/window/ExtraLargeSubWindow.html b/tests/src/com/vaadin/tests/components/window/ExtraLargeSubWindow.html
deleted file mode 100644
index a679bd6f07..0000000000
--- a/tests/src/com/vaadin/tests/components/window/ExtraLargeSubWindow.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.window.ExtraLargeSubWindow</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>full-size</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/window/ExtraLargeSubWindow.java b/tests/src/com/vaadin/tests/components/window/ExtraLargeSubWindow.java
deleted file mode 100644
index bcaa44dc76..0000000000
--- a/tests/src/com/vaadin/tests/components/window/ExtraLargeSubWindow.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.NativeButton;
-import com.vaadin.ui.Window;
-
-public class ExtraLargeSubWindow extends TestBase {
-
-    @Override
-    protected void setup() {
-        Window w = new Window("full sized window");
-        w.setWidth("2000px");
-        w.setHeight("2000px");
-        w.getContent().setSizeFull();
-        NativeButton b = new NativeButton("A large button");
-        b.setSizeFull();
-        w.addComponent(b);
-
-        getMainWindow().addWindow(w);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A 100%x100% sub window should not produce scrollbars in the main view or in the sub window. The button inside the sub window is 100%x100%, as is the layout";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3407;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/window/ExtraWindowShown.html b/tests/src/com/vaadin/tests/components/window/ExtraWindowShown.html
deleted file mode 100644
index 4881d0caf1..0000000000
--- a/tests/src/com/vaadin/tests/components/window/ExtraWindowShown.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.window.ExtraWindowShown?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowExtraWindowShown::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowExtraWindowShown::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>1000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>vaadin=runcomvaadintestscomponentswindowExtraWindowShown::/VWindow[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowExtraWindowShown::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowExtraWindowShown::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>pause</td>
-	<td>1000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>vaadin=runcomvaadintestscomponentswindowExtraWindowShown::/VWindow[0]</td>
-	<td></td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/window/ExtraWindowShown.java b/tests/src/com/vaadin/tests/components/window/ExtraWindowShown.java
deleted file mode 100644
index a7079b2d99..0000000000
--- a/tests/src/com/vaadin/tests/components/window/ExtraWindowShown.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Window;
-
-public class ExtraWindowShown extends TestBase {
-
-    @Override
-    protected void setup() {
-        Button b = new Button("Open window", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-
-                final Window w = new Window("Sub window");
-                w.center();
-                w.addComponent(new Button("Close", new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        Window main = w.getParent();
-                        // main = w.getWindow();
-                        main.removeWindow(w);
-                    }
-                }));
-                Button iconButton = new Button("A button with icon");
-                iconButton
-                        .setIcon(new ThemeResource("../runo/icons/16/ok.png"));
-                w.addComponent(iconButton);
-                event.getButton().getWindow().addWindow(w);
-            }
-
-        });
-        getLayout().setHeight("100%");
-        getLayout().addComponent(b);
-        getLayout().setComponentAlignment(b, Alignment.MIDDLE_CENTER);
-    }
-
-    @Override
-    protected String getDescription() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/window/FullSizedWindow.java b/tests/src/com/vaadin/tests/components/window/FullSizedWindow.java
deleted file mode 100644
index 3cb5f45712..0000000000
--- a/tests/src/com/vaadin/tests/components/window/FullSizedWindow.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.NativeButton;
-import com.vaadin.ui.Window;
-
-public class FullSizedWindow extends TestBase {
-
-    @Override
-    protected void setup() {
-        Window w = new Window("full sized window");
-        w.setSizeFull();
-        w.getContent().setSizeFull();
-        NativeButton b = new NativeButton("A large button");
-        b.setSizeFull();
-        w.getContent().addComponent(b);
-        getMainWindow().addWindow(w);
-        setTheme("runo");
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A 100%x100% sub window should not produce scrollbars in the main view or in the sub window. The button inside the sub window is 100%x100%, as is the layout";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3407;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/window/HugeWindowShouldBeClosable.java b/tests/src/com/vaadin/tests/components/window/HugeWindowShouldBeClosable.java
deleted file mode 100644
index 3b8067c726..0000000000
--- a/tests/src/com/vaadin/tests/components/window/HugeWindowShouldBeClosable.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Window;
-
-public class HugeWindowShouldBeClosable extends TestBase {
-
-    @Override
-    protected void setup() {
-        Window w = new Window("Hueg");
-        w.setWidth("2000px");
-        w.setHeight("2000px");
-        w.setPositionY(500);
-        getMainWindow().addWindow(w);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Huge windows should be closable";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6784;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/window/LazyWindowResize.java b/tests/src/com/vaadin/tests/components/window/LazyWindowResize.java
deleted file mode 100644
index 6c051f4b1e..0000000000
--- a/tests/src/com/vaadin/tests/components/window/LazyWindowResize.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.tests.util.LoremIpsum;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Window.ResizeEvent;
-import com.vaadin.ui.Window.ResizeListener;
-
-public class LazyWindowResize extends AbstractTestCase {
-
-    private Window mainWindow;
-    private Window subWindow;
-    private Button lazyMode;
-    private Log log = new Log(5);
-    private CheckBox resizeListenerCheckBox;
-
-    protected ResizeListener resizeListener = new ResizeListener() {
-
-        public void windowResized(ResizeEvent e) {
-            if (e.getWindow() == mainWindow) {
-                log.log("Main window resized");
-            } else {
-                log.log("Sub window resized");
-            }
-
-        }
-    };
-    private CheckBox immediateCheckBox;;;
-
-    @Override
-    protected String getDescription() {
-        return "Check or uncheck the checkbox to use lazy or eager resize events. Lazy mode uses a small delay before recalculating layout sizes and can be used to speed up resizes in slow UIs.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6715;
-    }
-
-    @Override
-    public void init() {
-        mainWindow = new Window("Resize test");
-        setMainWindow(mainWindow);
-        subWindow = new Window("Sub window");
-        subWindow.setHeight("50%");
-        subWindow.setWidth("50%");
-        subWindow.center();
-        subWindow.addComponent(new Label(LoremIpsum.get(1000)));
-        getMainWindow().addWindow(subWindow);
-
-        lazyMode = new CheckBox("Lazy resize");
-        lazyMode.setImmediate(true);
-        lazyMode.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                setLazy(lazyMode.booleanValue());
-            }
-        });
-
-        resizeListenerCheckBox = new CheckBox("Resize listener");
-        resizeListenerCheckBox.setImmediate(true);
-        resizeListenerCheckBox.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                if (resizeListenerCheckBox.booleanValue()) {
-                    subWindow.addListener(resizeListener);
-                    mainWindow.addListener(resizeListener);
-                } else {
-                    subWindow.removeListener(resizeListener);
-                    mainWindow.removeListener(resizeListener);
-                }
-
-            }
-
-        });
-        immediateCheckBox = new CheckBox("Windows immediate");
-        immediateCheckBox.setImmediate(true);
-        immediateCheckBox.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                mainWindow.setImmediate(immediateCheckBox.booleanValue());
-                subWindow.setImmediate(immediateCheckBox.booleanValue());
-
-            }
-
-        });
-        mainWindow.addComponent(lazyMode);
-        mainWindow.addComponent(resizeListenerCheckBox);
-        mainWindow.addComponent(immediateCheckBox);
-        mainWindow.addComponent(log);
-        mainWindow.addComponent(new Label("<br/><br/>", Label.CONTENT_XHTML));
-        mainWindow.addComponent(new Label(LoremIpsum.get(10000)));
-
-        setLazy(false);
-    }
-
-    private void setLazy(boolean b) {
-        mainWindow.setResizeLazy(b);
-        subWindow.setResizeLazy(b);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/window/LongNotifications.java b/tests/src/com/vaadin/tests/components/window/LongNotifications.java
deleted file mode 100644
index c70c14e08e..0000000000
--- a/tests/src/com/vaadin/tests/components/window/LongNotifications.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Window.Notification;
-
-public class LongNotifications extends TestBase {
-    private final String text = "This is a veeeery large notification in the main window which should definitly not exist at all, in any app. But they finally do in real world applications, no matter what you do. People have small screens and desperatly try to run web apps in their iphones.";
-
-    @Override
-    protected String getDescription() {
-        return "Notifications should not be wider than the screen.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2632;
-    }
-
-    @Override
-    protected void setup() {
-        setTheme("tests-tickets");
-
-        Button b = new Button("Show loooong notification",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-
-                        getMainWindow().showNotification(
-                                text,
-                                "This is description for the same notifications."
-                                        + text,
-                                Notification.TYPE_HUMANIZED_MESSAGE);
-                    }
-                });
-        getLayout().addComponent(b);
-
-        b = new Button("Show notifications", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-
-                getMainWindow().showNotification("Example failed",
-                        "This is description for the same notifications.",
-                        Notification.TYPE_HUMANIZED_MESSAGE);
-            }
-        });
-
-        getLayout().addComponent(b);
-
-        b = new Button("Show loooong notification  (error)",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-
-                        getMainWindow()
-                                .showNotification(
-                                        text,
-                                        "This is description for the same notifications."
-                                                + text,
-                                        Notification.TYPE_ERROR_MESSAGE);
-                    }
-                });
-        getLayout().addComponent(b);
-
-        b = new Button("Show notification (error)", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-
-                getMainWindow().showNotification("Example failed",
-                        "This is description for the same notifications.",
-                        Notification.TYPE_ERROR_MESSAGE);
-            }
-        });
-
-        getLayout().addComponent(b);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/window/ModalWindowNativeSelect.java b/tests/src/com/vaadin/tests/components/window/ModalWindowNativeSelect.java
deleted file mode 100644
index d7672a88d5..0000000000
--- a/tests/src/com/vaadin/tests/components/window/ModalWindowNativeSelect.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.Window;
-
-public class ModalWindowNativeSelect extends TestBase {
-
-    @Override
-    protected void setup() {
-        NativeSelect ns = new NativeSelect();
-
-        Window modalWindow = new Window();
-        modalWindow.setModal(true);
-        modalWindow.center();
-
-        addComponent(ns);
-        getMainWindow().addWindow(modalWindow);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The native select should be behind the modality curtain and user should not be able to interact with it";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4261;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/components/window/PositionedSubWindows.java b/tests/src/com/vaadin/tests/components/window/PositionedSubWindows.java
deleted file mode 100644
index 9fe44dd7e8..0000000000
--- a/tests/src/com/vaadin/tests/components/window/PositionedSubWindows.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Window;
-
-public class PositionedSubWindows extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Subwindows should obey setPositionX/Y methods also if only one is called";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4362;
-    }
-
-    @Override
-    protected void setup() {
-        Window smallWindow = getSmallWindow("Top:200");
-
-        smallWindow.setPositionY(200);
-        getMainWindow().addWindow(smallWindow);
-        smallWindow = getSmallWindow("Left:200");
-        smallWindow.setPositionX(200);
-        getMainWindow().addWindow(smallWindow);
-
-        smallWindow = getSmallWindow("50/50");
-        smallWindow.setPositionX(50);
-        smallWindow.setPositionY(50);
-        getMainWindow().addWindow(smallWindow);
-
-    }
-
-    private Window getSmallWindow(String caption) {
-        Window window2 = new Window(caption);
-        window2.setWidth("100px");
-        window2.setHeight("50px");
-        return window2;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/window/SubWindowFocus.java b/tests/src/com/vaadin/tests/components/window/SubWindowFocus.java
deleted file mode 100644
index f0dccda66c..0000000000
--- a/tests/src/com/vaadin/tests/components/window/SubWindowFocus.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.event.Action;
-import com.vaadin.event.ShortcutAction;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class SubWindowFocus extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "A subwindow that listens to ESC and SPACE can be opened. It "
-                + "should receive focus and thus receive keyboard events when "
-                + "anything within the window is clicked. It should be last in"
-                + "the tabbing order. The window can only be closed using ESC.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3498;
-    }
-
-    @Override
-    protected void setup() {
-
-        // some fields with tabindex
-        for (int i = 1; i < 4; i++) {
-            TextField tf = new TextField();
-            tf.setTabIndex(i);
-            tf.setInputPrompt("Tab index " + i);
-            addComponent(tf);
-        }
-        // field with tabindex 0
-        TextField tf = new TextField();
-        tf.setTabIndex(0);
-        tf.setInputPrompt("Tab index 0");
-        addComponent(tf);
-
-        Button b = new Button("new", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                final Window win = new Window("Subwin");
-                win.getContent().setWidth(null);
-                win.center();
-                win.setClosable(false);
-                getMainWindow().addWindow(win);
-                win.addComponent(new Label("SPACE notifies, ESC closes."));
-
-                win.addActionHandler(new Action.Handler() {
-
-                    ShortcutAction esc = new ShortcutAction("Close",
-                            ShortcutAction.KeyCode.ESCAPE, null);
-                    ShortcutAction spc = new ShortcutAction("Space",
-                            ShortcutAction.KeyCode.SPACEBAR, null);
-
-                    public Action[] getActions(Object target, Object sender) {
-                        return new Action[] { esc, spc };
-                    }
-
-                    public void handleAction(Action action, Object sender,
-                            Object target) {
-                        if (action == esc) {
-                            getMainWindow().removeWindow(win);
-                        } else {
-                            getMainWindow().showNotification(
-                                    action.getCaption());
-                        }
-
-                    }
-
-                });
-
-                win.addComponent(new TextField());
-            }
-
-        });
-        addComponent(b);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/window/SubWindowFocusAndBlurListeners.java b/tests/src/com/vaadin/tests/components/window/SubWindowFocusAndBlurListeners.java
deleted file mode 100644
index 2d9d7bd5b2..0000000000
--- a/tests/src/com/vaadin/tests/components/window/SubWindowFocusAndBlurListeners.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.event.Action;
-import com.vaadin.event.Action.Handler;
-import com.vaadin.event.FieldEvents.BlurEvent;
-import com.vaadin.event.FieldEvents.BlurListener;
-import com.vaadin.event.FieldEvents.FocusEvent;
-import com.vaadin.event.FieldEvents.FocusListener;
-import com.vaadin.event.ShortcutAction;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class SubWindowFocusAndBlurListeners extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Focus and blur listeners should work. Note the "
-                + "side efect (focusing) when callintg bring to front.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5039;
-    }
-
-    @Override
-    protected void setup() {
-
-        final Window window = new Window("Focus test window");
-        window.getContent().setSizeUndefined();
-
-        window.addComponent(new TextField());
-        window.addListener(new FocusListener() {
-            public void focus(FocusEvent event) {
-                event.getComponent().getWindow()
-                        .showNotification("Focused window");
-            }
-        });
-
-        window.addListener(new BlurListener() {
-            public void blur(BlurEvent event) {
-                event.getComponent().getWindow()
-                        .showNotification("Blurred window");
-            }
-        });
-
-        window.addActionHandler(new Handler() {
-
-            private Action[] s = new Action[] { new ShortcutAction("^Save") };
-
-            public Action[] getActions(Object target, Object sender) {
-                return s;
-            }
-
-            public void handleAction(Action action, Object sender, Object target) {
-                window.showNotification("Action!");
-            }
-        });
-
-        Window main = getLayout().getWindow();
-
-        main.addWindow(window);
-
-        main.addComponent(new TextField());
-
-        Button button = new Button("Bring to front (should focus too)",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        window.bringToFront();
-                    }
-                });
-        main.addComponent(button);
-
-        Window window2 = new Window("Another window for testing");
-        main.addWindow(window2);
-        window2.setPositionX(50);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/window/SubWindowOrder.html b/tests/src/com/vaadin/tests/components/window/SubWindowOrder.html
deleted file mode 100644
index c59e831582..0000000000
--- a/tests/src/com/vaadin/tests/components/window/SubWindowOrder.html
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>SubWindowOrder</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">SubWindowOrder</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.window.SubWindowOrder?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>13,10</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>dialog1-should-be-on-top</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item3</td>
-	<td>93,10</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[1]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>dialog-3-modal</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[2]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>11,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item4</td>
-	<td>56,9</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[2]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[1]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[3]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>11,11</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item5</td>
-	<td>76,6</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[3]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[1]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[4]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>11,15</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>window5closed-window-5-modal</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[3]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>6,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[2]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>12,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item3</td>
-	<td>97,6</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[2]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[1]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[2]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>10,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item2</td>
-	<td>101,10</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[2]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>10,5</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>window2-on-top-of-window1-others-closed</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/window/SubWindowOrder.java b/tests/src/com/vaadin/tests/components/window/SubWindowOrder.java
deleted file mode 100644
index c34f32f275..0000000000
--- a/tests/src/com/vaadin/tests/components/window/SubWindowOrder.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.data.util.BeanItemContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class SubWindowOrder extends TestBase {
-
-    private BeanItemContainer<Window> windowlist = new BeanItemContainer<Window>(
-            Window.class);
-
-    @Override
-    protected void setup() {
-        Window mainWindow = getMainWindow();
-        HorizontalLayout controlpanels = new HorizontalLayout();
-        for (int i = 1; i <= 5; i++) {
-            Window dialog = new Window("Dialog " + i);
-            dialog.getContent().setSizeUndefined();
-            windowlist.addBean(dialog);
-            dialog.addComponent(new Label("this is dialog number " + i));
-            dialog.addComponent(new ControlPanel());
-            mainWindow.addWindow(dialog);
-        }
-        controlpanels.addComponent(new ControlPanel());
-        getLayout().setSizeFull();
-        getLayout().addComponent(controlpanels);
-        getLayout().setComponentAlignment(controlpanels, Alignment.BOTTOM_LEFT);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Subwindows should be rendered in the same order as they are added.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3363;
-    }
-
-    class ControlPanel extends CssLayout implements ClickListener {
-        private Button bf = new Button("Bring to front");
-        private Button toggleModality = new Button("Toggle modality");
-        private ComboBox winSel = new ComboBox();
-
-        public ControlPanel() {
-            winSel.setCaption("Controlled window:");
-            winSel.setContainerDataSource(windowlist);
-            winSel.setValue(windowlist.firstItemId());
-            winSel.setItemCaptionPropertyId("caption");
-            addComponent(winSel);
-            addComponent(bf);
-            addComponent(toggleModality);
-            bf.addListener(this);
-            toggleModality.addListener(this);
-        }
-
-        public void buttonClick(ClickEvent event) {
-            if (event.getButton() == bf) {
-                getCurWindow().bringToFront();
-            } else if (event.getButton() == toggleModality) {
-                getCurWindow().setModal(!getCurWindow().isModal());
-            }
-
-        }
-
-        private Window getCurWindow() {
-            return (Window) winSel.getValue();
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/window/SubWindowPositionUpdate.java b/tests/src/com/vaadin/tests/components/window/SubWindowPositionUpdate.java
deleted file mode 100644
index 9383dba80f..0000000000
--- a/tests/src/com/vaadin/tests/components/window/SubWindowPositionUpdate.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.ProgressIndicator;
-import com.vaadin.ui.Window;
-
-public class SubWindowPositionUpdate extends TestBase {
-
-    static int delay = 400;
-
-    @Override
-    protected void setup() {
-        Window subWindow = new Window("Draggable sub window") {
-            @Override
-            public void setPositionX(int positionX) {
-                try {
-                    Thread.sleep(delay);
-                } catch (InterruptedException e) {
-                    e.printStackTrace();
-                }
-                super.setPositionX(positionX);
-            }
-        };
-        getMainWindow().addWindow(subWindow);
-        ProgressIndicator pi = new ProgressIndicator();
-        pi.setIndeterminate(true);
-        pi.setPollingInterval(delay);
-        addComponent(pi);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The window position should not jump inconsistently while "
-                + "dragging, even though external UIDL updates are sent and "
-                + "received by the progress indicator. A small delay is used "
-                + "on the server side to surface the issue (" + delay + "ms).";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4427;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/window/SubWindows-runo.html b/tests/src/com/vaadin/tests/components/window/SubWindows-runo.html
deleted file mode 100644
index 5cbd350174..0000000000
--- a/tests/src/com/vaadin/tests/components/window/SubWindows-runo.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>SubWindows</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">SubWindows</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.window.SubWindows?theme=runo</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>add-button</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindows::/VWindow[0]/FocusableScrollPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindows::/VWindow[0]/FocusableScrollPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>add+2-remove</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindows::/VWindow[0]/FocusableScrollPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindows::/VWindow[0]/FocusableScrollPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>add-button-only</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/window/SubWindows.html b/tests/src/com/vaadin/tests/components/window/SubWindows.html
deleted file mode 100644
index 3b2109e3f1..0000000000
--- a/tests/src/com/vaadin/tests/components/window/SubWindows.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>SubWindows</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">SubWindows</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.window.SubWindows</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>add-button</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindows::/VWindow[0]/FocusableScrollPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindows::/VWindow[0]/FocusableScrollPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>add+2-remove</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindows::/VWindow[0]/FocusableScrollPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowSubWindows::/VWindow[0]/FocusableScrollPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>add-button-only</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/window/SubWindows.java b/tests/src/com/vaadin/tests/components/window/SubWindows.java
deleted file mode 100644
index e939f0b9a4..0000000000
--- a/tests/src/com/vaadin/tests/components/window/SubWindows.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.TextArea;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class SubWindows extends TestBase {
-
-    private Window autoWideWindow;
-
-    @Override
-    protected String getDescription() {
-        return "Three windows should be shown. "
-                + "The width of the one in the upper left corner should be adjusted according to the contents. "
-                + "The centered windows width should be set according to the caption and the second textfield should be clipped. "
-                + "The third window should be initially the width and height of its content and when resizing the window the content width should be updated so it is always 100% of the window.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-    private Component createRemoveButton() {
-        Button b = new Button("Remove");
-        b.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                Button b = event.getButton();
-                ComponentContainer cc = (ComponentContainer) b.getParent();
-                cc.removeComponent(b);
-            }
-        });
-
-        return b;
-    }
-
-    @Override
-    protected void setup() {
-        autoWideWindow = new Window("Dialog - width by contents",
-                new HorizontalLayout());
-        autoWideWindow.getContent().setSizeUndefined();
-        autoWideWindow.addComponent(new TextField("Field 1"));
-        autoWideWindow.addComponent(new TextField("Field 2"));
-        autoWideWindow.addComponent(new Button("Add", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                autoWideWindow.addComponent(createRemoveButton());
-
-            }
-
-        }));
-
-        getMainWindow().addWindow(autoWideWindow);
-
-        {
-            Window dialog = new Window("Dialog - width defined by caption");
-            dialog.addComponent(new TextField("Field 1"));
-
-            TextField tf2 = new TextField("Field 2");
-            tf2.setWidth("500px");
-            dialog.addComponent(tf2);
-            dialog.addComponent(new Button("Ok"));
-
-            dialog.center();
-            getMainWindow().addWindow(dialog);
-        }
-
-        {
-            Window dialog = new Window("Dialog - width defined by content");
-            dialog.getContent().setHeight(null);
-            dialog.getContent().setWidth("100%");
-
-            TextArea ta = new TextArea();
-            ta.setValue("The textfield should fill the window (except margins)."
-                    + "\n - Try to resize the window\n");
-            ta.setRows(5);
-            ta.setWidth("100%");
-            dialog.addComponent(ta);
-
-            dialog.setPositionX(20);
-            dialog.setPositionY(100);
-            getMainWindow().addWindow(dialog);
-        }
-
-        {
-            Window dialog = new Window("Dialog - size defined by content");
-            dialog.getContent().setHeight("100%");
-            dialog.getContent().setWidth("100%");
-
-            TextArea ta = new TextArea();
-            ta.setValue("The textfield should fill the window (except margins)."
-                    + "\n - Try to resize the window\n");
-            ta.setWidth("100%");
-            ta.setHeight("100%");
-            ta.setRows(5);
-            dialog.addComponent(ta);
-
-            dialog.setPositionX(20);
-            dialog.setPositionY(300);
-            getMainWindow().addWindow(dialog);
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/window/SubwindowDraggability.java b/tests/src/com/vaadin/tests/components/window/SubwindowDraggability.java
deleted file mode 100644
index e1927982cd..0000000000
--- a/tests/src/com/vaadin/tests/components/window/SubwindowDraggability.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Window;
-
-public class SubwindowDraggability extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Window draggableSubWindow = new Window("Draggable sub window");
-        draggableSubWindow.setHeight("300px");
-        final Window fixedSubWindow = new Window("Fixed sub window");
-        fixedSubWindow.setHeight("200px");
-        fixedSubWindow.setDraggable(false);
-
-        fixedSubWindow.center();
-        getMainWindow().addWindow(draggableSubWindow);
-        getMainWindow().addWindow(fixedSubWindow);
-
-        Button b = new Button("Swap", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                boolean b = draggableSubWindow.isDraggable();
-
-                draggableSubWindow.setDraggable(!b);
-                fixedSubWindow.setDraggable(b);
-
-            }
-
-        });
-        addComponent(b);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Two sub windows. One is draggable, the other one is fixed and cannot be moved by the user";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3133;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/window/SubwindowInvalidLayout.java b/tests/src/com/vaadin/tests/components/window/SubwindowInvalidLayout.java
deleted file mode 100644
index aeab7f6c97..0000000000
--- a/tests/src/com/vaadin/tests/components/window/SubwindowInvalidLayout.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class SubwindowInvalidLayout extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The subwindow contains an invalid layout, which analyze layouts should detect.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3096;
-    }
-
-    @Override
-    protected void setup() {
-        Window window = new Window("Sub window");
-        window.center();
-
-        VerticalLayout vl = new VerticalLayout();
-        vl.setWidth(null);
-        Button b = new Button("A 100% wide button, invalid");
-        b.setWidth("100%");
-        vl.addComponent(b);
-        window.addComponent(vl);
-
-        getMainWindow().addWindow(window);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/window/TestTooSmallSubwindowSize.html b/tests/src/com/vaadin/tests/components/window/TestTooSmallSubwindowSize.html
deleted file mode 100644
index f926696d63..0000000000
--- a/tests/src/com/vaadin/tests/components/window/TestTooSmallSubwindowSize.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TestTooSmallSubwindowSize</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TestTooSmallSubwindowSize</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.window.TestTooSmallSubwindowSize</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/window/TestTooSmallSubwindowSize.java b/tests/src/com/vaadin/tests/components/window/TestTooSmallSubwindowSize.java
deleted file mode 100644
index 859c1b4b5d..0000000000
--- a/tests/src/com/vaadin/tests/components/window/TestTooSmallSubwindowSize.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class TestTooSmallSubwindowSize extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The size of the subwindow (outer size) is set to 60x60 pixels. Minimum size for the content area is 150x100, which means the window and shadow should be around 155x155 and the content area 150x100. The decoration at the lower left corner of the window must not be missing either.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2579;
-    }
-
-    @Override
-    protected void setup() {
-        Window w = new Window("Scroll");
-        Label desc = new Label(
-                "This is a new child window with a preset"
-                        + " width, height and position. Resizing has been"
-                        + " disabled for this window. Additionally, this text label"
-                        + " is intentionally too large to fit the window. You can"
-                        + " use the scrollbars to view different parts of the window content.");
-        w.addComponent(desc);
-
-        // Set window position
-        w.setPositionX(100);
-        w.setPositionY(100);
-
-        // Set window size
-        w.setWidth(60, Window.UNITS_PIXELS);
-        w.setHeight(60, Window.UNITS_PIXELS);
-
-        // Disable resizing
-        w.setResizable(true);
-
-        getMainWindow().addWindow(w);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/window/WindowCaptionTest.html b/tests/src/com/vaadin/tests/components/window/WindowCaptionTest.html
deleted file mode 100644
index 83889aedb8..0000000000
--- a/tests/src/com/vaadin/tests/components/window/WindowCaptionTest.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.window.WindowTest?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
-	<td>Short</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::PID_Smenu#item0</td>
-	<td>52,19</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::Root/VOverlay[0]/VMenuBar[0]#item1</td>
-	<td>85,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>67,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
-	<td>23,11</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
-	<td>This is a semi-long text that might wrap.</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::PID_Smenu#item0</td>
-	<td>52,19</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::Root/VOverlay[0]/VMenuBar[0]#item1</td>
-	<td>85,4</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>67,9</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
-	<td>23,11</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/window/WindowClickEvents.html b/tests/src/com/vaadin/tests/components/window/WindowClickEvents.html
deleted file mode 100644
index 4a41374e41..0000000000
--- a/tests/src/com/vaadin/tests/components/window/WindowClickEvents.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>setSpeed</td>
-	<td>200</td>
-	<td>To avoid random failures</td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.window.WindowClickEvents?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
-	<td>154,150</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VLabel[0]</td>
-	<td>1. Click using left on Main window layout</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>2. Click using left on Main window</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]</td>
-	<td>188,16</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VLabel[0]</td>
-	<td>3. Click using left on Sub window layout</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>4. Click using left on Sub window</td>
-</tr>
-<!--Clicking on the button should not produce a window click event-->
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::PID_SLog_row_0</td>
-	<td>5. Click on button</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::PID_SLog_row_2</td>
-	<td>3. Click using left on Sub window layout</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::PID_SLog_row_1</td>
-	<td>4. Click using left on Sub window</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/window/WindowClickEvents.java b/tests/src/com/vaadin/tests/components/window/WindowClickEvents.java
deleted file mode 100644
index 041ccaaf30..0000000000
--- a/tests/src/com/vaadin/tests/components/window/WindowClickEvents.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.event.LayoutEvents.LayoutClickEvent;
-import com.vaadin.event.LayoutEvents.LayoutClickListener;
-import com.vaadin.event.MouseEvents.ClickEvent;
-import com.vaadin.event.MouseEvents.ClickListener;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class WindowClickEvents extends TestBase {
-
-    private Log log;
-
-    @Override
-    protected String getDescription() {
-        return "Both the sub window and the main window has a click listener. Clicking produces a row in the log below.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5038;
-    }
-
-    @Override
-    protected void setup() {
-        VerticalLayout layout = new VerticalLayout();
-        layout.addListener(new LayoutClickListener() {
-            public void layoutClick(LayoutClickEvent event) {
-                WindowClickEvents.this.click("Sub window layout", event);
-            }
-        });
-
-        ((VerticalLayout) getMainWindow().getContent())
-                .addListener(new LayoutClickListener() {
-                    public void layoutClick(LayoutClickEvent event) {
-                        WindowClickEvents.this.click("Main window layout",
-                                event);
-                    }
-                });
-        layout.setMargin(true);
-        Window centered = new Window("A window with a click listener", layout);
-        centered.addListener(new ClickListener() {
-
-            public void click(ClickEvent event) {
-                WindowClickEvents.this.click("Sub window", event);
-            }
-
-        });
-        centered.setSizeUndefined();
-        centered.getContent().setSizeUndefined();
-        centered.center();
-
-        Label l = new Label("This window is centered");
-        l.setSizeUndefined();
-        Button b = new Button(
-                "Clicking here should not produce a layout click event");
-        b.addListener(new Button.ClickListener() {
-
-            public void buttonClick(com.vaadin.ui.Button.ClickEvent event) {
-                log.log("Click on button");
-            }
-
-        });
-        centered.addComponent(l);
-        centered.addComponent(b);
-
-        getMainWindow().addWindow(centered);
-        log = new Log(5);
-        addComponent(log);
-        getMainWindow().addListener(new ClickListener() {
-
-            public void click(ClickEvent event) {
-                WindowClickEvents.this.click("Main window", event);
-            }
-        });
-
-    }
-
-    private void click(String target, ClickEvent event) {
-        log.log("Click using " + event.getButtonName() + " on " + target);
-        // + " at " + event.getClientX() + "," + event.getClientY());
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/window/WindowResizeListener.java b/tests/src/com/vaadin/tests/components/window/WindowResizeListener.java
deleted file mode 100644
index 62f998e20e..0000000000
--- a/tests/src/com/vaadin/tests/components/window/WindowResizeListener.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Window.ResizeEvent;
-import com.vaadin.ui.Window.ResizeListener;
-
-public class WindowResizeListener extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Size changes from windows (both sub "
-                + "and browsers level) should get back to server."
-                + " If size changes, a separate server side event should occur.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-    Window subwin = new ResizeListenerWindow();
-
-    @Override
-    protected void setup() {
-
-        final Label l = new Label();
-        getLayout().addComponent(l);
-
-        getMainWindow().addListener(new ResizeListener() {
-            public void windowResized(ResizeEvent e) {
-                l.setValue("Current main window size: "
-                        + getMainWindow().getWidth() + " x "
-                        + getMainWindow().getHeight());
-            }
-        });
-
-        CheckBox subwindow = new CheckBox("show subwindow");
-        subwindow.setImmediate(true);
-        subwindow.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                if (event.getButton().booleanValue()) {
-                    getMainWindow().addWindow(subwin);
-                } else {
-                    getMainWindow().removeWindow(subwin);
-                }
-            }
-        });
-        getLayout().addComponent(subwindow);
-
-        CheckBox immediate = new CheckBox("immediate");
-        immediate.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                boolean booleanValue = event.getButton().booleanValue();
-                getMainWindow().setImmediate(booleanValue);
-                subwin.setImmediate(booleanValue);
-            }
-        });
-        immediate.setImmediate(true);
-        immediate.setValue(true);
-        getMainWindow().setImmediate(true);
-        subwin.setImmediate(true);
-        getLayout().addComponent(immediate);
-
-        getLayout().addComponent(new Button("Sync"));
-
-    }
-}
-
-class ResizeListenerWindow extends Window {
-    Label sizeLabel = new Label();
-
-    public ResizeListenerWindow() {
-        super("Subwindow");
-        setWidth("400px");
-
-        Layout hl = (Layout) getContent();
-        hl.addComponent(new Label("Current size: "));
-        hl.addComponent(sizeLabel);
-
-        addListener(new ResizeListener() {
-            public void windowResized(ResizeEvent e) {
-                updateLabel();
-            }
-        });
-
-        updateLabel();
-    }
-
-    public void updateLabel() {
-        sizeLabel
-                .setValue(getWidth() + Sizeable.UNIT_SYMBOLS[getWidthUnits()]
-                        + " x " + getHeight()
-                        + Sizeable.UNIT_SYMBOLS[getHeightUnits()]);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/window/WindowScrollingComponentIntoView.java b/tests/src/com/vaadin/tests/components/window/WindowScrollingComponentIntoView.java
deleted file mode 100644
index 7889a58f81..0000000000
--- a/tests/src/com/vaadin/tests/components/window/WindowScrollingComponentIntoView.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class WindowScrollingComponentIntoView extends AbstractTestCase {
-
-    @Override
-    protected String getDescription() {
-        return "Scroll down, click 'up' and the view should scroll to the top";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4206;
-    }
-
-    @Override
-    public void init() {
-        Table table = new Table();
-        table.setPageLength(50);
-
-        final Button up = new Button("up");
-        up.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                up.getWindow().setScrollTop(0);
-            }
-        });
-
-        setMainWindow(new Window(""));
-        getMainWindow().getContent().setSizeUndefined();
-
-        Component l2 = null;
-        for (int i = 0; i < 10; i++) {
-            l2 = l("X" + i);
-            getMainWindow().addComponent(l2);
-        }
-
-        final Component x9 = l2;
-
-        HorizontalLayout horizontalLayout = new HorizontalLayout();
-
-        Component l = null;
-        for (int i = 0; i < 10; i++) {
-            l = l("Y" + i);
-            horizontalLayout.addComponent(l);
-        }
-
-        getMainWindow().addComponent(horizontalLayout);
-        final Component y9 = l;
-
-        final Window window = new Window();
-        window.setHeight("500px");
-        window.setWidth("500px");
-        window.setPositionX(200);
-        window.setPositionY(200);
-
-        window.addComponent(new Button("Scroll mainwin to X9",
-                new ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        getMainWindow().scrollIntoView(x9);
-
-                    }
-                }));
-        window.addComponent(new Button("Scroll mainwin to Y9",
-                new ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        getMainWindow().scrollIntoView(y9);
-
-                    }
-                }));
-
-        Panel panel = new Panel("scrollable panel");
-        panel.setHeight(400, Panel.UNITS_PIXELS);
-        panel.setScrollable(true);
-        panel.setScrollLeft(50);
-        panel.setScrollTop(50);
-        panel.getContent().setSizeUndefined();
-        window.addComponent(l("Spacer", 500, 500));
-
-        l2 = null;
-        for (int i = 0; i < 10; i++) {
-            l2 = l("X" + i);
-            panel.addComponent(l2);
-        }
-
-        final Component x29 = l2;
-
-        horizontalLayout = new HorizontalLayout();
-
-        l = null;
-        for (int i = 0; i < 10; i++) {
-            l = l("Y" + i);
-            horizontalLayout.addComponent(l);
-        }
-        panel.addComponent(horizontalLayout);
-        final Component y29 = l;
-
-        ((VerticalLayout) getMainWindow().getContent()).addComponent(
-                new Button("Scroll win to X9", new ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        window.scrollIntoView(x29);
-                    }
-                }), 0);
-        ((VerticalLayout) getMainWindow().getContent()).addComponent(
-                new Button("Scroll win to Y9", new ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        window.scrollIntoView(y29);
-                    }
-                }), 0);
-
-        window.addComponent(panel);
-        getMainWindow().addWindow(window);
-
-    }
-
-    private Component l(String string) {
-        return l(string, 200, 350);
-    }
-
-    private Component l(String string, int h, int w) {
-        Label label = new Label(string);
-        label.setHeight(h, Label.UNITS_PIXELS);
-        label.setWidth(w, Label.UNITS_PIXELS);
-        return label;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/window/WindowScrollingUp.java b/tests/src/com/vaadin/tests/components/window/WindowScrollingUp.java
deleted file mode 100644
index 476fd22a55..0000000000
--- a/tests/src/com/vaadin/tests/components/window/WindowScrollingUp.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-public class WindowScrollingUp extends AbstractTestCase {
-
-    @Override
-    protected String getDescription() {
-        return "Scroll down, click 'up' and the view should scroll to the top";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4206;
-    }
-
-    @Override
-    public void init() {
-        Table table = new Table();
-        table.setPageLength(50);
-
-        final Button up = new Button("up");
-        up.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                up.getWindow().setScrollTop(0);
-            }
-        });
-
-        setMainWindow(new Window(""));
-        getMainWindow().addComponent(table);
-        getMainWindow().addComponent(up);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/window/WindowShouldRemoveActionHandler.html b/tests/src/com/vaadin/tests/components/window/WindowShouldRemoveActionHandler.html
deleted file mode 100644
index 4923bff58a..0000000000
--- a/tests/src/com/vaadin/tests/components/window/WindowShouldRemoveActionHandler.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>WindowShouldRemoveActionHandler</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">WindowShouldRemoveActionHandler</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.window.WindowShouldRemoveActionHandler</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowShouldRemoveActionHandler::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowShouldRemoveActionHandler::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTitle</td>
-	<td>A panel with 2 action handlers</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowShouldRemoveActionHandler::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTitle</td>
-	<td>A panel with 3 action handlers</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowShouldRemoveActionHandler::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowShouldRemoveActionHandler::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTitle</td>
-	<td>A panel with 3 action handlers - Removed handler - Removed handler</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestscomponentswindowWindowShouldRemoveActionHandler::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTitle</td>
-	<td>A panel with 2 action handlers</td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/components/window/WindowShouldRemoveActionHandler.java b/tests/src/com/vaadin/tests/components/window/WindowShouldRemoveActionHandler.java
deleted file mode 100644
index e6d3fb1651..0000000000
--- a/tests/src/com/vaadin/tests/components/window/WindowShouldRemoveActionHandler.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.vaadin.event.Action;
-import com.vaadin.event.Action.Handler;
-import com.vaadin.event.ShortcutAction;
-import com.vaadin.event.ShortcutAction.ModifierKey;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.TextField;
-
-public class WindowShouldRemoveActionHandler extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Adding action handlers to the window should make them appear on the client side. Removing the action handlers should remove them also from the client side, also if all action handlers are removed.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2941;
-    }
-
-    @Override
-    protected void setup() {
-        addComponent(new TextField());
-        Button add = new Button("Add an action handler",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        add();
-                    }
-
-                });
-        Button addAnother = new Button("Add another action handler",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        addAnother();
-                    }
-
-                });
-        Button remove = new Button("Remove an action handler",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        remove();
-                    }
-
-                });
-
-        addComponent(add);
-        addComponent(addAnother);
-        addComponent(remove);
-    }
-
-    public void remove() {
-        getMainWindow().setCaption(
-                getMainWindow().getCaption() + " - Removed handler");
-        getMainWindow().removeActionHandler(
-                actionHandlers.remove(actionHandlers.size() - 1));
-    }
-
-    private List<Handler> actionHandlers = new ArrayList<Handler>();
-
-    public void add() {
-        getMainWindow().setCaption(
-                getMainWindow().getCaption() + " - Added handler");
-        Handler actionHandler = new Handler() {
-
-            public Action[] getActions(Object target, Object sender) {
-                return new Action[] { new ShortcutAction("Ctrl+Left",
-                        ShortcutAction.KeyCode.ARROW_LEFT,
-                        new int[] { ModifierKey.CTRL }) };
-            }
-
-            public void handleAction(Action action, Object sender, Object target) {
-                getMainWindow().showNotification(
-                        "Handling action " + action.getCaption());
-            }
-
-        };
-
-        addHandler(actionHandler);
-    }
-
-    public void addAnother() {
-        Handler actionHandler = new Handler() {
-
-            public Action[] getActions(Object target, Object sender) {
-                return new Action[] { new ShortcutAction("Ctrl+Right",
-                        ShortcutAction.KeyCode.ARROW_RIGHT,
-                        new int[] { ModifierKey.CTRL }) };
-            }
-
-            public void handleAction(Action action, Object sender, Object target) {
-                getMainWindow().showNotification(
-                        "Handling action " + action.getCaption());
-            }
-
-        };
-
-        addHandler(actionHandler);
-    }
-
-    private void addHandler(Handler actionHandler) {
-        actionHandlers.add(actionHandler);
-        getMainWindow().addActionHandler(actionHandler);
-        getMainWindow().setCaption(
-                "A panel with " + actionHandlers.size() + " action handlers");
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/components/window/WindowStyleNames.java b/tests/src/com/vaadin/tests/components/window/WindowStyleNames.java
deleted file mode 100644
index 3a36926b42..0000000000
--- a/tests/src/com/vaadin/tests/components/window/WindowStyleNames.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-
-public class WindowStyleNames extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Click 'add style' to add a 'new' style to the window. The 'old' style should disappear and only the 'new' style should be set. Verify using e.g. firebug";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3059;
-    }
-
-    @Override
-    protected void setup() {
-        setWindowStyle("old");
-        addComponent(new Button("Set style to 'new'", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                setWindowStyle("new");
-            }
-
-        }));
-
-        addComponent(new Button("Set style to 'custom'", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                setWindowStyle("custom");
-            }
-
-        }));
-
-        addComponent(new Button("Add 'foo' style", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                getMainWindow().addStyleName("foo");
-            }
-
-        }));
-
-    }
-
-    protected void setWindowStyle(String string) {
-        getMainWindow().setStyleName(string);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/components/window/WindowTest.java b/tests/src/com/vaadin/tests/components/window/WindowTest.java
deleted file mode 100644
index ae3b0f22df..0000000000
--- a/tests/src/com/vaadin/tests/components/window/WindowTest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.vaadin.tests.components.window;
-
-import com.vaadin.tests.components.panel.PanelTest;
-import com.vaadin.ui.Window;
-
-public class WindowTest extends PanelTest<Window> {
-
-    @Override
-    protected Class<Window> getTestClass() {
-        return Window.class;
-    }
-
-    @Override
-    protected void addTestComponent(Window c) {
-        getMainWindow().addWindow(c);
-        getTestComponents().add(c);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/containers/BeanItemContainerFilteringTest.java b/tests/src/com/vaadin/tests/containers/BeanItemContainerFilteringTest.java
deleted file mode 100644
index 0d47cc426d..0000000000
--- a/tests/src/com/vaadin/tests/containers/BeanItemContainerFilteringTest.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package com.vaadin.tests.containers;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.BeanItemContainer;
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-public class BeanItemContainerFilteringTest extends TestBase {
-
-    private Table table;
-    private BeanItemContainer<TestBean> container;
-    private TextField filterString;
-    private TextField position;
-    private int nextToAdd = 1;
-    private Label nextLabel;
-
-    protected static class TestBean {
-        private String id;
-        private String value;
-
-        public TestBean() {
-        }
-
-        public TestBean(String id, String value) {
-            setId(id);
-            setValue(value);
-        }
-
-        public void setId(String id) {
-            this.id = id;
-        }
-
-        public String getId() {
-            return id;
-        }
-
-        public void setValue(String value) {
-            this.value = value;
-        }
-
-        public String getValue() {
-            return value;
-        }
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Test adding items in a filtered BeanItemContainer.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return new Integer(1061);
-    }
-
-    @Override
-    protected void setup() {
-        table = new Table();
-        try {
-            container = new BeanItemContainer<TestBean>(TestBean.class);
-            table.setContainerDataSource(container);
-
-            table.setWidth(300, Sizeable.UNITS_PIXELS);
-            table.setSelectable(true);
-            table.setMultiSelect(false);
-            table.setEditable(true);
-            table.setImmediate(true);
-            // table.addContainerProperty("column1", String.class, "test");
-
-            for (int i = 0; i < 25; ++i) {
-                container.addItem(new TestBean("Item " + i, "Value for " + i));
-            }
-
-            VerticalLayout vl = new VerticalLayout();
-
-            // activate & deactivate filtering
-            filterString = new TextField("Filter string:", "1");
-            vl.addComponent(filterString);
-
-            final CheckBox cb = new CheckBox("Filter on value",
-                    new Button.ClickListener() {
-                        public void buttonClick(ClickEvent event) {
-                            container.removeAllContainerFilters();
-                            if (((CheckBox) event.getSource()).booleanValue()) {
-                                container.addContainerFilter("value",
-                                        filterString.getValue().toString(),
-                                        false, false);
-                            }
-                        }
-                    });
-            cb.setImmediate(true);
-            vl.addComponent(cb);
-
-            nextLabel = new Label();
-            nextLabel.setCaption("Next id: " + nextToAdd);
-            vl.addComponent(nextLabel);
-
-            // addItemAt(idx), addItemAfter(selection), addItem()
-
-            final Button addItemButton = new Button("addItem()",
-                    new Button.ClickListener() {
-                        public void buttonClick(ClickEvent event) {
-                            container.addItem(new TestBean("addItem() "
-                                    + nextToAdd, "value " + nextToAdd));
-                            nextToAdd++;
-                            nextLabel.setCaption("Next id: " + nextToAdd);
-                        }
-                    });
-            addItemButton.setImmediate(true);
-            vl.addComponent(addItemButton);
-
-            final Button addItemAfterButton = new Button("addItemAfter()",
-                    new Button.ClickListener() {
-                        public void buttonClick(ClickEvent event) {
-                            Object selection = table.getValue();
-                            if (selection == null) {
-                                return;
-                            }
-                            TestBean bean = new TestBean("addItemAfter() "
-                                    + nextToAdd, "value " + nextToAdd);
-                            Item item = container.addItemAfter(selection, bean);
-                            if (item == null) {
-                                getMainWindow().showNotification(
-                                        "Adding item after " + selection
-                                                + " failed");
-                            }
-                            nextToAdd++;
-                            nextLabel.setCaption("Next id: " + nextToAdd);
-                        }
-                    });
-            addItemAfterButton.setImmediate(true);
-            vl.addComponent(addItemAfterButton);
-
-            position = new TextField("Position:", "0");
-            vl.addComponent(position);
-
-            final Button addItemAtButton = new Button("addItemAt()",
-                    new Button.ClickListener() {
-                        public void buttonClick(ClickEvent event) {
-                            int index = Integer.parseInt(position.getValue()
-                                    .toString());
-                            TestBean bean = new TestBean("addItemAt() "
-                                    + nextToAdd, "value " + nextToAdd);
-                            Item item = container.addItemAt(index, bean);
-                            if (item == null) {
-                                getMainWindow().showNotification(
-                                        "Adding item at index "
-                                                + position.getValue()
-                                                + " failed");
-                            }
-                            nextToAdd++;
-                            nextLabel.setCaption("Next id: " + nextToAdd);
-                        }
-                    });
-            addItemAtButton.setImmediate(true);
-            vl.addComponent(addItemAtButton);
-
-            getLayout().addComponent(table);
-            getLayout().addComponent(vl);
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/containers/BeanItemContainerTest.java b/tests/src/com/vaadin/tests/containers/BeanItemContainerTest.java
deleted file mode 100644
index 905ec2f9ff..0000000000
--- a/tests/src/com/vaadin/tests/containers/BeanItemContainerTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.vaadin.tests.containers;
-
-import java.util.Collection;
-import java.util.LinkedList;
-
-import com.vaadin.data.util.BeanItemContainer;
-
-public class BeanItemContainerTest {
-
-    /**
-     * Test class for BeanItemContainer
-     * 
-     * @throws IllegalAccessException
-     * @throws InstantiationException
-     */
-    public static void main(String[] args) throws InstantiationException,
-            IllegalAccessException {
-        BeanItemContainer<Hello> c = new BeanItemContainer<Hello>(Hello.class);
-        c.addItem(new Hello());
-
-        Collection<Hello> col = new LinkedList<Hello>();
-        for (int i = 0; i < 100; i++) {
-            col.add(new Hello());
-        }
-        col.add(new Hello2());
-
-        c = new BeanItemContainer<Hello>(col);
-
-        System.out.println(c + " contains " + c.size() + " objects");
-
-        // test that subclass properties are handled correctly
-        System.out.println(c + " item 0 second = "
-                + c.getContainerProperty(c.getIdByIndex(0), "second"));
-        System.out.println(c + " item 100 second = "
-                + c.getContainerProperty(c.getIdByIndex(100), "second"));
-
-    }
-
-    public static class Hello {
-
-        public String first;
-        public String second;
-
-        public Hello() {
-            first = "f";
-            second = "l";
-        }
-
-        public String getFirst() {
-            return first;
-        }
-
-        public void setFirst(String first) {
-            this.first = first;
-        }
-
-        public String getSecond() {
-            return second;
-        }
-
-        public void setSecond(String second) {
-            this.second = second;
-        }
-
-    }
-
-    public static class Hello2 extends Hello {
-
-        @Override
-        public String getSecond() {
-            return "second";
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/containers/HierarchicalWrapperOrdering.java b/tests/src/com/vaadin/tests/containers/HierarchicalWrapperOrdering.java
deleted file mode 100644
index fb5fe8c27a..0000000000
--- a/tests/src/com/vaadin/tests/containers/HierarchicalWrapperOrdering.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package com.vaadin.tests.containers;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.util.ContainerHierarchicalWrapper;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Tree;
-
-public class HierarchicalWrapperOrdering extends TestBase {
-
-    private static final long serialVersionUID = 1L;
-
-    IndexedContainer indexedContainer = new IndexedContainer();
-
-    Container.Hierarchical hier = new ContainerHierarchicalWrapper(
-            indexedContainer);
-
-    Tree tree1;
-
-    private static void sort(IndexedContainer container) {
-        Object[] properties = new Object[1];
-        properties[0] = "name";
-
-        boolean[] ascending = new boolean[1];
-        ascending[0] = true;
-
-        container.sort(properties, ascending);
-    }
-
-    private static void populateContainer(Container.Hierarchical container) {
-        container.addContainerProperty("name", String.class, null);
-
-        addItem(container, "Games", null);
-        addItem(container, "Call of Duty", "Games");
-        addItem(container, "Might and Magic", "Games");
-        addItem(container, "Fallout", "Games");
-        addItem(container, "Red Alert", "Games");
-
-        addItem(container, "Cars", null);
-        addItem(container, "Toyota", "Cars");
-        addItem(container, "Volvo", "Cars");
-        addItem(container, "Audi", "Cars");
-        addItem(container, "Ford", "Cars");
-
-        addItem(container, "Natural languages", null);
-        addItem(container, "Swedish", "Natural languages");
-        addItem(container, "English", "Natural languages");
-        addItem(container, "Finnish", "Natural languages");
-
-        addItem(container, "Programming languages", null);
-        addItem(container, "C++", "Programming languages");
-        addItem(container, "PHP", "Programming languages");
-        addItem(container, "Java", "Programming languages");
-        addItem(container, "Python", "Programming languages");
-
-    }
-
-    public static void addItem(Container.Hierarchical container, String string,
-            String parent) {
-        Item item = container.addItem(string);
-        item.getItemProperty("name").setValue(string);
-
-        if (parent != null) {
-            container.setParent(string, parent);
-        }
-
-    }
-
-    @Override
-    protected void setup() {
-        Layout l = getLayout();
-
-        populateContainer(hier);
-
-        // sort(indexedContainer);
-
-        tree1 = new Tree("Tree with wrapped IndexedContainer");
-        tree1.setContainerDataSource(hier);
-        tree1.setItemCaptionPropertyId("name");
-        for (Object id : hier.rootItemIds()) {
-            tree1.expandItemsRecursively(id);
-        }
-        l.addComponent(tree1);
-
-        // This contains a bug, changes not reflected back to client
-        Button modify = new Button("Modify and sort (has a bug)",
-                new ClickListener() {
-                    private static final long serialVersionUID = 1L;
-
-                    public void buttonClick(ClickEvent event) {
-                        // Get first item
-                        Object itemId = indexedContainer.getIdByIndex(0);
-                        Item item = indexedContainer.getItem(itemId);
-                        Property property = item.getItemProperty("name");
-                        // Prepend with Z so item should get sorted later
-                        property.setValue("Z " + property.getValue());
-                        // this does not work alone, requires extraneous
-                        // setContainerDataSource for server-side changes to be
-                        // reflected back to client-side
-                        sort(indexedContainer);
-                    }
-                });
-        l.addComponent(modify);
-
-        Table t = new Table("Table with indexed container", indexedContainer);
-
-        l.addComponent(t);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Items should be in same order as in wrapped container after sorting.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3688;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/containers/IndexedContainerFilteringTest.java b/tests/src/com/vaadin/tests/containers/IndexedContainerFilteringTest.java
deleted file mode 100644
index 154118a393..0000000000
--- a/tests/src/com/vaadin/tests/containers/IndexedContainerFilteringTest.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package com.vaadin.tests.containers;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-public class IndexedContainerFilteringTest extends TestBase {
-
-    private Table table;
-    private IndexedContainer container;
-    private TextField filterString;
-    private TextField position;
-    private int nextToAdd = 1;
-    private Label nextLabel;
-
-    @Override
-    protected String getDescription() {
-        return "Adding items to a filtered IndexedContainer inserts the items at the wrong location.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return new Integer(2809);
-    }
-
-    @Override
-    protected void setup() {
-        table = new Table();
-        container = (IndexedContainer) table.getContainerDataSource();
-
-        table.setWidth(300, Sizeable.UNITS_PIXELS);
-        table.setSelectable(true);
-        table.setMultiSelect(false);
-        table.addContainerProperty("column1", String.class, "test");
-
-        for (int i = 0; i < 25; ++i) {
-            table.addItem(new Object[] { "Item " + i }, "Item " + i);
-        }
-
-        VerticalLayout vl = new VerticalLayout();
-
-        // activate & deactivate filtering
-        filterString = new TextField("Filter string:", "1");
-        vl.addComponent(filterString);
-
-        final CheckBox cb = new CheckBox("Filter", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                container.removeAllContainerFilters();
-                if (((CheckBox) event.getSource()).booleanValue()) {
-                    container.addContainerFilter("column1", filterString
-                            .getValue().toString(), false, false);
-                }
-            }
-        });
-        cb.setImmediate(true);
-        vl.addComponent(cb);
-
-        nextLabel = new Label();
-        nextLabel.setCaption("Next id: " + nextToAdd);
-        vl.addComponent(nextLabel);
-
-        // addItemAt(idx), addItemAfter(selection), addItem()
-
-        final Button addItemButton = new Button("addItem()",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        Item item = container.addItem("addItem() " + nextToAdd);
-                        if (item != null) {
-                            item.getItemProperty("column1").setValue(
-                                    "addItem() " + nextToAdd);
-                        }
-                        nextToAdd++;
-                        nextLabel.setCaption("Next id: " + nextToAdd);
-                    }
-                });
-        addItemButton.setImmediate(true);
-        vl.addComponent(addItemButton);
-
-        final Button addItemAfterButton = new Button("addItemAfter()",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        Object selection = table.getValue();
-                        if (selection == null) {
-                            return;
-                        }
-                        String id = "addItemAfter() " + nextToAdd;
-                        Item item = container.addItemAfter(selection, id);
-                        if (item != null) {
-                            item.getItemProperty("column1").setValue(id);
-                            table.setValue(id);
-                        } else {
-                            getMainWindow().showNotification(
-                                    "Adding item after " + selection
-                                            + " failed");
-                        }
-                        nextToAdd++;
-                        nextLabel.setCaption("Next id: " + nextToAdd);
-                    }
-                });
-        addItemAfterButton.setImmediate(true);
-        vl.addComponent(addItemAfterButton);
-
-        position = new TextField("Position:", "0");
-        vl.addComponent(position);
-
-        final Button addItemAtButton = new Button("addItemAt()",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        int index = Integer.parseInt(position.getValue()
-                                .toString());
-                        String id = "addItemAt() " + nextToAdd;
-                        Item item = container.addItemAt(index, id);
-                        if (item != null) {
-                            item.getItemProperty("column1").setValue(id);
-                            table.setValue(id);
-                        } else {
-                            getMainWindow().showNotification(
-                                    "Adding item at index "
-                                            + position.getValue() + " failed");
-                        }
-                        nextToAdd++;
-                        nextLabel.setCaption("Next id: " + nextToAdd);
-                    }
-                });
-        addItemAtButton.setImmediate(true);
-        vl.addComponent(addItemAtButton);
-
-        getLayout().addComponent(table);
-        getLayout().addComponent(vl);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/containers/TableWithFileSystemContainer.java b/tests/src/com/vaadin/tests/containers/TableWithFileSystemContainer.java
deleted file mode 100644
index 20567e70af..0000000000
--- a/tests/src/com/vaadin/tests/containers/TableWithFileSystemContainer.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.vaadin.tests.containers;
-
-import java.io.File;
-
-import com.vaadin.data.util.FilesystemContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-public class TableWithFileSystemContainer extends TestBase {
-
-    private String testPath = "C:/temp/img";
-
-    @Override
-    public void setup() {
-        setMainWindow(new Window(""));
-        Table table = new Table("Documents", new FilesystemContainer(new File(
-                testPath)));
-        table.setWidth("100%");
-        getMainWindow().addComponent(table);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The Table uses a FileSystemContainer as datasource. Scrolling to the end should show the last items, not throw an NPE.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3864;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/containers/TestItemSorter.java b/tests/src/com/vaadin/tests/containers/TestItemSorter.java
deleted file mode 100644
index bf7ce6175a..0000000000
--- a/tests/src/com/vaadin/tests/containers/TestItemSorter.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.vaadin.tests.containers;
-
-import java.util.Collection;
-import java.util.Comparator;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.DefaultItemSorter;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Table;
-
-public class TestItemSorter extends TestBase {
-
-    private static final Object BUTTON = "Button";
-    private static final Object CHECKBOX = "CheckBox";
-    private static final Object STRING = "String";
-
-    private Table table;
-    private IndexedContainer container;
-
-    @Override
-    protected void setup() {
-        table = new Table("DefaultItemSorter with custom comparator");
-        container = createContainer();
-        populateContainer(container);
-        container.setItemSorter(new DefaultItemSorter(new Comparator<Object>() {
-
-            public int compare(Object o1, Object o2) {
-                if (o1 instanceof CheckBox && o2 instanceof CheckBox) {
-                    Boolean b1 = ((CheckBox) o1).booleanValue();
-                    return b1.compareTo(((CheckBox) o2).booleanValue());
-                } else if (o1 instanceof Button && o2 instanceof Button) {
-                    String caption1 = ((Button) o1).getCaption().toLowerCase();
-                    String caption2 = ((Button) o2).getCaption().toLowerCase();
-                    return caption1.compareTo(caption2);
-
-                } else if (o1 instanceof String && o2 instanceof String) {
-                    return ((String) o1).toLowerCase().compareTo(
-                            ((String) o2).toLowerCase());
-                }
-
-                return 0;
-
-            }
-        }));
-        table.setContainerDataSource(container);
-
-        addComponent(table);
-
-    }
-
-    private static void populateContainer(IndexedContainer container) {
-        container.removeAllItems();
-        String[] strings = new String[] { "Text 1", "Text 2", "true", "false",
-                "Caption 1", "Caption 2" };
-        for (String s : strings) {
-            Object id = container.addItem();
-            Item item = container.getItem(id);
-            item.getItemProperty(STRING).setValue(s);
-            item.getItemProperty(BUTTON).setValue(new Button(s));
-            item.getItemProperty(CHECKBOX).setValue(
-                    new CheckBox("", s.equals("true")));
-        }
-
-    }
-
-    private static IndexedContainer createContainer() {
-        IndexedContainer ic = new IndexedContainer() {
-            @Override
-            public Collection<?> getSortableContainerPropertyIds() {
-                // Default implementation allows sorting only if the property
-                // type can be cast to Comparable
-                return getContainerPropertyIds();
-            }
-        };
-        ic.addContainerProperty(BUTTON, Button.class, null);
-        ic.addContainerProperty(CHECKBOX, CheckBox.class, null);
-        ic.addContainerProperty(STRING, String.class, null);
-        return ic;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Test that uses a custom ItemSorter to allow sorting Property types that do not implement Comparable";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/containers/sqlcontainer/CheckboxUpdateProblem.java b/tests/src/com/vaadin/tests/containers/sqlcontainer/CheckboxUpdateProblem.java
deleted file mode 100644
index 2682dc5bbb..0000000000
--- a/tests/src/com/vaadin/tests/containers/sqlcontainer/CheckboxUpdateProblem.java
+++ /dev/null
@@ -1,190 +0,0 @@
-package com.vaadin.tests.containers.sqlcontainer;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import com.vaadin.Application;
-import com.vaadin.data.Container.ItemSetChangeEvent;
-import com.vaadin.data.Container.ItemSetChangeListener;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.sqlcontainer.SQLContainer;
-import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
-import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
-import com.vaadin.data.util.sqlcontainer.query.TableQuery;
-import com.vaadin.tests.server.container.sqlcontainer.AllTests;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-public class CheckboxUpdateProblem extends Application implements
-        Property.ValueChangeListener {
-    private final DatabaseHelper databaseHelper = new DatabaseHelper();
-    private Table testList;
-    private final HorizontalSplitPanel horizontalSplit = new HorizontalSplitPanel();
-
-    private TestForm testForm = new TestForm();
-
-    @Override
-    public void init() {
-        setMainWindow(new Window("Test window"));
-        horizontalSplit.setSizeFull();
-        testList = new Table();
-
-        horizontalSplit.setFirstComponent(testList);
-        testList.setSizeFull();
-        testList.setContainerDataSource(databaseHelper.getTestContainer());
-        testList.setSelectable(true);
-        testList.setImmediate(true);
-        testList.addListener(this);
-
-        databaseHelper.getTestContainer().addListener(
-                new ItemSetChangeListener() {
-                    public void containerItemSetChange(ItemSetChangeEvent event) {
-                        Object selected = testList.getValue();
-                        if (selected != null) {
-                            testForm.setItemDataSource(testList
-                                    .getItem(selected));
-                        }
-                    }
-                });
-
-        testForm = new TestForm();
-        testForm.setItemDataSource(null);
-
-        horizontalSplit.setSecondComponent(testForm);
-
-        getMainWindow().setContent(horizontalSplit);
-    }
-
-    public void valueChange(ValueChangeEvent event) {
-
-        Property property = event.getProperty();
-        if (property == testList) {
-            Item item = testList.getItem(testList.getValue());
-
-            if (item != testForm.getItemDataSource()) {
-                testForm.setItemDataSource(item);
-            }
-        }
-
-    }
-
-    private class TestForm extends Form implements Button.ClickListener {
-
-        private final Button save;
-
-        private TestForm() {
-            setSizeFull();
-            setWriteThrough(false);
-            setInvalidCommitted(false);
-
-            save = new Button("Save", (ClickListener) this);
-            getFooter().addComponent(save);
-            getFooter().setVisible(false);
-        }
-
-        public void buttonClick(ClickEvent event) {
-            if (event.getSource() == save) {
-                super.commit();
-
-                try {
-                    databaseHelper.getTestContainer().commit();
-                    getMainWindow().showNotification("Saved");
-                } catch (SQLException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-
-        @Override
-        public void setItemDataSource(Item newDataSource) {
-            super.setItemDataSource(newDataSource);
-
-            if (newDataSource != null) {
-                getFooter().setVisible(true);
-            } else {
-                getFooter().setVisible(false);
-            }
-        }
-
-    }
-
-    private class DatabaseHelper {
-
-        private JDBCConnectionPool connectionPool = null;
-        private SQLContainer testContainer = null;
-        private static final String TABLENAME = "testtable";
-
-        public DatabaseHelper() {
-            initConnectionPool();
-            initDatabase();
-            initContainers();
-        }
-
-        private void initDatabase() {
-            try {
-                Connection conn = connectionPool.reserveConnection();
-                Statement statement = conn.createStatement();
-                try {
-                    statement.execute("drop table " + TABLENAME);
-                } catch (SQLException e) {
-                    // Will fail if table doesn't exist, which is OK.
-                    conn.rollback();
-                }
-                switch (AllTests.db) {
-                case MYSQL:
-                    statement
-                            .execute("create table "
-                                    + TABLENAME
-                                    + " (id integer auto_increment not null, field1 varchar(100), field2 boolean, primary key(id))");
-                    break;
-                case POSTGRESQL:
-                    statement
-                            .execute("create table "
-                                    + TABLENAME
-                                    + " (\"id\" serial primary key, \"field1\" varchar(100), \"field2\" boolean)");
-                    break;
-                }
-                statement.executeUpdate("insert into " + TABLENAME
-                        + " values(default, 'Kalle', 'true')");
-                statement.close();
-                conn.commit();
-                connectionPool.releaseConnection(conn);
-            } catch (SQLException e) {
-                e.printStackTrace();
-            }
-        }
-
-        private void initContainers() {
-            try {
-                TableQuery q1 = new TableQuery(TABLENAME, connectionPool);
-                q1.setVersionColumn("id");
-                testContainer = new SQLContainer(q1);
-            } catch (SQLException e) {
-                e.printStackTrace();
-            }
-        }
-
-        private void initConnectionPool() {
-            try {
-                connectionPool = new SimpleJDBCConnectionPool(
-                        AllTests.dbDriver, AllTests.dbURL, AllTests.dbUser,
-                        AllTests.dbPwd, 2, 5);
-            } catch (SQLException e) {
-                e.printStackTrace();
-            }
-        }
-
-        public SQLContainer getTestContainer() {
-            return testContainer;
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/containers/sqlcontainer/MassInsertMemoryLeakTestApp.java b/tests/src/com/vaadin/tests/containers/sqlcontainer/MassInsertMemoryLeakTestApp.java
deleted file mode 100644
index 419e606bfc..0000000000
--- a/tests/src/com/vaadin/tests/containers/sqlcontainer/MassInsertMemoryLeakTestApp.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package com.vaadin.tests.containers.sqlcontainer;
-
-import java.sql.SQLException;
-
-import com.vaadin.Application;
-import com.vaadin.data.util.sqlcontainer.SQLContainer;
-import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
-import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
-import com.vaadin.data.util.sqlcontainer.query.TableQuery;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.ProgressIndicator;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-// author table in testdb (MySQL) is set out as follows
-// +-------------+-------------+------+-----+---------+----------------+
-// | Field       | Type        | Null | Key | Default | Extra          |
-// +-------------+-------------+------+-----+---------+----------------+
-// | id          | int(11)     | NO   | PRI | NULL    | auto_increment |
-// | last_name   | varchar(40) | NO   |     | NULL    |                |
-// | first_names | varchar(80) | NO   |     | NULL    |                |
-// +-------------+-------------+------+-----+---------+----------------+
-
-@SuppressWarnings("serial")
-public class MassInsertMemoryLeakTestApp extends Application {
-
-    ProgressIndicator proggress = new ProgressIndicator();
-    Button process = new Button("Mass insert");
-
-    @Override
-    public void init() {
-        setMainWindow(new Window("SQLContainer Test", buildLayout()));
-
-        process.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                MassInsert mi = new MassInsert();
-                mi.start();
-            }
-        });
-    }
-
-    private class MassInsert extends Thread {
-
-        @Override
-        public synchronized void start() {
-            proggress.setVisible(true);
-            proggress.setValue(new Float(0));
-            proggress.setPollingInterval(100);
-            process.setEnabled(false);
-            proggress.setCaption("");
-            super.start();
-        }
-
-        @Override
-        public void run() {
-            JDBCConnectionPool pool = getConnectionPool();
-            if (pool != null) {
-                try {
-                    int cents = 100;
-                    for (int cent = 0; cent < cents; cent++) {
-                        TableQuery q = new TableQuery("AUTHOR", pool);
-                        q.setVersionColumn("ID");
-                        SQLContainer c = new SQLContainer(q);
-                        for (int i = 0; i < 100; i++) {
-                            Object id = c.addItem();
-                            c.getContainerProperty(id, "FIRST_NAMES").setValue(
-                                    getRandonName());
-                            c.getContainerProperty(id, "LAST_NAME").setValue(
-                                    getRandonName());
-                        }
-                        c.commit();
-                        synchronized (MassInsertMemoryLeakTestApp.this) {
-                            proggress
-                                    .setValue(new Float((1.0f * cent) / cents));
-                            proggress.setCaption("" + 100 * cent
-                                    + " rows inserted");
-                        }
-                    }
-                } catch (SQLException e) {
-                    getMainWindow().showNotification(
-                            "SQLException while processing",
-                            e.getLocalizedMessage());
-                    e.printStackTrace();
-                }
-            }
-            synchronized (MassInsertMemoryLeakTestApp.this) {
-                proggress.setVisible(false);
-                proggress.setPollingInterval(0);
-                process.setEnabled(true);
-            }
-        }
-    }
-
-    private ComponentContainer buildLayout() {
-        VerticalLayout lo = new VerticalLayout();
-        lo.setSizeFull();
-        lo.addComponent(proggress);
-        lo.addComponent(process);
-        lo.setComponentAlignment(proggress, Alignment.BOTTOM_CENTER);
-        lo.setComponentAlignment(process, Alignment.TOP_CENTER);
-        lo.setSpacing(true);
-        proggress.setIndeterminate(false);
-        proggress.setVisible(false);
-        return lo;
-    }
-
-    private String getRandonName() {
-        final String[] tokens = new String[] { "sa", "len", "da", "vid", "ma",
-                "ry", "an", "na", "jo", "bri", "son", "mat", "e", "ric", "ge",
-                "eu", "han", "har", "ri", "ja", "lo" };
-        StringBuffer sb = new StringBuffer();
-        int len = (int) (Math.random() * 3 + 2);
-        while (len-- > 0) {
-            sb.append(tokens[(int) (Math.random() * tokens.length)]);
-        }
-        return Character.toUpperCase(sb.charAt(0)) + sb.toString().substring(1);
-    }
-
-    private JDBCConnectionPool getConnectionPool() {
-        SimpleJDBCConnectionPool pool = null;
-        try {
-            pool = new SimpleJDBCConnectionPool("com.mysql.jdbc.Driver",
-                    "jdbc:mysql://localhost:3306/sqlcontainer", "sqlcontainer",
-                    "sqlcontainer");
-        } catch (SQLException e) {
-            getMainWindow().showNotification("Error connecting to database");
-        }
-        return pool;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/dd/AcceptAnythingWindow.java b/tests/src/com/vaadin/tests/dd/AcceptAnythingWindow.java
deleted file mode 100644
index 308f002e4f..0000000000
--- a/tests/src/com/vaadin/tests/dd/AcceptAnythingWindow.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package com.vaadin.tests.dd;
-
-import com.vaadin.event.DataBoundTransferable;
-import com.vaadin.event.Transferable;
-import com.vaadin.event.TransferableImpl;
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.acceptcriteria.AcceptAll;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.ui.AbsoluteLayout;
-import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.DragAndDropWrapper;
-import com.vaadin.ui.DragAndDropWrapper.DragStartMode;
-import com.vaadin.ui.DragAndDropWrapper.WrapperTargetDetails;
-import com.vaadin.ui.DragAndDropWrapper.WrapperTransferable;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class AcceptAnythingWindow extends Window {
-
-    private AbsoluteLayout layout = new AbsoluteLayout();
-
-    public AcceptAnythingWindow() {
-        setCaption("Drop anything here");
-
-        final DragAndDropWrapper wrapper = new DragAndDropWrapper(layout);
-        wrapper.setDropHandler(new DropHandler() {
-
-            public AcceptCriterion getAcceptCriterion() {
-                return AcceptAll.get();
-            }
-
-            public void drop(DragAndDropEvent event) {
-                WrapperTargetDetails ed = (WrapperTargetDetails) event
-                        .getTargetDetails();
-                Transferable transferable = event.getTransferable();
-                TransferableImpl ctr = (TransferableImpl) transferable;
-                Component component = ctr.getSourceComponent();
-                if (component == wrapper) {
-                    // if the drag source was wrapper we are interested about
-                    // the dragged component
-                    WrapperTransferable tr = (WrapperTransferable) transferable;
-                    component = tr.getDraggedComponent();
-                    // html5 drag created by wrapper set component null
-                }
-
-                if (component != null) {
-
-                    if (component.getParent() != layout) {
-                        if (transferable instanceof DataBoundTransferable) {
-                            // Item has been dragged, construct a Label from
-                            // Item id
-                            Label l = new Label();
-                            l.setSizeUndefined();
-                            l.setValue("ItemId : "
-                                    + ((DataBoundTransferable) transferable)
-                                            .getItemId());
-                            layout.addComponent(l);
-                            component = l;
-
-                        } else {
-                            // we have a component that is been dragged, add
-                            // it to this
-                            layout.addComponent(component);
-                        }
-
-                        Integer left = ed.getAbsoluteLeft();
-                        Integer top = ed.getAbsoluteTop();
-
-                        MouseEventDetails eventDetails = ed.getMouseEvent();
-
-                        int clientX = eventDetails.getClientX();
-                        int clientY = eventDetails.getClientY();
-
-                        try {
-                            layout.getPosition(component).setTopValue(
-                                    Float.valueOf(clientY - top));
-                            layout.getPosition(component).setLeftValue(
-                                    Float.valueOf(clientX - left));
-                        } catch (Exception e) {
-                            // TODO: handle exception
-                        }
-                    } else {
-
-                        WrapperTransferable tr = (WrapperTransferable) transferable;
-                        // drag ended inside the this Pane
-
-                        MouseEventDetails start = tr.getMouseDownEvent();
-                        MouseEventDetails eventDetails = ed.getMouseEvent();
-
-                        int deltaX = eventDetails.getClientX()
-                                - start.getClientX();
-                        int deltaY = eventDetails.getClientY()
-                                - start.getClientY();
-
-                        ComponentPosition p = layout.getPosition(component);
-                        p.setTopValue(p.getTopValue() + deltaY);
-                        p.setLeftValue(p.getLeftValue() + deltaX);
-
-                    }
-
-                } else {
-                    // drag coming outside of Vaadin
-                    String object = (String) transferable.getData("Text");
-
-                    String content = (String) transferable
-                            .getData("fileContents");
-
-                    Label l = new Label();
-                    l.setCaption("Generated from HTML5 drag:");
-                    if (object != null) {
-                        l.setValue(object);
-                    } else {
-                        l.setValue("HTML5 dd");
-                    }
-
-                    l.setDescription(content);
-                    l.setSizeUndefined();
-
-                    layout.addComponent(l);
-
-                }
-                return;
-            }
-        });
-
-        wrapper.setDragStartMode(DragStartMode.COMPONENT);
-        wrapper.setSizeFull();
-        setContent(wrapper);
-
-        setWidth("250px");
-        setHeight("100px");
-    }
-}
diff --git a/tests/src/com/vaadin/tests/dd/AcceptFromComponent.java b/tests/src/com/vaadin/tests/dd/AcceptFromComponent.java
deleted file mode 100644
index 43bdce2ad4..0000000000
--- a/tests/src/com/vaadin/tests/dd/AcceptFromComponent.java
+++ /dev/null
@@ -1,153 +0,0 @@
-package com.vaadin.tests.dd;
-
-import com.vaadin.event.DataBoundTransferable;
-import com.vaadin.event.Transferable;
-import com.vaadin.event.TransferableImpl;
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.event.dd.acceptcriteria.ServerSideCriterion;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.ui.AbsoluteLayout;
-import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.DragAndDropWrapper;
-import com.vaadin.ui.DragAndDropWrapper.WrapperTargetDetails;
-import com.vaadin.ui.DragAndDropWrapper.WrapperTransferable;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.Window;
-
-public class AcceptFromComponent extends Window {
-
-    private AbsoluteLayout layout;
-
-    public AcceptFromComponent(final Tree tree1) {
-        setCaption("Checks the source is tree1 on server");
-
-        layout = new AbsoluteLayout();
-        DragAndDropWrapper wrapper = new DragAndDropWrapper(layout);
-
-        setContent(wrapper);
-
-        wrapper.setSizeFull();
-        layout.setSizeFull();
-        setWidth("450px");
-        setHeight("150px");
-
-        final ServerSideCriterion serverSideCriterion = new ServerSideCriterion() {
-
-            public boolean accept(DragAndDropEvent dragEvent) {
-                Transferable transferable = dragEvent.getTransferable();
-                if (transferable instanceof TransferableImpl) {
-                    TransferableImpl componentTransferrable = (TransferableImpl) transferable;
-                    if (componentTransferrable.getSourceComponent() == tree1) {
-                        return true;
-                    }
-                }
-                return false;
-            }
-        };
-
-        wrapper.setDropHandler(new DropHandler() {
-
-            public AcceptCriterion getAcceptCriterion() {
-                return serverSideCriterion;
-            }
-
-            public void drop(DragAndDropEvent event) {
-
-                WrapperTargetDetails ed = (WrapperTargetDetails) event
-                        .getTargetDetails();
-                Transferable ctr = event.getTransferable();
-                if (ctr.getSourceComponent() != null) {
-                    // use "component" (from DragDropPane) if available, else
-                    // take
-                    // the source component
-                    Component component = (Component) ctr.getData("component");
-                    if (component == null) {
-                        component = ctr.getSourceComponent();
-                    }
-
-                    if (component.getParent() != layout) {
-                        if (ctr instanceof DataBoundTransferable) {
-                            // Item has been dragged, construct a Label from
-                            // Item id
-                            Label l = new Label();
-                            l.setSizeUndefined();
-                            l.setValue("ItemId : "
-                                    + ((DataBoundTransferable) ctr).getItemId());
-                            layout.addComponent(l);
-                            component = l;
-
-                        } else {
-                            // we have a component that is been dragged, add
-                            // it
-                            // to
-                            // this
-                            layout.addComponent(component);
-                        }
-
-                        Integer left = ed.getAbsoluteLeft();
-                        Integer top = ed.getAbsoluteTop();
-
-                        MouseEventDetails eventDetails = ed.getMouseEvent();
-
-                        int clientX = eventDetails.getClientX();
-                        int clientY = eventDetails.getClientY();
-
-                        try {
-                            layout.getPosition(component).setTopValue(
-                                    Float.valueOf(clientY - top));
-                            layout.getPosition(component).setLeftValue(
-                                    Float.valueOf(clientX - left));
-                        } catch (Exception e) {
-                            // TODO: handle exception
-                        }
-                    } else {
-                        // drag started and ended inside the this Pane
-
-                        DragAndDropWrapper.WrapperTransferable tr = (WrapperTransferable) event
-                                .getTransferable();
-
-                        MouseEventDetails start = tr.getMouseDownEvent();
-
-                        MouseEventDetails eventDetails = ed.getMouseEvent();
-
-                        int deltaX = eventDetails.getClientX()
-                                - start.getClientX();
-                        int deltaY = eventDetails.getClientY()
-                                - start.getClientY();
-
-                        ComponentPosition p = layout.getPosition(component);
-                        p.setTopValue(p.getTopValue() + deltaY);
-                        p.setLeftValue(p.getLeftValue() + deltaX);
-
-                    }
-
-                } else {
-                    // drag coming outside of Vaadin
-                    String object = (String) ctr.getData("text/plain");
-
-                    String content = (String) ctr.getData("fileContents");
-
-                    Label l = new Label();
-                    l.setCaption("Generated from HTML5 drag:");
-                    if (object != null) {
-                        l.setValue(object);
-                    } else {
-                        l.setValue("HTML5 dd");
-                    }
-
-                    l.setDescription(content);
-                    l.setSizeUndefined();
-
-                    layout.addComponent(l);
-
-                }
-                return;
-            }
-        });
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/dd/ActiveDragSourceClassName.java b/tests/src/com/vaadin/tests/dd/ActiveDragSourceClassName.java
deleted file mode 100644
index 889c6bb47b..0000000000
--- a/tests/src/com/vaadin/tests/dd/ActiveDragSourceClassName.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package com.vaadin.tests.dd;
-
-import java.util.Iterator;
-
-import com.vaadin.event.Transferable;
-import com.vaadin.event.TransferableImpl;
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.DropTarget;
-import com.vaadin.event.dd.TargetDetails;
-import com.vaadin.event.dd.acceptcriteria.AcceptAll;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.TestUtils;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.DragAndDropWrapper;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-
-public class ActiveDragSourceClassName extends TestBase {
-
-    private static final String GREENBOXES = ".greenblock {float:left; width:60px;height:60px;background: green !important; padding:0; margin:2px;-webkit-transition: width 0.3s ease-in-out;}";
-    private static final String HIDEDRAGSOURCE = ".v-active-drag-source { overflow:hidden; width:0px !important;}";
-
-    protected void setup() {
-        TestUtils.injectCSS(getMainWindow(), GREENBOXES + HIDEDRAGSOURCE);
-        
-        VerticalLayout l = new VerticalLayout();
-        l.setWidth("400px");
-        l.setHeight("100px");
-        DragAndDropWrapper pane = new DragAndDropWrapper(cssLayout);
-        pane.setSizeFull();
-        l.addComponent(pane);
-        
-        addComponent(l);
-        
-        for (int i = 0; i < 4; i++) {
-            cssLayout.addComponent(new WrappedLabel("Block"));
-        }
-        
-    }
-    
-    static int count;
-
-    private CssLayout cssLayout = new CssLayout() {};
-
-    class WrappedLabel extends DragAndDropWrapper {
-
-        private static final long serialVersionUID = 1L;
-
-        public WrappedLabel(String content) {
-            super(new Label(content + " c:" + ++count));
-            getCompositionRoot().setSizeUndefined();
-            setHeight("60px"); // FIXME custom component seems to be broken:
-            // can't set height with css only
-            setWidth("60px");
-            setDragStartMode(DragStartMode.WRAPPER);
-            addStyleName("greenblock");
-        }
-
-        @Override
-        public DropHandler getDropHandler() {
-            return dh;
-        }
-
-    }
-
-    private DropHandler dh = new DropHandler() {
-
-        public AcceptCriterion getAcceptCriterion() {
-            return AcceptAll.get();
-        }
-
-        public void drop(DragAndDropEvent dropEvent) {
-            Transferable transferable = dropEvent.getTransferable();
-            if (transferable instanceof TransferableImpl) {
-                TransferableImpl ct = (TransferableImpl) transferable;
-                Component sourceComponent = ct.getSourceComponent();
-                if (sourceComponent instanceof WrappedLabel) {
-                    int index = 1;
-                    Iterator<Component> componentIterator = cssLayout
-                            .getComponentIterator();
-                    Component next = componentIterator.next();
-                    TargetDetails dropTargetData = dropEvent.getTargetDetails();
-                    DropTarget target = dropTargetData.getTarget();
-                    while (next != target) {
-                        if (next != sourceComponent) {
-                            index++;
-                        }
-                        next = componentIterator.next();
-                    }
-                    if (dropTargetData.getData("horizontalLocation").equals(
-                            "LEFT")) {
-                        index--;
-                        if (index < 0) {
-                            index = 0;
-                        }
-                    }
-
-                    cssLayout.removeComponent(sourceComponent);
-                    cssLayout.addComponent(sourceComponent, index);
-                }
-            }
-        }
-    };
-
-    @Override
-    protected String getDescription() {
-        return "It should be possible to style the source component during the drag.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6813;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/dd/CustomDDImplementation.java b/tests/src/com/vaadin/tests/dd/CustomDDImplementation.java
deleted file mode 100644
index c789ead113..0000000000
--- a/tests/src/com/vaadin/tests/dd/CustomDDImplementation.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.vaadin.tests.dd;
-
-import java.util.Map;
-
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.DropTarget;
-import com.vaadin.event.dd.TargetDetails;
-import com.vaadin.event.dd.acceptcriteria.AcceptAll;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.ClientWidget;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Layout;
-
-/**
- * Test/Example/Draft code how to build custom DD implementation using the thing
- * framework provided by Vaadin.
- * 
- */
-public class CustomDDImplementation extends CustomComponent {
-
-    public CustomDDImplementation() {
-        Layout l = new CssLayout();
-        l.addComponent(new MyDropTarget());
-        l.addComponent(new MyDragSource());
-    }
-
-    /**
-     * Server side component that accepts drags must implement HasDropHandler
-     * that have one method to get reference of DropHandler.
-     * 
-     * DropHandler may be implemented directly or probably most commonly using a
-     * half baked implementation {@link AbstractDropHandler}.
-     * 
-     * Check the @ClientWidget
-     * 
-     */
-    @ClientWidget(VMyDropTarget.class)
-    class MyDropTarget extends AbstractComponent implements DropTarget {
-        public DropHandler getDropHandler() {
-            return new DropHandler() {
-
-                public void drop(DragAndDropEvent event) {
-                    // Do something with data
-                    return;
-                }
-
-                public AcceptCriterion getAcceptCriterion() {
-                    return AcceptAll.get();
-                }
-
-            };
-        }
-
-        public TargetDetails translateDropTargetDetails(
-                Map<String, Object> clientVariables) {
-            // If component has some special drop details that it needs to
-            // translate for server side use, developer must return a
-            // DragDropDetails here. If details does not exist or raw client
-            // side data is ok, it is safe to return null here.
-            return null;
-        }
-
-    }
-
-    /**
-     * Server side implementation of source does not necessary need to contain
-     * anything.
-     * 
-     * Check the @ClientWidget
-     * 
-     * However component might have different modes to support starting drag
-     * operations that are controlled via server side api.
-     * 
-     */
-    @ClientWidget(VMyDragSource.class)
-    public class MyDragSource extends AbstractComponent implements Component {
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/dd/DDTest1.java b/tests/src/com/vaadin/tests/dd/DDTest1.java
deleted file mode 100644
index 0d709844e9..0000000000
--- a/tests/src/com/vaadin/tests/dd/DDTest1.java
+++ /dev/null
@@ -1,267 +0,0 @@
-package com.vaadin.tests.dd;
-
-import java.util.Collection;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.event.DataBoundTransferable;
-import com.vaadin.event.Transferable;
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.event.dd.acceptcriteria.ServerSideCriterion;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractSelect.AcceptItem;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.TableDragMode;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.Tree.TreeDragMode;
-import com.vaadin.ui.Tree.TreeTargetDetails;
-
-/**
- * DD playground. Better quality example/prototype codes in {@link DDTest2}.
- */
-public class DDTest1 extends TestBase {
-
-    @Override
-    protected void setup() {
-        GridLayout gl = new GridLayout(3, 2);
-        gl.setSizeFull();
-        gl.setSpacing(true);
-        Layout main = gl;
-
-        DragDropPane pane1 = new DragDropPane();
-        pane1.setSizeFull();
-        pane1.setCaption("Pane1");
-
-        Label label = new Label("Foo");
-        label.setSizeUndefined();
-
-        pane1.addComponent(label);
-
-        Link l = new Link("This is link", new ExternalResource(
-                "http://www.google.com/"));
-        pane1.addComponent(l, "top:100px; left: 20px;");
-
-        label = new Label("Bar");
-        label.setSizeUndefined();
-        pane1.addComponent(label);
-
-        DragDropPane pane2 = new DragDropPane();
-        pane2.setCaption("Pane2 (accept needs server side visit, check for \"Bar\")");
-        final AcceptCriterion crit = new ServerSideCriterion() {
-            /**
-             * 
-             */
-            private static final long serialVersionUID = 1L;
-
-            public boolean accept(DragAndDropEvent dragEvent) {
-                Transferable transferable = dragEvent.getTransferable();
-                // System.out.println("Simulating 500ms processing...");
-                // try {
-                // Thread.sleep(200);
-                // } catch (InterruptedException e) {
-                // // TODO Auto-generated catch block
-                // e.printStackTrace();
-                // }
-                // System.out.println("Done get to work.");
-
-                Component component = (Component) transferable
-                        .getData("component");
-                if (component == null) {
-                    component = transferable.getSourceComponent();
-                }
-
-                if (component != null) {
-                    if (component.toString() != null
-                            && component.toString().contains("Bar")) {
-                        return true;
-                    }
-                }
-                return false;
-            }
-        };
-
-        pane2.setAcceptCriterion(crit);
-
-        pane2.setDebugId("pane2");
-        pane2.setSizeFull();
-
-        DragDropPane pane3 = new DragDropPane();
-        pane3.setSizeFull();
-        pane3.setCaption("Pane3");
-
-        final Tree t = new Tree(
-                "Tree with sorting enabled. Also allows dragging elsewhere.");
-
-        final HierarchicalContainer idx = new HierarchicalContainer();
-        t.setContainerDataSource(idx);
-        t.setDebugId("perseys");
-        t.addItem("Foo");
-        t.addItem("Bar");
-        t.addItem("Bar1");
-        t.addItem("Bar2");
-        t.addItem("Bar3");
-        t.addItem("Bar4");
-        t.addItem("Bar5");
-        t.addItem("Child");
-        t.setParent("Child", "Foo");
-        t.setSizeFull();
-        t.setDragMode(TreeDragMode.NODE);
-
-        /*
-         * Moves items in tree (and could work in Table too). Also supports
-         * "building" tree.
-         * 
-         * TODO fix algorithm, broken in some cases.
-         */
-        DropHandler itemSorter = new DropHandler() {
-
-            @SuppressWarnings("unused")
-            private void populateSubTree(HierarchicalContainer idx,
-                    HierarchicalContainer subtree, Object itemId) {
-                Collection<?> children = subtree.getChildren(itemId);
-                if (children != null) {
-
-                    for (Object childId : children) {
-                        Item addItem = idx.addItem(childId);
-                        if (addItem != null) {
-                            // did not exist, populate properties
-                            Item item = subtree.getItem(itemId);
-                            Collection<?> itemPropertyIds = item
-                                    .getItemPropertyIds();
-                            for (Object propId : itemPropertyIds) {
-                                addItem.getItemProperty(propId)
-                                        .setValue(
-                                                item.getItemProperty(propId)
-                                                        .getValue());
-                            }
-                        }
-                        idx.setParent(childId, itemId);
-                        populateSubTree(idx, subtree, childId);
-                    }
-                }
-
-            }
-
-            @SuppressWarnings("unused")
-            private HierarchicalContainer getSubTree(HierarchicalContainer idx,
-                    Object itemId) {
-                HierarchicalContainer hierarchicalContainer = new HierarchicalContainer();
-                Collection<?> containerPropertyIds = idx
-                        .getContainerPropertyIds();
-                for (Object object : containerPropertyIds) {
-                    hierarchicalContainer.addContainerProperty(object,
-                            idx.getType(object), null);
-                }
-                hierarchicalContainer.addItem(itemId);
-                copyChildren(idx, hierarchicalContainer, itemId);
-                return hierarchicalContainer;
-            }
-
-            private void copyChildren(HierarchicalContainer source,
-                    HierarchicalContainer target, Object itemId) {
-                Collection<?> children = source.getChildren(itemId);
-                if (children != null) {
-                    for (Object childId : children) {
-                        Item item = source.getItem(childId);
-                        Item addedItem = target.addItem(childId);
-                        target.setParent(childId, itemId);
-                        Collection<?> itemPropertyIds = item
-                                .getItemPropertyIds();
-                        for (Object propertyId : itemPropertyIds) {
-                            addedItem.getItemProperty(propertyId)
-                                    .setValue(
-                                            item.getItemProperty(propertyId)
-                                                    .getValue());
-                        }
-                        copyChildren(source, target, childId);
-                    }
-                }
-
-            }
-
-            public void drop(DragAndDropEvent event) {
-                TreeTargetDetails details = (TreeTargetDetails) event
-                        .getTargetDetails();
-                // TODO set properties, so same sorter could be used in Table
-                Transferable transferable = event.getTransferable();
-                if (transferable instanceof DataBoundTransferable) {
-                    DataBoundTransferable transferrable2 = (DataBoundTransferable) transferable;
-
-                    Object itemId = transferrable2.getItemId();
-
-                    Object itemIdOver = details.getItemIdOver();
-
-                    // TODO could use the "folder" node id to make the drop
-                    // logic simpler
-                    Object itemIdInto = details.getItemIdInto();
-                    VerticalDropLocation dropLocation = details
-                            .getDropLocation();
-
-                    Object itemIdAfter = details.getItemIdAfter();
-
-                    if (itemIdOver.equals(itemIdInto)) { // directly on a node
-                        t.setParent(itemId, itemIdOver);
-                        return;
-                    }
-
-                    idx.setParent(itemId, itemIdInto);
-
-                    if (dropLocation == null) {
-                        System.err.println("No detail of drop place available");
-                    }
-                    idx.moveAfterSibling(itemId, itemIdAfter);
-                }
-
-                return;
-            }
-
-            public AcceptCriterion getAcceptCriterion() {
-                // TODO should actually check that source is same as target
-                return AcceptItem.ALL;
-            }
-
-        };
-
-        t.setDropHandler(itemSorter);
-
-        Table ta = new Table("Test table");
-        ta.setContainerDataSource(idx);
-        ta.addContainerProperty("Foos", String.class, "Foo");
-        ta.addContainerProperty("Bars", String.class, "Bar");
-        ta.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-        ta.setSizeFull();
-        ta.setDragMode(TableDragMode.ROW);
-
-        main.addComponent(pane1);
-        main.addComponent(pane2);
-        main.addComponent(pane3);
-        main.addComponent(t);
-        main.addComponent(ta);
-        main.addComponent(new Link("Foo", new ExternalResource(
-                "http://www.itmill.com/")));
-
-        getLayout().setSizeFull();
-        addComponent(main);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Random DD tests";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 119;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/dd/DDTest2.java b/tests/src/com/vaadin/tests/dd/DDTest2.java
deleted file mode 100644
index 69af2d3f1d..0000000000
--- a/tests/src/com/vaadin/tests/dd/DDTest2.java
+++ /dev/null
@@ -1,312 +0,0 @@
-package com.vaadin.tests.dd;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.event.DataBoundTransferable;
-import com.vaadin.event.Transferable;
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.event.dd.acceptcriteria.And;
-import com.vaadin.event.dd.acceptcriteria.Or;
-import com.vaadin.event.dd.acceptcriteria.SourceIs;
-import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Person;
-import com.vaadin.tests.util.PersonContainer;
-import com.vaadin.ui.AbstractSelect;
-import com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails;
-import com.vaadin.ui.AbstractSelect.AcceptItem;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.TableTransferable;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.Tree.TargetItemAllowsChildren;
-import com.vaadin.ui.Tree.TreeDragMode;
-import com.vaadin.ui.Window;
-
-public class DDTest2 extends TestBase {
-
-    java.util.Random r = new java.util.Random(1);
-
-    HorizontalLayout hl = new HorizontalLayout();
-    Tree tree1 = new Tree("Tree that accepts table rows to folders");
-    Table table = new Table("Drag rows to Tree on left or right");
-    Tree tree2 = new Tree("Accepts items, copies values");
-
-    private Tree tree3;
-
-    @Override
-    protected void setup() {
-        Window w = getLayout().getWindow();
-        /* darn reindeer has no icons */
-
-        /* Make all trees (their nodes actually) draggable */
-        tree1.setDragMode(TreeDragMode.NODE);
-        tree2.setDragMode(TreeDragMode.NODE);
-
-        hl.addComponent(tree1);
-        hl.addComponent(table);
-        hl.addComponent(tree2);
-        hl.setWidth("100%");
-        hl.setSpacing(true);
-        hl.setExpandRatio(table, 1);
-        popuplateTrees();
-        table.setWidth("100%");
-        table.setPageLength(10);
-        populateTable();
-        addComponent(hl);
-
-        tree3 = new Tree(
-                "Tree with lazy loading criteria, of first server visit caches accept rules for all captions");
-        tree3.setDragMode(TreeDragMode.NODE);
-
-        tree3.addItem("Drag on me");
-        tree3.addItem("Or me");
-        /*
-         * An example of lazy initializing drop criterion with component
-         * specific api for easy rule writing.
-         * 
-         * Example is pretty stupid (accepts drop on all nodes, but by
-         * explicitly defining them here), but demonstrates lazy initialization
-         * option if rules are heavy.
-         */
-        final AcceptCriterion crit = new Tree.TreeDropCriterion() {
-
-            @Override
-            protected Set<Object> getAllowedItemIds(DragAndDropEvent dragEvent,
-                    Tree tree) {
-                return new HashSet<Object>(tree.getItemIds());
-            }
-        };
-
-        tree3.setDropHandler(new DropHandler() {
-            public void drop(DragAndDropEvent dropEvent) {
-                Transferable transferable = dropEvent.getTransferable();
-
-                String data = (String) transferable.getData("Text");
-                if (transferable instanceof TableTransferable) {
-                    TableTransferable tr = (TableTransferable) transferable;
-                    System.out.println("From table row" + tr.getPropertyId());
-                    data = tr.getSourceContainer().getItem(tr.getItemId())
-                            .getItemProperty(tr.getPropertyId()).toString();
-
-                }
-                if (data == null) {
-                    data = "-no Text data flawor-";
-                }
-                tree3.addItem(data);
-                AbstractSelect.AbstractSelectTargetDetails dropTargetData = (AbstractSelect.AbstractSelectTargetDetails) dropEvent
-                        .getTargetDetails();
-                tree3.setParent(data, dropTargetData.getItemIdOver());
-
-            }
-
-            public AcceptCriterion getAcceptCriterion() {
-                return crit;
-            }
-        });
-
-        addComponent(tree3);
-
-        /*
-         * Make table rows draggable
-         */
-        table.setDragMode(Table.TableDragMode.ROW);
-
-        TargetItemAllowsChildren onNode = TargetItemAllowsChildren.get();
-        SourceIs fromTable = new SourceIs(table);
-
-        SourceIs fromTree = new SourceIs(tree1);
-        final Or fromTree1OrTable = new Or(fromTable, fromTree);
-        // Or could in the case be replaced with, keeping here as an example and
-        // test
-        @SuppressWarnings("unused")
-        SourceIs treeOrTable = new SourceIs(table, tree1);
-
-        final And and = new And(fromTree1OrTable, onNode);
-
-        DropHandler dropHandler = new DropHandler() {
-
-            public void drop(DragAndDropEvent event) {
-                /*
-                 * We know transferrable is from table, so it is of type
-                 * DataBindedTransferrable
-                 */
-                DataBoundTransferable tr = (DataBoundTransferable) event
-                        .getTransferable();
-                Object itemId = tr.getItemId();
-                Container sourceContainer = tr.getSourceContainer();
-                if (tr.getSourceComponent() != tree1) {
-                    // if the source is from table (not from tree1 itself),
-                    // transfer Name property and use it as an identifier in
-                    // tree1
-                    String name = sourceContainer.getItem(itemId)
-                            .getItemProperty("Name").toString();
-
-                    tree1.addItem(name);
-                    tree1.setChildrenAllowed(name, false);
-
-                    /*
-                     * Remove the item from table
-                     */
-                    sourceContainer.removeItem(itemId);
-
-                    itemId = name;
-
-                }
-
-                /*
-                 * As we also accept only drops on folders, we know dropDetails
-                 * is from Tree and it contains itemIdOver.
-                 */
-                AbstractSelectTargetDetails details = (AbstractSelectTargetDetails) event
-                        .getTargetDetails();
-                Object idOver = details.getItemIdOver();
-                tree1.setParent(itemId, idOver);
-
-            }
-
-            public AcceptCriterion getAcceptCriterion() {
-                return and;
-            }
-        };
-        tree1.setDropHandler(dropHandler);
-
-        /*
-         * First step done. tree1 now accepts drags only from table and only
-         * over tree nodes aka "folders"
-         */
-
-        /*
-         * Now set the rightmost tree accept any item drag. On drop, copy from
-         * source. Also make drags from tree1 possible.
-         */
-
-        dropHandler = new DropHandler() {
-            public void drop(DragAndDropEvent event) {
-                AbstractSelectTargetDetails details = (AbstractSelectTargetDetails) event
-                        .getTargetDetails();
-                Transferable transferable = event.getTransferable();
-
-                if (transferable instanceof DataBoundTransferable) {
-                    DataBoundTransferable tr = (DataBoundTransferable) transferable;
-
-                    Object itemId = tree2.addItem();
-                    tree2.setParent(itemId, details.getItemIdOver());
-                    if (tr.getSourceComponent() == tree1) {
-                        // use item id from tree1 as caption
-                        tree2.setItemCaption(itemId, (String) tr.getItemId());
-                        // if comes from tree1, move subtree too
-                        copySubTree(tr.getItemId(), itemId);
-                    } else if (tr.getSourceComponent() == table) {
-                        // comes from table, override caption with name
-                        String name = (String) table.getItem(tr.getItemId())
-                                .getItemProperty("Name").getValue();
-                        tree2.setItemCaption(itemId, name);
-                    } else if (tr.getSourceComponent() == tree2) {
-                        tree2.setItemCaption(itemId,
-                                tree2.getItemCaption(tr.getItemId()));
-                    }
-                }
-            }
-
-            private void copySubTree(Object itemId, Object itemIdTo) {
-                Collection<?> children = tree1.getChildren(itemId);
-                if (children != null) {
-                    for (Object childId : children) {
-                        Object newItemId = tree2.addItem();
-                        tree2.setItemCaption(newItemId, (String) childId);
-                        tree2.setParent(newItemId, itemIdTo);
-                        copySubTree(childId, newItemId);
-                    }
-                }
-            }
-
-            public AcceptCriterion getAcceptCriterion() {
-                return AcceptItem.ALL;
-            }
-        };
-
-        tree2.setDropHandler(dropHandler);
-
-        /*
-         * Finally add two windows with DragDropPane. First accept anything,
-         * second has server side accept rule to allow only drops from Tree1.
-         * Check the code in implementing classes.
-         */
-        Window acceptAnyThing = new AcceptAnythingWindow();
-        Window acceptFromTree1viaServerCheck = new AcceptFromComponent(tree1);
-
-        w.addWindow(acceptAnyThing);
-        acceptAnyThing.setPositionY(450);
-        acceptAnyThing.setPositionX(150);
-        w.addWindow(acceptFromTree1viaServerCheck);
-        acceptFromTree1viaServerCheck.setPositionY(450);
-        acceptFromTree1viaServerCheck.setPositionX(450);
-
-    }
-
-    private void populateTable() {
-        table.addContainerProperty("Name", String.class, "");
-        table.addContainerProperty("Weight", Integer.class, 0);
-
-        PersonContainer testData = PersonContainer.createWithTestData();
-
-        for (int i = 0; i < 10; i++) {
-            Item addItem = table.addItem("Item" + i);
-            Person p = testData.getIdByIndex(i);
-            addItem.getItemProperty("Name").setValue(
-                    p.getFirstName() + " " + p.getLastName());
-            addItem.getItemProperty("Weight").setValue(50 + r.nextInt(60));
-        }
-
-    }
-
-    private final static ThemeResource FOLDER = new ThemeResource(
-            "../runo/icons/16/folder.png");
-    private final static ThemeResource DOC = new ThemeResource(
-            "../runo/icons/16/document.png");
-
-    private void popuplateTrees() {
-        HierarchicalContainer hc = new HierarchicalContainer();
-        hc.addContainerProperty("icon", Resource.class, DOC);
-        Item addItem = hc.addItem("Fats");
-        addItem.getItemProperty("icon").setValue(FOLDER);
-        hc.addItem("Tarja");
-        hc.setParent("Tarja", "Fats");
-        hc.setChildrenAllowed("Tarja", false);
-        addItem = hc.addItem("Thins");
-        addItem.getItemProperty("icon").setValue(FOLDER);
-        addItem = hc.addItem("Anorectic");
-        addItem.getItemProperty("icon").setValue(FOLDER);
-        hc.setParent("Anorectic", "Thins");
-        addItem = hc.addItem("Normal weighted");
-        addItem.getItemProperty("icon").setValue(FOLDER);
-
-        tree1.setContainerDataSource(hc);
-        tree1.setItemIconPropertyId("icon");
-
-        tree2.setContainerDataSource(new HierarchicalContainer());
-
-        tree2.addItem("/");
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "dd";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 119;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/dd/DDTest4.java b/tests/src/com/vaadin/tests/dd/DDTest4.java
deleted file mode 100644
index b4da141ce2..0000000000
--- a/tests/src/com/vaadin/tests/dd/DDTest4.java
+++ /dev/null
@@ -1,161 +0,0 @@
-package com.vaadin.tests.dd;
-
-import java.util.Collection;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.event.DataBoundTransferable;
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.event.dd.acceptcriteria.SourceIs;
-import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Person;
-import com.vaadin.tests.util.PersonContainer;
-import com.vaadin.tests.util.TestUtils;
-import com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-public class DDTest4 extends TestBase {
-
-    java.util.Random r = new java.util.Random(1);
-
-    HorizontalLayout hl = new HorizontalLayout();
-    Table table = new Table("Drag and drop sortable table");
-
-    @Override
-    protected void setup() {
-        Window w = getLayout().getWindow();
-
-        TestUtils
-                .injectCSS(
-                        w,
-                        ".v-table-row-drag-middle .v-table-cell-content {"
-                                + "        background-color: inherit ; border-bottom: 1px solid cyan;"
-                                + "}"
-                                + ".v-table-row-drag-middle .v-table-cell-wrapper {"
-                                + "        margin-bottom: -1px;" + "}" + ""
-
-                );
-
-        // hl.addComponent(tree1);
-        hl.addComponent(table);
-        // hl.addComponent(tree2);
-        hl.setWidth("100%");
-        hl.setSpacing(true);
-        hl.setExpandRatio(table, 1);
-        table.setWidth("100%");
-        table.setPageLength(10);
-        table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-        table.setSelectable(true);
-        table.setMultiSelect(true);
-        populateTable();
-        addComponent(hl);
-
-        /*
-         * Make table rows draggable
-         */
-        table.setDragMode(Table.TableDragMode.ROW);
-
-        table.setDropHandler(new DropHandler() {
-            // accept only drags from this table
-            AcceptCriterion crit = new SourceIs(table);
-
-            public AcceptCriterion getAcceptCriterion() {
-                return crit;
-            }
-
-            public void drop(DragAndDropEvent dropEvent) {
-                AbstractSelectTargetDetails dropTargetData = (AbstractSelectTargetDetails) dropEvent
-                        .getTargetDetails();
-                DataBoundTransferable transferable = (DataBoundTransferable) dropEvent
-                        .getTransferable();
-                Object itemIdOver = dropTargetData.getItemIdOver();
-                Object itemId = transferable.getItemId();
-                if (itemId == null || itemIdOver == null
-                        || itemId.equals(itemIdOver)) {
-                    return; // no move happened
-                }
-
-                // IndexedContainer goodies... (hint: don't use it in real apps)
-                IndexedContainer containerDataSource = (IndexedContainer) table
-                        .getContainerDataSource();
-                int newIndex = containerDataSource.indexOfId(itemIdOver) - 1;
-                if (dropTargetData.getDropLocation() != VerticalDropLocation.TOP) {
-                    newIndex++;
-                }
-                if (newIndex < 0) {
-                    newIndex = 0;
-                }
-                Object idAfter = containerDataSource.getIdByIndex(newIndex);
-                Collection<?> selections = (Collection<?>) table.getValue();
-                if (selections != null && selections.contains(itemId)) {
-                    // dragged a selected item, if multiple rows selected, drag
-                    // them too (functionality similar to apple mail)
-                    for (Object object : selections) {
-                        moveAfter(containerDataSource, object, idAfter);
-                    }
-
-                } else {
-                    // move just the dragged row, not considering selection at
-                    // all
-                    moveAfter(containerDataSource, itemId, idAfter);
-                }
-
-            }
-
-            private void moveAfter(IndexedContainer containerDataSource,
-                    Object itemId, Object idAfter) {
-                try {
-                    IndexedContainer clone = null;
-                    clone = (IndexedContainer) containerDataSource.clone();
-                    containerDataSource.removeItem(itemId);
-                    Item newItem = containerDataSource.addItemAfter(idAfter,
-                            itemId);
-                    Item item = clone.getItem(itemId);
-                    for (Object propId : item.getItemPropertyIds()) {
-                        newItem.getItemProperty(propId).setValue(
-                                item.getItemProperty(propId).getValue());
-                    }
-
-                    // TODO Auto-generated method stub
-                } catch (CloneNotSupportedException e) {
-                    // TODO Auto-generated catch block
-                    e.printStackTrace();
-                }
-
-            }
-        });
-
-    }
-
-    private void populateTable() {
-        table.addContainerProperty("Name", String.class, "");
-        table.addContainerProperty("Weight", Integer.class, 0);
-
-        PersonContainer testData = PersonContainer.createWithTestData();
-
-        for (int i = 0; i < 10; i++) {
-            Item addItem = table.addItem("Item" + i);
-            Person p = testData.getIdByIndex(i);
-            addItem.getItemProperty("Name").setValue(
-                    p.getFirstName() + " " + p.getLastName());
-            addItem.getItemProperty("Weight").setValue(50 + r.nextInt(60));
-        }
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "dd";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 119;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/dd/DDTest5.java b/tests/src/com/vaadin/tests/dd/DDTest5.java
deleted file mode 100644
index e4f3d5335d..0000000000
--- a/tests/src/com/vaadin/tests/dd/DDTest5.java
+++ /dev/null
@@ -1,177 +0,0 @@
-package com.vaadin.tests.dd;
-
-import java.util.Iterator;
-
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.DropTarget;
-import com.vaadin.event.dd.acceptcriteria.AcceptAll;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.DragAndDropWrapper;
-import com.vaadin.ui.DragAndDropWrapper.DragStartMode;
-import com.vaadin.ui.DragAndDropWrapper.WrapperTransferable;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class DDTest5 extends TestBase {
-
-    java.util.Random r = new java.util.Random(1);
-
-    HorizontalLayout hl = new HorizontalLayout();
-
-    private DragAndDropWrapper dragAndDropWrapper2;
-
-    private DropHandler dh;
-
-    private static int count;
-
-    class WrappedLabel extends DragAndDropWrapper {
-
-        private static final long serialVersionUID = 1L;
-
-        public WrappedLabel(String content) {
-            super(new Label(content + " c:" + ++count));
-            setDragStartMode(DragStartMode.WRAPPER);
-        }
-
-        @Override
-        public DropHandler getDropHandler() {
-            return dh;
-        }
-
-    }
-
-    @Override
-    protected void setup() {
-        Window w = getLayout().getWindow();
-
-        HorizontalSortableCssLayoutWithWrappers verticalSortableCssLayoutWithWrappers = new HorizontalSortableCssLayoutWithWrappers();
-        w.addWindow(verticalSortableCssLayoutWithWrappers);
-        verticalSortableCssLayoutWithWrappers.setPositionX(200);
-        verticalSortableCssLayoutWithWrappers.setPositionY(40); /*
-                                                                 * FIXME:
-                                                                 * subwindow
-                                                                 * horizontal
-                                                                 * position does
-                                                                 * not work if
-                                                                 * only x set
-                                                                 */
-
-        Label l;
-
-        l = new Label("Drag me");
-        DragAndDropWrapper dragAndDropWrapper = new DragAndDropWrapper(l);
-        dragAndDropWrapper.setDragStartMode(DragStartMode.COMPONENT);
-        dragAndDropWrapper.setWidth("100px");
-        dragAndDropWrapper.setHeight("100px");
-        getLayout().addComponent(dragAndDropWrapper);
-
-        l = new Label("Drag me too");
-        dragAndDropWrapper = new DragAndDropWrapper(l);
-        dragAndDropWrapper.setDragStartMode(DragStartMode.WRAPPER);
-        dragAndDropWrapper.setWidth("100px");
-        dragAndDropWrapper.setHeight("100px");
-        getLayout().addComponent(dragAndDropWrapper);
-
-        final CssLayout cssLayout = new CssLayout();
-        cssLayout.setHeight("300px");
-
-        dragAndDropWrapper2 = new DragAndDropWrapper(cssLayout);
-        dragAndDropWrapper2
-                .setCaption("Drop here or sort with dd (wrapper(csslayout(n*wrapper(label))))");
-
-        dh = new DropHandler() {
-
-            public AcceptCriterion getAcceptCriterion() {
-                return AcceptAll.get();
-            }
-
-            public void drop(DragAndDropEvent dropEvent) {
-
-                /*
-                 * TODO wrap componentns in wrappers (so we can build reordering
-                 * here)
-                 */
-
-                if (dropEvent.getTransferable() instanceof WrapperTransferable) {
-                    WrapperTransferable transferable = (WrapperTransferable) dropEvent
-                            .getTransferable();
-                    Component sourceComponent = transferable
-                            .getSourceComponent();
-
-                    Component draggedComponent = transferable
-                            .getDraggedComponent();
-
-                    DropTarget target = dropEvent.getTargetDetails()
-                            .getTarget();
-
-                    WrappedLabel wrappedLabel = new WrappedLabel(
-                            draggedComponent.toString());
-                    if (target instanceof WrappedLabel) {
-                        int i = 1; // add next to reference by default
-                        Iterator<Component> componentIterator = cssLayout
-                                .getComponentIterator();
-                        Component next = componentIterator.next();
-                        while (next != target && componentIterator.hasNext()) {
-                            if (next != sourceComponent) {
-                                // don't count on index if component is being
-                                // moved
-                                i++;
-                            }
-                            next = componentIterator.next();
-                        }
-
-                        if (sourceComponent instanceof WrappedLabel) {
-                            cssLayout.removeComponent(sourceComponent);
-                            wrappedLabel = (WrappedLabel) sourceComponent;
-                        }
-                        if (dropEvent.getTargetDetails()
-                                .getData("verticalLocation").equals("TOP")) {
-                            // before reference if dropped on topmost part
-                            i--;
-                            if (i < 0) {
-                                i = 0;
-                            }
-                        }
-                        cssLayout.addComponent(wrappedLabel, i);
-
-                    } else {
-                        cssLayout.addComponent(wrappedLabel);
-                    }
-
-                } else {
-                    // no component, add label with "Text"
-
-                    String data = (String) dropEvent.getTransferable().getData(
-                            "text/plain");
-                    if (data == null || "".equals(data)) {
-                        data = "-- no Text --";
-                    }
-                    cssLayout.addComponent(new WrappedLabel(data));
-
-                }
-
-            }
-        };
-
-        dragAndDropWrapper2.setDropHandler(dh);
-
-        getLayout().addComponent(dragAndDropWrapper2);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "dd: DragAndDropWrapper to build various use cases completely on server side";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 119;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/dd/DDTest6.java b/tests/src/com/vaadin/tests/dd/DDTest6.java
deleted file mode 100644
index 4299b321c3..0000000000
--- a/tests/src/com/vaadin/tests/dd/DDTest6.java
+++ /dev/null
@@ -1,548 +0,0 @@
-package com.vaadin.tests.dd;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.BeanItemContainer;
-import com.vaadin.data.util.ContainerHierarchicalWrapper;
-import com.vaadin.event.Action;
-import com.vaadin.event.Action.Handler;
-import com.vaadin.event.DataBoundTransferable;
-import com.vaadin.event.LayoutEvents.LayoutClickEvent;
-import com.vaadin.event.LayoutEvents.LayoutClickListener;
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.acceptcriteria.AcceptAll;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.event.dd.acceptcriteria.Not;
-import com.vaadin.event.dd.acceptcriteria.SourceIsTarget;
-import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.StreamResource;
-import com.vaadin.terminal.StreamResource.StreamSource;
-import com.vaadin.terminal.StreamVariable;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.TestUtils;
-import com.vaadin.ui.AbsoluteLayout;
-import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.DragAndDropWrapper;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Html5File;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.Tree.TreeDragMode;
-import com.vaadin.ui.Tree.TreeTargetDetails;
-import com.vaadin.ui.Window;
-
-public class DDTest6 extends TestBase {
-
-    java.util.Random r = new java.util.Random(1);
-
-    File[] files = new File[] { new Folder("Docs"), new Folder("Music"),
-            new Folder("Images"), new File("document.doc"),
-            new File("song.mp3"), new File("photo.jpg") };
-
-    private static Tree tree1;
-
-    private HorizontalSplitPanel sp;
-
-    private BeanItemContainer<File> fs1;
-
-    private static DDTest6 instance;
-
-    @Override
-    protected void setup() {
-        instance = this; // Note, test only works with single app per server if
-        // get()
-        // not converted to thread local
-
-        sp = new HorizontalSplitPanel();
-        sp.setSplitPosition(20);
-        CssLayout l = new CssLayout();
-        sp.setFirstComponent(l);
-
-        tree1 = new Tree("Volume 1");
-        tree1.setImmediate(true);
-
-        fs1 = new BeanItemContainer<File>(File.class);
-        tree1.setContainerDataSource(fs1);
-        for (int i = 0; i < files.length; i++) {
-            fs1.addBean(files[i]);
-            if (files[i] instanceof Folder) {
-                tree1.setChildrenAllowed(files[i], true);
-            } else {
-                tree1.setChildrenAllowed(files[i], false);
-            }
-            if (i >= files.length / 2) {
-                tree1.setParent(files[i], files[i - files.length / 2]);
-            }
-        }
-        tree1.setItemCaptionPropertyId("name");
-        tree1.setItemIconPropertyId("icon");
-
-        tree1.setDragMode(TreeDragMode.NODE);
-
-        DropHandler dropHandler = new DropHandler() {
-            public AcceptCriterion getAcceptCriterion() {
-                return AcceptAll.get();
-            }
-
-            public void drop(DragAndDropEvent dropEvent) {
-                File file = null;
-                Folder folder = null;
-                TreeTargetDetails dropTargetData = (TreeTargetDetails) dropEvent
-                        .getTargetDetails();
-                folder = (Folder) dropTargetData.getItemIdInto();
-                if (dropEvent.getTransferable() instanceof DataBoundTransferable) {
-                    DataBoundTransferable transferable = (DataBoundTransferable) dropEvent
-                            .getTransferable();
-                    file = (File) transferable.getItemId();
-                } else if (dropEvent.getTransferable().getSourceComponent() instanceof FileIcon) {
-                    FileIcon draggedIcon = (FileIcon) dropEvent
-                            .getTransferable().getSourceComponent();
-                    file = draggedIcon.file;
-
-                }
-                setParent(file, folder);
-            }
-        };
-
-        tree1.setDropHandler(dropHandler);
-
-        Handler actionHandler = new Handler() {
-
-            private Action[] actions = new Action[] { new Action("Remove") };
-
-            public void handleAction(Action action, Object sender, Object target) {
-                ContainerHierarchicalWrapper containerDataSource = (ContainerHierarchicalWrapper) tree1
-                        .getContainerDataSource();
-                containerDataSource.removeItemRecursively(target);
-            }
-
-            public Action[] getActions(Object target, Object sender) {
-                return actions;
-            }
-        };
-        tree1.addActionHandler(actionHandler);
-
-        tree1.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                Object value = event.getProperty().getValue();
-                if (value != null && !(value instanceof Folder)) {
-                    value = tree1.getParent(value);
-                }
-                FolderView folderView = FolderView.get((Folder) value);
-                sp.setSecondComponent(folderView);
-                folderView.reload();
-            }
-        });
-
-        l.addComponent(tree1);
-
-        sp.setSecondComponent(FolderView.get(null));
-
-        getLayout().setSizeFull();
-        getLayout().addComponent(sp);
-        TestUtils
-                .injectCSS(
-                        getLayout().getWindow(),
-                        ""
-                                + ".v-tree .v-icon {height:16px;} "
-                                + ".v-tree-node-caption-drag-top {/*border-top: none;*/} "
-                                + ".v-tree-node-caption-drag-bottom {border-bottom: none ;} "
-                                + ".v-tree-node-caption-drag-center {background-color: transparent;}"
-                                + ".v-tree-node-caption-dragfolder { background-color: cyan;} ");
-
-    }
-
-    private final static ThemeResource FOLDER = new ThemeResource(
-            "../runo/icons/64/folder.png");
-    private final static ThemeResource DOC = new ThemeResource(
-            "../runo/icons/64/document.png");
-
-    public static class File {
-        private Resource icon = DOC;
-        private String name;
-        private ByteArrayOutputStream bas;
-        private String type;
-
-        public File(String fileName) {
-            name = fileName;
-        }
-
-        public File(String fileName, ByteArrayOutputStream bas) {
-            this(fileName);
-            this.bas = bas;
-        }
-
-        public void setIcon(Resource icon) {
-            this.icon = icon;
-        }
-
-        public Resource getIcon() {
-            return icon;
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public void setType(String type) {
-            this.type = type;
-        }
-
-        public String getType() {
-            return type;
-        }
-
-        public Resource getResource() {
-            StreamSource streamSource = new StreamSource() {
-                public InputStream getStream() {
-                    if (bas != null) {
-                        byte[] byteArray = bas.toByteArray();
-                        return new ByteArrayInputStream(byteArray);
-                    }
-                    return null;
-                }
-            };
-            return new StreamResource(streamSource, getName(), DDTest6.get());
-        }
-    }
-
-    public static class Folder extends File {
-
-        public Folder(String fileName) {
-            super(fileName);
-            setIcon(FOLDER);
-        }
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "dd: tree and web desktop tests. FF36 supports draggin files from client side. (try dragging png image + double click) TODO more files, auto-opening folders";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 119;
-    }
-
-    private void openFile(File file) {
-        // ATM supports only images.
-        if (file.getType().equals("image/png")) {
-            Embedded embedded = new Embedded(file.getName(), file.getResource());
-            Window w = new Window(file.getName());
-            w.addComponent(embedded);
-            w.getContent().setSizeUndefined();
-            getMainWindow().addWindow(w);
-        } else if (file.getType().equals("text/csv")) {
-            showSpreadsheet(file);
-        }
-    }
-
-    private void showSpreadsheet(File file) {
-        // ApplicationResource resource = (ApplicationResource)
-        // file.getResource();
-        String string = new String(file.bas.toByteArray());
-        String[] rows = string.split("\n");
-        String[] cols = rows[0].split(",");
-        Table table = new Table();
-        for (String string2 : cols) {
-            // String col =
-            string2.replaceAll("\"", ""); // remove surrounding ""
-            table.addContainerProperty(string2, String.class, "");
-        }
-        for (int i = 1; i < rows.length; i++) {
-            String[] split = rows[i].split(",");
-            table.addItem(split, "" + i);
-        }
-        Window w = new Window(file.getName());
-        w.getContent().setSizeUndefined();
-        table.setEditable(true);
-        w.addComponent(table);
-        getMainWindow().addWindow(w);
-
-    }
-
-    static class FolderView extends DragAndDropWrapper implements DropHandler {
-
-        static final HashMap<Folder, FolderView> views = new HashMap<Folder, FolderView>();
-
-        public static FolderView get(Folder f) {
-
-            FolderView folder2 = views.get(f);
-            if (folder2 == null) {
-                folder2 = new FolderView(f);
-                views.put(f, folder2);
-            }
-            return folder2;
-        }
-
-        private Folder folder;
-        private AbsoluteLayout l;
-        private int x;
-        private int y;
-
-        private FolderView(Folder f) {
-            super(new AbsoluteLayout());
-            l = (AbsoluteLayout) getCompositionRoot();
-            setSizeFull();
-            l.setSizeFull();
-            folder = f;
-
-            setDropHandler(this);
-        }
-
-        @Override
-        public void attach() {
-            reload();
-            super.attach();
-        }
-
-        @SuppressWarnings("static-access")
-        void reload() {
-            Collection<?> children = folder == null ? DDTest6.get().tree1
-                    .rootItemIds() : DDTest6.get().tree1.getChildren(folder);
-            if (children == null) {
-                l.removeAllComponents();
-                return;
-            } else {
-                // make modifiable
-                children = new HashSet<Object>(children);
-            }
-            Set<Component> removed = new HashSet<Component>();
-            for (Iterator<Component> componentIterator = l
-                    .getComponentIterator(); componentIterator.hasNext();) {
-                FileIcon next = (FileIcon) componentIterator.next();
-                if (!children.contains(next.file)) {
-                    removed.add(next);
-                } else {
-                    children.remove(next.file);
-                }
-            }
-
-            for (Component component : removed) {
-                l.removeComponent(component);
-            }
-
-            for (Object object : children) {
-                FileIcon fileIcon = new FileIcon((File) object);
-                l.addComponent(fileIcon);
-                ComponentPosition position = l.getPosition(fileIcon);
-                position.setTop(Float.valueOf((y++ / 5) % 5 * 100),
-                        UNITS_PIXELS);
-                position.setLeft(Float.valueOf(x++ % 5 * 100), UNITS_PIXELS);
-            }
-
-        }
-
-        @SuppressWarnings("static-access")
-        public void drop(DragAndDropEvent dropEvent) {
-
-            if (dropEvent.getTransferable().getSourceComponent() instanceof FileIcon) {
-                // update the position
-
-                DragAndDropWrapper.WrapperTransferable transferable = (WrapperTransferable) dropEvent
-                        .getTransferable();
-                MouseEventDetails mouseDownEvent = transferable
-                        .getMouseDownEvent();
-
-                WrapperTargetDetails dropTargetDetails = (WrapperTargetDetails) dropEvent
-                        .getTargetDetails();
-
-                MouseEventDetails mouseEvent = dropTargetDetails
-                        .getMouseEvent();
-
-                int deltaX = mouseEvent.getClientX()
-                        - mouseDownEvent.getClientX();
-                int deltaY = mouseEvent.getClientY()
-                        - mouseDownEvent.getClientY();
-
-                ComponentPosition position = l.getPosition(transferable
-                        .getSourceComponent());
-                position.setTop(position.getTopValue() + deltaY, UNITS_PIXELS);
-                position.setLeft(position.getLeftValue() + deltaX, UNITS_PIXELS);
-
-            } else if (dropEvent.getTransferable().getSourceComponent() == tree1) {
-
-                // dragged something from tree to the folder shown
-
-                File draggedFile = (File) ((DataBoundTransferable) dropEvent
-                        .getTransferable()).getItemId();
-                DDTest6.get().setParent(draggedFile, folder);
-            } else {
-                // expecting this to be an html5 drag
-                WrapperTransferable tr = (WrapperTransferable) dropEvent
-                        .getTransferable();
-                Html5File[] files2 = tr.getFiles();
-                if (files2 != null) {
-                    for (Html5File html5File : files2) {
-                        String fileName = html5File.getFileName();
-                        // int bytes = html5File.getFileSize();
-                        final ByteArrayOutputStream bas = new ByteArrayOutputStream();
-
-                        StreamVariable streamVariable = new StreamVariable() {
-
-                            public OutputStream getOutputStream() {
-                                return bas;
-                            }
-
-                            public boolean listenProgress() {
-                                return false;
-                            }
-
-                            public void onProgress(StreamingProgressEvent event) {
-                            }
-
-                            public void streamingStarted(
-                                    StreamingStartEvent event) {
-                            }
-
-                            public void streamingFinished(
-                                    StreamingEndEvent event) {
-                            }
-
-                            public void streamingFailed(
-                                    StreamingErrorEvent event) {
-                            }
-
-                            public boolean isInterrupted() {
-                                return false;
-                            }
-                        };
-
-                        html5File.setStreamVariable(streamVariable);
-
-                        File file = new File(fileName, bas);
-                        file.setType(html5File.getType());
-                        // FF don't know csv
-                        if (fileName.endsWith(".csv")) {
-                            file.setType("text/csv");
-                        }
-                        DDTest6.get().fs1.addBean(file);
-                        DDTest6.get().tree1.setChildrenAllowed(file, false);
-                        DDTest6.get().setParent(file, folder);
-                    }
-
-                }
-
-            }
-        }
-
-        public AcceptCriterion getAcceptCriterion() {
-            return AcceptAll.get();
-        }
-
-    }
-
-    static class FileIcon extends DragAndDropWrapper {
-        private final File file;
-        private CssLayout l;
-
-        public FileIcon(final File file) {
-            super(new CssLayout());
-            l = (CssLayout) getCompositionRoot();
-            setWidth(null);
-            l.setWidth(null);
-            setDragStartMode(DragStartMode.WRAPPER); // drag all contained
-            // components, not just the
-            // one on it started
-            this.file = file;
-            Resource icon2 = file.getIcon();
-            String name = file.getName();
-            l.addComponent(new Embedded(null, icon2));
-            l.addComponent(new Label(name));
-
-            l.addListener(new LayoutClickListener() {
-                @SuppressWarnings("static-access")
-                public void layoutClick(LayoutClickEvent event) {
-                    if (event.isDoubleClick()) {
-                        if (file instanceof Folder) {
-                            get().tree1.setValue(file);
-                        } else {
-                            String type = file.getType();
-                            if (canDisplay(type)) {
-                                DDTest6.get().openFile(file);
-                            }
-                        }
-                    }
-
-                }
-
-                String[] knownTypes = new String[] { "image/png", "text/csv" };
-
-                private boolean canDisplay(String type) {
-                    if (type != null) {
-                        for (String t : knownTypes) {
-                            if (t.equals(type)) {
-                                return true;
-                            }
-                        }
-                    }
-                    return false;
-                }
-            });
-
-            if (file instanceof Folder) {
-
-                setDropHandler(new DropHandler() {
-
-                    public AcceptCriterion getAcceptCriterion() {
-                        return new Not(SourceIsTarget.get());
-                    }
-
-                    public void drop(DragAndDropEvent dropEvent) {
-                        File f = null;
-
-                        if (dropEvent.getTransferable().getSourceComponent() instanceof FileIcon) {
-                            FileIcon new_name = (FileIcon) dropEvent
-                                    .getTransferable().getSourceComponent();
-                            f = new_name.file;
-                        } else if (dropEvent.getTransferable()
-                                .getSourceComponent() == tree1) {
-                            f = (File) ((DataBoundTransferable) dropEvent
-                                    .getTransferable()).getItemId();
-                        }
-
-                        if (f != null) {
-                            get().setParent(f, (Folder) FileIcon.this.file);
-                        }
-
-                    }
-                });
-
-            }
-        }
-    }
-
-    static DDTest6 get() {
-        return instance;
-    }
-
-    public void setParent(File file, Folder newParent) {
-        tree1.setParent(file, newParent);
-        if (sp.getSecondComponent() instanceof FolderView) {
-            FolderView view = (FolderView) sp.getSecondComponent();
-            view.reload();
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/dd/DDTest7.java b/tests/src/com/vaadin/tests/dd/DDTest7.java
deleted file mode 100644
index 6027b3e499..0000000000
--- a/tests/src/com/vaadin/tests/dd/DDTest7.java
+++ /dev/null
@@ -1,189 +0,0 @@
-package com.vaadin.tests.dd;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.event.DataBoundTransferable;
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.tests.util.Person;
-import com.vaadin.tests.util.PersonContainer;
-import com.vaadin.tests.util.TestUtils;
-import com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-public class DDTest7 extends TestBase {
-
-    java.util.Random r = new java.util.Random(1);
-
-    HorizontalLayout hl = new HorizontalLayout();
-    Table table = new Table(
-            "Drag and drop sortable table with lazy loading rule. Dragged row can only be accepted after hevier row (weigh column). If starting from topmost row in viewport, heviests will end up on top.");
-
-    @Override
-    protected void setup() {
-        Window w = getLayout().getWindow();
-
-        TestUtils
-                .injectCSS(
-                        w,
-                        ".v-table-row-drag-middle .v-table-cell-content {"
-                                + "        background-color: inherit ; border-bottom: 1px solid cyan;"
-                                + "}"
-                                + ".v-table-row-drag-middle .v-table-cell-wrapper {"
-                                + "        margin-bottom: -1px;"
-                                + "}"
-                                + ""
-                                // always show the drop hint below
-                                + ".v-table-row-drag-top .v-table-cell-content {"
-                                + "border-top: 0; margin-top:0;border-bottom:1px solid cyan;"
-                                + "        margin-bottom: -1px;" + "}" + ""
-
-                );
-
-        // hl.addComponent(tree1);
-        hl.addComponent(table);
-        // hl.addComponent(tree2);
-        hl.setWidth("100%");
-        hl.setSpacing(true);
-        hl.setExpandRatio(table, 1);
-        table.setWidth("100%");
-        table.setPageLength(10);
-        table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-        table.setSelectable(true);
-        table.setMultiSelect(true);
-        populateTable();
-        addComponent(hl);
-
-        /*
-         * Make table rows draggable
-         */
-        table.setDragMode(Table.TableDragMode.ROW);
-
-        table.setDropHandler(new DropHandler() {
-            // accept only drags from this table
-            AcceptCriterion crit = new Table.TableDropCriterion() {
-                @Override
-                protected Set<Object> getAllowedItemIds(
-                        DragAndDropEvent dragEvent, Table table,
-                        Collection<Object> visibleItemIds) {
-
-                    Object draggedItemId = ((Table.TableTransferable) dragEvent
-                            .getTransferable()).getItemId();
-                    Integer weightOfDraggedRow = (Integer) table
-                            .getItem(draggedItemId).getItemProperty("Weight")
-                            .getValue();
-
-                    HashSet<Object> accepted = new HashSet<Object>();
-                    for (Object itemId : visibleItemIds) {
-                        Item item = table.getItem(itemId);
-                        Integer w = (Integer) item.getItemProperty("Weight")
-                                .getValue();
-                        if (weightOfDraggedRow < w) {
-                            accepted.add(itemId);
-                        }
-
-                    }
-                    return accepted;
-                }
-            };
-
-            public AcceptCriterion getAcceptCriterion() {
-                return crit;
-            }
-
-            public void drop(DragAndDropEvent dropEvent) {
-                AbstractSelectTargetDetails dropTargetData = (AbstractSelectTargetDetails) dropEvent
-                        .getTargetDetails();
-                DataBoundTransferable transferable = (DataBoundTransferable) dropEvent
-                        .getTransferable();
-                Object itemIdOver = dropTargetData.getItemIdOver();
-                Object itemId = transferable.getItemId();
-                if (itemId == null || itemIdOver == null
-                        || itemId.equals(itemIdOver)) {
-                    return; // no move happened
-                }
-
-                // IndexedContainer goodies... (hint: don't use it in real apps)
-                IndexedContainer containerDataSource = (IndexedContainer) table
-                        .getContainerDataSource();
-                int newIndex = containerDataSource.indexOfId(itemIdOver) - 1;
-                // always add after
-                newIndex++;
-                if (newIndex < 0) {
-                    newIndex = 0;
-                }
-                Object idAfter = containerDataSource.getIdByIndex(newIndex);
-                Collection<?> selections = (Collection<?>) table.getValue();
-                if (selections != null && selections.contains(itemId)) {
-                    // dragged a selected item, if multiple rows selected, drag
-                    // them too (functionality similar to apple mail)
-                    for (Object object : selections) {
-                        moveAfter(containerDataSource, object, idAfter);
-                    }
-
-                } else {
-                    // move just the dragged row, not considering selection at
-                    // all
-                    moveAfter(containerDataSource, itemId, idAfter);
-                }
-
-            }
-
-            private void moveAfter(IndexedContainer containerDataSource,
-                    Object itemId, Object idAfter) {
-                try {
-                    IndexedContainer clone = null;
-                    clone = (IndexedContainer) containerDataSource.clone();
-                    containerDataSource.removeItem(itemId);
-                    Item newItem = containerDataSource.addItemAfter(idAfter,
-                            itemId);
-                    Item item = clone.getItem(itemId);
-                    for (Object propId : item.getItemPropertyIds()) {
-                        newItem.getItemProperty(propId).setValue(
-                                item.getItemProperty(propId).getValue());
-                    }
-
-                } catch (CloneNotSupportedException e) {
-                    e.printStackTrace();
-                }
-
-            }
-        });
-
-    }
-
-    private void populateTable() {
-        table.addContainerProperty("Name", String.class, "");
-        table.addContainerProperty("Weight", Integer.class, 0);
-
-        PersonContainer testData = PersonContainer.createWithTestData();
-
-        for (int i = 0; i < 40; i++) {
-            Item addItem = table.addItem("Item" + i);
-            Person p = testData.getIdByIndex(i);
-            addItem.getItemProperty("Name").setValue(
-                    p.getFirstName() + " " + p.getLastName());
-            addItem.getItemProperty("Weight").setValue(50 + r.nextInt(60));
-        }
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "dd";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 119;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/dd/DDTest8.java b/tests/src/com/vaadin/tests/dd/DDTest8.java
deleted file mode 100644
index fed889b5c1..0000000000
--- a/tests/src/com/vaadin/tests/dd/DDTest8.java
+++ /dev/null
@@ -1,178 +0,0 @@
-package com.vaadin.tests.dd;
-
-import java.util.Collection;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.event.DataBoundTransferable;
-import com.vaadin.event.Transferable;
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.event.dd.acceptcriteria.Or;
-import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractSelect;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.Tree.TreeDragMode;
-import com.vaadin.ui.Tree.TreeTargetDetails;
-
-/**
- * DD playground. Better quality example/prototype codes in {@link DDTest2}.
- */
-public class DDTest8 extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Tree t = new Tree(
-                "Tree with criteria from AbstractSelect (OverItem, ContainsItem). Foo can be dragged anywhere, anything can be dropped on Foo or Bar. Bar5 subtree is also valid drop target.");
-
-        final HierarchicalContainer idx = new HierarchicalContainer();
-        t.setContainerDataSource(idx);
-        t.addItem("Foo");
-        t.addItem("Bar");
-        t.addItem("Bar1");
-        t.addItem("Bar2");
-        t.addItem("Bar3");
-        t.addItem("Bar4");
-        t.addItem("Bar5");
-        t.addItem("Child");
-        t.setParent("Child", "Foo");
-        t.setSizeFull();
-        t.setDragMode(TreeDragMode.NODE);
-
-        /*
-         * Moves items in tree (and could work in Table too). Also supports
-         * "building" tree.
-         * 
-         * TODO fix algorithm, broken in some cases.
-         */
-        DropHandler itemSorter = new DropHandler() {
-
-            @SuppressWarnings("unused")
-            private void populateSubTree(HierarchicalContainer idx,
-                    HierarchicalContainer subtree, Object itemId) {
-                Collection<?> children = subtree.getChildren(itemId);
-                if (children != null) {
-
-                    for (Object childId : children) {
-                        Item addItem = idx.addItem(childId);
-                        if (addItem != null) {
-                            // did not exist, populate properties
-                            Item item = subtree.getItem(itemId);
-                            Collection<?> itemPropertyIds = item
-                                    .getItemPropertyIds();
-                            for (Object propId : itemPropertyIds) {
-                                addItem.getItemProperty(propId)
-                                        .setValue(
-                                                item.getItemProperty(propId)
-                                                        .getValue());
-                            }
-                        }
-                        idx.setParent(childId, itemId);
-                        populateSubTree(idx, subtree, childId);
-                    }
-                }
-
-            }
-
-            @SuppressWarnings("unused")
-            private HierarchicalContainer getSubTree(HierarchicalContainer idx,
-                    Object itemId) {
-                HierarchicalContainer hierarchicalContainer = new HierarchicalContainer();
-                Collection<?> containerPropertyIds = idx
-                        .getContainerPropertyIds();
-                for (Object object : containerPropertyIds) {
-                    hierarchicalContainer.addContainerProperty(object,
-                            idx.getType(object), null);
-                }
-                hierarchicalContainer.addItem(itemId);
-                copyChildren(idx, hierarchicalContainer, itemId);
-                return hierarchicalContainer;
-            }
-
-            private void copyChildren(HierarchicalContainer source,
-                    HierarchicalContainer target, Object itemId) {
-                Collection<?> children = source.getChildren(itemId);
-                if (children != null) {
-                    for (Object childId : children) {
-                        Item item = source.getItem(childId);
-                        Item addedItem = target.addItem(childId);
-                        target.setParent(childId, itemId);
-                        Collection<?> itemPropertyIds = item
-                                .getItemPropertyIds();
-                        for (Object propertyId : itemPropertyIds) {
-                            addedItem.getItemProperty(propertyId)
-                                    .setValue(
-                                            item.getItemProperty(propertyId)
-                                                    .getValue());
-                        }
-                        copyChildren(source, target, childId);
-                    }
-                }
-
-            }
-
-            public void drop(DragAndDropEvent event) {
-                TreeTargetDetails details = (TreeTargetDetails) event
-                        .getTargetDetails();
-                // TODO set properties, so same sorter could be used in Table
-                Transferable transferable = event.getTransferable();
-                if (transferable instanceof DataBoundTransferable) {
-                    DataBoundTransferable transferrable2 = (DataBoundTransferable) transferable;
-
-                    Object itemId = transferrable2.getItemId();
-
-                    Object itemIdOver = details.getItemIdOver();
-
-                    // TODO could use the "folder" node id to make the drop
-                    // logic simpler
-                    Object itemIdInto = details.getItemIdInto();
-                    VerticalDropLocation dropLocation = details
-                            .getDropLocation();
-
-                    Object itemIdAfter = details.getItemIdAfter();
-
-                    if (itemIdOver.equals(itemIdInto)) { // directly on a node
-                        t.setParent(itemId, itemIdOver);
-                        return;
-                    }
-
-                    idx.setParent(itemId, itemIdInto);
-
-                    if (dropLocation == null) {
-                        System.err.println("No detail of drop place available");
-                    }
-                    idx.moveAfterSibling(itemId, itemIdAfter);
-                }
-
-                return;
-            }
-
-            public AcceptCriterion getAcceptCriterion() {
-                return new Or(new AbstractSelect.TargetItemIs(t, "Foo", "Bar"),
-                        new AbstractSelect.AcceptItem(t, "Foo"),
-                        t.new TargetInSubtree("Bar5") //
-                );
-            }
-
-        };
-
-        t.setDropHandler(itemSorter);
-
-        getLayout().setSizeFull();
-        addComponent(t);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Random DD tests";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 119;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/dd/DragAndDropFiles.java b/tests/src/com/vaadin/tests/dd/DragAndDropFiles.java
deleted file mode 100644
index ad23338bbf..0000000000
--- a/tests/src/com/vaadin/tests/dd/DragAndDropFiles.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package com.vaadin.tests.dd;
-
-import java.io.OutputStream;
-
-import org.apache.commons.io.output.NullOutputStream;
-
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.acceptcriteria.AcceptAll;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.terminal.StreamVariable;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.DragAndDropWrapper;
-import com.vaadin.ui.DragAndDropWrapper.WrapperTransferable;
-import com.vaadin.ui.Html5File;
-import com.vaadin.ui.Label;
-
-public class DragAndDropFiles extends TestBase {
-
-    @Override
-    protected void setup() {
-        CssLayout cssLayout = new CssLayout() {
-            @Override
-            protected String getCss(Component c) {
-                return "display: block; padding:20px; border: 2px dotted black; background: #aaa;";
-            }
-        };
-        Component l = new Label("Drag file on me");
-        l.setSizeUndefined();
-        cssLayout.addComponent(l);
-        DragAndDropWrapper dragAndDropWrapper = new DragAndDropWrapper(
-                cssLayout);
-        dragAndDropWrapper.setSizeUndefined();
-        dragAndDropWrapper.setDropHandler(new DropHandler() {
-
-            public AcceptCriterion getAcceptCriterion() {
-                return AcceptAll.get();
-            }
-
-            public void drop(DragAndDropEvent event) {
-                WrapperTransferable transferable = (WrapperTransferable) event
-                        .getTransferable();
-                Html5File[] files = transferable.getFiles();
-                if (files != null) {
-
-                    for (int i = 0; i < files.length; i++) {
-                        Html5File file = files[i];
-                        // Max 1 MB files are uploaded
-                        if (file.getFileSize() > 1024 * 1024) {
-                            getMainWindow()
-                                    .showNotification(
-                                            "File "
-                                                    + file.getFileName()
-                                                    + " was too large, not transferred to the server side.");
-                            continue;
-                        }
-
-                        StreamVariable streamVariable = new StreamVariable() {
-
-                            public OutputStream getOutputStream() {
-                                return new NullOutputStream();
-                            }
-
-                            public boolean listenProgress() {
-                                return true;
-                            }
-
-                            public void onProgress(
-                                    StreamingProgressEvent event) {
-                                System.err.println("Progress"
-                                        + event.getBytesReceived());
-                            }
-
-                            public void streamingStarted(
-                                    StreamingStartEvent event) {
-                                getMainWindow().showNotification(
-                                        "Started uploading "
-                                                + event.getFileName());
-                            }
-
-                            public void streamingFinished(
-                                    StreamingEndEvent event) {
-                                getMainWindow().showNotification(
-                                        "Finished uploading "
-                                                + event.getFileName());
-                            }
-
-                            public void streamingFailed(
-                                    StreamingErrorEvent event) {
-                                getMainWindow().showNotification(
-                                        "Failed uploading "
-                                                + event.getFileName());
-                            }
-
-                            public boolean isInterrupted() {
-                                return false;
-                            }
-                        };
-                        file.setStreamVariable(streamVariable);
-                    }
-                }
-
-            }
-        });
-
-        addComponent(dragAndDropWrapper);
-    }
-
-    /*
-     * TODO implement 'handbrake' for testing, progresss listener, interrupting.
-     */
-    @Override
-    protected String getDescription() {
-        return "Should work. Over 1 MB files will not be posted. TODO implement 'handbrake' for testing, progresss listener, interrupting.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/dd/DragDropPane.java b/tests/src/com/vaadin/tests/dd/DragDropPane.java
deleted file mode 100644
index 1b7b7b997b..0000000000
--- a/tests/src/com/vaadin/tests/dd/DragDropPane.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package com.vaadin.tests.dd;
-
-import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
-
-import com.vaadin.event.DataBoundTransferable;
-import com.vaadin.event.Transferable;
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.acceptcriteria.AcceptAll;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.terminal.StreamVariable;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.ui.AbsoluteLayout;
-import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.DragAndDropWrapper;
-import com.vaadin.ui.Html5File;
-import com.vaadin.ui.Label;
-
-/**
- * replacement for a proto class to keep tests working
- */
-public class DragDropPane extends DragAndDropWrapper implements DropHandler {
-
-    private AbsoluteLayout root;
-    private AcceptCriterion crit;
-
-    public DragDropPane() {
-        super(new AbsoluteLayout());
-        root = (AbsoluteLayout) getCompositionRoot();
-        setDropHandler(this);
-        setDragStartMode(DragStartMode.COMPONENT);
-    }
-
-    @Override
-    public void addComponent(Component c) {
-        root.addComponent(c);
-    }
-
-    /**
-     * 
-     */
-    private static final long serialVersionUID = 1L;
-
-    public void addComponent(Component l, String string) {
-        root.addComponent(l, string);
-    }
-
-    public void setAcceptCriterion(AcceptCriterion crit) {
-        this.crit = crit;
-    }
-
-    public void drop(DragAndDropEvent event) {
-
-        WrapperTargetDetails ed = (WrapperTargetDetails) event
-                .getTargetDetails();
-        Transferable ctr = event.getTransferable();
-        // use "component" (from DragDropPane) if available, else take
-        // the source component
-        Component component = null;
-        if (ctr instanceof WrapperTransferable) {
-            component = ((WrapperTransferable) ctr).getDraggedComponent();
-        } else if (ctr instanceof DataBoundTransferable) {
-            // Item has been dragged, construct a Label from
-            // Item id
-            Label l = new Label();
-            l.setSizeUndefined();
-            l.setValue("ItemId : " + ((DataBoundTransferable) ctr).getItemId());
-            component = l;
-        }
-
-        if (component != null) {
-
-            if (component.getParent() != root) {
-
-                root.addComponent(component);
-
-                Integer left = ed.getAbsoluteLeft();
-                Integer top = ed.getAbsoluteTop();
-
-                MouseEventDetails eventDetails = ed.getMouseEvent();
-
-                int clientX = eventDetails.getClientX();
-                int clientY = eventDetails.getClientY();
-
-                try {
-                    root.getPosition(component).setTopValue(
-                            Float.valueOf(clientY - top));
-                    root.getPosition(component).setLeftValue(
-                            Float.valueOf(clientX - left));
-                } catch (Exception e) {
-                }
-            } else {
-                // drag started and ended inside the this Pane
-
-                MouseEventDetails start = ((WrapperTransferable) event
-                        .getTransferable()).getMouseDownEvent();
-                MouseEventDetails eventDetails = ed.getMouseEvent();
-
-                int deltaX = eventDetails.getClientX() - start.getClientX();
-                int deltaY = eventDetails.getClientY() - start.getClientY();
-
-                ComponentPosition p = root.getPosition(component);
-                p.setTopValue(p.getTopValue() + deltaY);
-                p.setLeftValue(p.getLeftValue() + deltaX);
-
-            }
-        }
-
-        else {
-            // drag coming outside of Vaadin
-
-            WrapperTransferable wtr = (WrapperTransferable) ctr;
-
-            String object = wtr.getText();
-            // String html = wtr.getHtml();
-            // String url = (String) ctr.getData("Url");
-
-            final Label l = new Label();
-            l.setCaption("Generated from HTML5 drag:");
-            if (object != null) {
-                if (object.length() > 80) {
-                    object = object.substring(0, 79);
-                }
-                l.setValue(object);
-            } else {
-                l.setValue("HTML5 dd");
-            }
-
-            Html5File[] files = wtr.getFiles();
-            if (files != null) {
-                for (Html5File html5File : files) {
-                    l.setCaption(html5File.getFileName());
-                    html5File.setStreamVariable(new StreamVariable() {
-                        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-
-                        public OutputStream getOutputStream() {
-                            return byteArrayOutputStream;
-                        }
-
-                        public boolean listenProgress() {
-                            return false;
-                        }
-
-                        public void onProgress(StreamingProgressEvent event) {
-                        }
-
-                        public void streamingStarted(StreamingStartEvent event) {
-                        }
-
-                        public void streamingFinished(StreamingEndEvent event) {
-                            l.setValue((new String(byteArrayOutputStream
-                                    .toByteArray()).substring(0, 80) + "..."));
-                        }
-
-                        public void streamingFailed(StreamingErrorEvent event) {
-                        }
-
-                        public boolean isInterrupted() {
-                            return false;
-                        }
-                    });
-                }
-            }
-
-            l.setSizeUndefined();
-
-            root.addComponent(l);
-
-        }
-        return;
-    }
-
-    public AcceptCriterion getAcceptCriterion() {
-        return crit != null ? crit : AcceptAll.get();
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/dd/HorizontalLayoutSortableWithWrappers.java b/tests/src/com/vaadin/tests/dd/HorizontalLayoutSortableWithWrappers.java
deleted file mode 100644
index aa51dd539d..0000000000
--- a/tests/src/com/vaadin/tests/dd/HorizontalLayoutSortableWithWrappers.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package com.vaadin.tests.dd;
-
-import java.util.Iterator;
-
-import com.vaadin.event.Transferable;
-import com.vaadin.event.TransferableImpl;
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.DropTarget;
-import com.vaadin.event.dd.TargetDetails;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.event.dd.acceptcriteria.And;
-import com.vaadin.event.dd.acceptcriteria.Not;
-import com.vaadin.event.dd.acceptcriteria.SourceIsTarget;
-import com.vaadin.event.dd.acceptcriteria.TargetDetailIs;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.DragAndDropWrapper;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-/**
- * Same as with css layout but tests size change propagation on emphasis +
- * rules.
- * 
- * 
- */
-public class HorizontalLayoutSortableWithWrappers extends Window {
-
-    static int count;
-
-    private HorizontalLayout layout = new HorizontalLayout();
-
-    class WrappedLabel extends DragAndDropWrapper {
-
-        private static final long serialVersionUID = 1L;
-
-        public WrappedLabel(String content) {
-            super(new Label(content + " c:" + ++count));
-            getCompositionRoot().setWidth("60px");
-            getCompositionRoot().setHeight("60px");
-            setSizeUndefined();
-            setDragStartMode(DragStartMode.WRAPPER);
-        }
-
-        @Override
-        public DropHandler getDropHandler() {
-            return dh;
-        }
-
-    }
-
-    private DropHandler dh = new DropHandler() {
-        AcceptCriterion crit = new And(new TargetDetailIs("horizontalLocation",
-                "LEFT"), new Not(SourceIsTarget.get()));
-
-        public AcceptCriterion getAcceptCriterion() {
-            return crit;
-        }
-
-        public void drop(DragAndDropEvent dropEvent) {
-            Transferable transferable = dropEvent.getTransferable();
-            if (transferable instanceof TransferableImpl) {
-                TransferableImpl ct = (TransferableImpl) transferable;
-                Component sourceComponent = ct.getSourceComponent();
-                if (sourceComponent instanceof WrappedLabel) {
-                    int index = 1;
-                    Iterator<Component> componentIterator = layout
-                            .getComponentIterator();
-                    Component next = componentIterator.next();
-                    TargetDetails dropTargetData = dropEvent.getTargetDetails();
-                    DropTarget target = dropTargetData.getTarget();
-                    while (next != target) {
-                        if (next != sourceComponent) {
-                            index++;
-                        }
-                        next = componentIterator.next();
-                    }
-                    if (dropTargetData.getData("horizontalLocation").equals(
-                            "LEFT")) {
-                        index--;
-                        if (index < 0) {
-                            index = 0;
-                        }
-                    }
-
-                    layout.removeComponent(sourceComponent);
-                    layout.addComponent(sourceComponent, index);
-                }
-            }
-            // TODO Auto-generated method stub
-
-        }
-    };
-
-    public HorizontalLayoutSortableWithWrappers() {
-        setCaption("Horizontally sortable layout via (ddwrappers): Try sorting blocks by dragging them");
-        DragAndDropWrapper pane = new DragAndDropWrapper(layout);
-        setContent(pane);
-        pane.setSizeFull();
-        setWidth("400px");
-        setHeight("100px");
-
-        for (int i = 0; i < 4; i++) {
-            layout.addComponent(new WrappedLabel("Block"));
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/dd/HorizontalSortableCssLayoutWithWrappers.java b/tests/src/com/vaadin/tests/dd/HorizontalSortableCssLayoutWithWrappers.java
deleted file mode 100644
index a77faffd2e..0000000000
--- a/tests/src/com/vaadin/tests/dd/HorizontalSortableCssLayoutWithWrappers.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.vaadin.tests.dd;
-
-import java.util.Iterator;
-
-import com.vaadin.event.Transferable;
-import com.vaadin.event.TransferableImpl;
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.DropTarget;
-import com.vaadin.event.dd.TargetDetails;
-import com.vaadin.event.dd.acceptcriteria.AcceptAll;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.DragAndDropWrapper;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class HorizontalSortableCssLayoutWithWrappers extends Window {
-
-    static int count;
-
-    private CssLayout cssLayout = new CssLayout() {
-        @Override
-        protected String getCss(Component c) {
-            return "float:left; width:60px;height:60px;background: yellow;padding:2px;";
-        };
-    };
-
-    class WrappedLabel extends DragAndDropWrapper {
-
-        private static final long serialVersionUID = 1L;
-
-        public WrappedLabel(String content) {
-            super(new Label(content + " c:" + ++count));
-            setSizeUndefined(); // via css
-            setHeight("60px"); // FIXME custom component seems to be broken:
-            // can't set height with css only
-            setDragStartMode(DragStartMode.WRAPPER);
-        }
-
-        @Override
-        public DropHandler getDropHandler() {
-            return dh;
-        }
-
-    }
-
-    private DropHandler dh = new DropHandler() {
-
-        public AcceptCriterion getAcceptCriterion() {
-            return AcceptAll.get();
-        }
-
-        public void drop(DragAndDropEvent dropEvent) {
-            Transferable transferable = dropEvent.getTransferable();
-            if (transferable instanceof TransferableImpl) {
-                TransferableImpl ct = (TransferableImpl) transferable;
-                Component sourceComponent = ct.getSourceComponent();
-                if (sourceComponent instanceof WrappedLabel) {
-                    int index = 1;
-                    Iterator<Component> componentIterator = cssLayout
-                            .getComponentIterator();
-                    Component next = componentIterator.next();
-                    TargetDetails dropTargetData = dropEvent.getTargetDetails();
-                    DropTarget target = dropTargetData.getTarget();
-                    while (next != target) {
-                        if (next != sourceComponent) {
-                            index++;
-                        }
-                        next = componentIterator.next();
-                    }
-                    if (dropTargetData.getData("horizontalLocation").equals(
-                            "LEFT")) {
-                        index--;
-                        if (index < 0) {
-                            index = 0;
-                        }
-                    }
-
-                    cssLayout.removeComponent(sourceComponent);
-                    cssLayout.addComponent(sourceComponent, index);
-                }
-            }
-            // TODO Auto-generated method stub
-
-        }
-    };
-
-    public HorizontalSortableCssLayoutWithWrappers() {
-        setCaption("Horizontally sortable csslayout via (ddwrappers):Try sorting blocks by draggin them");
-        DragAndDropWrapper pane = new DragAndDropWrapper(cssLayout);
-        setContent(pane);
-        pane.setSizeFull();
-        setWidth("400px");
-        setHeight("100px");
-
-        for (int i = 0; i < 4; i++) {
-            cssLayout.addComponent(new WrappedLabel("Block"));
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/dd/TreeDragStart.java b/tests/src/com/vaadin/tests/dd/TreeDragStart.java
deleted file mode 100644
index 4a719bfa7f..0000000000
--- a/tests/src/com/vaadin/tests/dd/TreeDragStart.java
+++ /dev/null
@@ -1,324 +0,0 @@
-package com.vaadin.tests.dd;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.data.util.BeanItem;
-import com.vaadin.data.util.BeanItemContainer;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.event.DataBoundTransferable;
-import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.event.dd.acceptcriteria.Not;
-import com.vaadin.event.dd.acceptcriteria.Or;
-import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails;
-import com.vaadin.ui.AbstractSelect.VerticalLocationIs;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.TableDragMode;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.Tree.TreeDragMode;
-import com.vaadin.ui.Tree.TreeTargetDetails;
-
-public class TreeDragStart extends TestBase {
-
-    @Override
-    protected void setup() {
-        final Tree tree = new Tree("Inventory");
-
-        CheckBox checkBox = new CheckBox("Enabled");
-        checkBox.setImmediate(true);
-        checkBox.setValue(true);
-        checkBox.addListener(new ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                tree.setEnabled(!tree.isEnabled());
-            }
-        });
-        addComponent(checkBox);
-        checkBox = new CheckBox("Drag start");
-        checkBox.setImmediate(true);
-        checkBox.setValue(true);
-        checkBox.addListener(new ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                if (((CheckBox) event.getProperty()).booleanValue()) {
-                    tree.setDragMode(TreeDragMode.NODE);
-                } else {
-                    tree.setDragMode(TreeDragMode.NONE);
-                }
-            }
-        });
-        addComponent(checkBox);
-
-        tree.setContainerDataSource(createTreeContent());
-        tree.setItemCaptionMode(Tree.ITEM_CAPTION_MODE_EXPLICIT_DEFAULTS_ID);
-        for (Object item : tree.getItemIds().toArray()) {
-            tree.setItemCaption(item, (String) ((BeanItem<?>) item)
-                    .getItemProperty("name").getValue());
-        }
-        getLayout().addComponent(tree);
-
-        // Expand all items
-        for (Iterator<?> it = tree.rootItemIds().iterator(); it.hasNext();) {
-            tree.expandItemsRecursively(it.next());
-        }
-
-        // Set the tree in drag source mode
-        tree.setDragMode(TreeDragMode.NODE);
-
-        // Allow the tree to receive drag drops and handle them
-        tree.setDropHandler(new DropHandler() {
-            public AcceptCriterion getAcceptCriterion() {
-                // Accept drops in the middle of container items
-                // and below and above all items.
-                return new Or(Tree.TargetItemAllowsChildren.get(), new Not(
-                        VerticalLocationIs.MIDDLE));
-            }
-
-            public void drop(DragAndDropEvent event) {
-                // Wrapper for the object that is dragged
-                DataBoundTransferable t = (DataBoundTransferable) event
-                        .getTransferable();
-
-                TreeTargetDetails target = (TreeTargetDetails) event
-                        .getTargetDetails();
-
-                // Get ids of the dragged item and the target item
-                Object sourceItemId = t.getData("itemId");
-                Object targetItemId = target.getItemIdOver();
-
-                // On which side of the target the item was dropped
-                VerticalDropLocation location = target.getDropLocation();
-
-                HierarchicalContainer container = (HierarchicalContainer) tree
-                        .getContainerDataSource();
-
-                BeanItem<?> beanItem = null;
-                if (sourceItemId instanceof BeanItem<?>) {
-                    beanItem = (BeanItem<?>) sourceItemId;
-                } else if (sourceItemId instanceof InventoryObject) {
-                    beanItem = new BeanItem<InventoryObject>(
-                            (InventoryObject) sourceItemId);
-                }
-
-                // Remove the item from the source container and
-                // add it to the tree's container
-                Container sourceContainer = t.getSourceContainer();
-                sourceContainer.removeItem(sourceItemId);
-                tree.addItem(beanItem);
-                InventoryObject bean = (InventoryObject) beanItem.getBean();
-                tree.setChildrenAllowed(beanItem, bean.isContainer());
-
-                // Drop right on an item -> make it a child
-                if (location == VerticalDropLocation.MIDDLE) {
-                    tree.setParent(beanItem, targetItemId);
-                } else if (location == VerticalDropLocation.TOP) {
-                    Object parentId = container.getParent(targetItemId);
-                    tree.setParent(beanItem, parentId);
-                    container.moveAfterSibling(beanItem, targetItemId);
-                    container.moveAfterSibling(targetItemId, beanItem);
-                }
-
-                // Drop below another item -> make it next
-                else if (location == VerticalDropLocation.BOTTOM) {
-                    Object parentId = container.getParent(targetItemId);
-                    tree.setParent(beanItem, parentId);
-                    container.moveAfterSibling(beanItem, targetItemId);
-                }
-
-                tree.setItemCaption(beanItem, bean.getName());
-            }
-        });
-
-        // Have a table that allows dragging from
-        final Table table = new Table("Inventory List");
-        table.setDragMode(TableDragMode.ROW);
-
-        // Initialize the table container
-        ArrayList<InventoryObject> collection = new ArrayList<InventoryObject>();
-        collection.add(new InventoryObject("Dummy Item", 0.0, false));
-        final BeanItemContainer<InventoryObject> tableContainer = new BeanItemContainer<InventoryObject>(
-                collection);
-        table.setContainerDataSource(tableContainer);
-        table.setVisibleColumns(new String[] { "name", "weight" });
-        table.removeAllItems();
-
-        // Allow the table to receive drops and handle them
-        table.setDropHandler(new DropHandler() {
-            public AcceptCriterion getAcceptCriterion() {
-                return new Not(VerticalLocationIs.MIDDLE);
-            }
-
-            public void drop(DragAndDropEvent event) {
-                // Wrapper for the object that is dragged
-                DataBoundTransferable t = (DataBoundTransferable) event
-                        .getTransferable();
-
-                // Make sure the drag source is the same tree
-                if (t.getSourceComponent() != tree
-                        && t.getSourceComponent() != table) {
-                    return;
-                }
-
-                AbstractSelectTargetDetails target = (AbstractSelectTargetDetails) event
-                        .getTargetDetails();
-
-                // Get ids of the dragged item and the target item
-                Object sourceItemId = t.getData("itemId");
-                Object targetItemId = target.getItemIdOver();
-
-                // Do not allow drop on the item itself
-                if (sourceItemId.equals(targetItemId)) {
-                    return;
-                }
-
-                InventoryObject bean = null;
-                if (sourceItemId instanceof BeanItem<?>) {
-                    bean = (InventoryObject) ((BeanItem<?>) sourceItemId)
-                            .getBean();
-                } else if (sourceItemId instanceof InventoryObject) {
-                    bean = (InventoryObject) sourceItemId;
-                }
-
-                // Remove the item from the source container
-                t.getSourceContainer().removeItem(sourceItemId);
-
-                // On which side of the target the item was dropped
-                VerticalDropLocation location = target.getDropLocation();
-
-                // The table was empty or otherwise not on an item
-                if (targetItemId == null) {
-                    tableContainer.addItem(bean); // Add to the end
-                } else if (location == VerticalDropLocation.TOP) {
-                    tableContainer.addItemAt(
-                            tableContainer.indexOfId(targetItemId), bean);
-                } else if (location == VerticalDropLocation.BOTTOM) {
-                    tableContainer.addItemAfter(targetItemId, bean);
-                }
-            }
-        });
-        getLayout().addComponent(table);
-    }
-
-    public class InventoryObject implements Serializable {
-        private static final long serialVersionUID = -8943498783302996516L;
-
-        String name;
-        double weight;
-        boolean container;
-
-        public InventoryObject(String name, double weight, boolean container) {
-            this.name = name;
-            this.weight = weight;
-            this.container = container;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public double getWeight() {
-            return weight;
-        }
-
-        public void setWeight(double weight) {
-            this.weight = weight;
-        }
-
-        public boolean isContainer() {
-            return container;
-        }
-
-        public void setContainer(boolean container) {
-            this.container = container;
-        }
-    }
-
-    HashMap<String, InventoryObject> inventoryStore = new HashMap<String, InventoryObject>();
-
-    public HierarchicalContainer createTreeContent() {
-        final Object[] inventory = new Object[] {
-                new InventoryObject("root", 0.0, true),
-                new InventoryObject("+5 Quarterstaff (blessed)", 3.5, false),
-                new InventoryObject("+3 Elven Dagger (blessed)", 0.2, false),
-                new InventoryObject("+5 Helmet (greased)", 1.5, false),
-                new Object[] {
-                        new InventoryObject("Sack", 0.2, true),
-                        new InventoryObject("Pick-Axe", 2.5, false),
-                        new InventoryObject("Lock Pick", 0.1, false),
-                        new InventoryObject("Tinning Kit", 0.5, false),
-                        new InventoryObject("Potion of Healing (blessed)", 0.7,
-                                false), },
-                new Object[] {
-                        new InventoryObject("Bag of Holding", 0.1, true),
-                        new InventoryObject("Magic Marker", 0.05, false),
-                        new InventoryObject("Can of Grease (blessed)", 0.5,
-                                false), },
-                new Object[] {
-                        new InventoryObject("Chest", 10.0, true),
-                        new InventoryObject("Scroll of Identify", 0.1, false),
-                        new InventoryObject("Scroll of Genocide", 0.1, false),
-                        new InventoryObject("Towel", 0.3, false),
-                        new Object[] {
-                                new InventoryObject("Large Box", 8.0, true),
-                                new InventoryObject("Figurine of Vaadin", 0.4,
-                                        false),
-                                new InventoryObject("Expensive Camera", 1.5,
-                                        false), },
-                        new InventoryObject("Tin Opener", 0.02, false), }, };
-
-        HierarchicalContainer container = new HierarchicalContainer();
-
-        new Object() {
-            public void put(Object[] data, Object parent,
-                    HierarchicalContainer container) {
-                for (int i = 1; i < data.length; i++) {
-                    BeanItem<InventoryObject> item;
-                    if (data[i].getClass() == InventoryObject.class) {
-                        InventoryObject object = (InventoryObject) data[i];
-                        item = new BeanItem<InventoryObject>(object);
-                        container.addItem(item);
-                        container.setParent(item, parent);
-                        container.setChildrenAllowed(item, false);
-                    } else {// It's an Object[]
-                        Object[] sub = (Object[]) data[i];
-                        InventoryObject object = (InventoryObject) sub[0];
-                        item = new BeanItem<InventoryObject>(object);
-                        container.addItem(item);
-                        container.setParent(item, parent);
-
-                        // Add children recursively
-                        put(sub, item, container);
-                    }
-
-                    inventoryStore
-                            .put(item.getBean().getName(), item.getBean());
-                }
-            }
-        }.put(inventory, null, container);
-
-        return container;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Should work";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6320;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/dd/VMyDragSource.java b/tests/src/com/vaadin/tests/dd/VMyDragSource.java
deleted file mode 100644
index 350ee064f3..0000000000
--- a/tests/src/com/vaadin/tests/dd/VMyDragSource.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.vaadin.tests.dd;
-
-import com.google.gwt.dom.client.NativeEvent;
-import com.google.gwt.event.dom.client.MouseDownEvent;
-import com.google.gwt.event.dom.client.MouseDownHandler;
-import com.google.gwt.event.dom.client.MouseMoveEvent;
-import com.google.gwt.event.dom.client.MouseMoveHandler;
-import com.google.gwt.event.dom.client.MouseOutEvent;
-import com.google.gwt.event.dom.client.MouseOutHandler;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.HTML;
-import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.Paintable;
-import com.vaadin.terminal.gwt.client.UIDL;
-import com.vaadin.terminal.gwt.client.ui.dd.VDragAndDropManager;
-import com.vaadin.terminal.gwt.client.ui.dd.VTransferable;
-
-/**
- * Example code to implement Component that has something to drag.
- */
-public class VMyDragSource extends Composite implements Paintable,
-        MouseDownHandler, MouseMoveHandler, MouseOutHandler {
-
-    private boolean mouseDown;
-    private MouseDownEvent mDownEvent;
-    @SuppressWarnings("unused")
-    private ApplicationConnection client;
-
-    public VMyDragSource() {
-        FlowPanel fp = new FlowPanel();
-        initWidget(fp);
-
-        HTML html = new HTML("DragThis");
-
-        fp.add(html);
-
-        html.addMouseDownHandler(this);
-        html.addMouseMoveHandler(this);
-        html.addMouseOutHandler(this);
-
-    }
-
-    public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
-        if (client.updateComponent(this, uidl, true)) {
-            return;
-        }
-        this.client = client;
-    }
-
-    /*
-     * Below a sophisticated drag start implementation. Drag event is started if
-     * mouse is moved 5 pixels with left mouse key down.
-     */
-
-    public void onMouseDown(MouseDownEvent event) {
-        if (event.getNativeButton() == NativeEvent.BUTTON_LEFT) {
-            mouseDown = true;
-            mDownEvent = event;
-        }
-    }
-
-    public void onMouseMove(MouseMoveEvent event) {
-        if (mouseDown) {
-            int deltaX = Math.abs(mDownEvent.getClientX() - event.getClientX());
-            int deltaY = Math.abs(mDownEvent.getClientY() - event.getClientY());
-            if (deltaX > 5 || deltaY > 5) {
-                // Start the drag and drop operation
-
-                // create Transferable, that contains the payload
-                VTransferable transferable = new VTransferable();
-                transferable.setData("Text", "myPayload");
-
-                // Tell DragAndDropManager to start a drag and drop operation.
-                // Also let it handle all events (last parameter true). Could
-                // also do all event handling here too.
-                VDragAndDropManager.get().startDrag(transferable,
-                        mDownEvent.getNativeEvent(), true);
-
-                mouseDown = false;
-                mDownEvent = null;
-            }
-        }
-
-    }
-
-    public void onMouseOut(MouseOutEvent event) {
-        mouseDown = false;
-        mDownEvent = null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/dd/VMyDropTarget.java b/tests/src/com/vaadin/tests/dd/VMyDropTarget.java
deleted file mode 100644
index 743cce3095..0000000000
--- a/tests/src/com/vaadin/tests/dd/VMyDropTarget.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vaadin.tests.dd;
-
-import com.google.gwt.user.client.ui.Composite;
-import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.Paintable;
-import com.vaadin.terminal.gwt.client.UIDL;
-import com.vaadin.terminal.gwt.client.ui.dd.VDragEvent;
-import com.vaadin.terminal.gwt.client.ui.dd.VDropHandler;
-import com.vaadin.terminal.gwt.client.ui.dd.VHasDropHandler;
-
-public class VMyDropTarget extends Composite implements VHasDropHandler,
-        VDropHandler, Paintable {
-
-    private ApplicationConnection client;
-
-    public void dragEnter(VDragEvent drag) {
-    }
-
-    public void dragLeave(VDragEvent drag) {
-        // TODO Auto-generated method stub
-    }
-
-    public void dragOver(VDragEvent currentDrag) {
-        // TODO Auto-generated method stub
-    }
-
-    public boolean drop(VDragEvent drag) {
-        // TODO Auto-generated method stub
-        // return true to tell DDManager do server visit
-        return false;
-    }
-
-    public Paintable getPaintable() {
-        // Drophandler implemented by Paintable itself
-        return this;
-    }
-
-    public VDropHandler getDropHandler() {
-        // Drophandler implemented by Paintable itself
-        return this;
-    }
-
-    public ApplicationConnection getApplicationConnection() {
-        return client;
-    }
-
-    public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
-        this.client = client;
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/debug/DebugWindowPresent.html b/tests/src/com/vaadin/tests/debug/DebugWindowPresent.html
deleted file mode 100644
index d396c1778e..0000000000
--- a/tests/src/com/vaadin/tests/debug/DebugWindowPresent.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>CssLayoutRemoveComponent</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">CssLayoutRemoveComponent</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.debug.DebugWindowPresent?restartApplication&amp;debug</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementPresent</td>
-	<td>vaadin=runcomvaadintestsdebugDebugWindowPresent::Root/VDebugConsole[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.debug.DebugWindowPresent?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>vaadin=runcomvaadintestsdebugDebugWindowPresent::Root/VDebugConsole[0]</td>
-	<td></td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/debug/DebugWindowPresent.java b/tests/src/com/vaadin/tests/debug/DebugWindowPresent.java
deleted file mode 100644
index 3e04d27628..0000000000
--- a/tests/src/com/vaadin/tests/debug/DebugWindowPresent.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.vaadin.tests.debug;
-
-import com.vaadin.tests.components.TestBase;
-
-public class DebugWindowPresent extends TestBase {
-
-    @Override
-    protected void setup() {
-        // Nothing to set up
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The debug window should be present with &debug present in the url, but not othervise";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return Integer.valueOf(7555);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/gwtadapter/applicationconnection/URLGeneration.java b/tests/src/com/vaadin/tests/gwtadapter/applicationconnection/URLGeneration.java
deleted file mode 100644
index 0ccc455379..0000000000
--- a/tests/src/com/vaadin/tests/gwtadapter/applicationconnection/URLGeneration.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.vaadin.tests.gwtadapter.applicationconnection;
-
-import static org.junit.Assert.assertEquals;
-
-import org.junit.Test;
-
-import com.vaadin.terminal.gwt.client.ApplicationConnection;
-
-public class URLGeneration {
-
-    private static final String[] URIS = new String[] {
-            "http://demo.vaadin.com/", //
-            "https://demo.vaadin.com/",
-            "http://demo.vaadin.com/foo",
-            "http://demo.vaadin.com/foo?f",
-            "http://demo.vaadin.com/foo?f=1",
-            "http://demo.vaadin.com:1234/foo?a",
-            "http://demo.vaadin.com:1234/foo#frag?fakeparam",
-            // Jetspeed
-            "http://localhost:8080/jetspeed/portal/_ns:Z3RlbXBsYXRlLXRvcDJfX3BhZ2UtdGVtcGxhdGVfX2RwLTFfX1AtMTJjNTRkYjdlYjUtMTAwMDJ8YzB8ZDF8aVVJREx8Zg__",
-            // Liferay generated url
-            "http://vaadin.com/directory?p_p_id=Directory_WAR_Directory&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=UIDL&p_p_cacheability=cacheLevelPage&p_p_col_id=row-1&p_p_col_count=1",
-
-    };
-    private static final String[] URIS_WITH_ABCD_PARAM = new String[] {
-            "http://demo.vaadin.com/?a=b&c=d",
-            "https://demo.vaadin.com/?a=b&c=d",
-            "http://demo.vaadin.com/foo?a=b&c=d",
-            "http://demo.vaadin.com/foo?f&a=b&c=d",
-            "http://demo.vaadin.com/foo?f=1&a=b&c=d",
-            "http://demo.vaadin.com:1234/foo?a&a=b&c=d",
-            "http://demo.vaadin.com:1234/foo?a=b&c=d#frag?fakeparam",
-            "http://localhost:8080/jetspeed/portal/_ns:Z3RlbXBsYXRlLXRvcDJfX3BhZ2UtdGVtcGxhdGVfX2RwLTFfX1AtMTJjNTRkYjdlYjUtMTAwMDJ8YzB8ZDF8aVVJREx8Zg__?a=b&c=d",
-            "http://vaadin.com/directory?p_p_id=Directory_WAR_Directory&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=UIDL&p_p_cacheability=cacheLevelPage&p_p_col_id=row-1&p_p_col_count=1&a=b&c=d",
-
-    };
-
-    private static final String[] URIS_WITH_ABCD_PARAM_AND_FRAGMENT = new String[] {
-            "http://demo.vaadin.com/?a=b&c=d#fragment",
-            "https://demo.vaadin.com/?a=b&c=d#fragment",
-            "http://demo.vaadin.com/foo?a=b&c=d#fragment",
-            "http://demo.vaadin.com/foo?f&a=b&c=d#fragment",
-            "http://demo.vaadin.com/foo?f=1&a=b&c=d#fragment",
-            "http://demo.vaadin.com:1234/foo?a&a=b&c=d#fragment",
-            "",
-            "http://localhost:8080/jetspeed/portal/_ns:Z3RlbXBsYXRlLXRvcDJfX3BhZ2UtdGVtcGxhdGVfX2RwLTFfX1AtMTJjNTRkYjdlYjUtMTAwMDJ8YzB8ZDF8aVVJREx8Zg__?a=b&c=d#fragment",
-            "http://vaadin.com/directory?p_p_id=Directory_WAR_Directory&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=UIDL&p_p_cacheability=cacheLevelPage&p_p_col_id=row-1&p_p_col_count=1&a=b&c=d#fragment",
-
-    };
-
-    @Test
-    public void testParameterAdding() {
-        for (int i = 0; i < URIS.length; i++) {
-            // Adding nothing
-            assertEquals(URIS[i],
-                    ApplicationConnection.addGetParameters(URIS[i], ""));
-
-            // Adding a=b&c=d
-            assertEquals(URIS_WITH_ABCD_PARAM[i],
-                    ApplicationConnection.addGetParameters(URIS[i], "a=b&c=d"));
-
-            // Fragments
-            if (URIS_WITH_ABCD_PARAM_AND_FRAGMENT[i].length() > 0) {
-                assertEquals(
-                        URIS_WITH_ABCD_PARAM_AND_FRAGMENT[i],
-                        ApplicationConnection.addGetParameters(URIS[i]
-                                + "#fragment", "a=b&c=d"));
-
-                // Empty fragment
-                assertEquals(URIS_WITH_ABCD_PARAM_AND_FRAGMENT[i].replace(
-                        "#fragment", "#"),
-                        ApplicationConnection.addGetParameters(URIS[i] + "#",
-                                "a=b&c=d"));
-            }
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/gwtadapter/componentlocator/TestDetachedNotPresent.html b/tests/src/com/vaadin/tests/gwtadapter/componentlocator/TestDetachedNotPresent.html
deleted file mode 100644
index 24e5e992ca..0000000000
--- a/tests/src/com/vaadin/tests/gwtadapter/componentlocator/TestDetachedNotPresent.html
+++ /dev/null
@@ -1,62 +0,0 @@
-
-<?xml version="1.0" encoding="UTF-8"?> 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
-<head profile="http://selenium-ide.openqa.org/profiles/test-case"> 
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
-<link rel="selenium.base" href="" /> 
-<title>New Test</title> 
-</head> 
-<body> 
-<table cellpadding="1" cellspacing="1" border="1"> 
-<thead> 
-<tr><td rowspan="1" colspan="3">New Test</td></tr> 
-</thead><tbody> 
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
-	<td>40,10</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
-	<td>29,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
-	<td>103,3</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item1</td>
-	<td>34,6</td>
-</tr>
-<tr>
-	<td>contextmenu</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementPresent</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
-	<td>15,8</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
-	<td>37,9</td>
-</tr>
-<tr>
-	<td>assertElementNotPresent</td>
-	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
-	<td>15,8</td>
-</tr>
-</tbody></table> 
-</body> 
-</html> 
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/integration/IntegrationTestApplication.java b/tests/src/com/vaadin/tests/integration/IntegrationTestApplication.java
deleted file mode 100644
index c61d23ae8d..0000000000
--- a/tests/src/com/vaadin/tests/integration/IntegrationTestApplication.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.vaadin.tests.integration;
-
-import com.vaadin.Application;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.terminal.ClassResource;
-import com.vaadin.terminal.Resource;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-public class IntegrationTestApplication extends Application {
-
-    @Override
-    public void init() {
-        Window window = new Window("Vaadin Application");
-        setMainWindow(window);
-
-        final Table table = new Table();
-        table.addContainerProperty("icon", Resource.class, null);
-        table.setItemIconPropertyId("icon");
-        table.addContainerProperty("country", String.class, null);
-        table.setRowHeaderMode(Table.ROW_HEADER_MODE_ICON_ONLY);
-        table.setImmediate(true);
-        table.setSelectable(true);
-        table.setVisibleColumns(new Object[] { "country" });
-        window.addComponent(table);
-
-        Item item = table.addItem("FI");
-        item.getItemProperty("icon")
-                .setValue(new ClassResource("fi.gif", this));
-        item.getItemProperty("country").setValue("Finland");
-        item = table.addItem("SE");
-        item.getItemProperty("icon")
-                .setValue(new ClassResource("se.gif", this));
-        item.getItemProperty("country").setValue("Sweden");
-
-        final Label selectedLabel = new Label();
-        table.addListener(new ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                selectedLabel.setValue(table.getValue());
-            }
-        });
-        window.addComponent(selectedLabel);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/integration/JSR286PortletApplication.java b/tests/src/com/vaadin/tests/integration/JSR286PortletApplication.java
deleted file mode 100644
index 57ee762913..0000000000
--- a/tests/src/com/vaadin/tests/integration/JSR286PortletApplication.java
+++ /dev/null
@@ -1,160 +0,0 @@
-package com.vaadin.tests.integration;
-
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.EventRequest;
-import javax.portlet.EventResponse;
-import javax.portlet.PortletMode;
-import javax.portlet.PortletRequest;
-import javax.portlet.PortletURL;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-import javax.portlet.ResourceRequest;
-import javax.portlet.ResourceResponse;
-import javax.portlet.WindowState;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.terminal.gwt.server.PortletApplicationContext2;
-import com.vaadin.terminal.gwt.server.PortletApplicationContext2.PortletListener;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Window.Notification;
-
-/**
- * Adapted from old PortletDemo to support integration testing.
- */
-public class JSR286PortletApplication extends Application {
-
-    Window main = new Window();
-    TextField tf = new TextField("Some value");
-    Label userInfo = new Label();
-    Link portletEdit = new Link();
-    Link portletMax = new Link();
-    Link someAction = null;
-
-    @Override
-    public void init() {
-        main = new Window();
-        setMainWindow(main);
-
-        userInfo.setCaption("User info");
-        userInfo.setContentMode(Label.CONTENT_PREFORMATTED);
-        main.addComponent(userInfo);
-
-        tf.setEnabled(false);
-        tf.setImmediate(true);
-        main.addComponent(tf);
-
-        portletEdit.setEnabled(false);
-        main.addComponent(portletEdit);
-        portletMax.setEnabled(false);
-        main.addComponent(portletMax);
-
-        if (getContext() instanceof PortletApplicationContext2) {
-            PortletApplicationContext2 ctx = (PortletApplicationContext2) getContext();
-            ctx.addPortletListener(this, new DemoPortletListener());
-        } else {
-            getMainWindow().showNotification("Not inited via Portal!",
-                    Notification.TYPE_ERROR_MESSAGE);
-        }
-
-    }
-
-    private class DemoPortletListener implements PortletListener {
-
-        public void handleActionRequest(ActionRequest request,
-                ActionResponse response, Window window) {
-            main.addComponent(new Label("Action received"));
-        }
-
-        public void handleRenderRequest(RenderRequest request,
-                RenderResponse response, Window window) {
-            // Portlet up-and-running, enable stuff
-            portletEdit.setEnabled(true);
-            portletMax.setEnabled(true);
-
-            // Editable if we're in editmode
-            tf.setEnabled((request.getPortletMode() == PortletMode.EDIT));
-
-            // Show notification about current mode and state
-            getMainWindow().showNotification(
-                    "Portlet status",
-                    "Mode: " + request.getPortletMode() + " State: "
-                            + request.getWindowState(),
-                    Notification.TYPE_WARNING_MESSAGE);
-
-            // Display current user info
-            Map<?, ?> uinfo = (Map<?, ?>) request
-                    .getAttribute(PortletRequest.USER_INFO);
-            if (uinfo != null) {
-                String s = "";
-                for (Iterator<?> it = uinfo.keySet().iterator(); it.hasNext();) {
-                    Object key = it.next();
-                    Object val = uinfo.get(key);
-                    s += key + ": " + val + "\n";
-                }
-                if (request.isUserInRole("administrator")) {
-                    s += "(administrator)";
-                }
-                userInfo.setValue(s);
-            } else {
-                userInfo.setValue("-");
-            }
-
-            // Create Edit/Done link (actionUrl)
-            PortletURL url = response.createActionURL();
-            try {
-                url.setPortletMode((request.getPortletMode() == PortletMode.VIEW ? PortletMode.EDIT
-                        : PortletMode.VIEW));
-                portletEdit.setResource(new ExternalResource(url.toString()));
-                portletEdit
-                        .setCaption((request.getPortletMode() == PortletMode.VIEW ? "Edit"
-                                : "Done"));
-            } catch (Exception e) {
-                portletEdit.setEnabled(false);
-            }
-            // Create Maximize/Normal link (actionUrl)
-            url = response.createActionURL();
-            try {
-                url.setWindowState((request.getWindowState() == WindowState.NORMAL ? WindowState.MAXIMIZED
-                        : WindowState.NORMAL));
-                portletMax.setResource(new ExternalResource(url.toString()));
-                portletMax
-                        .setCaption((request.getWindowState() == WindowState.NORMAL ? "Maximize"
-                                : "Back to normal"));
-            } catch (Exception e) {
-                portletMax.setEnabled(false);
-            }
-
-            if (someAction == null) {
-                url = response.createActionURL();
-                try {
-                    someAction = new Link("An action", new ExternalResource(
-                            url.toString()));
-                    main.addComponent(someAction);
-                } catch (Exception e) {
-                    // Oops
-                    System.err.println("Could not create someAction: " + e);
-                }
-
-            }
-        }
-
-        public void handleEventRequest(EventRequest request,
-                EventResponse response, Window window) {
-            // events not used by this test
-        }
-
-        public void handleResourceRequest(ResourceRequest request,
-                ResourceResponse response, Window window) {
-            // nothing special to do here
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/integration/LiferayThemeDemo.java b/tests/src/com/vaadin/tests/integration/LiferayThemeDemo.java
deleted file mode 100644
index 4267a7ea91..0000000000
--- a/tests/src/com/vaadin/tests/integration/LiferayThemeDemo.java
+++ /dev/null
@@ -1,721 +0,0 @@
-package com.vaadin.tests.integration;
-
-import java.util.Date;
-import java.util.Iterator;
-import java.util.Locale;
-
-import com.vaadin.Application;
-import com.vaadin.event.Action;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.ui.AbstractSelect;
-import com.vaadin.ui.Accordion;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.InlineDateField;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.ListSelect;
-import com.vaadin.ui.MenuBar;
-import com.vaadin.ui.MenuBar.Command;
-import com.vaadin.ui.MenuBar.MenuItem;
-import com.vaadin.ui.NativeButton;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.PopupView;
-import com.vaadin.ui.Slider;
-import com.vaadin.ui.Slider.ValueOutOfBoundsException;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
-import com.vaadin.ui.TabSheet.Tab;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.TwinColSelect;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.VerticalSplitPanel;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Window.Notification;
-import com.vaadin.ui.themes.LiferayTheme;
-
-@SuppressWarnings("serial")
-public class LiferayThemeDemo extends Application {
-
-    @SuppressWarnings("deprecation")
-    private static final Date DATE = new Date(2009 - 1900, 6 - 1, 2);
-
-    private static final Resource ICON_GLOBE = new ThemeResource(
-            "../runo/icons/16/globe.png");
-    private static final Resource ICON_OK = new ThemeResource(
-            "../runo/icons/16/ok.png");
-
-    private Window main;
-    private VerticalLayout mainLayout;
-    private TabSheet tabs;
-
-    private Action.Handler handler = new Action.Handler() {
-
-        public void handleAction(Action action, Object sender, Object target) {
-            // NOP
-        }
-
-        public Action[] getActions(Object target, Object sender) {
-            return new Action[] {
-                    new Action("Open"),
-                    new Action("Delete", new ThemeResource(
-                            "../runo/icons/16/trash.png")) };
-        }
-    };
-
-    @Override
-    public void init() {
-        main = new Window("Vaadin Liferay Theme");
-        mainLayout = (VerticalLayout) main.getContent();
-        mainLayout.setMargin(false);
-        setMainWindow(main);
-
-        // setTheme("liferay");
-
-        buildMainView();
-    }
-
-    void buildMainView() {
-        mainLayout.setWidth("100%");
-        mainLayout.setHeight("400px");
-        mainLayout.addComponent(getTopMenu());
-
-        CssLayout margin = new CssLayout();
-        margin.setMargin(false, true, true, true);
-        margin.setSizeFull();
-        tabs = new TabSheet();
-        tabs.setSizeFull();
-        margin.addComponent(tabs);
-        mainLayout.addComponent(margin);
-        mainLayout.setExpandRatio(margin, 1);
-
-        tabs.addComponent(buildLabels());
-        tabs.addComponent(buildButtons());
-        tabs.addComponent(buildTextFields());
-        tabs.addComponent(buildSelects());
-        tabs.addComponent(buildDateFields());
-        tabs.addComponent(buildSliders());
-        tabs.addComponent(buildTabSheets());
-        tabs.addComponent(buildAccordions());
-        tabs.addComponent(buildPanels());
-        tabs.addComponent(buildTables());
-        tabs.addComponent(buildTrees());
-        tabs.addComponent(buildWindows());
-        tabs.addComponent(buildSplitPanels());
-        tabs.addComponent(buildNotifications());
-        tabs.addComponent(buildPopupViews());
-    }
-
-    Layout buildLabels() {
-        final GridLayout l = new GridLayout(2, 1);
-        l.setWidth("560px");
-        l.setSpacing(true);
-        l.setMargin(true);
-        l.setCaption("Labels");
-
-        l.addComponent(new Label("Normal Label", Label.CONTENT_XHTML));
-        l.addComponent(new Label(
-                "Lorem ipsum dolor sit amet, consectetur adipiscing elit."));
-        return l;
-    }
-
-    Layout buildButtons() {
-        GridLayout l = new GridLayout(3, 1);
-        l.setCaption("Buttons");
-        l.setMargin(true);
-        l.setSpacing(true);
-
-        Button b = new Button("Normal Button");
-        b.setDescription("This is a tooltip!");
-        l.addComponent(b);
-
-        b = new NativeButton("Native Button");
-        b.setDescription("<h2><img src=\"/html/VAADIN/themes/runo/icons/16/globe.png\"/>A richtext tooltip</h2>"
-                + "<ul>"
-                + "<li>HTML formatting</li><li>Images<br/>"
-                + "</li><li>etc...</li></ul>");
-        l.addComponent(b);
-
-        b = new CheckBox("Checkbox");
-        l.addComponent(b);
-
-        b = new Button("Disabled");
-        b.setEnabled(false);
-        l.addComponent(b);
-
-        b = new NativeButton("Disabled");
-        b.setEnabled(false);
-        l.addComponent(b);
-
-        b = new CheckBox("Disabled");
-        b.setEnabled(false);
-        l.addComponent(b);
-
-        b = new Button("OK");
-        b.setIcon(ICON_OK);
-        l.addComponent(b);
-
-        b = new NativeButton("OK");
-        b.setIcon(ICON_OK);
-        l.addComponent(b);
-
-        b = new CheckBox("OK");
-        b.setIcon(ICON_OK);
-        l.addComponent(b);
-
-        b = new Button("Link Button");
-        b.setStyleName(LiferayTheme.BUTTON_LINK);
-        l.addComponent(b);
-
-        b = new NativeButton("Link Button");
-        b.setStyleName(LiferayTheme.BUTTON_LINK);
-        l.addComponent(b);
-
-        l.newLine();
-
-        b = new Button("Link Button");
-        b.setIcon(ICON_OK);
-        b.setStyleName(LiferayTheme.BUTTON_LINK);
-        l.addComponent(b);
-
-        b = new NativeButton("Link Button");
-        b.setIcon(ICON_OK);
-        b.setStyleName(LiferayTheme.BUTTON_LINK);
-        l.addComponent(b);
-
-        return l;
-    }
-
-    Layout buildTextFields() {
-        GridLayout l = new GridLayout(2, 1);
-        l.setCaption("Text fields");
-        l.setMargin(true);
-        l.setSpacing(true);
-        l.setWidth("400px");
-        l.setColumnExpandRatio(0, 1);
-
-        l.addComponent(new Label("Normal TextField", Label.CONTENT_XHTML));
-        TextField tf = new TextField();
-        tf.setInputPrompt("Enter text");
-        l.addComponent(tf);
-
-        l.addComponent(new Label("Normal TextArea", Label.CONTENT_XHTML));
-
-        tf = new TextField();
-        tf.setHeight("5em");
-        tf.setInputPrompt("Enter text");
-        l.addComponent(tf);
-
-        return l;
-    }
-
-    Layout buildSelects() {
-        VerticalLayout l = new VerticalLayout();
-        l.setCaption("Selects");
-        l.setMargin(true);
-        l.setSpacing(true);
-
-        HorizontalLayout hl = new HorizontalLayout();
-        hl.setSpacing(true);
-        hl.setMargin(true, false, false, false);
-        l.addComponent(hl);
-
-        AbstractSelect cb = new ComboBox();
-        AbstractSelect nat = new NativeSelect();
-        AbstractSelect list = new ListSelect();
-        AbstractSelect twincol = new TwinColSelect();
-
-        for (int i = 0; i < 50; i++) {
-            cb.addItem("Item " + i);
-            nat.addItem("Item " + i);
-            list.addItem("Item " + i);
-            twincol.addItem("Item " + i);
-        }
-
-        hl.addComponent(cb);
-        hl.addComponent(nat);
-        hl.addComponent(list);
-        hl.addComponent(twincol);
-
-        return l;
-    }
-
-    Layout buildDateFields() {
-        VerticalLayout l = new VerticalLayout();
-        l.setCaption("Date fields");
-        l.setMargin(true);
-        l.setSpacing(true);
-
-        HorizontalLayout hl = new HorizontalLayout();
-        hl.setSpacing(true);
-        hl.setMargin(true, false, false, false);
-        l.addComponent(hl);
-
-        DateField df = new DateField();
-        df.setValue(DATE);
-        df.setResolution(DateField.RESOLUTION_MIN);
-        hl.addComponent(df);
-
-        df = new InlineDateField();
-        df.setLocale(new Locale("fi", "FI"));
-        df.setShowISOWeekNumbers(true);
-        df.setValue(DATE);
-        df.setResolution(DateField.RESOLUTION_DAY);
-        hl.addComponent(df);
-
-        df = new InlineDateField();
-        df.setValue(DATE);
-        df.setResolution(DateField.RESOLUTION_YEAR);
-        hl.addComponent(df);
-
-        return l;
-    }
-
-    Layout buildTabSheets() {
-        VerticalLayout l = new VerticalLayout();
-        l.setCaption("Tabs");
-        l.setMargin(true);
-        l.setSpacing(true);
-        l.setWidth("400px");
-
-        CheckBox closable = new CheckBox("Closable tabs");
-        closable.setImmediate(true);
-        l.addComponent(closable);
-
-        final TabSheet ts = new TabSheet();
-        ts.setHeight("100px");
-        l.addComponent(ts);
-
-        for (int i = 1; i < 10; i++) {
-            Tab t = ts.addTab(new Label(), "Tab " + i);
-            if (i % 2 == 0) {
-                t.setIcon(ICON_GLOBE);
-            }
-            if (i == 2) {
-                t.setEnabled(false);
-            }
-        }
-
-        closable.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                Iterator<Component> it = ts.getComponentIterator();
-                for (; it.hasNext();) {
-                    Component c = it.next();
-                    ts.getTab(c).setClosable(event.getButton().booleanValue());
-                }
-            }
-        });
-
-        return l;
-    }
-
-    Layout buildPanels() {
-        GridLayout l = new GridLayout(2, 1);
-        l.setCaption("Panels");
-        l.setMargin(true);
-        l.setSpacing(true);
-        l.setWidth("700px");
-        l.setColumnExpandRatio(0, 2);
-        l.setColumnExpandRatio(1, 5);
-
-        l.addComponent(new Label("Normal Panel", Label.CONTENT_XHTML));
-
-        Panel p = new Panel("Normal Panel");
-        p.setHeight("100px");
-        p.addComponent(new Label("Panel content"));
-        l.addComponent(p);
-
-        l.addComponent(new Label(
-                "Light Style (<code>LiferayTheme.PANEL_LIGHT</code>)",
-                Label.CONTENT_XHTML));
-
-        Panel p2 = new Panel("Light Style Panel");
-        p2.setStyleName(LiferayTheme.PANEL_LIGHT);
-        p2.addComponent(new Label("Panel content"));
-        l.addComponent(p2);
-
-        return l;
-    }
-
-    Layout buildTables() {
-        GridLayout l = new GridLayout(1, 1);
-        l.setCaption("Tables");
-        l.setMargin(true);
-        l.setSpacing(true);
-
-        Table t = new Table();
-        t.setWidth("700px");
-        t.setPageLength(4);
-        t.setSelectable(true);
-        t.setColumnCollapsingAllowed(true);
-        t.setColumnReorderingAllowed(true);
-        t.addActionHandler(handler);
-
-        t.addContainerProperty("First", String.class, null, "First",
-                ICON_GLOBE, Table.ALIGN_RIGHT);
-        t.addContainerProperty("Second", String.class, null);
-        t.addContainerProperty("Third", String.class, null);
-        t.addContainerProperty("Fourth", TextField.class, null);
-        t.setColumnCollapsed("Fourth", true);
-
-        int sum = 0;
-        for (int j = 0; j < 100; j++) {
-            t.addItem(new Object[] { j, "Bar value " + j,
-                    "Last column value " + j, new TextField() }, j);
-            sum += j;
-        }
-
-        t.setFooterVisible(true);
-        t.setColumnFooter("First", "" + sum);
-
-        l.addComponent(t);
-
-        return l;
-    }
-
-    Layout buildWindows() {
-        final CssLayout l = new CssLayout();
-        l.setCaption("Windows");
-
-        final Window w = new Window("Normal window");
-        w.setWidth("280px");
-        w.setHeight("180px");
-        w.setPositionX(40);
-        w.setPositionY(160);
-
-        final Window w2 = new Window("Window, no resize");
-        w2.setResizable(false);
-        w2.setWidth("280px");
-        w2.setHeight("180px");
-        w2.setPositionX(350);
-        w2.setPositionY(160);
-        w2.addComponent(new Label("<code>Window.setResizable(false)</code>",
-                Label.CONTENT_XHTML));
-
-        tabs.addListener(new TabSheet.SelectedTabChangeListener() {
-            public void selectedTabChange(SelectedTabChangeEvent event) {
-                if (event.getTabSheet().getSelectedTab() == l) {
-                    getMainWindow().addWindow(w);
-                    getMainWindow().addWindow(w2);
-                } else {
-                    getMainWindow().removeWindow(w);
-                    getMainWindow().removeWindow(w2);
-                }
-            }
-        });
-
-        return l;
-    }
-
-    Layout buildSplitPanels() {
-        final GridLayout l = new GridLayout(2, 1);
-        l.setCaption("Split panels");
-        l.setMargin(true);
-        l.setSpacing(true);
-        l.setWidth("700px");
-        l.setHeight("100%");
-        l.setColumnExpandRatio(1, 1);
-
-        CheckBox lockCheckBox = new CheckBox("Lock SplitPanels");
-        lockCheckBox.setImmediate(true);
-        l.addComponent(lockCheckBox, 1, 0);
-        l.newLine();
-
-        Label label = new Label("Normal SplitPanel", Label.CONTENT_XHTML);
-        label.setWidth(null);
-        l.addComponent(label);
-        final HorizontalSplitPanel sp = new HorizontalSplitPanel();
-        sp.setWidth("100%");
-        sp.setHeight("100px");
-        final VerticalSplitPanel sp2 = new VerticalSplitPanel();
-        sp2.setSizeFull();
-        sp.setSecondComponent(sp2);
-        l.addComponent(sp);
-
-        label = new Label(
-                "Small Style<br />(<code>LiferayTheme.SPLITPANEL_SMALL</code>)",
-                Label.CONTENT_XHTML);
-        label.setWidth(null);
-        l.addComponent(label);
-
-        final HorizontalSplitPanel sp3 = new HorizontalSplitPanel();
-        sp3.setStyleName(LiferayTheme.SPLITPANEL_SMALL);
-        sp3.setWidth("100%");
-        sp3.setHeight("100px");
-        final VerticalSplitPanel sp4 = new VerticalSplitPanel();
-        sp4.setStyleName(LiferayTheme.SPLITPANEL_SMALL);
-        sp4.setSizeFull();
-        sp3.setSecondComponent(sp4);
-        l.addComponent(sp3);
-
-        lockCheckBox.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                sp.setLocked(event.getButton().booleanValue());
-                sp2.setLocked(event.getButton().booleanValue());
-                sp3.setLocked(event.getButton().booleanValue());
-                sp4.setLocked(event.getButton().booleanValue());
-            }
-        });
-
-        return l;
-    }
-
-    Layout buildAccordions() {
-        final GridLayout l = new GridLayout(2, 1);
-        l.setCaption("Accordions");
-        l.setMargin(true);
-        l.setSpacing(true);
-        l.setWidth("700px");
-
-        Accordion a = new Accordion();
-        a.setWidth("100%");
-        a.setHeight("170px");
-        l.addComponent(a);
-
-        for (int i = 1; i < 5; i++) {
-            Tab t = a.addTab(new Label(), "Sheet " + i);
-            if (i % 2 == 0) {
-                t.setIcon(ICON_GLOBE);
-            }
-            if (i == 2) {
-                t.setEnabled(false);
-            }
-        }
-
-        return l;
-    }
-
-    Layout buildSliders() {
-        final GridLayout l = new GridLayout(2, 1);
-        l.setCaption("Sliders");
-        l.setMargin(true);
-        l.setSpacing(true);
-        l.setWidth("400px");
-        l.setColumnExpandRatio(0, 1);
-
-        l.addComponent(new Label("Horizontal Slider", Label.CONTENT_XHTML));
-        Slider s = new Slider();
-        s.setWidth("200px");
-        try {
-            s.setValue(50);
-        } catch (ValueOutOfBoundsException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-        l.addComponent(s);
-
-        l.addComponent(new Label("Vertical Slider", Label.CONTENT_XHTML));
-        s = new Slider();
-        s.setOrientation(Slider.ORIENTATION_VERTICAL);
-        s.setHeight("200px");
-        try {
-            s.setValue(50);
-        } catch (ValueOutOfBoundsException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-        l.addComponent(s);
-
-        return l;
-    }
-
-    Layout buildTrees() {
-        final GridLayout l = new GridLayout(1, 1);
-        l.setMargin(true);
-        l.setCaption("Trees");
-
-        Tree tree = new Tree();
-        l.addComponent(tree);
-        tree.addItem("Item 1");
-        tree.setItemIcon("Item 1", ICON_GLOBE);
-        tree.addItem("Child 1");
-        tree.setItemIcon("Child 1", ICON_GLOBE);
-        tree.setParent("Child 1", "Item 1");
-        tree.addItem("Child 2");
-        tree.setParent("Child 2", "Item 1");
-        tree.addItem("Child 3");
-        tree.setChildrenAllowed("Child 3", false);
-        tree.setItemIcon("Child 3", ICON_GLOBE);
-        tree.setParent("Child 3", "Item 1");
-        tree.addItem("Child 4");
-        tree.setChildrenAllowed("Child 4", false);
-        tree.setParent("Child 4", "Item 1");
-        tree.addItem("Item 2");
-        tree.addItem("Item 3");
-        tree.setItemIcon("Item 3", ICON_GLOBE);
-        tree.setChildrenAllowed("Item 3", false);
-        tree.addItem("Item 4");
-        tree.setChildrenAllowed("Item 4", false);
-
-        tree.addActionHandler(handler);
-
-        return l;
-    }
-
-    Layout buildNotifications() {
-        final GridLayout l = new GridLayout(2, 1);
-        l.setCaption("Notifications");
-        l.setMargin(true);
-        l.setSpacing(true);
-        l.setWidth("400px");
-        l.setColumnExpandRatio(0, 1);
-
-        final TextField title = new TextField("Notification caption");
-        title.setValue("Brown Fox!");
-        final TextField message = new TextField("Notification description");
-        message.setValue("Jumped over the lazy dog.");
-        message.setWidth("15em");
-
-        l.addComponent(new Label("<h3>Type</h3>", Label.CONTENT_XHTML));
-        l.addComponent(new Label("<h3>Preview</h3>", Label.CONTENT_XHTML));
-
-        l.addComponent(new Label("Humanized", Label.CONTENT_XHTML));
-        Button show = new Button("Humanized Notification",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        event.getButton()
-                                .getWindow()
-                                .showNotification((String) title.getValue(),
-                                        (String) message.getValue());
-
-                    }
-                });
-        l.addComponent(show);
-
-        l.addComponent(new Label("Warning", Label.CONTENT_XHTML));
-        show = new Button("Warning Notification", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                event.getButton()
-                        .getWindow()
-                        .showNotification((String) title.getValue(),
-                                (String) message.getValue(),
-                                Notification.TYPE_WARNING_MESSAGE);
-
-            }
-        });
-        l.addComponent(show);
-
-        l.addComponent(new Label("Error", Label.CONTENT_XHTML));
-        show = new Button("Error Notification", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                event.getButton()
-                        .getWindow()
-                        .showNotification((String) title.getValue(),
-                                (String) message.getValue(),
-                                Notification.TYPE_ERROR_MESSAGE);
-
-            }
-        });
-        l.addComponent(show);
-
-        l.addComponent(new Label("Tray", Label.CONTENT_XHTML));
-        show = new Button("Tray Notification", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                event.getButton()
-                        .getWindow()
-                        .showNotification((String) title.getValue(),
-                                (String) message.getValue(),
-                                Notification.TYPE_TRAY_NOTIFICATION);
-
-            }
-        });
-        l.addComponent(show);
-
-        l.addComponent(title);
-        l.addComponent(message);
-
-        return l;
-    }
-
-    Layout buildPopupViews() {
-        final GridLayout l = new GridLayout(1, 1);
-        l.setCaption("PopupViews");
-        l.setMargin(true);
-        l.setSpacing(true);
-        l.setWidth("400px");
-
-        Label content = new Label(
-                "Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
-        content.setWidth("200px");
-
-        PopupView pw = new PopupView("Click me!", content);
-        l.addComponent(pw);
-
-        return l;
-    }
-
-    MenuBar getTopMenu() {
-        MenuBar menubar = new MenuBar();
-        menubar.setWidth("100%");
-        final MenuBar.MenuItem file = menubar.addItem("File", null);
-        final MenuBar.MenuItem newItem = file.addItem("New", null);
-        file.addItem("Open file...", new ThemeResource(
-                "../runo/icons/16/folder.png"), null);
-        file.addSeparator();
-
-        newItem.addItem("File", null);
-        newItem.addItem("Folder", null);
-        newItem.addItem("Project...", null);
-
-        file.addItem("Close", null);
-        file.addItem("Close All", null);
-        file.addSeparator();
-
-        file.addItem("Save", null);
-        file.addItem("Save As...", null);
-        file.addItem("Save All", null);
-
-        final MenuBar.MenuItem edit = menubar.addItem("Edit", null);
-        edit.addItem("Undo", null);
-        edit.addItem("Redo", null).setEnabled(false);
-        edit.addSeparator();
-
-        edit.addItem("Cut", null);
-        edit.addItem("Copy", null);
-        edit.addItem("Paste", null);
-        edit.addSeparator();
-
-        final MenuBar.MenuItem find = edit.addItem("Find/Replace", null);
-
-        find.addItem("Google Search", new Command() {
-            public void menuSelected(MenuItem selectedItem) {
-                getMainWindow().open(
-                        new ExternalResource("http://www.google.com"));
-            }
-        });
-        find.addSeparator();
-        find.addItem("Find/Replace...", null);
-        find.addItem("Find Next", null);
-        find.addItem("Find Previous", null);
-
-        final MenuBar.MenuItem view = menubar.addItem("View",
-                new ThemeResource("../runo/icons/16/user.png"), null);
-        MenuItem statusBarItem = view.addItem("Show/Hide Status Bar", null);
-        statusBarItem.setCheckable(true);
-        statusBarItem.setChecked(true);
-        view.addItem("Customize Toolbar...", null);
-        view.addSeparator();
-
-        view.addItem("Actual Size", null);
-        view.addItem("Zoom In", null);
-        view.addItem("Zoom Out", null);
-
-        menubar.addItem("Help", null).setEnabled(false);
-
-        return menubar;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/integration/fi.gif b/tests/src/com/vaadin/tests/integration/fi.gif
deleted file mode 100755
index 8d3a191828..0000000000
Binary files a/tests/src/com/vaadin/tests/integration/fi.gif and /dev/null differ
diff --git a/tests/src/com/vaadin/tests/integration/se.gif b/tests/src/com/vaadin/tests/integration/se.gif
deleted file mode 100755
index 80f6285228..0000000000
Binary files a/tests/src/com/vaadin/tests/integration/se.gif and /dev/null differ
diff --git a/tests/src/com/vaadin/tests/layouts/AbsoluteLayoutAddRemove.java b/tests/src/com/vaadin/tests/layouts/AbsoluteLayoutAddRemove.java
deleted file mode 100644
index 6193fd238e..0000000000
--- a/tests/src/com/vaadin/tests/layouts/AbsoluteLayoutAddRemove.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbsoluteLayout;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-
-public class AbsoluteLayoutAddRemove extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Tests that addComponent() and removeComponent() works";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2915;
-    }
-
-    @Override
-    protected void setup() {
-        Layout main = getLayout();
-
-        final Label l = new Label("A Label");
-        final AbsoluteLayout al = new AbsoluteLayout();
-        al.setWidth("300px");
-        al.setHeight("200px");
-        main.addComponent(al);
-
-        final Button b = new Button("Add", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                if (l.getParent() == null) {
-                    al.addComponent(l);
-                    event.getButton().setCaption("Remove");
-                } else {
-                    al.removeComponent(l);
-                    event.getButton().setCaption("Add");
-                }
-
-            }
-
-        });
-        main.addComponent(b);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/CaptionsInLayouts.java b/tests/src/com/vaadin/tests/layouts/CaptionsInLayouts.java
deleted file mode 100644
index ec825a3404..0000000000
--- a/tests/src/com/vaadin/tests/layouts/CaptionsInLayouts.java
+++ /dev/null
@@ -1,277 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.terminal.UserError;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractField;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.FormLayout;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.NativeButton;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-public class CaptionsInLayouts extends TestBase {
-
-    private static final Object CAPTION = "CAPTION";
-    private static final Object CLASS = "C";
-    private static final Object WIDTH = "W";
-
-    private NativeSelect layoutSelect;
-    private Layout layout;
-    private VerticalLayout verticalLayout;
-    private HorizontalLayout horizontalLayout;
-    private GridLayout gridLayout;
-    private FormLayout formLayout;
-    private List<AbstractField> components = new ArrayList<AbstractField>();
-    private CssLayout cssLayout;
-    private HorizontalLayout layoutParent = new HorizontalLayout();
-
-    @Override
-    protected void setup() {
-        // setTheme("tests-tickets");
-        addComponent(createLayoutSelect());
-        addComponent(toggleRequired());
-        // addComponent(toggleCaptions());
-        addComponent(toggleError());
-        addComponent(toggleIcon());
-        addComponent(addCaptionText());
-        layoutParent.addComponent(new NativeButton("Button right of layout"));
-        addComponent(layoutParent);
-        addComponent(new NativeButton("Button below layout"));
-        createComponents();
-        layoutSelect.setValue(layoutSelect.getItemIds().iterator().next());
-    }
-
-    private Component addCaptionText() {
-        Button b = new Button("Add caption text");
-        b.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                prependCaptions("a");
-            }
-        });
-        return b;
-    }
-
-    protected void prependCaptions(String prepend) {
-        for (AbstractField c : components) {
-            c.setCaption(prepend + c.getCaption());
-        }
-
-    }
-
-    private Component toggleRequired() {
-        CheckBox requiredToggle = new CheckBox();
-        requiredToggle.setImmediate(true);
-        requiredToggle.setCaption("Required");
-        requiredToggle.addListener(new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                setRequired((Boolean) event.getProperty().getValue());
-            }
-        });
-        return requiredToggle;
-    }
-
-    private Component toggleIcon() {
-        CheckBox iconToggle = new CheckBox();
-        iconToggle.setImmediate(true);
-        iconToggle.setCaption("Icons");
-        iconToggle.addListener(new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                setIcon((Boolean) event.getProperty().getValue());
-            }
-        });
-        return iconToggle;
-    }
-
-    protected void setRequired(boolean value) {
-        for (AbstractField c : components) {
-            c.setRequired(value);
-        }
-
-    }
-
-    protected void setIcon(boolean value) {
-        for (AbstractField c : components) {
-            if (!value) {
-                c.setIcon(null);
-            } else {
-                c.setIcon(new ThemeResource("../runo/icons/16/ok.png"));
-            }
-        }
-
-    }
-
-    private Component toggleError() {
-        CheckBox errorToggle = new CheckBox();
-        errorToggle.setImmediate(true);
-        errorToggle.setCaption("Error");
-        errorToggle.addListener(new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                setError((Boolean) event.getProperty().getValue());
-            }
-        });
-        return errorToggle;
-    }
-
-    protected void setError(boolean value) {
-        for (AbstractField c : components) {
-            if (value) {
-                c.setComponentError(new UserError("error"));
-            } else {
-                c.setComponentError(null);
-
-            }
-        }
-
-    }
-
-    private void createComponents() {
-        TextField tfUndefWide = new TextField(
-                "Undefined wide text field with a very long caption, longer than the field and the layout. Lorem ipsum dolor sit amet.");
-        TextField tf100pxWide = new TextField(
-                "100 px wide text field with a very long caption, longer than 100px.");
-        tf100pxWide.setWidth("100px");
-
-        TextField tf500pxWide = new TextField(
-                "500 px wide text field with a very long caption, longer than 500px. Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
-        tf500pxWide.setWidth("500px");
-
-        components.add(tfUndefWide);
-        components.add(tf100pxWide);
-        components.add(tf500pxWide);
-
-    }
-
-    private void setLayout(Layout newLayout) {
-        if (layout == null) {
-            layoutParent.addComponent(newLayout, 0);
-        } else {
-            layoutParent.replaceComponent(layout, newLayout);
-        }
-        layout = newLayout;
-
-        for (Component c : components) {
-            if (c.getParent() != layout) {
-                layout.addComponent(c);
-            }
-        }
-
-    }
-
-    private Layout getLayout(String caption,
-            Class<? extends Layout> layoutClass, String width) {
-        Layout l;
-        if (layoutClass == VerticalLayout.class) {
-            if (verticalLayout == null) {
-                verticalLayout = new VerticalLayout();
-                verticalLayout.setStyleName("borders");
-            }
-            l = verticalLayout;
-        } else if (layoutClass == HorizontalLayout.class) {
-            if (horizontalLayout == null) {
-                horizontalLayout = new HorizontalLayout();
-                horizontalLayout.setStyleName("borders");
-            }
-            l = horizontalLayout;
-        } else if (layoutClass == GridLayout.class) {
-            if (gridLayout == null) {
-                gridLayout = new GridLayout();
-                gridLayout.setStyleName("borders");
-            }
-            l = gridLayout;
-        } else if (layoutClass == CssLayout.class) {
-            if (cssLayout == null) {
-                cssLayout = new CssLayout();
-                cssLayout.setStyleName("borders");
-            }
-            l = cssLayout;
-        } else if (layoutClass == FormLayout.class) {
-            if (formLayout == null) {
-                formLayout = new FormLayout();
-                formLayout.setStyleName("borders");
-            }
-            l = formLayout;
-        } else {
-            return null;
-        }
-
-        l.setCaption(caption);
-        if (width.equals("auto")) {
-            width = null;
-        }
-
-        l.setWidth(width);
-
-        // addComponent(l);
-
-        return l;
-    }
-
-    private Component createLayoutSelect() {
-        layoutSelect = new NativeSelect("Layout");
-        layoutSelect.addContainerProperty(CAPTION, String.class, "");
-        layoutSelect.addContainerProperty(CLASS, Class.class, "");
-        layoutSelect.addContainerProperty(WIDTH, String.class, "");
-        layoutSelect.setItemCaptionPropertyId(CAPTION);
-        layoutSelect.setNullSelectionAllowed(false);
-
-        for (Class<?> cls : new Class[] { HorizontalLayout.class,
-                VerticalLayout.class, GridLayout.class, CssLayout.class,
-                FormLayout.class }) {
-            for (String width : new String[] { "400px", "auto" }) {
-                Object id = layoutSelect.addItem();
-                Item i = layoutSelect.getItem(id);
-                i.getItemProperty(CAPTION).setValue(
-                        cls.getSimpleName() + ", " + width);
-                i.getItemProperty(CLASS).setValue(cls);
-                i.getItemProperty(WIDTH).setValue(width);
-            }
-
-        }
-        layoutSelect.setImmediate(true);
-        layoutSelect.addListener(new ValueChangeListener() {
-
-            @SuppressWarnings("unchecked")
-            public void valueChange(ValueChangeEvent event) {
-                Item i = layoutSelect.getItem(event.getProperty().getValue());
-
-                setLayout(getLayout((String) i.getItemProperty(CAPTION)
-                        .getValue(), (Class<? extends Layout>) i
-                        .getItemProperty(CLASS).getValue(), (String) i
-                        .getItemProperty(WIDTH).getValue()));
-            }
-        });
-
-        return layoutSelect;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Tests what happens when the caption changes in various layouts. Behavior should be consistent.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5424;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/ComplexGLColumnExpansionWithColSpan.html b/tests/src/com/vaadin/tests/layouts/ComplexGLColumnExpansionWithColSpan.html
deleted file mode 100644
index 403bb32a67..0000000000
--- a/tests/src/com/vaadin/tests/layouts/ComplexGLColumnExpansionWithColSpan.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>ComplexGLColumnExpansionWithColSpan</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">ComplexGLColumnExpansionWithColSpan</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.layouts.ComplexGLColumnExpansionWithColSpan?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsComplexGLColumnExpansionWithColSpan::/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>buttons-next-stacked-left</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/layouts/ComplexGLColumnExpansionWithColSpan.java b/tests/src/com/vaadin/tests/layouts/ComplexGLColumnExpansionWithColSpan.java
deleted file mode 100644
index 87b04ffcb0..0000000000
--- a/tests/src/com/vaadin/tests/layouts/ComplexGLColumnExpansionWithColSpan.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class ComplexGLColumnExpansionWithColSpan extends AbstractTestCase {
-    private int cols;
-
-    @Override
-    protected String getDescription() {
-        return "Buttons should stay stacked on left when clicking new button";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5227;
-    }
-
-    @Override
-    public void init() {
-        final VerticalLayout mainLayout = new VerticalLayout();
-
-        mainLayout.setSpacing(true);
-        mainLayout.setMargin(true);
-        mainLayout.setHeight(100, Sizeable.UNITS_PERCENTAGE);
-        mainLayout.setWidth(100, Sizeable.UNITS_PERCENTAGE);
-        setMainWindow(new Window("Vaadin Test", mainLayout));
-
-        cols = 1;
-        final GridLayout gl = new GridLayout(cols, 3);
-        gl.setWidth("1000px");
-        // textfield spreads across all cols
-        final TextField textfield = new TextField();
-        textfield.setWidth(100, Sizeable.UNITS_PERCENTAGE);
-        Button b1 = new Button("new button");
-        Button b2 = new Button("nothing");
-        gl.addComponent(textfield, 0, 0);
-        gl.addComponent(b1, 0, 1);
-        gl.addComponent(b2, 0, 2);
-        b1.setWidth(270, Sizeable.UNITS_PIXELS);
-        b2.setWidth(270, Sizeable.UNITS_PIXELS);
-        b1.addListener(new Button.ClickListener() {
-            public void buttonClick(Button.ClickEvent event) {
-                cols++;
-                gl.setColumns(cols);
-                Button b1 = new Button("new button" + cols);
-                Button b2 = new Button("nothing" + cols);
-                gl.addComponent(b1, cols - 1, 1);
-                gl.addComponent(b2, cols - 1, 2);
-                b1.setWidth(270, Sizeable.UNITS_PIXELS);
-                b2.setWidth(270, Sizeable.UNITS_PIXELS);
-                // adjust expand ratios...
-                if (cols > 0) {
-                    // next to last colum 0, last column 100
-                    gl.setColumnExpandRatio(cols - 2, 0);
-                    gl.setColumnExpandRatio(cols - 1, 100);
-                }
-                gl.removeComponent(textfield);
-                gl.addComponent(textfield, 0, 0, cols - 1, 0);
-            }
-        });
-        gl.setSizeFull();
-        mainLayout.addComponent(gl);
-        mainLayout.setExpandRatio(gl, 100);
-        Button restart = new Button("restart");
-        mainLayout.addComponent(restart);
-        restart.addListener(new Button.ClickListener() {
-            public void buttonClick(Button.ClickEvent event) {
-                mainLayout.getWindow().getApplication().close();
-            }
-        });
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/CssLayoutRemoveComponent.html b/tests/src/com/vaadin/tests/layouts/CssLayoutRemoveComponent.html
deleted file mode 100644
index 0c4c3ad12c..0000000000
--- a/tests/src/com/vaadin/tests/layouts/CssLayoutRemoveComponent.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>CssLayoutRemoveComponent</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">CssLayoutRemoveComponent</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.layouts.CssLayoutRemoveComponent?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsCssLayoutRemoveComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextPresent</td>
-	<td>Caption2</td>
-	<td></td>
-</tr>
-<tr>
-	<td>verifyTextNotPresent</td>
-	<td>Caption1</td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/layouts/CssLayoutRemoveComponent.java b/tests/src/com/vaadin/tests/layouts/CssLayoutRemoveComponent.java
deleted file mode 100644
index 4959e0cc3e..0000000000
--- a/tests/src/com/vaadin/tests/layouts/CssLayoutRemoveComponent.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.TextField;
-
-@SuppressWarnings("serial")
-public class CssLayoutRemoveComponent extends TestBase {
-
-    @Override
-    protected void setup() {
-        final CssLayout layout = new CssLayout();
-        final TextField tf = new TextField("Caption1");
-        Button b = new Button("Remove field ", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                layout.removeComponent(tf);
-            }
-
-        });
-        layout.addComponent(tf);
-        layout.addComponent(b);
-        layout.addComponent(new TextField("Caption2"));
-        layout.addComponent(new TextField("Caption3"));
-
-        addComponent(layout);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Clicking on the button should remove one text field but other textfields and their captions should stay intact.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5778;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/CssLayoutRemoveComponentWithCaption.java b/tests/src/com/vaadin/tests/layouts/CssLayoutRemoveComponentWithCaption.java
deleted file mode 100644
index 946e778ead..0000000000
--- a/tests/src/com/vaadin/tests/layouts/CssLayoutRemoveComponentWithCaption.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.TextField;
-
-public class CssLayoutRemoveComponentWithCaption extends TestBase {
-
-    @Override
-    protected void setup() {
-        final CssLayout layout = new CssLayout();
-        final TextField tf = new TextField("Caption");
-        Button b = new Button("Remove field and add new", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                layout.removeComponent(tf);
-                addComponent(new TextField("new field"));
-
-            }
-
-        });
-        layout.addComponent(tf);
-        layout.addComponent(b);
-
-        addComponent(layout);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Clicking on the button should remove the text field and add a new 'new field' text field";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4204;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/CssLayoutSizeChangePropagation.java b/tests/src/com/vaadin/tests/layouts/CssLayoutSizeChangePropagation.java
deleted file mode 100644
index 0be605c795..0000000000
--- a/tests/src/com/vaadin/tests/layouts/CssLayoutSizeChangePropagation.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-
-public class CssLayoutSizeChangePropagation extends TestBase {
-
-    @Override
-    protected void setup() {
-        getLayout().setSizeFull();
-        final VerticalLayout sp = new VerticalLayout();
-
-        sp.setHeight("100%");
-
-        final CssLayout cssLayout = new CssLayout() {
-            @Override
-            protected String getCss(Component c) {
-                return "background-color: yellow;";
-            }
-        };
-        cssLayout.setSizeFull();
-        Label l = new Label("bö");
-        l.setSizeFull();
-        cssLayout.addComponent(l);
-
-        sp.addComponent(cssLayout);
-
-        Button button = new Button("b");
-        button.addListener(new ClickListener() {
-            boolean bool = true;
-
-            public void buttonClick(ClickEvent event) {
-                sp.setExpandRatio(cssLayout, bool ? 1 : 0);
-                bool = !bool;
-            }
-        });
-
-        sp.addComponent(button);
-        sp.setExpandRatio(button, 1);
-
-        getLayout().addComponent(sp);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Upper part of view should become yellow on button click.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4351;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/DeepComponentTrees.java b/tests/src/com/vaadin/tests/layouts/DeepComponentTrees.java
deleted file mode 100644
index 3a6414cff5..0000000000
--- a/tests/src/com/vaadin/tests/layouts/DeepComponentTrees.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.VerticalLayout;
-
-public class DeepComponentTrees extends TestBase {
-
-    private Panel root;
-
-    @Override
-    protected String getDescription() {
-        return "Vaadin should not choke on deep component trees. 15 levels should be minimum to survive.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-    private int i = 0;
-    private Class<?> currentValue = VerticalLayout.class;
-
-    @Override
-    protected void setup() {
-        Layout main = getLayout();
-        main.setSizeUndefined();
-        getMainWindow().getContent().setHeight(null);
-
-        Label l = new Label(
-                "This is a nice game to guess how many Layouts your FF2 (or any other browser) can deal with. Due to the worldwide attempt to decrease energy consumption, playing this game is only allowed above 60° longitude betwheen August and May (as excess energy consumed by you CPU is used to heat your room). It is considered wise to save all your work before starting the game.");
-
-        root = new Panel("Test box");
-        root.setWidth("600px");
-        root.setHeight("200px");
-        final Button b = new Button("Go try your luck with " + i + " layouts!");
-        b.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                FF2KILLER(i++);
-                b.setCaption("Go try your luck with " + i + " layouts!");
-            }
-
-        });
-
-        final ComboBox s = new ComboBox("Restart game with select:");
-        s.setNullSelectionAllowed(false);
-        s.addItem("-- Choose value --");
-        s.setValue("-- Choose value --");
-        s.addItem(VerticalLayout.class);
-        s.addItem(HorizontalLayout.class);
-        s.addItem(GridLayout.class);
-        s.addListener(new ComboBox.ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                Object value = s.getValue();
-                if (!value.equals("-- Choose value --")) {
-                    currentValue = (Class<?>) value;
-                    i = 0;
-                    s.setValue("-- Choose value --");
-                    b.setCaption("Go try your luck with " + i + " layouts!");
-                }
-
-            }
-        });
-        s.setImmediate(true);
-
-        main.addComponent(l);
-        main.addComponent(b);
-        main.addComponent(s);
-        main.addComponent(root);
-
-    }
-
-    private void FF2KILLER(int layouts) {
-        Layout layout = getTestLayout();
-        Layout r = layout;
-        for (int i = 0; i < layouts; i++) {
-            Layout lo = getTestLayout();
-            layout.addComponent(lo);
-            layout = lo;
-        }
-        layout.addComponent(new Label(
-                "FF did it! Vaadin, Mozilla and you win! Dare to try again?"));
-        root.setContent(r);
-    }
-
-    Layout getTestLayout() {
-        Layout l = new VerticalLayout();
-        if (currentValue == GridLayout.class) {
-            l = new GridLayout(1, 1);
-        } else {
-            try {
-                l = (Layout) currentValue.newInstance();
-            } catch (InstantiationException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            } catch (IllegalAccessException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-        }
-        return l;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/FormLayoutWithInvisibleComponent.java b/tests/src/com/vaadin/tests/layouts/FormLayoutWithInvisibleComponent.java
deleted file mode 100644
index e29c7559b3..0000000000
--- a/tests/src/com/vaadin/tests/layouts/FormLayoutWithInvisibleComponent.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.FormLayout;
-import com.vaadin.ui.TextField;
-
-public class FormLayoutWithInvisibleComponent extends TestBase {
-
-    private TextField messages;
-
-    @Override
-    protected String getDescription() {
-        return "There is an initial invisible text field below the checkbox. Checking the checkbox should show the field as a textarea (40x10) and also show its caption(\"Messages visible\") and a required error (*).";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2706;
-    }
-
-    @Override
-    protected void setup() {
-        FormLayout formLayout = new FormLayout();
-        CheckBox control = new CheckBox("Messages On/Off",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        messages.setVisible(event.getButton().booleanValue());
-                        messages.setRequired(true);
-                        messages.setCaption("Messages visible");
-                    }
-
-                });
-        control.setImmediate(true);
-        formLayout.addComponent(control);
-
-        messages = new TextField("Messages hidden");
-        messages.setRows(10);
-        messages.setColumns(40);
-        messages.setVisible(false);
-        messages.setEnabled(false);
-        formLayout.addComponent(messages);
-
-        addComponent(formLayout);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/GridLayoutCaptions.java b/tests/src/com/vaadin/tests/layouts/GridLayoutCaptions.java
deleted file mode 100644
index 08df953e66..0000000000
--- a/tests/src/com/vaadin/tests/layouts/GridLayoutCaptions.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Validator;
-import com.vaadin.data.util.BeanItem;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.DefaultFieldFactory;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.FormFieldFactory;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class GridLayoutCaptions extends TestBase {
-
-    class CustomForm extends Form {
-        private com.vaadin.ui.GridLayout layout;
-
-        private VerticalLayout wrapper = new VerticalLayout();
-        private CssLayout wrapper2 = new CssLayout();
-
-        private FormFieldFactory fff = new FormFieldFactory() {
-            public Field createField(Item item, Object propertyId,
-                    Component uiContext) {
-
-                if (propertyId.equals(DataPOJO.Fields.name.name())) {
-                    Field f = DefaultFieldFactory.get().createField(item,
-                            propertyId, uiContext);
-                    f.setCaption("This is a long caption for the name field");
-                    return f;
-
-                } else if (propertyId.equals(DataPOJO.Fields.hp.name())) {
-                    Field f = DefaultFieldFactory.get().createField(item,
-                            propertyId, uiContext);
-                    f.setCaption("This is a long caption for the HP field, but it has a VL as a wrapper");
-
-                    return f;
-
-                } else if (propertyId.equals(DataPOJO.Fields.place.name())) {
-                    Field f = DefaultFieldFactory.get().createField(item,
-                            propertyId, uiContext);
-                    f.setCaption("This is a long caption for the Place field, but it has a CSSLo as a wrapper");
-
-                    return f;
-
-                } else if (propertyId.equals(DataPOJO.Fields.price.name())) {
-                    Field f = DefaultFieldFactory.get().createField(item,
-                            propertyId, uiContext);
-                    f.setCaption("With size undefined the caption behaves like this...");
-                    f.setSizeFull();
-
-                    return f;
-
-                } else {
-                    return DefaultFieldFactory.get().createField(item,
-                            propertyId, uiContext);
-                }
-            }
-        };
-
-        public CustomForm() {
-            super();
-            layout = new GridLayout(3, 3);
-            layout.addComponent(wrapper, 1, 0);
-            layout.addComponent(wrapper2, 2, 0);
-            layout.setSpacing(true);
-
-            setLayout(layout);
-            setFormFieldFactory(fff);
-
-            Label l = new Label("A label with caption");
-            l.setCaption("A really long caption that is clipped");
-
-            layout.addComponent(l, 0, 2);
-
-            Label l2 = new Label("A wrapped label with caption");
-            l2.setCaption("A really long caption that is not clipped");
-
-            VerticalLayout vl = new VerticalLayout();
-            vl.addComponent(l2);
-
-            layout.addComponent(vl, 1, 2);
-
-        }
-
-        public void createErrors() {
-            Validator.InvalidValueException ive = new Validator.InvalidValueException(
-                    "Ipsum lipsum laarum lop... ");
-
-            for (Object propIDs : getItemDataSource().getItemPropertyIds()) {
-                ((TextField) getField(propIDs)).setComponentError(ive);
-
-            }
-
-        }
-
-        public void clearErrors() {
-            for (Object propIDs : getItemDataSource().getItemPropertyIds()) {
-                ((TextField) getField(propIDs)).setComponentError(null);
-
-            }
-        }
-
-        @Override
-        protected void attachField(Object propertyId, Field field) {
-
-            if (propertyId.equals(DataPOJO.Fields.name.name())) {
-                layout.addComponent(field, 0, 0);
-
-            } else if (propertyId.equals(DataPOJO.Fields.hp.name())) {
-                wrapper.removeAllComponents();
-                wrapper.addComponent(field);
-            } else if (propertyId.equals(DataPOJO.Fields.place.name())) {
-                wrapper2.removeAllComponents();
-                wrapper2.addComponent(field);
-            } else if (propertyId.equals(DataPOJO.Fields.price.name())) {
-                layout.addComponent(field, 0, 1);
-            }
-
-        }
-    }
-
-    public static class DataPOJO {
-
-        public enum Fields {
-            name, price, hp, place;
-        }
-
-        private String name;
-        private int price;
-        private String hp;
-        private String place;
-
-        public String getName() {
-            return name;
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public int getPrice() {
-            return price;
-        }
-
-        public void setPrice(int price) {
-            this.price = price;
-        }
-
-        public String getHp() {
-            return hp;
-        }
-
-        public void setHp(String hp) {
-            this.hp = hp;
-        }
-
-        public String getPlace() {
-            return place;
-        }
-
-        public void setPlace(String place) {
-            this.place = place;
-        }
-
-    }
-
-    @Override
-    protected void setup() {
-        Window mainWindow = new Window("Formlayoutcaptionboom Application");
-        Label label = new Label("Hello Vaadin user");
-        mainWindow.addComponent(label);
-        setMainWindow(mainWindow);
-
-        DataPOJO forDemo = new DataPOJO();
-
-        BeanItem<DataPOJO> bi = new BeanItem<DataPOJO>(forDemo);
-
-        final CustomForm aFormWithGl = new CustomForm();
-
-        aFormWithGl.setItemDataSource(bi);
-
-        mainWindow.addComponent(aFormWithGl);
-
-        Button b = new Button("Give me an error!", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                aFormWithGl.createErrors();
-
-            }
-        });
-        mainWindow.addComponent(b);
-
-        Button b2 = new Button("Get rid of an error!",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        aFormWithGl.clearErrors();
-
-                    }
-                });
-        mainWindow.addComponent(b2);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Captions in Gridlayout behaves differently than in other layouts";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5424;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/GridLayoutExpandRatioModification.java b/tests/src/com/vaadin/tests/layouts/GridLayoutExpandRatioModification.java
deleted file mode 100644
index e9d206009a..0000000000
--- a/tests/src/com/vaadin/tests/layouts/GridLayoutExpandRatioModification.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class GridLayoutExpandRatioModification extends TestBase implements
-        ClickListener {
-
-    private boolean isVisible = false;
-    private GridLayout mainLayout;
-    private VerticalLayout vl1;
-    private VerticalLayout vl2;
-    private Button button;
-
-    @Override
-    public void setup() {
-        Window main = new Window("The Main Window");
-        mainLayout = new GridLayout(3, 3);
-        main.setContent(mainLayout);
-        setMainWindow(main);
-
-        // The upper layout
-        vl1 = new VerticalLayout();
-        Label label1 = new Label("The upper/left layout");
-        vl1.addComponent(label1);
-
-        // Button that hides or shows the bottom part
-        button = new Button("show / hide", this);
-
-        // The bottom layout
-        vl2 = new VerticalLayout();
-        TextField tf = new TextField("The bottom/right field");
-        tf.setHeight("100%");
-        tf.setWidth("100%");
-        vl2.addComponent(tf);
-
-        // Add everything to the view
-        mainLayout.addComponent(vl1, 0, 0);
-        mainLayout.addComponent(button, 1, 1);
-        mainLayout.addComponent(vl2, 2, 2);
-
-        // Set expand ratios, hide lower
-        mainLayout.setRowExpandRatio(0, 1);
-        mainLayout.setColumnExpandRatio(0, 1);
-        mainLayout.setRowExpandRatio(2, 0);
-        mainLayout.setColumnExpandRatio(2, 0);
-
-        // Maximize everything
-        main.setSizeFull();
-        mainLayout.setSizeFull();
-        vl1.setSizeFull();
-        vl2.setSizeFull();
-    }
-
-    public void buttonClick(ClickEvent event) {
-        if (isVisible) {
-            mainLayout.setRowExpandRatio(2, 0);
-            mainLayout.setColumnExpandRatio(2, 0);
-            isVisible = false;
-        } else {
-            mainLayout.setRowExpandRatio(2, 1);
-            mainLayout.setColumnExpandRatio(2, 1);
-            isVisible = true;
-        }
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Changing the expand ratio should repaint the layout correctly. Changing from 0 to something else should render the previously invisible component";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2454;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/layouts/GridLayoutInsidePanel.java b/tests/src/com/vaadin/tests/layouts/GridLayoutInsidePanel.java
deleted file mode 100644
index 1c864fdb47..0000000000
--- a/tests/src/com/vaadin/tests/layouts/GridLayoutInsidePanel.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Panel;
-
-public class GridLayoutInsidePanel extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "The first Panel contains a VerticalLayout, which contains a GridLayout, which contains a Label. The second panel directly contains a GridLayout, which contains a Label. Both should be rendered in the same way.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2652;
-    }
-
-    @Override
-    protected void setup() {
-        {
-            GridLayout gl = new GridLayout(1, 1);
-            gl.setSizeUndefined();
-            gl.addComponent(new Label(
-                    "A label which defines the size of the GL"));
-
-            Panel p = new Panel("Panel 1");
-            ((Layout) p.getContent()).setMargin(false);
-            p.setSizeUndefined();
-            p.getContent().setSizeUndefined();
-
-            p.addComponent(gl);
-            addComponent(p);
-        }
-        {
-            GridLayout gl = new GridLayout(1, 1);
-            gl.setSizeUndefined();
-            gl.addComponent(new Label(
-                    "A label which defines the size of the GL"));
-
-            Panel p = new Panel("Panel 2", gl);
-            ((Layout) p.getContent()).setMargin(false);
-            p.setSizeUndefined();
-            p.getContent().setSizeUndefined();
-
-            addComponent(p);
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/GridLayoutInsidePanel2.java b/tests/src/com/vaadin/tests/layouts/GridLayoutInsidePanel2.java
deleted file mode 100644
index 8fb42948fc..0000000000
--- a/tests/src/com/vaadin/tests/layouts/GridLayoutInsidePanel2.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.Application;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Window;
-
-public class GridLayoutInsidePanel2 extends Application {
-
-    private Layout layout;
-
-    @Override
-    public void init() {
-        Window w = new Window("Main");
-        setMainWindow(w);
-        layout = (Layout) w.getContent();
-        GridLayout gl = new GridLayout(1, 1);
-        gl.setSizeUndefined();
-        Label l = new Label("This should be visible");
-        l.setWidth("100px");
-        gl.addComponent(l);
-
-        layout.setSizeUndefined();
-        layout.addComponent(gl);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/GridLayoutMoveComponent.html b/tests/src/com/vaadin/tests/layouts/GridLayoutMoveComponent.html
deleted file mode 100644
index cde4341030..0000000000
--- a/tests/src/com/vaadin/tests/layouts/GridLayoutMoveComponent.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.layouts.GridLayoutMoveComponent?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>all-left</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsGridLayoutMoveComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>label-right</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsGridLayoutMoveComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>label-button-right</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsGridLayoutMoveComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>label-button-textfield-right</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/layouts/GridLayoutMoveComponent.java b/tests/src/com/vaadin/tests/layouts/GridLayoutMoveComponent.java
deleted file mode 100644
index 265187e878..0000000000
--- a/tests/src/com/vaadin/tests/layouts/GridLayoutMoveComponent.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-
-public class GridLayoutMoveComponent extends TestBase {
-
-    @Override
-    protected void setup() {
-        final GridLayout grid = new GridLayout(2, 3);
-        grid.setCaption("Fixed size grid");
-        grid.setWidth("300px");
-        grid.setHeight("100px");
-        addComponent(grid);
-
-        final Label l = new Label("100% label");
-        final Button b = new Button("100px button");
-        b.setWidth("100px");
-        final TextField tf = new TextField("Undef textfield");
-
-        // Adding component to grid
-        grid.addComponent(l, 0, 0);
-        grid.addComponent(b, 0, 1);
-        grid.addComponent(tf, 0, 2);
-
-        addComponent(new Button("Shift label right",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        // Moving component from 0,0 -> 1,0
-                        grid.removeComponent(l);
-                        grid.addComponent(l, 1, 0);
-                    }
-                }));
-
-        addComponent(new Button("Shift button right",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        grid.removeComponent(b);
-                        grid.addComponent(b, 1, 1);
-                    }
-                }));
-
-        addComponent(new Button("Shift text field right",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        grid.removeComponent(tf);
-                        grid.addComponent(tf, 1, 2);
-                    }
-                }));
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Click the buttons below the GridLayout to move the components to the right. Should definitely work no matter what.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5525;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/GridLayoutNPE.java b/tests/src/com/vaadin/tests/layouts/GridLayoutNPE.java
deleted file mode 100644
index 48ecb5832a..0000000000
--- a/tests/src/com/vaadin/tests/layouts/GridLayoutNPE.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-
-public class GridLayoutNPE extends TestBase {
-
-    @Override
-    protected void setup() {
-        final VerticalLayout lo = new VerticalLayout();
-
-        final GridLayout gl = new GridLayout(2, 1);
-        gl.setSpacing(true);
-
-        final Label toRemove = new Label("First");
-        gl.addComponent(toRemove);
-        final Label toEdit = new Label("Second");
-        gl.addComponent(toEdit);
-
-        final Button b = new Button("remove 'First'");
-        final Button b2 = new Button("edit 'Second'");
-        b2.setVisible(false);
-
-        lo.addComponent(gl);
-        lo.addComponent(b);
-        lo.addComponent(b2);
-
-        b.addListener(new Button.ClickListener() {
-
-            public void buttonClick(Button.ClickEvent event) {
-                gl.removeComponent(toRemove);
-
-                // move another component to where the first was removed
-                // before rendering to the client
-                gl.removeComponent(toEdit);
-                // this could also be the result of removeAllComponents()
-                // followed by a loop of addComponent(c)
-                gl.addComponent(toEdit, 0, 0);
-
-                b.setVisible(false);
-                b2.setVisible(true);
-
-            }
-
-        });
-
-        b2.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                toEdit.setValue("Second (edited)");
-            }
-
-        });
-
-        addComponent(lo);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "VGridLayout throws an NPE, causing client side to crash";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4019;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/GridLayoutRemoveFinalRow.java b/tests/src/com/vaadin/tests/layouts/GridLayoutRemoveFinalRow.java
deleted file mode 100644
index 8689503332..0000000000
--- a/tests/src/com/vaadin/tests/layouts/GridLayoutRemoveFinalRow.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-
-/**
- * Tests removing rows from a GridLayout
- */
-@SuppressWarnings("serial")
-public class GridLayoutRemoveFinalRow extends TestBase {
-
-    @Override
-    protected void setup() {
-        getLayout().setSpacing(true);
-
-        final GridLayout layout = new GridLayout(2, 2);
-        layout.setSpacing(true);
-        layout.addComponent(new Label("Label1"));
-        layout.addComponent(new Label("Label2"));
-        layout.addComponent(new Label("Label3"));
-        layout.addComponent(new Label("Label4"));
-        addComponent(layout);
-
-        Button removeRowBtn = new Button("Remove row",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        layout.removeRow(0);
-                    }
-                });
-        addComponent(removeRowBtn);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Removing last row of a GridLayout throws a IllegalArgumentException";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4542;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/GridLayoutSpanExpansion.html b/tests/src/com/vaadin/tests/layouts/GridLayoutSpanExpansion.html
deleted file mode 100644
index 5237d5f49e..0000000000
--- a/tests/src/com/vaadin/tests/layouts/GridLayoutSpanExpansion.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.layouts.GridLayoutSpanExpansion?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/layouts/GridLayoutSpanExpansion.java b/tests/src/com/vaadin/tests/layouts/GridLayoutSpanExpansion.java
deleted file mode 100644
index 9753526a9e..0000000000
--- a/tests/src/com/vaadin/tests/layouts/GridLayoutSpanExpansion.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-
-public class GridLayoutSpanExpansion extends TestBase {
-
-    @Override
-    protected void setup() {
-        GridLayout heightSpan = new GridLayout(2, 2);
-        heightSpan.setHeight("200px");
-        heightSpan.setWidth("200px");
-        heightSpan.addComponent(new Label("1"), 0, 0);
-        heightSpan.addComponent(new Label("2"), 0, 1);
-        heightSpan.addComponent(new Label(
-                "This is a somewhat long text that spans over a few lines."),
-                1, 0, 1, 1);
-        heightSpan.setRowExpandRatio(1, 1);
-        addComponent(heightSpan);
-
-        GridLayout widthSpan = new GridLayout(2, 2);
-        widthSpan.setHeight("100px");
-        widthSpan.setWidth("200px");
-        widthSpan.addComponent(new Label(
-                "This is a somewhat long text that spans over both columns."),
-                0, 0, 1, 0);
-        Label label1 = new Label("1");
-        label1.setSizeUndefined();
-        widthSpan.addComponent(label1, 0, 1);
-        widthSpan.addComponent(new Label("2"), 1, 1);
-        widthSpan.setColumnExpandRatio(1, 1);
-        addComponent(widthSpan);
-
-        GridLayout multipleSpans = new GridLayout(3, 3);
-        multipleSpans.setWidth("400px");
-        multipleSpans.addComponent(new Button("Button 0,0"), 0, 0);
-        multipleSpans.addComponent(new Button("Button 1,0"), 1, 0);
-        multipleSpans.addComponent(
-                makeWideButton("A wide spanning button at 0,1"), 0, 1, 1, 1);
-        multipleSpans.addComponent(
-                makeWideButton("Another wide spanning button at 1,2"), 1, 2, 2,
-                2);
-        multipleSpans.setColumnExpandRatio(0, 1);
-        multipleSpans.setColumnExpandRatio(1, 3);
-        multipleSpans.setColumnExpandRatio(2, 2);
-        addComponent(multipleSpans);
-    }
-
-    private static Button makeWideButton(String caption) {
-        Button wideButton = new Button(caption);
-        wideButton.setWidth("100%");
-        return wideButton;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "In the two first examples, the 1 and the 2 should be close to each other because of the expansion ratios. In the final example, there should be little extra space in the left column, much extra space in the middle and some extra space to the right";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return Integer.valueOf(5868);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/GridLayoutWidthChange.html b/tests/src/com/vaadin/tests/layouts/GridLayoutWidthChange.html
deleted file mode 100644
index aaad92e56d..0000000000
--- a/tests/src/com/vaadin/tests/layouts/GridLayoutWidthChange.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>GridLayoutWidthChange</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">GridLayoutWidthChange</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.layouts.GridLayoutWidthChange</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsGridLayoutWidthChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/layouts/GridLayoutWidthChange.java b/tests/src/com/vaadin/tests/layouts/GridLayoutWidthChange.java
deleted file mode 100644
index 08bef51163..0000000000
--- a/tests/src/com/vaadin/tests/layouts/GridLayoutWidthChange.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.NativeButton;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-public class GridLayoutWidthChange extends TestBase {
-
-    private GridLayout generateLayout() {
-        VerticalLayout fields1 = new VerticalLayout();
-
-        NativeButton nb = new NativeButton("A button");
-        nb.setHeight("300px");
-        fields1.addComponent(nb);
-
-        VerticalLayout fields3 = new VerticalLayout();
-        fields3.addComponent(new TextField("field14"));
-
-        NativeButton b = new NativeButton("A big button");
-        b.setWidth("200px");
-        b.setHeight("200px");
-
-        GridLayout layout = new GridLayout(3, 2);
-        layout.setWidth("100%");
-        layout.addComponent(fields1, 0, 0, 0, 1);
-        layout.addComponent(b, 2, 1);
-
-        return layout;
-    }
-
-    @Override
-    protected void setup() {
-        final GridLayout layout1 = generateLayout();
-        final CustomComponent cc = new CustomComponent(layout1);
-        cc.setWidth("500px");
-        addComponent(cc);
-
-        Button testButton = new Button("Reduce GridLayout parent width",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        cc.setWidth((cc.getWidth() - 10) + "px");
-                    }
-
-                });
-        addComponent(testButton);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "A 100% wide GridLayout is wrapped inside a CustomComponent. When the width of the CustomComponent is reduced, the size of the GridLayout should be reduced accordingly. The Buttons should stay in place vertically and just move closer to each other horizontally.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/layouts/HiddenHorizontalLayout.java b/tests/src/com/vaadin/tests/layouts/HiddenHorizontalLayout.java
deleted file mode 100644
index 50cf41f095..0000000000
--- a/tests/src/com/vaadin/tests/layouts/HiddenHorizontalLayout.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-
-public class HiddenHorizontalLayout extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Test to verify that toggling layout visibility works properly.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3183;
-    }
-
-    @Override
-    public void setup() {
-
-        VerticalLayout vl = new VerticalLayout();
-        vl.setSizeFull();
-        getLayout().addComponent(vl);
-
-        final HorizontalLayout hl = new HorizontalLayout();
-        hl.setWidth("100%");
-        hl.setHeight("30px");
-        hl.addComponent(new Label("label1"));
-        hl.addComponent(new Label("label2"));
-        hl.addComponent(new Label("label3"));
-        hl.addComponent(new Label("label4"));
-        vl.addComponent(hl);
-
-        Label l = new Label("Steps to reproduce with Vaadin 6.0.1:<br/>"
-                + "1. set browser size smaller than fullscreen<br/>"
-                + "2. Refresh page with browser<br/>"
-                + "3. Click \"toggle layout visibility\"<br>"
-                + "4. Resize browser window to full <br/>"
-                + "5. Click \"toggle layout visibility\"<br/>",
-                Label.CONTENT_XHTML);
-        vl.addComponent(l);
-        Button b = new Button("toggle layout visibility",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        hl.setVisible(!hl.isVisible());
-                    }
-
-                });
-        vl.addComponent(b);
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/layouts/MovingComponentsWhileOldParentInvisible.html b/tests/src/com/vaadin/tests/layouts/MovingComponentsWhileOldParentInvisible.html
deleted file mode 100644
index 22d81ce11f..0000000000
--- a/tests/src/com/vaadin/tests/layouts/MovingComponentsWhileOldParentInvisible.html
+++ /dev/null
@@ -1,514 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>MovingComponentsWhileOldParentInvisible</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">MovingComponentsWhileOldParentInvisible</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.layouts.MovingComponentsWhileOldParentInvisible?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VAbsoluteLayout[0]/VAbsoluteLayout$AbsoluteWrapper[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>Label outside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VAbsoluteLayout[0]/VAbsoluteLayout$AbsoluteWrapper[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<!--Next component container-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
-	<td>10,14</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
-	<td>199,6</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VAccordion[0]/VAccordion$StackItem[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>Label outside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VAccordion[0]/VAccordion$StackItem[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<!--Next component container-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
-	<td>12,1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item2</td>
-	<td>186,11</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>Label outside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<!--Next component container-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
-	<td>14,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item3</td>
-	<td>199,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VOrderedLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>Label outside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VOrderedLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<!--Next component container-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
-	<td>14,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item4</td>
-	<td>199,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>Label outside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<!--Next component container-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
-	<td>14,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item5</td>
-	<td>199,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>Label outside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<!--Next component container-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
-	<td>14,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item6</td>
-	<td>199,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>Label outside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<!--Next component container-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
-	<td>14,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item7</td>
-	<td>199,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VSplitPanelHorizontal[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>Label outside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VSplitPanelHorizontal[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<!--Next component container-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
-	<td>14,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item8</td>
-	<td>199,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VOrderedLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>Label outside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VOrderedLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<!--Next component container-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
-	<td>14,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item9</td>
-	<td>199,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>Label outside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<!--Next component container-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
-	<td>14,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item10</td>
-	<td>199,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VSplitPanelVertical[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>Label outside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VSplitPanelVertical[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<!--Next component container-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
-	<td>14,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item11</td>
-	<td>199,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTabsheet[0]/VTabsheetPanel[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>Label outside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTabsheet[0]/VTabsheetPanel[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<!--Next component container-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
-	<td>14,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item12</td>
-	<td>199,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>Label outside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<!--Next component container-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
-	<td>14,5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item13</td>
-	<td>199,10</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VSplitPanelVertical[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
-	<td>Label outside the component container</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VSplitPanelVertical[0]/VLabel[0]</td>
-	<td>Label inside the component container</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/layouts/MovingComponentsWhileOldParentInvisible.java b/tests/src/com/vaadin/tests/layouts/MovingComponentsWhileOldParentInvisible.java
deleted file mode 100644
index d21ecdd575..0000000000
--- a/tests/src/com/vaadin/tests/layouts/MovingComponentsWhileOldParentInvisible.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.tests.VaadinClasses;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbsoluteLayout;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.CustomLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.LoginForm;
-import com.vaadin.ui.PopupView;
-import com.vaadin.ui.Window;
-
-public class MovingComponentsWhileOldParentInvisible extends TestBase {
-
-    private ComponentContainer cc = new AbsoluteLayout(); // initial dummy
-                                                          // contents
-    private Label lab;
-
-    @Override
-    protected void setup() {
-        lab = new Label("Label inside the component container");
-        lab.setWidth(null);
-
-        ComboBox componentContainerSelect = new ComboBox("Container") {
-            {
-                pageLength = 0;
-            }
-        };
-        componentContainerSelect.setDebugId("componentContainerSelect");
-        componentContainerSelect.setWidth("300px");
-        componentContainerSelect.setImmediate(true);
-        componentContainerSelect.setNullSelectionAllowed(false);
-        // componentContainer.addContainerProperty(CAPTION, String.class, "");
-        // componentContainer.addContainerProperty(CLASS, Class.class, "");
-
-        for (Class<? extends ComponentContainer> cls : VaadinClasses
-                .getComponentContainers()) {
-            if (cls == LoginForm.class || cls == CustomLayout.class
-                    || CustomComponent.class.isAssignableFrom(cls)
-                    || cls == PopupView.class || cls == Window.class) {
-                // Does not support addComponent
-                continue;
-            }
-            componentContainerSelect.addItem(cls);
-        }
-        componentContainerSelect.addListener(new ValueChangeListener() {
-
-            @SuppressWarnings("unchecked")
-            public void valueChange(ValueChangeEvent event) {
-                ComponentContainer oldCC = cc;
-                cc = createComponentContainer((Class<? extends ComponentContainer>) event
-                        .getProperty().getValue());
-                cc.addComponent(lab);
-
-                replaceComponent(oldCC, cc);
-            }
-        });
-
-        componentContainerSelect.setValue(componentContainerSelect.getItemIds()
-                .iterator().next());
-        Button but1 = new Button("Move in and out of component container",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        cc.setVisible(!cc.isVisible());
-                        if (!cc.isVisible()) {
-                            getLayout().addComponent(lab);
-                            lab.setValue(((String) lab.getValue()).replace(
-                                    "inside", "outside"));
-                        } else {
-                            cc.addComponent(lab);
-                            lab.setValue(((String) lab.getValue()).replace(
-                                    "outside", "inside"));
-                        }
-                    }
-                });
-
-        addComponent(componentContainerSelect);
-        addComponent(cc);
-        addComponent(but1);
-    }
-
-    protected ComponentContainer createComponentContainer(
-            Class<? extends ComponentContainer> value) {
-        try {
-            ComponentContainer cc = value.newInstance();
-            cc.setWidth("300px");
-            cc.setHeight("300px");
-            return cc;
-        } catch (InstantiationException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        } catch (IllegalAccessException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-        return null;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Client side layouts can easily have a bug where its internal data structures gets messed up when child components from it are moved forth and back when it is invisible (registered, but renders are ignored until becomes visible again). Things are especially easy to mess up when the layout uses wrapper widget over each component (like VOrderedLayout and VGridLayout does). This tests Vertical (Ordered), Grid and CssLayout.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5372;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/MovingInvisibleField.html b/tests/src/com/vaadin/tests/layouts/MovingInvisibleField.html
deleted file mode 100644
index 84c2809382..0000000000
--- a/tests/src/com/vaadin/tests/layouts/MovingInvisibleField.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.layouts.MovingInvisibleField?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>one-field-above-button</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingInvisibleField::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>one-field-below-button</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsMovingInvisibleField::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>one-field-above-button</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/layouts/MovingInvisibleField.java b/tests/src/com/vaadin/tests/layouts/MovingInvisibleField.java
deleted file mode 100644
index 23ae31d786..0000000000
--- a/tests/src/com/vaadin/tests/layouts/MovingInvisibleField.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-@SuppressWarnings("serial")
-public class MovingInvisibleField extends TestBase {
-
-    @Override
-    protected void setup() {
-        final VerticalLayout layout1 = new VerticalLayout();
-        final VerticalLayout layout2 = new VerticalLayout();
-
-        final TextField tfHidden = new TextField("Hidden text field caption",
-                "A hidden text field");
-        final TextField tfVisible = new TextField("Visible text field caption",
-                "A visible text field");
-        tfHidden.setVisible(false);
-        Button b = new Button("Move hidden textfield to other layout");
-        b.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                if (layout1.getComponentIndex(tfHidden) != -1) {
-                    layout2.addComponent(tfVisible);
-                    layout2.addComponent(tfHidden);
-                } else {
-                    layout1.addComponent(tfVisible);
-                    layout1.addComponent(tfHidden);
-                }
-
-            }
-
-        });
-
-        layout1.addComponent(tfVisible);
-        layout1.addComponent(tfHidden);
-
-        addComponent(layout1);
-        addComponent(b);
-        addComponent(layout2);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Above and below the button is a VerticalLayout. Initially the first one contains two components: a visiable and an invisible TextField. Click the button to move the TextFields to the second layout, both should be moved but only the visible rendered.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5278;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/layouts/OrderedLayoutBasics.java b/tests/src/com/vaadin/tests/layouts/OrderedLayoutBasics.java
deleted file mode 100644
index 620d33d43e..0000000000
--- a/tests/src/com/vaadin/tests/layouts/OrderedLayoutBasics.java
+++ /dev/null
@@ -1,1202 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.terminal.UserError;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.TextArea;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-public class OrderedLayoutBasics extends TestBase {
-
-    String valignName[] = new String[] { "top", "middle", "bottom" };
-
-    Set<AbstractOrderedLayout> layouts = new HashSet<AbstractOrderedLayout>();
-    private AbstractOrderedLayout layoutContainer;
-    private int suffix = 0;
-
-    @Override
-    protected String getDescription() {
-        return "Various layout tests for VerticalLayout and HorizontalLayout";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-    @Override
-    public void setup() {
-        getMainWindow().getContent().setHeight(null);
-
-        layoutContainer = new VerticalLayout();
-        createUI(layoutContainer);
-        addComponent(layoutContainer);
-    }
-
-    private void createUI(Layout layout) {
-        layout.addComponent(wrapLayout(layout_field_100pct_button_field(new HorizontalLayout())));
-        layout.addComponent(wrapLayout(layout_field_100pct_button_field(new VerticalLayout())));
-        layout.addComponent(wrapLayout(layout_overfilled(new HorizontalLayout())));
-        layout.addComponent(wrapLayout(layout_overfilled(new VerticalLayout())));
-        layout.addComponent(wrapLayout(layout_overfilled_dynamic_height(new HorizontalLayout())));
-        layout.addComponent(wrapLayout(layout_overfilled_dynamic_height(new VerticalLayout())));
-        layout.addComponent(wrapLayout(layout_symmetric_fields(new HorizontalLayout())));
-        layout.addComponent(wrapLayout(layout_symmetric_fields(new VerticalLayout())));
-        layout.addComponent(wrapLayout(layout_leftAndRight(new HorizontalLayout())));
-        layout.addComponent(wrapLayout(layout_leftAndRight(new VerticalLayout())));
-        layout.addComponent(wrapLayout(layout_fixed_filled(new HorizontalLayout())));
-        layout.addComponent(wrapLayout(layout_fixed_filled(new VerticalLayout())));
-        layout.addComponent(wrapLayout(layout_dynamic(new HorizontalLayout())));
-        layout.addComponent(wrapLayout(layout_dynamic(new VerticalLayout())));
-        layout.addComponent(wrapLayout(layout_labels(new HorizontalLayout())));
-        layout.addComponent(wrapLayout(layout_labels(new VerticalLayout())));
-        layout.addComponent(wrapLayout(layout_captions(new HorizontalLayout())));
-        layout.addComponent(wrapLayout(layout_captions(new VerticalLayout())));
-        layout.addComponent(wrapLayout(layout_captions_fixed_size(new HorizontalLayout())));
-        layout.addComponent(wrapLayout(layout_captions_fixed_size(new VerticalLayout())));
-        layout.addComponent(wrapLayout(layout_captions_fixed_size_and_relative_size(new HorizontalLayout())));
-        layout.addComponent(wrapLayout(layout_captions_fixed_size_and_relative_size(new VerticalLayout())));
-        layout.addComponent(wrapLayout(layout_captions_fixed_size_and_fixed_size(new HorizontalLayout())));
-        layout.addComponent(wrapLayout(layout_captions_fixed_size_and_fixed_size(new VerticalLayout())));
-        layout.addComponent(wrapLayout(layout_add_remove_components(new HorizontalLayout())));
-        layout.addComponent(wrapLayout(layout_add_remove_components(new VerticalLayout())));
-        layout.addComponent(wrapLayout(layout_pctFilled(new HorizontalLayout())));
-        layout.addComponent(wrapLayout(layout_pctFilled(new VerticalLayout())));
-        layout.addComponent(wrapLayout(layout_underFilled(new HorizontalLayout())));
-        layout.addComponent(wrapLayout(layout_underFilled(new VerticalLayout())));
-        layout.addComponent(wrapLayout(layout_basic_test(new HorizontalLayout())));
-        layout.addComponent(wrapLayout(layout_basic_test(new VerticalLayout())));
-    }
-
-    private Layout wrapLayout(Layout ol) {
-        Panel p = new Panel(ol);
-        p.setSizeUndefined();
-        p.setCaption(ol.getCaption());
-        ol.setCaption(null);
-
-        VerticalLayout l = new VerticalLayout();
-        l.setSizeUndefined();
-        l.addComponent(p);
-        // p.setWidth("600px");
-
-        if (ol instanceof AbstractOrderedLayout) {
-            layouts.add((AbstractOrderedLayout) ol);
-        }
-        return l;
-    }
-
-    /* LAYOUTS */
-
-    @SuppressWarnings({ "unused", "deprecation" })
-    private Layout layout1() {
-        HorizontalLayout ol = new HorizontalLayout();
-        ol.setHeight("200px");
-        ol.setWidth("");
-        ol.setCaption("Fixed height (200px) and dynamic width");
-
-        TextField tf = new TextField("100px high TextField, valign: bottom");
-        tf.setHeight("100px");
-        tf.setWidth("");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
-
-        Select s = new Select("100% high select");
-        s.setMultiSelect(true);
-        s.setHeight("100%");
-        s.setWidth("");
-        ol.addComponent(s);
-
-        s = new Select("200 px high select");
-        s.setMultiSelect(true);
-        s.setHeight("200px");
-        s.setWidth("");
-        ol.addComponent(s);
-
-        // tf = new TextField("100% high TextField, right/bottom");
-        // tf.setHeight("100%");
-        // tf.setWidth("");
-        // ol.addComponent(tf);
-        // ol.setComponentAlignment(tf, AlignmentHandler.ALIGNMENT_RIGHT,
-        // AlignmentHandler.ALIGNMENT_BOTTOM);
-
-        // tf = new TextField("100% high, 200px wide TextField");
-        // tf.setHeight("100%");
-        // tf.setWidth("200px");
-        // ol.addComponent(tf);
-
-        return ol;
-
-    }
-
-    @SuppressWarnings({ "unused", "deprecation" })
-    private Layout layout2() {
-        HorizontalLayout ol = new HorizontalLayout();
-        ol.setHeight("70px");
-        ol.setWidth("");
-        ol.setCaption("Fixed height (50px) and dynamic width");
-
-        TextField tf = new TextField(
-                "100px high TextField, valign: bottom, should be partly outside");
-        tf.setHeight("100px");
-        tf.setWidth("");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
-
-        tf = new TextField(
-                "100% high, 50px wide TextField, valign: bottom, should fill full height");
-        tf.setHeight("100%");
-        tf.setWidth("50px");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
-
-        Label l = new Label(
-                "100% high, 50px wide Label, valign: bottom, does not fill full height, only needed space");
-        tf.setHeight("100%");
-        tf.setWidth("50px");
-        ol.addComponent(l);
-        ol.setComponentAlignment(l, Alignment.BOTTOM_LEFT);
-
-        Select s = new Select("100% high select, should fit into layout");
-        s.setMultiSelect(true);
-        s.setHeight("100%");
-        s.setWidth("");
-        for (int i = 0; i < 10; i++) {
-            s.addItem(new Object());
-        }
-
-        ol.addComponent(s);
-
-        s = new Select("200 px high select, should be partly outside");
-        s.setMultiSelect(true);
-        s.setHeight("200px");
-        s.setWidth("");
-        ol.addComponent(s);
-
-        return ol;
-    }
-
-    @SuppressWarnings({ "unused", "deprecation" })
-    private Layout layout3() {
-        HorizontalLayout ol = new HorizontalLayout();
-        ol.setHeight("");
-        ol.setWidth("500px");
-        ol.setCaption("Fixed width (500px) and dynamic height");
-        TextField tf;
-
-        tf = new TextField("100px high TextField, valign: bottom");
-        tf.setHeight("100px");
-        tf.setWidth("100%");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
-
-        tf = new TextField("100px high TextField, valign: top");
-        tf.setHeight("100px");
-        tf.setWidth("100%");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.TOP_LEFT);
-
-        tf = new TextField("100% high, 50px wide TextField, valign: bottom");
-        tf.setHeight("100%");
-        tf.setWidth("50px");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
-
-        Label l = new Label(
-                "100% high, 50px wide Label, valign: bottom, does not fill full height, only needed space");
-        tf.setHeight("100%");
-        tf.setWidth("50px");
-        ol.addComponent(l);
-        ol.setComponentAlignment(l, Alignment.BOTTOM_LEFT);
-
-        Select s = new Select("100% high select, should fit into layout");
-        s.setMultiSelect(true);
-        s.setHeight("100%");
-        s.setWidth("100%");
-        for (int i = 0; i < 10; i++) {
-            s.addItem(new Object());
-        }
-
-        ol.addComponent(s);
-
-        s = new Select("200 px high select, should make the layout 200px high");
-        s.setMultiSelect(true);
-        s.setHeight("200px");
-        s.setWidth("100%");
-        ol.addComponent(s);
-
-        return ol;
-    }
-
-    @SuppressWarnings({ "unused", "deprecation" })
-    private Layout layout3New() {
-        HorizontalLayout ol = new HorizontalLayout();
-        ol.setHeight("300px");
-        // ol.setWidth("500px");
-        ol.setWidth("");
-        ol.setCaption("Dynamic width and fixed height(300px)");
-        TextField tf;
-
-        tf = new TextField("100px high TextField, valign: bottom");
-        tf.setHeight("100px");
-        tf.setWidth("100%");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
-
-        tf = new TextField("100px high TextField, valign: top");
-        tf.setHeight("100px");
-        tf.setWidth("100%");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.TOP_LEFT);
-
-        tf = new TextField("100% high, 50px wide TextField, valign: bottom");
-        tf.setHeight("100%");
-        tf.setWidth("50px");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
-
-        Label l = new Label(
-                "100% high, 50px wide Label, valign: bottom, does not fill full height, only needed space");
-        tf.setHeight("100%");
-        tf.setWidth("50px");
-        ol.addComponent(l);
-        ol.setComponentAlignment(l, Alignment.BOTTOM_LEFT);
-
-        Select s = new Select("100% high select, should fit into layout");
-        s.setMultiSelect(true);
-        s.setHeight("100%");
-        s.setWidth("100%");
-        for (int i = 0; i < 10; i++) {
-            s.addItem(new Object());
-        }
-
-        ol.addComponent(s);
-
-        s = new Select("200 px high select, should make the layout 200px high");
-        s.setMultiSelect(true);
-        s.setHeight("200px");
-        s.setWidth("100%");
-        ol.addComponent(s);
-
-        return ol;
-    }
-
-    @SuppressWarnings("unused")
-    private Layout layout4(AbstractOrderedLayout ol) {
-        // ol.setHeight("300px");
-        // ol.setWidth("500px");
-        ol.setMargin(true);
-        ol.setSpacing(true);
-        ol.setWidth("");
-        ol.setCaption("Dynamic width and dynamic height");
-        TextArea tf;
-
-        tf = new TextArea("100% high TextField");
-        tf.setCaption(null);
-        tf.setRequired(true);
-        tf.setValue("100% high Field");
-        tf.setHeight("100%");
-        tf.setWidth("100px");
-        tf.setRows(2);
-        ol.addComponent(tf);
-
-        tf = new TextArea("100% high TextField");
-        tf.setCaption("100% high TextField");
-        tf.setRequired(true);
-        tf.setValue("100% high Field");
-        tf.setHeight("100%");
-        tf.setWidth("100px");
-        tf.setRows(2);
-        ol.addComponent(tf);
-
-        for (int i = 1; i < 4; i++) {
-            int w = i * 100;
-            tf = new TextArea("Field " + i);
-            tf.setRows(2);
-            tf.setValue(w + "px high, " + w + "px wide TextField, valign: "
-                    + valignName[i % 3]);
-            tf.setWidth(w + "px");
-            tf.setHeight(w + "px");
-            ol.addComponent(tf);
-            if (i % 3 == 0) {
-                ol.setComponentAlignment(tf, Alignment.TOP_LEFT);
-            } else if (i % 3 == 1) {
-                ol.setComponentAlignment(tf, Alignment.MIDDLE_LEFT);
-            } else {
-                ol.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
-            }
-
-        }
-
-        tf = new TextArea("100% high TextField");
-        tf.setValue("100% high 100px wide");
-        tf.setRows(2);
-        tf.setHeight("100%");
-        tf.setWidth("100px");
-        ol.addComponent(tf);
-        return ol;
-    }
-
-    private Layout layout_field_100pct_button_field(AbstractOrderedLayout ol) {
-        ol.setHeight("500px");
-        ol.setWidth("916px");
-        ol.setMargin(false);
-        ol.setSpacing(true);
-
-        // ol.setWidth("");
-        ol.setCaption("Fixed width (" + ol.getWidth()
-                + "px) and fixed height (" + ol.getHeight()
-                + "px) / layout_field_100pct_button_field");
-        TextArea tf;
-
-        tf = new TextArea("300px x 300px Field");
-        // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
-        tf.setValue("300x300 field");
-        tf.setRows(2);
-        // tf.setSizeFull();
-        tf.setHeight("300px");
-        tf.setWidth("300px");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.TOP_LEFT);
-
-        Button b;
-        b = new Button("This is a 100%x50% valign middle button");
-        b.setSizeFull();
-        b.setHeight("50%");
-        ol.addComponent(b);
-        ol.setExpandRatio(b, 1.0f);
-        ol.setComponentAlignment(b, Alignment.MIDDLE_RIGHT);
-
-        tf = new TextArea("300px x 300px Field");
-        // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
-        tf.setValue("300x300 field");
-        tf.setRows(2);
-        // tf.setSizeFull();
-        tf.setHeight("300px");
-        tf.setWidth("300px");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
-        return ol;
-    }
-
-    private Layout layout_basic_test(AbstractOrderedLayout ol) {
-        ol.setHeight("700px");
-        ol.setWidth("900px");
-        ol.setMargin(true);
-        ol.setSpacing(true);
-
-        // ol.setWidth("");
-        ol.setCaption("Fixed width (" + ol.getWidth()
-                + "px) and fixed height (" + ol.getHeight()
-                + "px) / layout_basic_test");
-        TextArea tf;
-
-        tf = new TextArea("300px x 300px Field");
-        // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
-        tf.setValue("300x300 field");
-        tf.setRows(2);
-        // tf.setSizeFull();
-        tf.setHeight("300px");
-        tf.setWidth("300px");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.TOP_LEFT);
-
-        // Button b;
-        // b = new Button("This is a 100%x50% valign middle button");
-        // b.setSizeFull();
-        // b.setHeight("50%");
-        // ol.addComponent(b, 1.0f);
-        // ol.setComponentAlignment(b, AlignmentHandler.ALIGNMENT_RIGHT,
-        // AlignmentHandler.ALIGNMENT_VERTICAL_CENTER);
-
-        tf = new TextArea("300px x 300px Field");
-        // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
-        tf.setValue("300x300 field");
-        tf.setRows(2);
-        // tf.setSizeFull();
-        tf.setHeight("300px");
-        tf.setWidth("300px");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
-        return ol;
-    }
-
-    private Layout layout_symmetric_fields(AbstractOrderedLayout ol) {
-        ol.setHeight("900px");
-        ol.setWidth("900px");
-        ol.setMargin(false);
-        ol.setSpacing(false);
-
-        // ol.setWidth("");
-        ol.setCaption("Fixed width (" + ol.getWidth()
-                + "px) and fixed height (" + ol.getHeight()
-                + "px) / layout_symmetric_fields");
-        TextArea tf;
-
-        tf = new TextArea("300px x 300px Field");
-        tf.setValue("300x300 field");
-        tf.setRows(2);
-        tf.setHeight("300px");
-        tf.setWidth("300px");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.TOP_LEFT);
-
-        tf = new TextArea("300px x 300px Field");
-        tf.setValue("300x300 field");
-        tf.setRows(2);
-        tf.setHeight("300px");
-        tf.setWidth("300px");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.MIDDLE_CENTER);
-
-        tf = new TextArea("300px x 300px Field");
-        tf.setValue("300x300 field");
-        tf.setRows(2);
-        tf.setHeight("300px");
-        tf.setWidth("300px");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
-
-        return ol;
-    }
-
-    private Layout layout_leftAndRight(AbstractOrderedLayout ol) {
-        ol.setHeight("700px");
-        ol.setWidth("700px");
-        ol.setMargin(true);
-        ol.setSpacing(true);
-
-        // ol.setWidth("");
-        ol.setCaption("Fixed width (" + ol.getWidth()
-                + "px) and fixed height (" + ol.getHeight()
-                + "px) / layout_leftAndRight");
-        TextArea tf;
-
-        // tf = new TextField("100%x100% Field");
-        // tf.setCaption(null);
-        // tf.setValue("100% x 100% TextField");
-        // tf.setSizeFull();
-        // tf.setRequired(true);
-        // // tf.setComponentError(new UserError("It's broken!"));
-        //
-        // // tf.setHeight("100%");
-        // // tf.setWidth("100px");
-        // tf.setRows(2);
-        // ol.addComponent(tf);
-        //
-        // for (int i = 1; i < 5; i++) {
-        // int w = i * 100;
-        // tf = new TextField("Caption field " + i);
-        // tf.setRows(2);
-        // tf.setValue(w + "px high, " + w + "px wide TextField, valign: "
-        // + valignName[i % 3]);
-        // tf.setWidth(w + "px");
-        // tf.setHeight(w + "px");
-        // ol.addComponent(tf);
-        // ol.setComponentAlignment(tf,
-        // AlignmentHandler.ALIGNMENT_HORIZONTAL_CENTER, valign[i % 3]);
-        // }
-        //
-        // tf.setValue(tf.getValue().toString() + " (100% wide)");
-        // tf.setWidth("100%");
-
-        // tf = new TextField("100%x70px Field");
-        // tf.setCaption(null);
-        // tf.setRequired(true);
-        // // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
-        // tf.setComponentError(new UserError("abc"));
-        // tf.setValue("100% high 70px wide TextField");
-        // tf.setRows(2);
-        // // tf.setSizeFull();
-        // tf.setHeight("100%");
-        // tf.setWidth("70px");
-        // ol.setComponentAlignment(tf, AlignmentHandler.ALIGNMENT_RIGHT,
-        // AlignmentHandler.ALIGNMENT_TOP);
-        // ol.addComponent(tf);
-
-        tf = new TextArea("300px x 300px Field");
-        // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
-        tf.setValue("300x300 field");
-        tf.setRows(2);
-        // tf.setSizeFull();
-        tf.setHeight("300px");
-        tf.setWidth("300px");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.TOP_LEFT);
-
-        tf = new TextArea("300px x 300px Field");
-        // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
-        tf.setValue("300x300 field");
-        tf.setRows(2);
-        // tf.setSizeFull();
-        tf.setHeight("300px");
-        tf.setWidth("300px");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
-        return ol;
-    }
-
-    private Layout layout_fixed_filled(AbstractOrderedLayout ol) {
-        ol.setHeight("700px");
-        ol.setWidth("700px");
-        ol.setMargin(true);
-        ol.setSpacing(true);
-
-        // ol.setWidth("");
-        ol.setCaption("Filled with fixed width (" + ol.getWidth()
-                + "px) and fixed height (" + ol.getHeight() + "px)");
-        TextArea tf;
-
-        tf = new TextArea("60%x100% Field");
-        tf.setCaption("This one has a caption");
-        tf.setValue("60% x 100% TextField");
-        tf.setWidth("100%");
-        tf.setHeight("100%");
-        tf.setRequired(true);
-        // tf.setComponentError(new UserError("It's broken!"));
-
-        // tf.setHeight("100%");
-        // tf.setWidth("100px");
-        tf.setRows(2);
-        ol.addComponent(tf);
-        ol.setExpandRatio(tf, 1f);
-        //
-
-        tf = new TextArea("60%x60% Field");
-        tf.setCaption(null);
-        tf.setValue("60% x 60% TextField");
-        tf.setWidth("100%");
-        tf.setHeight("60%");
-        tf.setRequired(true);
-        ol.addComponent(tf);
-        ol.setExpandRatio(tf, 1f);
-        ol.setComponentAlignment(tf, Alignment.MIDDLE_LEFT);
-        // tf.setComponentError(new UserError("It's broken!"));
-
-        // tf.setHeight("100%");
-        // tf.setWidth("100px");
-        tf.setRows(2);
-        //
-        // for (int i = 1; i < 5; i++) {
-        // int w = i * 100;
-        // tf = new TextField("Caption field " + i);
-        // tf.setRows(2);
-        // tf.setValue(w + "px high, " + w + "px wide TextField, valign: "
-        // + valignName[i % 3]);
-        // tf.setWidth(w + "px");
-        // tf.setHeight(w + "px");
-        // ol.addComponent(tf);
-        // ol.setComponentAlignment(tf,
-        // AlignmentHandler.ALIGNMENT_HORIZONTAL_CENTER, valign[i % 3]);
-        // }
-        //
-        // tf.setValue(tf.getValue().toString() + " (100% wide)");
-        // tf.setWidth("100%");
-
-        // tf = new TextField("100%x70px Field");
-        // tf.setCaption(null);
-        // tf.setRequired(true);
-        // // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
-        // tf.setComponentError(new UserError("abc"));
-        // tf.setValue("100% high 70px wide TextField");
-        // tf.setRows(2);
-        // // tf.setSizeFull();
-        // tf.setHeight("100%");
-        // tf.setWidth("70px");
-        // ol.setComponentAlignment(tf, AlignmentHandler.ALIGNMENT_RIGHT,
-        // AlignmentHandler.ALIGNMENT_TOP);
-        // ol.addComponent(tf);
-
-        tf = new TextArea("200px x 200px Field");
-        // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
-        tf.setValue("200x200 field");
-        tf.setRows(2);
-        // tf.setSizeFull();
-        tf.setHeight("200px");
-        tf.setWidth("200px");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.TOP_LEFT);
-
-        tf = new TextArea("200px x 200px Field");
-        // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
-        tf.setValue("200x200 field");
-        tf.setRows(2);
-        // tf.setSizeFull();
-        tf.setHeight("200px");
-        tf.setWidth("200px");
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
-        return ol;
-    }
-
-    private Layout layout_overfilled(AbstractOrderedLayout ol) {
-        ol.setHeight("300px");
-        ol.setWidth("700px");
-        ol.setMargin(true);
-        ol.setSpacing(true);
-
-        // ol.setWidth("");
-        ol.setCaption("OverFilled with fixed width (" + ol.getWidth()
-                + "px) and fixed height (" + ol.getHeight() + "px)");
-        TextArea tf;
-
-        for (int i = 0; i < 5; i++) {
-            tf = new TextArea("200x200px Field");
-            tf.setCaption("This one has a caption");
-            tf.setValue("200x200 TextField");
-            tf.setWidth("200px");
-            tf.setHeight("200px");
-            tf.setRequired(true);
-            // tf.setComponentError(new UserError("It's broken!"));
-
-            // tf.setHeight("100%");
-            // tf.setWidth("100px");
-            tf.setRows(2);
-            ol.addComponent(tf);
-        }
-
-        return ol;
-    }
-
-    private Layout layout_overfilled_dynamic_height(AbstractOrderedLayout ol) {
-        ol.setHeight(null);
-        ol.setWidth("700px");
-        ol.setMargin(true);
-        ol.setSpacing(true);
-
-        // ol.setWidth("");
-        ol.setCaption("OverFilled with fixed width (" + ol.getWidth()
-                + "px) and dynamic height");
-        TextArea tf;
-
-        for (int i = 0; i < 10; i++) {
-            tf = new TextArea("200x200px Field");
-            tf.setCaption("This one has a caption");
-            tf.setWidth("200px");
-            tf.setHeight(((i + 1) * 50) + "px");
-            tf.setValue(tf.getWidth() + "x" + tf.getHeight() + " TextField");
-            tf.setRequired(true);
-            // tf.setComponentError(new UserError("It's broken!"));
-
-            // tf.setHeight("100%");
-            // tf.setWidth("100px");
-            tf.setRows(2);
-            ol.addComponent(tf);
-        }
-
-        return ol;
-    }
-
-    // private Layout layout_add_components(AbstractOrderedLayout ol) {
-    // ol.setHeight("600px");
-    // ol.setWidth("600px");
-    // ol.setMargin(true);
-    // ol.setSpacing(true);
-    //
-    // // ol.setWidth("");
-    // ol.setCaption("Fixed width (" + ol.getWidth()
-    // + "px) and fixed height (" + ol.getHeight() + "px)");
-    //
-    // for (int i = 0; i < 3; i++) {
-    // Button b = createAddButton(ol);
-    // ol.addComponent(b);
-    // }
-    //
-    // return ol;
-    //
-    // }
-
-    private Layout layout_add_remove_components(AbstractOrderedLayout ol) {
-        ol.setHeight("600px");
-        ol.setWidth("600px");
-        ol.setMargin(true);
-        ol.setSpacing(true);
-
-        // ol.setWidth("");
-        ol.setCaption("Fixed width (" + ol.getWidth()
-                + "px) and fixed height (" + ol.getHeight()
-                + "px) / layout_add_remove_components");
-
-        for (int i = 0; i < 2; i++) {
-            AbstractOrderedLayout inner = createAddRemove(ol, "", "");
-            ol.addComponent(inner);
-            ol.setComponentAlignment(inner, Alignment.BOTTOM_RIGHT);
-        }
-
-        return ol;
-
-    }
-
-    private Layout layout_dynamic(AbstractOrderedLayout ol) {
-        ol.setMargin(true);
-        ol.setSpacing(true);
-
-        // ol.setWidth("");
-        ol.setCaption("Dynamic width, dynamic height");
-
-        for (int i = 0; i < 3; i++) {
-            Button b = new Button("Button " + i);
-            if (i == 2) {
-                b.setHeight("200px");
-            } else {
-                b.setHeight("100%");
-            }
-            ol.addComponent(b);
-        }
-
-        return ol;
-
-    }
-
-    private Layout layout_captions(AbstractOrderedLayout ol) {
-        ol.setMargin(true);
-        ol.setSpacing(true);
-
-        // ol.setWidth("");
-        ol.setCaption("Caption test with dynamic width");
-
-        TextField tf;
-        tf = new TextField("Short caption");
-        ol.addComponent(tf);
-
-        tf = new TextField(
-                "A very long caption which is probably much longer than the field");
-        ol.addComponent(tf);
-
-        tf = new TextField(
-                "A very long caption which is probably much longer than the field and includes indicators");
-        tf.setRequired(true);
-        tf.setComponentError(new UserError("abc123"));
-        ol.addComponent(tf);
-
-        // for (int i = 0; i < 3; i++) {
-        // Button b = new Button("Button " + i);
-        // if (i == 2) {
-        // b.setHeight("200px");
-        // } else {
-        // b.setHeight("100%");
-        // }
-        // ol.addComponent(b);
-        // }
-
-        return ol;
-
-    }
-
-    private Layout layout_captions_fixed_size(AbstractOrderedLayout ol) {
-        ol.setWidth("700px");
-        ol.setHeight("250px");
-
-        ol.setMargin(false);
-        ol.setSpacing(false);
-
-        // ol.setWidth("");
-        ol.setCaption("Caption test with fixed size");
-
-        TextField tf;
-        tf = new TextField("Short caption");
-        tf.setValue("Undefined width");
-        tf.setComponentError(new UserError("123"));
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
-
-        tf = new TextField(
-                "A long caption which is probably much longer than the field");
-        tf.setValue("Undefined width");
-        tf.setRequired(true);
-        tf.setComponentError(new UserError("123"));
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
-
-        tf = new TextField(
-                "A very long caption which is probably much longer than the field and includes indicators");
-        tf.setValue("Undefined width");
-        tf.setIcon(new ThemeResource("icons/16/document-add.png"));
-        tf.setRequired(true);
-        tf.setComponentError(new UserError("abc123"));
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
-
-        // for (int i = 0; i < 3; i++) {
-        // Button b = new Button("Button " + i);
-        // if (i == 2) {
-        // b.setHeight("200px");
-        // } else {
-        // b.setHeight("100%");
-        // }
-        // ol.addComponent(b);
-        // }
-
-        return ol;
-
-    }
-
-    private Layout layout_captions_fixed_size_and_relative_size(
-            AbstractOrderedLayout ol) {
-        ol.setWidth("700px");
-        ol.setHeight("250px");
-
-        ol.setMargin(false);
-        ol.setSpacing(false);
-
-        // ol.setWidth("");
-        ol.setCaption("Caption test with fixed width (700x250)");
-
-        TextField tf;
-        tf = new TextField("Short caption");
-        tf.setSizeFull();
-        tf.setValue("100% wide field, ratio 1");
-
-        tf.setComponentError(new UserError("123"));
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
-        ol.setExpandRatio(tf, 1);
-
-        tf = new TextField(
-                "A long caption which is probably much longer than the field");
-        tf.setValue("100% wide field, ratio 2");
-        tf.setSizeFull();
-        tf.setRequired(true);
-        tf.setComponentError(new UserError("123"));
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
-        ol.setExpandRatio(tf, 2);
-
-        tf = new TextField(
-                "A very long caption which is probably much longer than the field and includes indicators");
-        tf.setValue("100% wide field, ratio 3");
-        tf.setSizeFull();
-        tf.setIcon(new ThemeResource("icons/16/document-add.png"));
-        tf.setRequired(true);
-        tf.setComponentError(new UserError("abc123"));
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
-        ol.setExpandRatio(tf, 3);
-
-        // for (int i = 0; i < 3; i++) {
-        // Button b = new Button("Button " + i);
-        // if (i == 2) {
-        // b.setHeight("200px");
-        // } else {
-        // b.setHeight("100%");
-        // }
-        // ol.addComponent(b);
-        // }
-
-        return ol;
-
-    }
-
-    private Layout layout_captions_fixed_size_and_fixed_size(
-            AbstractOrderedLayout ol) {
-        ol.setWidth("700px");
-        ol.setHeight("250px");
-
-        ol.setMargin(false);
-        ol.setSpacing(false);
-
-        // ol.setWidth("");
-        ol.setCaption("Caption test with fixed width");
-
-        TextField tf;
-        tf = new TextField("Short caption");
-        tf.setValue("250px wide field");
-        tf.setWidth("250px");
-        tf.setComponentError(new UserError("123"));
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
-
-        tf = new TextField(
-                "A long caption which is probably much longer than the field");
-        tf.setWidth("250px");
-        tf.setValue("250px wide field");
-        tf.setRequired(true);
-        tf.setComponentError(new UserError("123"));
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
-
-        tf = new TextField(
-                "A very long caption which is probably much longer than the field and includes indicators");
-        tf.setValue("200px wide field");
-        tf.setWidth("200px");
-        tf.setIcon(new ThemeResource("icons/16/document-add.png"));
-        tf.setRequired(true);
-        tf.setComponentError(new UserError("abc123"));
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
-
-        // for (int i = 0; i < 3; i++) {
-        // Button b = new Button("Button " + i);
-        // if (i == 2) {
-        // b.setHeight("200px");
-        // } else {
-        // b.setHeight("100%");
-        // }
-        // ol.addComponent(b);
-        // }
-
-        return ol;
-
-    }
-
-    private Layout layout_labels(AbstractOrderedLayout ol) {
-        // ol.setWidth("700px");
-        // ol.setHeight("200px");
-
-        ol.setMargin(true);
-        ol.setSpacing(true);
-
-        // ol.setWidth("");
-        ol.setCaption("Caption test with fixed width");
-
-        Label l;
-        l = new Label(
-                "This is a long text and should remain on one line as there is nothing forcing line breaks");
-        ol.addComponent(l);
-        // ol.setComponentAlignment(l, AlignmentHandler.ALIGNMENT_RIGHT,
-        // AlignmentHandler.ALIGNMENT_BOTTOM);
-
-        l = new Label("WTF OMG LOL");
-        ol.addComponent(l);
-        // ol.setComponentAlignment(l, AlignmentHandler.ALIGNMENT_RIGHT,
-        // AlignmentHandler.ALIGNMENT_BOTTOM);
-
-        return ol;
-
-    }
-
-    private AbstractOrderedLayout createAddRemove(AbstractOrderedLayout ol,
-            String width, String buttonSuffix) {
-        Button b = createAddButton(ol);
-        Button wb = createWideAddButton(ol);
-        Button r = createRemoveButton(ol, buttonSuffix);
-        VerticalLayout inner = new VerticalLayout();
-        inner.setCaption("Width: " + width);
-        inner.setWidth(width);
-
-        inner.addComponent(b);
-        inner.addComponent(wb);
-        inner.addComponent(r);
-
-        // inner.setHeight("132px");
-        return inner;
-    }
-
-    private Button createAddButton(AbstractOrderedLayout ol) {
-        Button b = new Button("Add before", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                addBefore((AbstractOrderedLayout) event.getButton().getData(),
-                        event.getButton().getParent(), "");
-            }
-
-        });
-        b.setData(ol);
-
-        return b;
-    }
-
-    private Button createWideAddButton(AbstractOrderedLayout ol) {
-        Button b = new Button("Add 100% before", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                addBefore((AbstractOrderedLayout) event.getButton().getData(),
-                        event.getButton().getParent(), "100%");
-            }
-
-        });
-        b.setData(ol);
-
-        return b;
-    }
-
-    private Button createRemoveButton(AbstractOrderedLayout ol, String suffix) {
-        Button b = new Button("Remove this " + suffix, new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                remove((AbstractOrderedLayout) event.getButton().getData(),
-                        event.getButton().getParent());
-            }
-
-        });
-        b.setWidth("100%");
-        b.setData(ol);
-
-        return b;
-    }
-
-    protected void remove(AbstractOrderedLayout ol, Component c) {
-        ol.removeComponent(c);
-
-    }
-
-    protected void addBefore(AbstractOrderedLayout ol, Component c, String width) {
-        int index = 0;
-        Iterator<Component> iter = ol.getComponentIterator();
-        while (iter.hasNext()) {
-            if (iter.next() == c) {
-                break;
-            }
-            index++;
-        }
-        AbstractOrderedLayout inner = createAddRemove(ol, width,
-                String.valueOf(suffix++));
-        ol.addComponent(inner, index);
-        if (width.contains("%")) {
-            ol.setExpandRatio(inner, 1.0f);
-        }
-
-        ol.setComponentAlignment(inner, Alignment.BOTTOM_RIGHT);
-
-    }
-
-    private Layout layout_pctFilled(AbstractOrderedLayout ol) {
-        ol.setHeight("600px");
-        ol.setWidth("600px");
-        ol.setMargin(true);
-        ol.setSpacing(true);
-
-        // ol.setWidth("");
-        ol.setCaption("100 % filled with fixed width (" + ol.getWidth()
-                + "px) and fixed height (" + ol.getHeight() + "px)");
-        TextArea ta;
-
-        ta = new TextArea();
-        ta.setCaption("This one has a caption");
-        ta.setValue("60% expand TextField");
-        ta.setWidth("100%");
-        ta.setHeight("100%");
-        // ta.setRequired(true);
-        // ta.setComponentError(new UserError("It's broken!"));
-
-        // ta.setHeight("100%");
-        // ta.setWidth("100px");
-        ta.setRows(2);
-        ol.addComponent(ta);
-        ol.setExpandRatio(ta, 60);
-
-        ta = new TextArea();
-        ta.setValue("100px 100px TextField");
-        ta.setWidth("100px");
-        ta.setHeight("100px");
-        ta.setRows(2);
-        ol.addComponent(ta);
-        ol.setComponentAlignment(ta, Alignment.MIDDLE_CENTER);
-
-        //
-
-        ta = new TextArea("40%x40% Field");
-        // ta.setCaption(null);
-        ta.setValue("40% expand (40% height) TextField");
-        ta.setWidth("100%");
-        ta.setHeight("40%");
-        ol.addComponent(ta);
-        ol.setExpandRatio(ta, 40);
-        // ta.setRequired(true);
-        ol.setComponentAlignment(ta, Alignment.BOTTOM_RIGHT);
-
-        ta.setRows(2);
-
-        return ol;
-    }
-
-    @SuppressWarnings("unused")
-    private Layout layout_pctFilled2(AbstractOrderedLayout ol) {
-        ol.setHeight("600px");
-        ol.setWidth("600px");
-        ol.setMargin(true);
-        ol.setSpacing(false);
-
-        // ol.setWidth("");
-        ol.setCaption("100 % filled with fixed width (" + ol.getWidth()
-                + "px) and fixed height (" + ol.getHeight() + "px)");
-        TextArea ta;
-
-        ta = new TextArea();
-        // ta.setCaption("This one has a caption");
-        ta.setValue("80% x 20% TextField");
-        ta.setWidth("80%");
-        ta.setHeight("20%");
-        // ta.setRequired(true);
-        // ta.setComponentError(new UserError("It's broken!"));
-
-        // ta.setHeight("100%");
-        // ta.setWidth("100px");
-        ta.setRows(2);
-        ol.addComponent(ta);
-        //
-
-        ta = new TextArea("20%x60% Field");
-        ta.setCaption(null);
-        ta.setValue("20% x 60% TextField");
-        ta.setWidth("20%");
-        ta.setHeight("60%");
-        // ta.setRequired(true);
-        ol.setComponentAlignment(ta, Alignment.BOTTOM_RIGHT);
-
-        ta.setRows(2);
-        ol.addComponent(ta);
-
-        return ol;
-    }
-
-    private Layout layout_underFilled(AbstractOrderedLayout ol) {
-        ol.setHeight("700px");
-        ol.setWidth("700px");
-        ol.setMargin(true);
-        ol.setSpacing(true);
-
-        // ol.setWidth("");
-        ol.setCaption("Underfilled with fixed width (" + ol.getWidth()
-                + "px) and fixed height (" + ol.getHeight() + "px)");
-        TextArea ta;
-
-        ta = new TextArea("60%x100% Field");
-        ta.setCaption("Short capt");
-        ta.setValue("60% x 100% TextField");
-        ta.setWidth("60%");
-        ta.setHeight("100%");
-        ta.setRequired(true);
-        ta.setRows(2);
-
-        ol.addComponent(ta);
-        ol.setComponentAlignment(ta, Alignment.MIDDLE_CENTER);
-
-        ta = new TextArea("200px x 200px Field");
-        // ta.setIcon(new ThemeResource("icons/16/document-add.png"));
-        ta.setValue("200x200 field");
-        ta.setRows(2);
-        // ta.setSizeFull();
-        ta.setHeight("200px");
-        ta.setWidth("200px");
-        ol.addComponent(ta);
-        ol.setComponentAlignment(ta, Alignment.TOP_LEFT);
-
-        ta = new TextArea("200px x 200px Field");
-        // ta.setIcon(new ThemeResource("icons/16/document-add.png"));
-        ta.setValue("200x200 field");
-        ta.setRows(2);
-        // ta.setSizeFull();
-        ta.setHeight("200px");
-        ta.setWidth("200px");
-        ol.addComponent(ta);
-        ol.setComponentAlignment(ta, Alignment.BOTTOM_RIGHT);
-        return ol;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/layouts/OrderedLayoutCSSCompatibility.java b/tests/src/com/vaadin/tests/layouts/OrderedLayoutCSSCompatibility.java
deleted file mode 100644
index 41f1de2c4a..0000000000
--- a/tests/src/com/vaadin/tests/layouts/OrderedLayoutCSSCompatibility.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.TextField;
-
-public class OrderedLayoutCSSCompatibility extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "This test is to make sure that spacing/margins in OrderedLayout is still backwards compatible";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2463;
-    }
-
-    @Override
-    protected void setup() {
-        HorizontalLayout l = new HorizontalLayout();
-        l.setMargin(true);
-        l.setSpacing(true);
-        l.addComponent(new TextField("abc"));
-        l.addComponent(new TextField("def"));
-
-        addComponent(l);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/TestAbsoluteLayout.java b/tests/src/com/vaadin/tests/layouts/TestAbsoluteLayout.java
deleted file mode 100644
index baf8218922..0000000000
--- a/tests/src/com/vaadin/tests/layouts/TestAbsoluteLayout.java
+++ /dev/null
@@ -1,314 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import java.io.File;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.data.util.BeanItem;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbsoluteLayout;
-import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.DefaultFieldFactory;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.TextArea;
-import com.vaadin.ui.Window;
-
-public class TestAbsoluteLayout extends TestBase {
-
-    private static class MFieldFactory extends DefaultFieldFactory {
-
-        @Override
-        public Field createField(Item item, Object propertyId,
-                Component uiContext) {
-            if (propertyId.equals("CSSString")) {
-                TextArea f = new TextArea();
-                f.setRows(5);
-                f.setHeight("8em");
-                f.setCaption("CSS string");
-                return f;
-            } else if (((String) propertyId).contains("Units")) {
-                NativeSelect s = new NativeSelect() {
-                };
-                s.addContainerProperty("caption", String.class, "");
-                s.setItemCaptionPropertyId("caption");
-                s.setNullSelectionAllowed(false);
-                for (int i = 0; i < Layout.UNIT_SYMBOLS.length; i++) {
-                    Item unitItem = s.addItem(i);
-                    unitItem.getItemProperty("caption").setValue(
-                            Layout.UNIT_SYMBOLS[i]);
-                }
-                return s;
-            }
-
-            return super.createField(item, propertyId, uiContext);
-        }
-
-        private static MFieldFactory instance;
-
-        public static DefaultFieldFactory get() {
-            if (instance == null) {
-                instance = new MFieldFactory();
-            }
-            return instance;
-        }
-    };
-
-    @Override
-    protected String getDescription() {
-        return "This is absolute layout tester.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-    @Override
-    protected void setup() {
-        AbsoluteLayout layout = new AbsoluteLayout();
-        setTheme("tests-tickets");
-        layout.setStyleName("cyan");
-        layout.setWidth("1000px");
-        layout.setHeight("500px");
-
-        layout.addComponent(new Label("Hello World"));
-
-        Button button = new Button("Centered button,z-index:10;");
-        button.setSizeFull();
-        layout.addComponent(button,
-                "top:40%;bottom:40%;right:20%;left:20%;z-index:10;");
-
-        Label label = new Label(
-                "Exotic positioned label. Fullsize, top:100px; left:2cm; right: 3.5in; bottom:12.12mm ");
-        label.setStyleName("yellow");
-        label.setSizeFull();
-        layout.addComponent(label,
-                "top:100px; left:2cm; right: 3.5in; bottom:12.12mm");
-
-        label = new Label("fullize, bottom:80%;left:80%;");
-        label.setStyleName("green");
-        label.setSizeFull();
-        layout.addComponent(label, "bottom:80%;left:80%;");
-
-        label = new Label("bottomright");
-        label.setSizeUndefined();
-        label.setStyleName("green");
-        layout.addComponent(label, "bottom:0px; right:0px;");
-
-        getLayout().setSizeFull();
-        getLayout().addComponent(layout);
-
-        getMainWindow().addWindow(new EditorWindow(layout));
-
-    }
-
-    public class EditorWindow extends Window {
-        private final AbsoluteLayout l;
-        private Form componentEditor;
-        private Form positionEditor;
-
-        public EditorWindow(AbsoluteLayout lo) {
-            super("AbsoluteLayout editor aka köyhän miehen wysiwyg");
-            l = lo;
-
-            setHeight("600px");
-
-            Button componentChooser = new Button("choose component to edit");
-            componentChooser.addListener(new Button.ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    final Window chooser = new Window("Choose component");
-                    chooser.getContent().setSizeUndefined();
-                    chooser.setModal(true);
-
-                    NativeSelect select = new NativeSelect(
-                            "Choose component to edit");
-
-                    select.setNullSelectionAllowed(false);
-
-                    IndexedContainer container = new IndexedContainer();
-                    container.addContainerProperty("caption", String.class, "");
-                    Iterator<Component> componentIterator = l
-                            .getComponentIterator();
-                    while (componentIterator.hasNext()) {
-                        AbstractComponent next = (AbstractComponent) componentIterator
-                                .next();
-                        Item item = container.addItem(next);
-
-                        String caption = next.getClass().getSimpleName();
-
-                        caption += "; cap: " + next.getCaption() + "; debugid"
-                                + getDebugId();
-
-                        if (next instanceof Property) {
-                            caption += " value:" + ((Property) next).getValue();
-                        }
-
-                        item.getItemProperty("caption").setValue(caption);
-                    }
-                    select.setContainerDataSource(container);
-                    select.setItemCaptionPropertyId("caption");
-                    select.setImmediate(true);
-
-                    select.addListener(new ValueChangeListener() {
-                        public void valueChange(ValueChangeEvent event) {
-                            editcomponent((Component) event.getProperty()
-                                    .getValue());
-                            getMainWindow().removeWindow(chooser);
-                        }
-
-                    });
-
-                    chooser.addComponent(select);
-
-                    getMainWindow().addWindow(chooser);
-
-                }
-            });
-
-            addComponent(componentChooser);
-
-            Button addComp = new Button("add component");
-            addComp.addListener(new Button.ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    final Window chooser = new Window(
-                            "Choose component type to add");
-                    chooser.getContent().setSizeUndefined();
-                    chooser.setModal(true);
-
-                    NativeSelect select = new NativeSelect(
-                            "Choose component to edit");
-
-                    select.setNullSelectionAllowed(false);
-
-                    IndexedContainer container = new IndexedContainer();
-
-                    URL resource = AbstractComponent.class.getResource(".");
-                    File directory = new File(resource.getFile());
-                    if (directory.exists()) {
-                        // Get the list of the files contained in the
-                        // package
-                        final String[] files = directory.list();
-                        for (int j = 0; j < files.length; j++) {
-                            // we are only interested in .class files
-                            if (files[j].endsWith(".class")) {
-                                // removes the .class extension
-                                String p = resource.toString()
-                                        + files[j].substring(0,
-                                                files[j].length() - 6);
-                                p = p.replaceAll(".*classes/", "");
-                                p = p.replaceAll("/", ".");
-                                Class<?> c;
-                                try {
-                                    c = Class.forName(p);
-                                    if (AbstractComponent.class
-                                            .isAssignableFrom(c)
-                                            && !p.toLowerCase().contains(
-                                                    "layout")
-                                            && !p.toLowerCase().contains(
-                                                    "abstract")) {
-                                        container.addItem(c);
-                                    }
-                                } catch (ClassNotFoundException e) {
-                                    // TODO Auto-generated catch block
-                                    e.printStackTrace();
-                                }
-                            }
-                        }
-                    }
-                    select.setContainerDataSource(container);
-                    select.setImmediate(true);
-
-                    select.addListener(new ValueChangeListener() {
-                        public void valueChange(ValueChangeEvent event) {
-                            Class<?> c = (Class<?>) event.getProperty()
-                                    .getValue();
-
-                            try {
-                                Component newInstance = (Component) c
-                                        .newInstance();
-                                l.addComponent(newInstance);
-                                editcomponent(newInstance);
-                                getMainWindow().removeWindow(chooser);
-                            } catch (InstantiationException e) {
-                                // TODO Auto-generated catch block
-                                e.printStackTrace();
-                            } catch (IllegalAccessException e) {
-                                // TODO Auto-generated catch block
-                                e.printStackTrace();
-                            }
-
-                        }
-
-                    });
-
-                    chooser.addComponent(select);
-
-                    getMainWindow().addWindow(chooser);
-
-                }
-            });
-
-            addComponent(addComp);
-
-            componentEditor = new Form();
-            componentEditor.setWriteThrough(false);
-            componentEditor.setCaption("Component properties:");
-            componentEditor.setFormFieldFactory(MFieldFactory.get());
-            addComponent(componentEditor);
-
-            positionEditor = new Form();
-            positionEditor.setCaption("Component position");
-            positionEditor.setWriteThrough(false);
-            positionEditor.setFormFieldFactory(MFieldFactory.get());
-            addComponent(positionEditor);
-
-            Button b = new Button("Commit changes", new Button.ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    positionEditor.commit();
-                    componentEditor.commit();
-                }
-            });
-            addComponent(b);
-
-        }
-
-        private void editcomponent(Component value) {
-
-            BeanItem<Component> beanItem = new BeanItem<Component>(value);
-            String c = "Component properties for "
-                    + value.getClass().getSimpleName();
-            ArrayList<String> fields = new ArrayList<String>(
-                    Arrays.asList(new String[] { "width", "widthUnits",
-                            "height", "heightUnits", "caption", "styleName" }));
-            if (value instanceof Label) {
-                c += "(" + ((Label) value).getValue() + ")";
-                fields.add("value");
-            }
-
-            componentEditor.setItemDataSource(beanItem, fields);
-
-            BeanItem<ComponentPosition> positionItem = new BeanItem<ComponentPosition>(
-                    l.getPosition(value));
-            componentEditor.setCaption(c);
-
-            positionEditor.setItemDataSource(positionItem);
-
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/TestLayoutClickListeners.html b/tests/src/com/vaadin/tests/layouts/TestLayoutClickListeners.html
deleted file mode 100644
index 743d59c007..0000000000
--- a/tests/src/com/vaadin/tests/layouts/TestLayoutClickListeners.html
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>TestLayoutClickListeners</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">TestLayoutClickListeners</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.layouts.TestLayoutClickListeners</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-<!--GridLayout-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>43,11</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>exact:GridLayout: left click on This is label 1</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[4]/VTextField[0]</td>
-	<td>82,14</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>exact:GridLayout: left click on This is tf5</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/domChild[0]/domChild[0]/domChild[1]</td>
-	<td>87,42</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>exact:GridLayout: left click on &lt;none&gt;</td>
-</tr>
-<!--VerticalLayout-->
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VTextField[0]</td>
-	<td>74,13</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>exact:VerticalLayout: left click on This is tf6</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VLabel[0]</td>
-	<td>53,13</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>exact:VerticalLayout: left click on This is label 3</td>
-</tr>
-<!--AbsoluteLayout-->
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[2]/VAbsoluteLayout[0]/VAbsoluteLayout$AbsoluteWrapper[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>exact:Button A button with its own click listener was clicked</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[2]/VAbsoluteLayout[0]/VAbsoluteLayout$AbsoluteWrapper[0]/VTextField[0]</td>
-	<td>101,14</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>exact:AbsoluteLayout: left click on This is its caption</td>
-</tr>
-<!--CssLayout-->
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[3]/VCssLayout[0]/VCssLayout$FlowPane[0]/VTextField[0]</td>
-	<td>108,13</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[3]/VCssLayout[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
-	<td>76,12</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VLabel[0]</td>
-	<td>exact:CSSLayout: left click on This is its caption</td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>exact:CSSLayout: left click on This is its caption</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[3]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertText</td>
-	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
-	<td>exact:Button A button with its own click listener was clicked</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/layouts/TestLayoutClickListeners.java b/tests/src/com/vaadin/tests/layouts/TestLayoutClickListeners.java
deleted file mode 100644
index 93c51d6b4a..0000000000
--- a/tests/src/com/vaadin/tests/layouts/TestLayoutClickListeners.java
+++ /dev/null
@@ -1,208 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.event.LayoutEvents.LayoutClickEvent;
-import com.vaadin.event.LayoutEvents.LayoutClickListener;
-import com.vaadin.event.MouseEvents.ClickEvent;
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.tests.util.Log;
-import com.vaadin.ui.AbsoluteLayout;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class TestLayoutClickListeners extends AbstractTestCase {
-
-    private Log log = new Log(5).setNumberLogRows(false);
-
-    @Override
-    public void init() {
-        Window w = new Window("main window");
-        setMainWindow(w);
-        setTheme("tests-tickets");
-
-        HorizontalLayout layoutsLayout = new HorizontalLayout();
-        layoutsLayout.setSpacing(true);
-        w.setContent(layoutsLayout);
-
-        layoutsLayout.addComponent(createClickableGridLayout());
-        layoutsLayout.addComponent(createClickableVerticalLayout());
-        layoutsLayout.addComponent(createClickableAbsoluteLayout());
-        layoutsLayout.addComponent(createClickableCSSLayout());
-
-        VerticalLayout mainLayout = new VerticalLayout();
-        mainLayout.setMargin(true);
-        mainLayout.setSpacing(true);
-        w.setContent(mainLayout);
-        mainLayout.addComponent(log);
-        mainLayout.addComponent(layoutsLayout);
-    }
-
-    private Component createClickableAbsoluteLayout() {
-        final AbsoluteLayout al = new AbsoluteLayout();
-        al.setCaption("AbsoluteLayout");
-        al.setStyleName("borders");
-        al.setWidth("300px");
-        al.setHeight("500px");
-        al.addComponent(new TextField("This is its caption",
-                "This is a textfield"), "top: 60px; left: 0px; width: 100px;");
-        al.addComponent(new TextField("Another textfield caption",
-                "This is another textfield"),
-                "top: 120px; left: 20px; width: 100px;");
-
-        al.addComponent(new Button("A button with its own click listener",
-                new Button.ClickListener() {
-
-                    public void buttonClick(
-                            com.vaadin.ui.Button.ClickEvent event) {
-                        log.log("Button " + event.getButton().getCaption()
-                                + " was clicked");
-
-                    }
-                }));
-        al.addListener(new LayoutClickListener() {
-
-            public void layoutClick(LayoutClickEvent event) {
-                logLayoutClick("AbsoluteLayout", event);
-            }
-        });
-
-        return al;
-
-    }
-
-    private Component createClickableCSSLayout() {
-        final CssLayout cl = new CssLayout();
-        cl.setCaption("CSSLayout");
-        cl.setStyleName("borders");
-        cl.setWidth("300px");
-        cl.setHeight("500px");
-        cl.addComponent(new TextField("This is its caption",
-                "This is a textfield"));
-        cl.addComponent(new TextField("Another textfield caption",
-                "This is another textfield"));
-
-        cl.addComponent(new Button("A button with its own click listener",
-                new Button.ClickListener() {
-
-                    public void buttonClick(
-                            com.vaadin.ui.Button.ClickEvent event) {
-                        log.log("Button " + event.getButton().getCaption()
-                                + " was clicked");
-
-                    }
-                }));
-        cl.addListener(new LayoutClickListener() {
-
-            public void layoutClick(LayoutClickEvent event) {
-                logLayoutClick("CSSLayout", event);
-            }
-        });
-
-        return cl;
-
-    }
-
-    private Layout createClickableGridLayout() {
-
-        GridLayout gl = new GridLayout(4, 4);
-        gl.setHeight("400px");
-        gl.setWidth("564px");
-        gl.setStyleName("borders");
-        gl.setSpacing(true);
-        addContent(gl, 4);
-        TextField largeTextarea = new TextField("Large textarea");
-        largeTextarea.setWidth("100%");
-        largeTextarea.setHeight("99%");
-        gl.addComponent(largeTextarea, 0, 3, 3, 3);
-
-        gl.addListener(new LayoutClickListener() {
-
-            public void layoutClick(LayoutClickEvent event) {
-                logLayoutClick("GridLayout", event);
-            }
-        });
-        gl.setRowExpandRatio(3, 1);
-        return wrap(gl, "GridLayout");
-    }
-
-    protected void logLayoutClick(String layout, LayoutClickEvent event) {
-        String target = "&lt;none>";
-        Component component = event.getChildComponent();
-        if (component != null) {
-            target = component.getCaption();
-            if (target == null && component instanceof Label) {
-                target = ((Label) component).getValue().toString();
-            }
-        }
-        String button = "left";
-        if (event.getButton() == ClickEvent.BUTTON_RIGHT) {
-            button = "right";
-        } else if (event.getButton() == ClickEvent.BUTTON_MIDDLE) {
-            button = "middle";
-
-        }
-        String type = "click";
-        if (event.isDoubleClick()) {
-            type = "double-click";
-        }
-        log.log(layout + ": " + button + " " + type + " on " + target);
-        // + ", coordinates relative to the layout ("
-        // + event.getRelativeX() + ", " + event.getRelativeY() + ")");
-
-    }
-
-    private Layout createClickableVerticalLayout() {
-
-        VerticalLayout gl = new VerticalLayout();
-        addContent(gl, 5);
-
-        gl.addListener(new LayoutClickListener() {
-
-            public void layoutClick(LayoutClickEvent event) {
-                logLayoutClick("VerticalLayout", event);
-
-            }
-        });
-
-        return wrap(gl, "Clickable VerticalLayout");
-    }
-
-    private void addContent(Layout gl, int nr) {
-        for (int i = 1; i < nr; i++) {
-            Label l = new Label("This is label " + i);
-            l.setWidth(null);
-            gl.addComponent(l);
-        }
-        for (int i = nr; i < nr * 2; i++) {
-            gl.addComponent(new TextField("This is tf" + i, "this is tf " + i));
-        }
-    }
-
-    private Layout wrap(Component c, String caption) {
-        VerticalLayout vl = new VerticalLayout();
-        Label l = new Label(caption);
-        l.setWidth(null);
-        vl.addComponent(l);
-        vl.addComponent(c);
-
-        return vl;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "All layouts have click listeners attached and the events are shown in the event log at the top";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3541;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/TestLayoutPerformance.java b/tests/src/com/vaadin/tests/layouts/TestLayoutPerformance.java
deleted file mode 100644
index 31ee15983e..0000000000
--- a/tests/src/com/vaadin/tests/layouts/TestLayoutPerformance.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-public class TestLayoutPerformance extends TestBase {
-    private NativeSelect ns;
-    private int i;
-    private NativeSelect ns2;
-    private VerticalLayout testarea = new VerticalLayout();
-
-    @Override
-    protected String getDescription() {
-        return "Test app to test simple rendering to various layouts.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return null;
-    }
-
-    @Override
-    protected void setup() {
-        Label label = new Label("<h1>CssLayout performance test.</h1>",
-                Label.CONTENT_XHTML);
-        getLayout().addComponent(label);
-
-        label = new Label(
-                "<em>Hint</em>. Use debug dialog to measure rendering times TODO: extend with size settings (to both layout and content).",
-                Label.CONTENT_XHTML);
-        getLayout().addComponent(label);
-
-        ns = new NativeSelect("Select component to test");
-        ns.addItem(CssLayout.class);
-        ns.addItem(GridLayout.class);
-        ns.addItem(VerticalLayout.class);
-        ns.setNullSelectionAllowed(false);
-        ns.setValue(CssLayout.class);
-
-        ns2 = new NativeSelect("Select component to render inside layout.");
-        ns2.addItem(Label.class);
-        ns2.addItem(Button.class);
-        ns2.setNullSelectionAllowed(false);
-        ns2.setValue(Label.class);
-
-        final TextField n = new TextField("Number of components");
-
-        n.setValue("1000");
-
-        final CheckBox cb = new CheckBox("Generate captions", false);
-
-        Button b = new Button("Render component");
-
-        b.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                int components = Integer.parseInt((String) n.getValue());
-                Layout layout = getCurrentLayout();
-                for (int i = 0; i < components; i++) {
-                    Component component = newTestComponent();
-                    if (cb.booleanValue()) {
-                        component.setCaption("caption " + i);
-                    }
-                    layout.addComponent(component);
-                }
-
-                testarea.removeAllComponents();
-                testarea.addComponent(layout);
-            }
-
-        });
-
-        getLayout().addComponent(ns);
-        getLayout().addComponent(ns2);
-        getLayout().addComponent(n);
-        getLayout().addComponent(cb);
-        getLayout().addComponent(b);
-        getLayout().addComponent(testarea);
-
-    }
-
-    private Layout getCurrentLayout() {
-        Class<?> value = (Class<?>) ns.getValue();
-        if (value == GridLayout.class) {
-            return new GridLayout(10, 1);
-        }
-
-        try {
-            return (Layout) value.newInstance();
-        } catch (InstantiationException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        } catch (IllegalAccessException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-        return null;
-
-    }
-
-    private Component newTestComponent() {
-        Class<?> componentClass = (Class<?>) ns2.getValue();
-        AbstractComponent newInstance = null;
-        try {
-            newInstance = (AbstractComponent) componentClass.newInstance();
-        } catch (InstantiationException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        } catch (IllegalAccessException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-        if (componentClass == Label.class) {
-            ((Label) newInstance).setValue("Test l " + (i++));
-            ((Label) newInstance).setSizeUndefined();
-        } else {
-            newInstance.setCaption("Test l " + (i++));
-        }
-        return newInstance;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/TreeWithBordersInLayout.html b/tests/src/com/vaadin/tests/layouts/TreeWithBordersInLayout.html
deleted file mode 100644
index cd4c8756cc..0000000000
--- a/tests/src/com/vaadin/tests/layouts/TreeWithBordersInLayout.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.layouts.TreeWithBordersInLayout?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>tree-with-borders</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/layouts/TreeWithBordersInLayout.java b/tests/src/com/vaadin/tests/layouts/TreeWithBordersInLayout.java
deleted file mode 100644
index 27b1ce6462..0000000000
--- a/tests/src/com/vaadin/tests/layouts/TreeWithBordersInLayout.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class TreeWithBordersInLayout extends AbstractTestCase {
-
-    private static final Object CAPTION = "caption";
-
-    @Override
-    public void init() {
-        Layout mainLayout = new VerticalLayout();
-        mainLayout.setSizeUndefined();
-        setMainWindow(new Window("main window", mainLayout));
-
-        setTheme("tests-tickets");
-
-        Tree t = new Tree();
-        t.addContainerProperty(CAPTION, String.class, "");
-        t.setItemCaptionPropertyId(CAPTION);
-        t.addItem("Item 1").getItemProperty(CAPTION).setValue("Item 1");
-
-        t.setSizeUndefined();
-        t.setStyleName("redblueborders");
-        mainLayout.addComponent(t);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "The tree consists of one node and has a 10px blue red border and a 10px red right border. The tree node should be visible between the borders.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3915;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/VerticalLayoutExpandRatioModification.java b/tests/src/com/vaadin/tests/layouts/VerticalLayoutExpandRatioModification.java
deleted file mode 100644
index bbac07d20f..0000000000
--- a/tests/src/com/vaadin/tests/layouts/VerticalLayoutExpandRatioModification.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class VerticalLayoutExpandRatioModification extends TestBase implements
-        ClickListener {
-
-    private boolean isVisible = false;
-    private VerticalLayout mainLayout;
-    private VerticalLayout vl1;
-    private VerticalLayout vl2;
-    private Button button;
-
-    @Override
-    public void setup() {
-        Window main = new Window("The Main Window");
-        mainLayout = new VerticalLayout();
-        main.setContent(mainLayout);
-        setMainWindow(main);
-
-        // The upper layout
-        vl1 = new VerticalLayout();
-        Label label1 = new Label("The upper layout");
-        vl1.addComponent(label1);
-
-        // Button that hides or shows the bottom part
-        button = new Button("show / hide", this);
-
-        // The bottom layout
-        vl2 = new VerticalLayout();
-        TextField tf = new TextField("The bottom field");
-        tf.setHeight("100%");
-        vl2.addComponent(tf);
-
-        // Add everything to the view
-        mainLayout.addComponent(vl1);
-        mainLayout.addComponent(button);
-        mainLayout.addComponent(vl2);
-
-        // Set expand ratios, hide lower
-        mainLayout.setExpandRatio(vl1, 1);
-        mainLayout.setExpandRatio(vl2, 0);
-
-        // Maximize everything
-        main.setSizeFull();
-        mainLayout.setSizeFull();
-        vl1.setSizeFull();
-        vl2.setSizeFull();
-    }
-
-    public void buttonClick(ClickEvent event) {
-        if (isVisible) {
-            mainLayout.setExpandRatio(vl2, 0);
-            isVisible = false;
-        } else {
-            mainLayout.setExpandRatio(vl2, 1);
-            isVisible = true;
-        }
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Changing the expand ratio should repaint the layout correctly. Changing from 0 to something else should render the previously invisible component";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2454;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/layouts/VerticalLayoutWithRelativeSizeComponents.java b/tests/src/com/vaadin/tests/layouts/VerticalLayoutWithRelativeSizeComponents.java
deleted file mode 100644
index 361707a86c..0000000000
--- a/tests/src/com/vaadin/tests/layouts/VerticalLayoutWithRelativeSizeComponents.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Label;
-
-public class VerticalLayoutWithRelativeSizeComponents extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "A undefined wide VerticalLayout containing a 100% wide label, a Button and another identical label. The labels should be as wide as the button (400px) and there should be no extra space between the bottom of the first label and the button.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2591;
-    }
-
-    @Override
-    protected void setup() {
-        getLayout().setSizeUndefined();
-        getMainWindow().getContent().setHeight(null);
-
-        Label l = new Label(
-                "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc condimentum urna quis leo. In hac habitasse platea dictumst. Pellentesque tincidunt. Sed libero nisl, faucibus in, laoreet pellentesque, consectetur non, dolor. Sed tortor. Ut pretium sapien. Cras elementum enim non lacus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla velit est, aliquam a, pellentesque a, iaculis nec, sapien. Ut ultrices ligula vitae nulla. Morbi sem pede, iaculis ac, condimentum a, ornare eget, nisi. Aliquam hendrerit pulvinar massa. Vestibulum pretium purus eu augue. Sed posuere elit ut magna. Cras consequat faucibus nunc. Vestibulum quis diam.");
-        Label l2 = new Label(
-                "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc condimentum urna quis leo. In hac habitasse platea dictumst. Pellentesque tincidunt. Sed libero nisl, faucibus in, laoreet pellentesque, consectetur non, dolor. Sed tortor. Ut pretium sapien. Cras elementum enim non lacus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla velit est, aliquam a, pellentesque a, iaculis nec, sapien. Ut ultrices ligula vitae nulla. Morbi sem pede, iaculis ac, condimentum a, ornare eget, nisi. Aliquam hendrerit pulvinar massa. Vestibulum pretium purus eu augue. Sed posuere elit ut magna. Cras consequat faucibus nunc. Vestibulum quis diam.");
-        l.setWidth("100%");
-        l2.setWidth("100%");
-
-        Button b = new Button("This defines the width");
-        b.setWidth("400px");
-        addComponent(l);
-        addComponent(b);
-        addComponent(l2);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/VerticalLayoutWithRelativeSizeComponentsInitiallyHidden.java b/tests/src/com/vaadin/tests/layouts/VerticalLayoutWithRelativeSizeComponentsInitiallyHidden.java
deleted file mode 100644
index 360cc73f5e..0000000000
--- a/tests/src/com/vaadin/tests/layouts/VerticalLayoutWithRelativeSizeComponentsInitiallyHidden.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-
-public class VerticalLayoutWithRelativeSizeComponentsInitiallyHidden extends
-        TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Size calculations fail if expanded component is relative sized "
-                + "and initially invisible and when becoming visible at the "
-                + "same time some other component size changes.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4608;
-    }
-
-    @Override
-    protected void setup() {
-
-        VerticalLayout verticalLayout = getLayout();
-        verticalLayout.setHeight("500px");
-
-        final Label bar = new Label("Bar");
-        bar.setSizeUndefined();
-        final Label foobar = new Label("FooBar");
-        foobar.setSizeFull();
-        foobar.setVisible(false);
-
-        bar.setHeight("100px");
-
-        // bar.setHeight("100px");
-        bar.setVisible(false);
-
-        Button b = new Button(
-                "Click to set bar visible. Button should stay visible.");
-        b.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                bar.setVisible(true);
-                foobar.setVisible(true);
-            }
-        });
-
-        verticalLayout.addComponent(bar);
-        verticalLayout.addComponent(foobar);
-        verticalLayout.setExpandRatio(foobar, 1);
-        verticalLayout.addComponent(b);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/WidgetImplementationSwap.html b/tests/src/com/vaadin/tests/layouts/WidgetImplementationSwap.html
deleted file mode 100644
index c335f5df5a..0000000000
--- a/tests/src/com/vaadin/tests/layouts/WidgetImplementationSwap.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.layouts.WidgetImplementationSwap?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementPresent</td>
-	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VAbsoluteLayout[0]/VAbsoluteLayout$AbsoluteWrapper[0]/VTextArea[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementPresent</td>
-	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextArea[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementPresent</td>
-	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextArea[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementPresent</td>
-	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[6]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VTextArea[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[9]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[9]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>assertElementPresent</td>
-	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[8]/VCssLayout[0]/VCssLayout$FlowPane[0]/VTextArea[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/layouts/WidgetImplementationSwap.java b/tests/src/com/vaadin/tests/layouts/WidgetImplementationSwap.java
deleted file mode 100644
index 283e9f7a54..0000000000
--- a/tests/src/com/vaadin/tests/layouts/WidgetImplementationSwap.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package com.vaadin.tests.layouts;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.AbsoluteLayout;
-import com.vaadin.ui.AbstractLayout;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-@SuppressWarnings("deprecation")
-public class WidgetImplementationSwap extends TestBase {
-
-    @Override
-    protected void setup() {
-        setTheme("tests-tickets");
-
-        {
-            final AbstractLayout layout = new AbsoluteLayout();
-            layout.setCaption(layout.getClass().getSimpleName());
-            layout.setStyleName("borders");
-            layout.setWidth("500px");
-            layout.setHeight("50px");
-            addComponent(layout);
-            final TextField tf = new TextField();
-            layout.addComponent(tf);
-            Button b = new Button("-> TextArea", new Button.ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    if (tf.getRows() == 0) {
-                        tf.setRows(3);
-                        event.getButton().setCaption("Move");
-                    } else {
-                        layout.setCaption(layout.getClass().getSimpleName()
-                                + " done");
-                        event.getButton().setCaption("done");
-                    }
-
-                }
-            });
-            addComponent(b);
-        }
-        {
-            final AbstractLayout layout = new VerticalLayout();
-            layout.setCaption(layout.getClass().getSimpleName());
-            layout.setStyleName("borders");
-            layout.setWidth("500px");
-            layout.setHeight("50px");
-            addComponent(layout);
-            final TextField tf = new TextField();
-            layout.addComponent(tf);
-            Button b = new Button("-> TextArea", new Button.ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    if (tf.getRows() == 0) {
-                        tf.setRows(3);
-                        event.getButton().setCaption("Move");
-                    } else {
-                        layout.setCaption(layout.getClass().getSimpleName()
-                                + " done");
-                        event.getButton().setCaption("done");
-                    }
-
-                }
-            });
-            addComponent(b);
-        }
-
-        {
-            final AbstractLayout layout = new HorizontalLayout();
-            layout.setCaption(layout.getClass().getSimpleName());
-            layout.setStyleName("borders");
-            layout.setWidth("500px");
-            layout.setHeight("50px");
-            addComponent(layout);
-            final TextField tf = new TextField();
-            layout.addComponent(tf);
-            Button b = new Button("-> TextArea", new Button.ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    if (tf.getRows() == 0) {
-                        tf.setRows(3);
-                        event.getButton().setCaption("Move");
-                    } else {
-                        layout.setCaption(layout.getClass().getSimpleName()
-                                + " done");
-                        event.getButton().setCaption("done");
-                    }
-
-                }
-            });
-            addComponent(b);
-        }
-
-        {
-            final AbstractLayout layout = new GridLayout();
-            layout.setCaption(layout.getClass().getSimpleName());
-            layout.setStyleName("borders");
-            layout.setWidth("500px");
-            layout.setHeight("50px");
-            addComponent(layout);
-            final TextField tf = new TextField();
-            layout.addComponent(tf);
-            Button b = new Button("-> TextArea", new Button.ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    if (tf.getRows() == 0) {
-                        tf.setRows(3);
-                        event.getButton().setCaption("Move");
-                    } else {
-                        layout.setCaption(layout.getClass().getSimpleName()
-                                + " done");
-                        event.getButton().setCaption("done");
-                    }
-
-                }
-            });
-            addComponent(b);
-        }
-
-        {
-            final AbstractLayout layout = new CssLayout();
-            layout.setCaption(layout.getClass().getSimpleName());
-            layout.setStyleName("borders");
-            layout.setWidth("500px");
-            layout.setHeight("50px");
-            addComponent(layout);
-            final TextField tf = new TextField();
-            layout.addComponent(tf);
-            Button b = new Button("-> TextArea", new Button.ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    if (tf.getRows() == 0) {
-                        tf.setRows(3);
-                        event.getButton().setCaption("Move");
-                    } else {
-                        layout.setCaption(layout.getClass().getSimpleName()
-                                + " done");
-                        event.getButton().setCaption("done");
-                    }
-
-                }
-            });
-            addComponent(b);
-        }
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "First click turns TextField into a TextArea (on the client); second click modifies the layout - widget should still be a TextArea.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5457;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/layouttester/AbstractLayoutTests.java b/tests/src/com/vaadin/tests/layouts/layouttester/AbstractLayoutTests.java
deleted file mode 100644
index 9bfbebc439..0000000000
--- a/tests/src/com/vaadin/tests/layouts/layouttester/AbstractLayoutTests.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.vaadin.tests.layouts.layouttester;
-
-import com.vaadin.ui.Layout;
-
-public abstract class AbstractLayoutTests {
-
-    protected static final String FOLDER_16_PNG = "../icons/runo/16/folder.png";
-    protected static final String CALENDAR_32_PNG = "../runo/icons/32/calendar.png";
-    protected static final String LOCK_16_PNG = "../runo/icons/16/lock.png";
-    protected static final String GLOBE_16_PNG = "../runo/icons/16/globe.png";
-
-    abstract protected Layout getCaptionsTests();
-
-    abstract protected Layout getIconsTests();
-
-    abstract protected Layout getRequiredErrorIndicatorsTests();
-
-    abstract protected Layout getAlignmentTests();
-
-    abstract protected Layout getExpandRatiosTests();
-
-    abstract protected Layout getMarginSpacingTests();
-
-    abstract protected Layout getComponentAddReplaceMoveTests();
-
-    abstract protected Layout getComponentSizingTests();
-
-    abstract protected Layout getLayoutSizingTests();
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/layouttester/GridLayoutTests.java b/tests/src/com/vaadin/tests/layouts/layouttester/GridLayoutTests.java
deleted file mode 100644
index 6b56d93a30..0000000000
--- a/tests/src/com/vaadin/tests/layouts/layouttester/GridLayoutTests.java
+++ /dev/null
@@ -1,593 +0,0 @@
-package com.vaadin.tests.layouts.layouttester;
-
-import java.util.Date;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.SystemError;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.terminal.UserError;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.AbstractField;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.InlineDateField;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.themes.Reindeer;
-
-public class GridLayoutTests extends AbstractLayoutTests {
-
-    private AbstractComponent rc1, col1, col2, col3, row1, row2, row3, x3, x22;
-
-    public GridLayoutTests(Application application) {
-        super();
-    }
-
-    @Override
-    protected Layout getAlignmentTests() {
-        HorizontalLayout hlo = new HorizontalLayout();
-        hlo.setSpacing(true);
-        GridLayout glo = getTestGrid();
-        glo.addStyleName(Reindeer.LAYOUT_WHITE);
-        Alignment[] alignments = new Alignment[] { Alignment.BOTTOM_LEFT,
-                Alignment.BOTTOM_CENTER, Alignment.BOTTOM_RIGHT,
-                Alignment.MIDDLE_LEFT, Alignment.MIDDLE_CENTER,
-                Alignment.MIDDLE_RIGHT, Alignment.TOP_LEFT,
-                Alignment.TOP_CENTER, Alignment.TOP_RIGHT };
-
-        glo.replaceComponent(col1, col1 = new TextField());
-        glo.replaceComponent(col2, col2 = new TextField());
-        glo.replaceComponent(col3, col3 = new TextField());
-        ((TextField) col1).setValue("BOTTOM_RIGHT");
-        ((TextField) col2).setValue("BOTTOM_LEFT");
-        ((TextField) col3).setValue("BOTTOM_CENTER");
-        glo.setComponentAlignment(col2, alignments[0]);
-        glo.setComponentAlignment(col3, alignments[1]);
-        glo.setComponentAlignment(col1, alignments[2]);
-
-        glo.setComponentAlignment(row1, alignments[3]);
-        glo.setComponentAlignment(row2, alignments[4]);
-        glo.setComponentAlignment(row3, alignments[5]);
-        hlo.addComponent(glo);
-        glo = getTestGrid();
-        glo.replaceComponent(row1, row1 = new DateField());
-        glo.replaceComponent(row2, row2 = new DateField());
-        glo.replaceComponent(row3, row3 = new DateField());
-        glo.setComponentAlignment(col2, alignments[6]);
-        glo.setComponentAlignment(col3, alignments[7]);
-        glo.setComponentAlignment(col1, alignments[8]);
-        hlo.addComponent(glo);
-        return hlo;
-    }
-
-    @Override
-    protected Layout getCaptionsTests() {
-        GridLayout glo = getTestGrid();
-        glo.setWidth("600px");
-        String[] captions = new String[] {
-                "",
-                "abcdefghijklmnopq",
-                "abc def hij klm nop qrs tuv xyz qaz wsx edc rfv tgb yhn ujm mko nji bhu vgy cft cde" };
-        glo.replaceComponent(col1, col1 = new TextField());
-        glo.replaceComponent(col2, col2 = new TextField());
-        glo.replaceComponent(col3, col3 = new TextField());
-
-        col1.setCaption(captions[0]);
-        col2.setCaption(captions[1]);
-        col3.setCaption(captions[2]);
-        col3.setIcon(new ThemeResource(LOCK_16_PNG));
-
-        glo.replaceComponent(row1, row1 = new Label());
-        glo.replaceComponent(row2, row2 = new Label());
-        glo.replaceComponent(row3, row3 = new Label());
-
-        row1.setCaption(captions[0]);
-        row2.setCaption(captions[1]);
-        row3.setCaption(captions[2]);
-
-        glo.replaceComponent(x3, x3 = getTestTabsheet());
-        glo.replaceComponent(x22, x22 = getTestTable());
-        x22.setComponentError(new UserError("component error, user error"));
-
-        x3.setCaption(captions[1]);
-        x22.setCaption(captions[2]);
-
-        return glo;
-    }
-
-    @Override
-    protected Layout getComponentAddReplaceMoveTests() {
-        final GridLayout glo = getTestGrid();
-        glo.setHeight("350px");
-        Layout baseLayout = getBaseLayout();
-        final Button button1 = new Button("Test add");
-        final Button button2 = new Button("Test replace");
-        final Button button3 = new Button("Test move");
-        final Button button4 = new Button("Test remove comp 1,1");
-        final Button button5 = new Button("Test remove row 0");
-        final Button button6 = new Button("Test remove comp row3");
-
-        baseLayout.addComponent(button1);
-        baseLayout.addComponent(button2);
-        baseLayout.addComponent(button3);
-        baseLayout.addComponent(button4);
-        baseLayout.addComponent(button5);
-        baseLayout.addComponent(button6);
-        baseLayout.addComponent(glo);
-        button1.setEnabled(true);
-        button2.setEnabled(false);
-        button3.setEnabled(false);
-        button4.setEnabled(false);
-        button5.setEnabled(false);
-        button6.setEnabled(false);
-
-        final HorizontalLayout source = new HorizontalLayout();
-        source.addComponent(new Label("MOVE LABEL 1"));
-        source.addComponent(new Label("MOVE LABEL 2"));
-
-        final AbstractComponent cc1 = getTestTabsheet();
-        cc1.setCaption("ADDED COMPONENT");
-
-        final AbstractComponent cc2 = getTestTabsheet();
-        cc2.setCaption("REPLACEMENT COMPONENT");
-
-        button1.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.addComponent(cc1);
-                button1.setEnabled(false);
-                button2.setEnabled(true);
-            }
-        });
-        button2.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.replaceComponent(x22, cc2);
-                button2.setEnabled(false);
-                button3.setEnabled(true);
-            }
-        });
-        button3.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.moveComponentsFrom(source);
-                button3.setEnabled(false);
-                button4.setEnabled(true);
-            }
-        });
-        button4.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.removeComponent(1, 1);
-                button4.setEnabled(false);
-                button5.setEnabled(true);
-            }
-        });
-
-        button5.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.removeRow(0);
-                button5.setEnabled(false);
-                button6.setEnabled(true);
-            }
-        });
-        button6.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.removeComponent(row3);
-                button6.setEnabled(false);
-            }
-        });
-
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getComponentSizingTests() {
-        final GridLayout glo = getTestGrid();
-        glo.setHeight("350px");
-        Layout baseLayout = getBaseLayout();
-        final Button button1 = new Button("full size, 3x1");
-        final Button button2 = new Button("200 px width, 3x1");
-        final Button button3 = new Button("200 px width, table");
-        final Button button4 = new Button("undefined size+add, table");
-
-        glo.replaceComponent(x22, x22 = getTestTable());
-
-        baseLayout.addComponent(button1);
-        baseLayout.addComponent(button2);
-        baseLayout.addComponent(button3);
-        baseLayout.addComponent(button4);
-        baseLayout.addComponent(glo);
-        button1.setEnabled(true);
-        button2.setEnabled(false);
-        button3.setEnabled(false);
-        button4.setEnabled(false);
-
-        button1.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                x3.setSizeFull();
-                button1.setEnabled(false);
-                button2.setEnabled(true);
-            }
-        });
-        button2.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                x3.setWidth("200px");
-                button2.setEnabled(false);
-                button3.setEnabled(true);
-            }
-        });
-        button3.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                x22.setWidth("200px");
-                button3.setEnabled(false);
-                button4.setEnabled(true);
-            }
-        });
-        button4.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                x22.setSizeUndefined();
-                ((Table) x22).addItem(new Object[] { "NEW ROW1" }, 3);
-                ((Table) x22).addItem(new Object[] { "NEW ROW2" }, 4);
-                button4.setEnabled(false);
-            }
-        });
-
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getExpandRatiosTests() {
-        final GridLayout glo = getTestGrid();
-        Layout baseLayout = getBaseLayout();
-        final Button button1 = new Button("set col 3 expand 1");
-        final Button button2 = new Button("set all cols expand 0.25");
-        final Button button3 = new Button("set row 0 expand 0.5");
-        final Button button4 = new Button("set row 3 expand 0.2");
-        glo.setHeight("400px");
-        glo.replaceComponent(x22, x22 = getTestTable());
-
-        baseLayout.addComponent(button1);
-        baseLayout.addComponent(button2);
-        baseLayout.addComponent(button3);
-        baseLayout.addComponent(button4);
-        baseLayout.addComponent(glo);
-        button1.setEnabled(true);
-        button2.setEnabled(false);
-        button3.setEnabled(false);
-        button4.setEnabled(false);
-
-        button1.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.setColumnExpandRatio(3, 1);
-                button1.setEnabled(false);
-                button2.setEnabled(true);
-            }
-        });
-        button2.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.setColumnExpandRatio(0, 0.25f);
-                glo.setColumnExpandRatio(1, 0.25f);
-                glo.setColumnExpandRatio(2, 0.25f);
-                glo.setColumnExpandRatio(3, 0.25f);
-                button2.setEnabled(false);
-                button3.setEnabled(true);
-            }
-        });
-        button3.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.setRowExpandRatio(0, 0.5f);
-                button3.setEnabled(false);
-                button4.setEnabled(true);
-            }
-        });
-        button4.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.setRowExpandRatio(3, 0.3f);
-                button4.setEnabled(false);
-            }
-        });
-
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getIconsTests() {
-        GridLayout glo = getTestGrid();
-        glo.setWidth("600px");
-        Resource[] icons = new Resource[] { new ThemeResource(CALENDAR_32_PNG),
-                new ThemeResource(LOCK_16_PNG) };
-
-        glo.replaceComponent(col1, col1 = new TextField("TEXTFIELD"));
-        glo.replaceComponent(col2, col2 = new Label("LABEL"));
-        glo.replaceComponent(col3, col3 = new Link("LINK", null));
-
-        col1.setIcon(icons[0]);
-        col2.setIcon(icons[1]);
-        col3.setIcon(icons[0]);
-        rc1.setIcon(icons[1]);
-        col3.setCaption("long test caption bewucbwuebco or bmort b cbwecubw wbeucwe asdasd asdasda asdasd");
-        col3.setComponentError(new UserError("component error, user error"));
-
-        glo.replaceComponent(row1, row1 = new DateField());
-        glo.replaceComponent(row2, row2 = new NativeSelect());
-        glo.replaceComponent(row3, row3 = getTestTabsheet());
-
-        row1.setIcon(icons[1]);
-        row2.setIcon(icons[0]);
-        row3.setIcon(icons[1]);
-
-        glo.replaceComponent(x3, x3 = new CheckBox("CHECKBOX"));
-        glo.replaceComponent(x22, x22 = new Panel("PANEL"));
-        x22.setIcon(new ThemeResource(CALENDAR_32_PNG));
-
-        x3.setIcon(icons[0]);
-        x22.setIcon(icons[1]);
-
-        return glo;
-    }
-
-    @Override
-    protected Layout getLayoutSizingTests() {
-        final GridLayout glo = getTestGrid();
-        Layout baseLayout = getBaseLayout();
-        baseLayout.setWidth("500px");
-        baseLayout.setHeight("500px");
-        final Button button1 = new Button("Set fixed height 350px");
-        final Button button2 = new Button(
-                "Set undefined size and add component");
-        final Button button3 = new Button("Set fixed width and height 75%");
-        final Button button4 = new Button("Set size full");
-
-        glo.replaceComponent(x22, x22 = getTestTable());
-
-        baseLayout.addComponent(button1);
-        baseLayout.addComponent(button2);
-        baseLayout.addComponent(button3);
-        baseLayout.addComponent(button4);
-        baseLayout.addComponent(glo);
-        button1.setEnabled(true);
-        button2.setEnabled(false);
-        button3.setEnabled(false);
-        button4.setEnabled(false);
-
-        button1.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.setHeight("350px");
-                button1.setEnabled(false);
-                button2.setEnabled(true);
-            }
-        });
-        button2.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.setSizeUndefined();
-                glo.addComponent(new Label("--- NEW LABEL ---"));
-                button2.setEnabled(false);
-                button3.setEnabled(true);
-            }
-        });
-        button3.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.setWidth("75%");
-                glo.setHeight("75%");
-                button3.setEnabled(false);
-                button4.setEnabled(true);
-            }
-        });
-        button4.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.setSizeFull();
-                button4.setEnabled(false);
-            }
-        });
-
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getMarginSpacingTests() {
-        final GridLayout glo = getTestGrid();
-        Layout baseLayout = getBaseLayout();
-        baseLayout.setWidth("500px");
-        baseLayout.setHeight("500px");
-        final Button button1 = new Button("Set margin on");
-        final Button button2 = new Button("Set spacing on");
-        final Button button3 = new Button("Set margin off");
-        final Button button4 = new Button("Set spacing off");
-
-        baseLayout.addComponent(button1);
-        baseLayout.addComponent(button2);
-        baseLayout.addComponent(button3);
-        baseLayout.addComponent(button4);
-        button1.setEnabled(true);
-        button2.setEnabled(false);
-        button3.setEnabled(false);
-        button4.setEnabled(false);
-
-        baseLayout.addComponent(glo);
-
-        button1.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.setMargin(true);
-                button1.setEnabled(false);
-                button2.setEnabled(true);
-            }
-        });
-        button2.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.setSpacing(true);
-                button2.setEnabled(false);
-                button3.setEnabled(true);
-            }
-        });
-        button3.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.setMargin(false);
-                button3.setEnabled(false);
-                button4.setEnabled(true);
-            }
-        });
-        button4.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                glo.setSpacing(false);
-                button4.setEnabled(false);
-            }
-        });
-
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getRequiredErrorIndicatorsTests() {
-        GridLayout glo = getTestGrid();
-        glo.setWidth("600px");
-        Resource[] icons = new Resource[] { new ThemeResource(CALENDAR_32_PNG),
-                new ThemeResource(LOCK_16_PNG) };
-
-        glo.replaceComponent(col1, col1 = new TextField("TEXTFIELD"));
-        glo.replaceComponent(col2, col2 = new Label("LABEL"));
-        glo.replaceComponent(col3, col3 = new Link("LINK", null));
-
-        col1.setIcon(icons[0]);
-        col1.setComponentError(new UserError("component error, user error"));
-        col2.setComponentError(new SystemError("component error, system error"));
-        col3.setComponentError(new UserError("component error, user error"));
-
-        glo.replaceComponent(row1, row1 = new DateField());
-        glo.replaceComponent(row2, row2 = new NativeSelect());
-        glo.replaceComponent(row3, row3 = getTestTabsheet());
-
-        ((AbstractField) col1).setRequired(true);
-        ((AbstractField) col1).setValidationVisible(true);
-        ((AbstractField) col1).setRequiredError("required error");
-
-        ((AbstractField) row1).setRequired(true);
-        ((AbstractField) row1).setValidationVisible(true);
-        ((AbstractField) row1).setRequiredError("required error");
-
-        ((AbstractField) row2).setRequired(true);
-        ((AbstractField) row2).setValidationVisible(true);
-        ((AbstractField) row2).setRequiredError("required error");
-        row2.setComponentError(new UserError("component error, user error"));
-
-        row3.setComponentError(new UserError("component error, user error"));
-        row3.setIcon(icons[1]);
-        row3.setCaption("long test caption bewucbwuebco or bmort b cbwecubw wbeucwe asdasd asdasda asdasd");
-
-        glo.replaceComponent(x3, x3 = new CheckBox("CHECKBOX"));
-        glo.replaceComponent(x22, x22 = new Panel("PANEL"));
-
-        x3.setComponentError(new UserError("component error, user error"));
-        x22.setComponentError(new UserError("component error, user error"));
-        x22.setIcon(icons[0]);
-
-        return glo;
-    }
-
-    private GridLayout getTestGrid() {
-        // Create a 4 by 4 grid layout.
-        GridLayout grid = new GridLayout(4, 4);
-        // Fill out the first row using the cursor.
-        grid.addComponent(rc1 = new Button("R/C 1"));
-
-        grid.addComponent(col1 = new Button("Col " + (grid.getCursorX() + 1)));
-        grid.addComponent(col2 = new Button("Col " + (grid.getCursorX() + 1)));
-        grid.addComponent(col3 = new Button("Col " + (grid.getCursorX() + 1)));
-
-        // Fill out the first column using coordinates.
-
-        grid.addComponent(row1 = new Button("Row " + 1), 0, 1);
-        grid.addComponent(row2 = new Button("Row " + 2), 0, 2);
-        grid.addComponent(row3 = new Button("Row " + 3), 0, 3);
-
-        // Add some components of various shapes.
-        grid.addComponent(x3 = new Button("3x1 button"), 1, 1, 3, 1);
-        grid.addComponent(new Label("1x2 cell"), 1, 2, 1, 3);
-        x22 = new InlineDateField("A 2x2 date field");
-        ((InlineDateField) x22).setResolution(DateField.RESOLUTION_DAY);
-        ((InlineDateField) x22).setValue(new Date(128028960000l));
-        grid.addComponent(x22, 2, 2, 3, 3);
-        grid.setWidth("450px");
-        grid.setHeight("450px");
-        return grid;
-    }
-
-    private VerticalLayout getBaseLayout() {
-        VerticalLayout vlo = new VerticalLayout();
-        vlo.setSizeUndefined();
-        return vlo;
-    }
-
-    private AbstractComponent getTestTabsheet() {
-        TabSheet tabsheet = new TabSheet();
-        tabsheet.setSizeUndefined();
-        tabsheet.addTab(new UndefWideLabel("TAB1"), "TAB1", new ThemeResource(
-                GLOBE_16_PNG));
-        tabsheet.addTab(new UndefWideLabel("TAB2"), "TAB2", null);
-        return tabsheet;
-    }
-
-    private Table getTestTable() {
-        Table t = new Table();
-        t.setSizeUndefined();
-        t.setPageLength(5);
-        t.addContainerProperty("test", String.class, null);
-        t.addItem(new Object[] { "qwertyuiop asdfghjklzxccvbnm,m,." }, 1);
-        t.addItem(new Object[] { "YGVYTCTCTRXRXRXRX" }, 2);
-        return t;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java b/tests/src/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java
deleted file mode 100644
index ff6e76e480..0000000000
--- a/tests/src/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java
+++ /dev/null
@@ -1,559 +0,0 @@
-package com.vaadin.tests.layouts.layouttester;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.SystemError;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.terminal.UserError;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.AbstractField;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.themes.Reindeer;
-
-public class HorizontalLayoutTests extends AbstractLayoutTests {
-
-    public HorizontalLayoutTests(Application application) {
-        super();
-    }
-
-    @Override
-    protected Layout getAlignmentTests() {
-        Layout baseLayout = getBaseLayout();
-        HorizontalLayout vlo = getTestLaytout();
-        AbstractComponent[] components = new AbstractComponent[9];
-        String[] styles = { Reindeer.LAYOUT_BLUE, Reindeer.LAYOUT_WHITE };
-        Alignment[] alignments = new Alignment[] { Alignment.BOTTOM_LEFT,
-                Alignment.BOTTOM_CENTER, Alignment.BOTTOM_RIGHT,
-                Alignment.MIDDLE_LEFT, Alignment.MIDDLE_CENTER,
-                Alignment.MIDDLE_RIGHT, Alignment.TOP_LEFT,
-                Alignment.TOP_CENTER, Alignment.TOP_RIGHT };
-
-        vlo.addStyleName(Reindeer.LAYOUT_WHITE);
-        baseLayout.addComponent(vlo);
-        int index = 0;
-        for (int i = 0; i < components.length; i++) {
-            if (i > 0 && i % 3 == 0) {
-                vlo = getTestLaytout();
-                vlo.addStyleName(styles[index++]);
-                baseLayout.addComponent(vlo);
-            }
-            components[i] = new TextField();
-            ((TextField) components[i]).setValue("FIELD " + i);
-            vlo.addComponent(components[i]);
-            vlo.setComponentAlignment(components[i], alignments[i]);
-        }
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getCaptionsTests() {
-        Layout baseLayout = getBaseLayout();
-        AbstractComponent component = null;
-
-        String[] captions = new String[] {
-                "",
-                "abcdefghijklmnopq",
-                "abc def hij klm nop qrs tuv xyz qaz wsx edc rfv tgb yhn ujm mko nji bhu vgy cft cde" };
-
-        HorizontalLayout vlo = getTestLaytout();
-        for (int i = 0; i < captions.length; i++) {
-            component = new TextField();
-            ((TextField) component).setValue("FIELD " + i);
-            component.setCaption(captions[i]);
-            vlo.addComponent(component);
-        }
-        baseLayout.addComponent(vlo);
-        vlo = getTestLaytout();
-        for (int i = 0; i < captions.length; i++) {
-            component = new Label();
-            ((Label) component).setValue("Label " + i);
-            component.setCaption(captions[i]);
-            vlo.addComponent(component);
-        }
-        baseLayout.addComponent(vlo);
-        vlo = getTestLaytout();
-        for (int i = 0; i < captions.length; i++) {
-            component = new Select();
-            component.setCaption(captions[i]);
-            component.setIcon(new ThemeResource(LOCK_16_PNG));
-            vlo.addComponent(component);
-        }
-        baseLayout.addComponent(vlo);
-        vlo = getTestLaytout();
-        for (int i = 0; i < captions.length; i++) {
-            component = getTestTabsheet();
-            component.setCaption(captions[i]);
-            component.setComponentError(new UserError(
-                    "component error, user error"));
-            vlo.addComponent(component);
-        }
-        baseLayout.addComponent(vlo);
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getComponentAddReplaceMoveTests() {
-        final HorizontalLayout vlo = getTestLaytout();
-        Layout baseLayout = getBaseLayout();
-        final HorizontalLayout source = new HorizontalLayout();
-        source.addComponent(new Label("OTHER LABEL 1"));
-        source.addComponent(new Label("OTHER LABEL 2"));
-
-        final AbstractComponent c1 = new Button("BUTTON");
-        final AbstractComponent c2 = new Label("<b>LABEL</b>",
-                Label.CONTENT_XHTML);
-        final AbstractComponent c3 = new Table("TABLE");
-        c3.setHeight("100px");
-        c3.setWidth("100%");
-
-        final Button addButton = new Button("Test add");
-        final Button replaceButton = new Button("Test replace");
-        final Button moveButton = new Button("Test move");
-        final Button removeButton = new Button("Test remove");
-
-        replaceButton.setEnabled(false);
-        moveButton.setEnabled(false);
-        removeButton.setEnabled(false);
-
-        addButton.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo.addComponent(new TextField());
-                addButton.setEnabled(false);
-                replaceButton.setEnabled(true);
-            }
-        });
-        replaceButton.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo.replaceComponent(c1, c3);
-                replaceButton.setEnabled(false);
-                moveButton.setEnabled(true);
-            }
-        });
-        moveButton.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo.moveComponentsFrom(source);
-                moveButton.setEnabled(false);
-                removeButton.setEnabled(true);
-            }
-        });
-        removeButton.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo.removeComponent(c1);
-                vlo.removeComponent(c2);
-                removeButton.setEnabled(false);
-            }
-        });
-
-        baseLayout.addComponent(addButton);
-        baseLayout.addComponent(replaceButton);
-        baseLayout.addComponent(moveButton);
-        baseLayout.addComponent(removeButton);
-
-        vlo.addComponent(c1);
-        vlo.addComponent(c2);
-        vlo.addComponent(c3);
-        baseLayout.addComponent(vlo);
-
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getComponentSizingTests() {
-        final HorizontalLayout vlo = getTestLaytout();
-        Layout baseLayout = getBaseLayout();
-
-        final AbstractComponent c = getTestTable();
-
-        final Button biggerButton = new Button("full size");
-        final Button smallerButton = new Button("200 px width");
-        final Button originalButton = new Button("undefined size+add");
-
-        baseLayout.addComponent(biggerButton);
-        baseLayout.addComponent(smallerButton);
-        baseLayout.addComponent(originalButton);
-        vlo.addComponent(c);
-        baseLayout.addComponent(vlo);
-
-        biggerButton.setEnabled(true);
-        smallerButton.setEnabled(false);
-        originalButton.setEnabled(false);
-
-        biggerButton.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                c.setSizeFull();
-                biggerButton.setEnabled(false);
-                smallerButton.setEnabled(true);
-            }
-        });
-        smallerButton.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                c.setWidth("200px");
-                smallerButton.setEnabled(false);
-                originalButton.setEnabled(true);
-            }
-        });
-        originalButton.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                originalButton.setEnabled(false);
-                c.setSizeUndefined();
-                ((Table) c)
-                        .addItem(
-                                new Object[] { "VYVTCTC VYVYV ECECCE NIDSD SDMPOM" },
-                                3);
-            }
-        });
-
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getLayoutSizingTests() {
-        final HorizontalLayout vlo = getTestLaytout();
-        vlo.setSpacing(false);
-        vlo.setMargin(false);
-        Layout baseLayout = getBaseLayout();
-        final AbstractComponent c1 = getTestTable();
-        c1.setSizeFull();
-        final AbstractComponent c2 = getTestTable();
-        c2.setSizeFull();
-
-        final Button button1 = new Button("Set fixed height 350px");
-        final Button button2 = new Button(
-                "Set undefined size and add component");
-        final Button button3 = new Button("Set fixed width and height 75%");
-        final Button button4 = new Button("Set size full");
-
-        baseLayout.addComponent(button1);
-        baseLayout.addComponent(button2);
-        baseLayout.addComponent(button3);
-        baseLayout.addComponent(button4);
-        button1.setEnabled(true);
-        button2.setEnabled(false);
-        button3.setEnabled(false);
-        button4.setEnabled(false);
-
-        vlo.addComponent(c1);
-        vlo.addComponent(c2);
-        vlo.setExpandRatio(c1, 0.5f);
-        vlo.setExpandRatio(c2, 0.5f);
-
-        baseLayout.addComponent(vlo);
-
-        button1.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo.setHeight("350px");
-                button1.setEnabled(false);
-                button2.setEnabled(true);
-            }
-        });
-        button2.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo.setSizeUndefined();
-                vlo.addComponent(new Label("--- NEW LABEL ---"));
-                button2.setEnabled(false);
-                button3.setEnabled(true);
-            }
-        });
-        button3.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo.setWidth("75%");
-                vlo.setHeight("75%");
-                button3.setEnabled(false);
-                button4.setEnabled(true);
-            }
-        });
-        button4.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo.setSizeFull();
-                button4.setEnabled(false);
-            }
-        });
-
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getExpandRatiosTests() {
-        final HorizontalLayout vlo = getTestLaytout();
-        Layout baseLayout = getBaseLayout();
-        final AbstractComponent c1 = getTestTable();
-        c1.setSizeFull();
-        final AbstractComponent c2 = getTestTable();
-        c2.setSizeFull();
-
-        final Button button1 = new Button("Expand to 1/undefined");
-        final Button button2 = new Button("Expand to 0.5/0.5");
-        final Button button3 = new Button("Expand to 0.75/0.25");
-
-        baseLayout.addComponent(button1);
-        baseLayout.addComponent(button2);
-        baseLayout.addComponent(button3);
-        button1.setEnabled(true);
-        button2.setEnabled(false);
-        button3.setEnabled(false);
-
-        vlo.addComponent(c1);
-        vlo.addComponent(c2);
-        baseLayout.addComponent(vlo);
-
-        button1.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo.setExpandRatio(c1, 1.0f);
-                button1.setEnabled(false);
-                button2.setEnabled(true);
-            }
-        });
-        button2.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo.setExpandRatio(c1, 0.5f);
-                vlo.setExpandRatio(c2, 0.5f);
-                button2.setEnabled(false);
-                button3.setEnabled(true);
-            }
-        });
-        button3.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo.setExpandRatio(c1, 0.75f);
-                vlo.setExpandRatio(c2, 0.25f);
-                button3.setEnabled(false);
-            }
-        });
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getIconsTests() {
-        HorizontalLayout vlo = getTestLaytout();
-        AbstractComponent[] components = new AbstractComponent[2];
-        Layout baseLayout = getBaseLayout();
-        Resource[] icons = new Resource[] { new ThemeResource(CALENDAR_32_PNG),
-                new ThemeResource(LOCK_16_PNG) };
-
-        for (int i = 0; i < components.length; i++) {
-            components[i] = new TextField();
-            ((TextField) components[i]).setValue("FIELD " + i);
-            components[i].setIcon(icons[i]);
-            components[i]
-                    .setCaption("long test caption bewucbwuebco or bmort b cbwecubw wbeucwe asdasd asdasda asdasd");
-            vlo.addComponent(components[i]);
-        }
-        for (int i = 0; i < components.length; i++) {
-            components[i] = new Label();
-            ((Label) components[i]).setValue("Label " + i);
-            components[i].setIcon(icons[i]);
-            vlo.addComponent(components[i]);
-        }
-        baseLayout.addComponent(vlo);
-        vlo = getTestLaytout();
-        for (int i = 0; i < components.length; i++) {
-            components[i] = new Select();
-            components[i].setIcon(icons[i]);
-            vlo.addComponent(components[i]);
-        }
-        for (int i = 0; i < components.length; i++) {
-            components[i] = new Button();
-            components[i].setComponentError(new UserError(
-                    "component error, user error"));
-            components[i].setIcon(icons[i]);
-            vlo.addComponent(components[i]);
-        }
-        for (int i = 0; i < components.length; i++) {
-            components[i] = new Link("Link", null);
-            components[i].setIcon(icons[i]);
-            vlo.addComponent(components[i]);
-        }
-        baseLayout.addComponent(vlo);
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getMarginSpacingTests() {
-        final HorizontalLayout vlo = getTestLaytout();
-        vlo.setSpacing(false);
-        vlo.setMargin(false);
-        Layout baseLayout = getBaseLayout();
-        final AbstractComponent c1 = getTestTable();
-        c1.setSizeFull();
-        final AbstractComponent c2 = getTestTable();
-        c2.setSizeFull();
-
-        final Button button1 = new Button("Set margin on");
-        final Button button2 = new Button("Set spacing on");
-        final Button button3 = new Button("Set margin off");
-        final Button button4 = new Button("Set spacing off");
-
-        baseLayout.addComponent(button1);
-        baseLayout.addComponent(button2);
-        baseLayout.addComponent(button3);
-        baseLayout.addComponent(button4);
-        button1.setEnabled(true);
-        button2.setEnabled(false);
-        button3.setEnabled(false);
-        button4.setEnabled(false);
-
-        vlo.addComponent(c1);
-        vlo.addComponent(c2);
-        vlo.setExpandRatio(c1, 0.5f);
-        vlo.setExpandRatio(c2, 0.5f);
-        baseLayout.addComponent(vlo);
-
-        button1.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo.setMargin(true);
-                button1.setEnabled(false);
-                button2.setEnabled(true);
-            }
-        });
-        button2.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo.setSpacing(true);
-                button2.setEnabled(false);
-                button3.setEnabled(true);
-            }
-        });
-        button3.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo.setMargin(false);
-                button3.setEnabled(false);
-                button4.setEnabled(true);
-            }
-        });
-        button4.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo.setSpacing(false);
-                button4.setEnabled(false);
-            }
-        });
-
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getRequiredErrorIndicatorsTests() {
-        HorizontalLayout vlo = getTestLaytout();
-        Layout baseLayout = getBaseLayout();
-        AbstractComponent[] components = new AbstractComponent[4];
-        components[0] = new Label("LABEL");
-        components[0].setSizeUndefined();
-        components[1] = new Button("BUTTON");
-        components[2] = getTestTable();
-        components[3] = getTestTabsheet();
-        components[3].setIcon(new ThemeResource(LOCK_16_PNG));
-
-        AbstractField[] fields = new AbstractField[5];
-        fields[0] = new TextField();
-        fields[0].setRequired(true);
-        fields[0].setValidationVisible(true);
-        fields[0].setRequiredError("required error");
-
-        fields[1] = new TextField();
-        fields[1].setValue("TEXTFIELD2");
-        fields[1]
-                .setComponentError(new UserError("component error, user error"));
-
-        fields[2] = new Select();
-        fields[2].setComponentError(new SystemError(
-                "component error, system error"));
-        fields[3] = new DateField();
-        fields[3].setComponentError(new SystemError(
-                "component error, system error"));
-
-        fields[4] = new CheckBox();
-        fields[4]
-                .setComponentError(new UserError("component error, user error"));
-
-        for (int i = 0; i < components.length; i++) {
-            components[i].setComponentError(new UserError(
-                    "component error, user error"));
-            vlo.addComponent(components[i]);
-        }
-        baseLayout.addComponent(vlo);
-        vlo = getTestLaytout();
-        for (int i = 0; i < fields.length; i++) {
-            vlo.addComponent(fields[i]);
-        }
-        baseLayout.addComponent(vlo);
-        return baseLayout;
-    }
-
-    private VerticalLayout getBaseLayout() {
-        VerticalLayout vlo = new VerticalLayout();
-        vlo.setSizeUndefined();
-        return vlo;
-    }
-
-    private HorizontalLayout getTestLaytout() {
-        HorizontalLayout vlo = new HorizontalLayout();
-        vlo.setHeight("100px");
-        vlo.setWidth("750px");
-        return vlo;
-    }
-
-    private AbstractComponent getTestTabsheet() {
-        TabSheet tabsheet = new TabSheet();
-        tabsheet.setSizeUndefined();
-        tabsheet.addTab(new UndefWideLabel("TAB1"), "TAB1", new ThemeResource(
-                GLOBE_16_PNG));
-        tabsheet.addTab(new UndefWideLabel("TAB2"), "TAB2", null);
-        return tabsheet;
-    }
-
-    private Table getTestTable() {
-        Table t = new Table();
-        t.setSizeUndefined();
-        t.setPageLength(5);
-        t.addContainerProperty("test", String.class, null);
-        t.addItem(new Object[] { "qwertyuiop asdfghjkl zxccvbnm,m,." }, 1);
-        t.addItem(new Object[] { "YGVYTCTCTRXRXRXRX" }, 2);
-        return t;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/layouts/layouttester/LayoutTesterApplication.html b/tests/src/com/vaadin/tests/layouts/layouttester/LayoutTesterApplication.html
deleted file mode 100644
index b0e2444986..0000000000
--- a/tests/src/com/vaadin/tests/layouts/layouttester/LayoutTesterApplication.html
+++ /dev/null
@@ -1,902 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="" />
-<title>LayoutTesterApplication</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">LayoutTesterApplication</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.layouts.layouttester.LayoutTesterApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>1</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>2</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>3</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>4</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>5</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>6</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>7</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>8</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>9</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>10</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>11</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>12</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>13</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>14</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>15</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>16</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>17</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>18</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>19</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>20</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>21</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>22</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>23</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>24</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>25</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>26</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>27</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>28</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=class com.vaadin.ui.HorizontalLayout</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>29</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>30</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<!-- Only for IE6 so it has time to load images and adjust -->
-<tr>
-	<td>pause</td>
-	<td>2000</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>31</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>32</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>33</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>34</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>35</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>36</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>37</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>38</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>39</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>40</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>41</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>42</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>43</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>44</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>45</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>46</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>47</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>48</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>49</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>50</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>51</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>52</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>53</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>54</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>55</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>56</td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=class com.vaadin.ui.GridLayout</td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>57</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>58</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>59</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>60</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>61</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>62</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>63</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>64</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>65</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>66</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>67</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>68</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>69</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>70</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>71</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>72</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>73</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>74</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>75</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>76</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>77</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>78</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>79</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>80</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>81</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>82</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>83</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>84</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>85</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>86</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>87</td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>88</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/layouts/layouttester/LayoutTesterApplication.java b/tests/src/com/vaadin/tests/layouts/layouttester/LayoutTesterApplication.java
deleted file mode 100644
index 6f73a42497..0000000000
--- a/tests/src/com/vaadin/tests/layouts/layouttester/LayoutTesterApplication.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package com.vaadin.tests.layouts.layouttester;
-
-import java.lang.reflect.Method;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.tests.components.AbstractTestCase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.themes.Reindeer;
-
-@SuppressWarnings("serial")
-public class LayoutTesterApplication extends AbstractTestCase {
-    Button nextButton = new Button("Next");
-    private int layoutIndex = -1;
-    private int layoutCount = 1;
-
-    private Method[] layoutGetters;
-    private Window mainWindow;
-    private NativeSelect layoutSelector;
-
-    @Override
-    public void init() {
-        mainWindow = new Window("LayoutTesterApplication");
-        setMainWindow(mainWindow);
-        loadLayoutGetters();
-        nextLaytout();
-
-        nextButton.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = -1577298910202253538L;
-
-            public void buttonClick(ClickEvent event) {
-                nextLaytout();
-            }
-        });
-    }
-
-    private void nextLaytout() {
-        try {
-            mainWindow.removeAllComponents();
-            HorizontalLayout vlo = new HorizontalLayout();
-            vlo.setSpacing(true);
-            ++layoutIndex;
-            if (layoutIndex >= layoutCount) {
-                layoutIndex = 0;
-            }
-            mainWindow.addComponent(vlo);
-            vlo.addComponent(nextButton);
-            vlo.addComponent(getLayoutTypeSelect());
-            vlo.addComponent(new UndefWideLabel(layoutGetters[layoutIndex]
-                    .getName()));
-
-            Layout lo = null;
-            if (layoutSelector.getValue() == VerticalLayout.class) {
-                lo = getVerticalTestLayout(layoutIndex);
-            } else if (layoutSelector.getValue() == HorizontalLayout.class) {
-                lo = getHorizontalTestLayout(layoutIndex);
-            } else if (layoutSelector.getValue() == GridLayout.class) {
-                lo = getGridTestLayout(layoutIndex);
-            }
-            if (lo != null) {
-                lo.addStyleName(Reindeer.LAYOUT_BLUE);
-                mainWindow.addComponent(lo);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new RuntimeException(e);
-        }
-    }
-
-    public void loadLayoutGetters() {
-        layoutGetters = AbstractLayoutTests.class.getDeclaredMethods();
-        layoutCount = layoutGetters.length;
-    }
-
-    public Layout getVerticalTestLayout(int index) throws Exception {
-        VerticalLayoutTests vlotest = new VerticalLayoutTests(this);
-        return (Layout) layoutGetters[index].invoke(vlotest, (Object[]) null);
-    }
-
-    public Layout getHorizontalTestLayout(int index) throws Exception {
-        HorizontalLayoutTests hlotest = new HorizontalLayoutTests(this);
-        return (Layout) layoutGetters[index].invoke(hlotest, (Object[]) null);
-    }
-
-    public Layout getGridTestLayout(int index) throws Exception {
-        GridLayoutTests hlotest = new GridLayoutTests(this);
-        return (Layout) layoutGetters[index].invoke(hlotest, (Object[]) null);
-    }
-
-    private NativeSelect getLayoutTypeSelect() {
-        if (layoutSelector == null) {
-            layoutSelector = new NativeSelect();
-            layoutSelector.addItem(VerticalLayout.class);
-            layoutSelector.addItem(HorizontalLayout.class);
-            layoutSelector.addItem(GridLayout.class);
-            layoutSelector.setNullSelectionAllowed(false);
-            layoutSelector.setImmediate(true);
-            layoutSelector.select(VerticalLayout.class);
-            layoutSelector.addListener(new Property.ValueChangeListener() {
-                private static final long serialVersionUID = -605319614765838359L;
-
-                public void valueChange(ValueChangeEvent event) {
-                    layoutIndex = -1;
-                    nextLaytout();
-                }
-            });
-        }
-        return layoutSelector;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Test application for VerticalLayout, HorizontalLayout, and GridLayout";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5334;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/layouttester/UndefWideLabel.java b/tests/src/com/vaadin/tests/layouts/layouttester/UndefWideLabel.java
deleted file mode 100644
index c998ce458a..0000000000
--- a/tests/src/com/vaadin/tests/layouts/layouttester/UndefWideLabel.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.vaadin.tests.layouts.layouttester;
-
-import com.vaadin.ui.Label;
-
-public class UndefWideLabel extends Label {
-
-    public UndefWideLabel(String value) {
-        super(value);
-        setWidth(null);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java b/tests/src/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java
deleted file mode 100644
index 8019ae5aca..0000000000
--- a/tests/src/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java
+++ /dev/null
@@ -1,589 +0,0 @@
-package com.vaadin.tests.layouts.layouttester;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.SystemError;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.terminal.UserError;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.AbstractField;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-
-public class VerticalLayoutTests extends AbstractLayoutTests {
-
-    public VerticalLayoutTests(Application application) {
-        super();
-    }
-
-    @Override
-    protected Layout getAlignmentTests() {
-        Layout baseLayout = getBaseLayout();
-        ((HorizontalLayout) baseLayout).setSpacing(true);
-        VerticalLayout vlo = getTestLaytout();
-        AbstractComponent[] components = new AbstractComponent[9];
-        Alignment[] alignments = new Alignment[] { Alignment.BOTTOM_CENTER,
-                Alignment.BOTTOM_LEFT, Alignment.BOTTOM_RIGHT,
-                Alignment.MIDDLE_CENTER, Alignment.MIDDLE_LEFT,
-                Alignment.MIDDLE_RIGHT, Alignment.TOP_CENTER,
-                Alignment.TOP_LEFT, Alignment.TOP_RIGHT };
-
-        for (int i = 0; i < components.length / 2; i++) {
-            components[i] = new TextField();
-            ((TextField) components[i]).setValue("FIELD " + i);
-            vlo.addComponent(components[i]);
-            vlo.setComponentAlignment(components[i], alignments[i]);
-            vlo.addComponent(new Label("<hr />", Label.CONTENT_XHTML));
-        }
-        baseLayout.addComponent(vlo);
-        vlo = getTestLaytout();
-        for (int i = components.length / 2; i < components.length; i++) {
-            components[i] = new TextField();
-            ((TextField) components[i]).setValue("FIELD " + i);
-            vlo.addComponent(components[i]);
-            vlo.setComponentAlignment(components[i], alignments[i]);
-            vlo.addComponent(new Label("<hr />", Label.CONTENT_XHTML));
-        }
-        baseLayout.addComponent(vlo);
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getCaptionsTests() {
-        Layout baseLayout = getBaseLayout();
-        VerticalLayout vlo = getTestLaytout();
-        AbstractComponent component = null;
-
-        String[] captions = new String[] {
-                "",
-                "abcdefghijklmnopq",
-                "abc def hij klm nop qrs tuv xyz qaz wsx edc rfv tgb yhn ujm mko nji bhu vgy cft cde" };
-
-        for (int i = 0; i < captions.length; i++) {
-            component = new TextField();
-            ((TextField) component).setValue("FIELD " + i);
-            component.setCaption(captions[i]);
-            vlo.addComponent(component);
-        }
-        for (int i = 0; i < captions.length; i++) {
-            component = new Label();
-            ((Label) component).setValue("Label " + i);
-            component.setCaption(captions[i]);
-            vlo.addComponent(component);
-        }
-        baseLayout.addComponent(vlo);
-        vlo = getTestLaytout();
-        for (int i = 0; i < captions.length; i++) {
-            component = new Select();
-            component.setCaption(captions[i]);
-            component.setIcon(new ThemeResource(LOCK_16_PNG));
-            vlo.addComponent(component);
-        }
-        for (int i = 0; i < captions.length; i++) {
-            component = getTestTabsheet();
-            component.setCaption(captions[i]);
-            component.setComponentError(new UserError(
-                    "component error, user error"));
-            vlo.addComponent(component);
-        }
-        baseLayout.addComponent(vlo);
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getComponentAddReplaceMoveTests() {
-        Layout baseLayout = getBaseLayout();
-        final VerticalLayout vlo = getTestLaytout();
-        final VerticalLayout vlo2 = getTestLaytout();
-
-        final HorizontalLayout source = new HorizontalLayout();
-        source.addComponent(new Label("OTHER LABEL 1"));
-        source.addComponent(new Label("OTHER LABEL 2"));
-
-        final AbstractComponent c1 = new Button("BUTTON");
-        final AbstractComponent c2 = new Label("<b>LABEL</b>",
-                Label.CONTENT_XHTML);
-        final AbstractComponent c3 = new Table("TABLE");
-        c3.setHeight("100px");
-        c3.setWidth("100%");
-
-        final Button addButton = new Button("Test add");
-        final Button replaceButton = new Button("Test replace");
-        final Button moveButton = new Button("Test move");
-        final Button removeButton = new Button("Test remove");
-
-        replaceButton.setEnabled(false);
-        moveButton.setEnabled(false);
-        removeButton.setEnabled(false);
-
-        addButton.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo2.addComponent(new TextField());
-                addButton.setEnabled(false);
-                replaceButton.setEnabled(true);
-            }
-        });
-        replaceButton.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo2.replaceComponent(c1, c3);
-                replaceButton.setEnabled(false);
-                moveButton.setEnabled(true);
-            }
-        });
-        moveButton.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo2.moveComponentsFrom(source);
-                moveButton.setEnabled(false);
-                removeButton.setEnabled(true);
-            }
-        });
-        removeButton.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo2.removeComponent(c1);
-                vlo2.removeComponent(c2);
-                removeButton.setEnabled(false);
-            }
-        });
-
-        vlo.addComponent(addButton);
-        vlo.addComponent(replaceButton);
-        vlo.addComponent(moveButton);
-        vlo.addComponent(removeButton);
-
-        baseLayout.addComponent(vlo);
-        vlo2.addComponent(c1);
-        vlo2.addComponent(c2);
-        vlo2.addComponent(c3);
-        baseLayout.addComponent(vlo2);
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getComponentSizingTests() {
-        Layout baseLayout = getBaseLayout();
-        final VerticalLayout vlo = getTestLaytout();
-
-        final AbstractComponent c = getTestTable();
-
-        final Button biggerButton = new Button("full size");
-        final Button smallerButton = new Button("200 px width");
-        final Button originalButton = new Button("undefined size and add");
-
-        vlo.addComponent(biggerButton);
-        vlo.addComponent(smallerButton);
-        vlo.addComponent(originalButton);
-        baseLayout.addComponent(vlo);
-        final VerticalLayout vlo2 = getTestLaytout();
-        vlo2.addComponent(c);
-        baseLayout.addComponent(vlo2);
-
-        biggerButton.setEnabled(true);
-        smallerButton.setEnabled(false);
-        originalButton.setEnabled(false);
-
-        biggerButton.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                c.setSizeFull();
-                biggerButton.setEnabled(false);
-                smallerButton.setEnabled(true);
-            }
-        });
-        smallerButton.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                c.setWidth("200px");
-                smallerButton.setEnabled(false);
-                originalButton.setEnabled(true);
-            }
-        });
-        originalButton.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                originalButton.setEnabled(false);
-                c.setSizeUndefined();
-                ((Table) c)
-                        .addItem(
-                                new Object[] { "VYVTCTC VYVYV ECECCE NIDSD SDMPOM" },
-                                3);
-            }
-        });
-
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getLayoutSizingTests() {
-        Layout baseLayout = getBaseLayout();
-        final VerticalLayout vlo = getTestLaytout();
-
-        vlo.setSpacing(false);
-        vlo.setMargin(false);
-
-        final AbstractComponent c1 = getTestTable();
-        c1.setSizeFull();
-        final AbstractComponent c2 = getTestTable();
-        c2.setSizeFull();
-
-        final Button button1 = new Button("Set fixed height 350px");
-        final Button button2 = new Button(
-                "Set undefined size and add component");
-        final Button button3 = new Button("Set fixed width and height 75%");
-        final Button button4 = new Button("Set size full");
-
-        vlo.addComponent(button1);
-        vlo.addComponent(button2);
-        vlo.addComponent(button3);
-        vlo.addComponent(button4);
-        baseLayout.addComponent(vlo);
-        final VerticalLayout vlo2 = getTestLaytout();
-
-        button1.setEnabled(true);
-        button2.setEnabled(false);
-        button3.setEnabled(false);
-        button4.setEnabled(false);
-
-        vlo2.addComponent(c1);
-        vlo2.addComponent(new Label("<hr />", Label.CONTENT_XHTML));
-        vlo2.addComponent(c2);
-        vlo2.setExpandRatio(c1, 0.5f);
-        vlo2.setExpandRatio(c2, 0.5f);
-        baseLayout.addComponent(vlo2);
-
-        button1.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo2.setHeight("350px");
-                button1.setEnabled(false);
-                button2.setEnabled(true);
-            }
-        });
-        button2.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo2.setSizeUndefined();
-                vlo2.addComponent(new Label("--- NEW LABEL ---"));
-                button2.setEnabled(false);
-                button3.setEnabled(true);
-            }
-        });
-        button3.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo2.setWidth("75%");
-                vlo2.setHeight("75%");
-                button3.setEnabled(false);
-                button4.setEnabled(true);
-            }
-        });
-        button4.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo2.setSizeFull();
-                button4.setEnabled(false);
-            }
-        });
-
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getExpandRatiosTests() {
-        Layout baseLayout = getBaseLayout();
-        final VerticalLayout vlo = getTestLaytout();
-
-        final AbstractComponent c1 = getTestTable();
-        c1.setSizeFull();
-        final AbstractComponent c2 = getTestTable();
-        c2.setSizeFull();
-
-        final Button button1 = new Button("Expand to 1/undefined");
-        final Button button2 = new Button("Expand to 0.5/0.5");
-        final Button button3 = new Button("Expand to 0.75/0.25");
-
-        vlo.addComponent(button1);
-        vlo.addComponent(button2);
-        vlo.addComponent(button3);
-        button1.setEnabled(true);
-        button2.setEnabled(false);
-        button3.setEnabled(false);
-
-        baseLayout.addComponent(vlo);
-        final VerticalLayout vlo2 = getTestLaytout();
-
-        vlo2.addComponent(c1);
-        vlo2.addComponent(c2);
-        baseLayout.addComponent(vlo2);
-
-        button1.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo2.setExpandRatio(c1, 1.0f);
-                button1.setEnabled(false);
-                button2.setEnabled(true);
-            }
-        });
-        button2.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo2.setExpandRatio(c1, 0.5f);
-                vlo2.setExpandRatio(c2, 0.5f);
-                button2.setEnabled(false);
-                button3.setEnabled(true);
-            }
-        });
-        button3.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo2.setExpandRatio(c1, 0.75f);
-                vlo2.setExpandRatio(c2, 0.25f);
-                button3.setEnabled(false);
-            }
-        });
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getIconsTests() {
-        Layout baseLayout = getBaseLayout();
-        VerticalLayout vlo = getTestLaytout();
-        AbstractComponent[] components = new AbstractComponent[2];
-
-        Resource[] icons = new Resource[] { new ThemeResource(CALENDAR_32_PNG),
-                new ThemeResource(LOCK_16_PNG) };
-
-        for (int i = 0; i < components.length; i++) {
-            components[i] = new TextField();
-            ((TextField) components[i]).setValue("FIELD " + i);
-            components[i].setIcon(icons[i]);
-            components[i]
-                    .setCaption("long test caption bewucbwuebco or bmort b cbwecubw wbeucwe asdasd asdasda asdasd");
-            vlo.addComponent(components[i]);
-        }
-
-        for (int i = 0; i < components.length; i++) {
-            components[i] = new Label();
-            ((Label) components[i]).setValue("Label " + i);
-            components[i].setIcon(icons[i]);
-            vlo.addComponent(components[i]);
-        }
-
-        for (int i = 0; i < components.length; i++) {
-            components[i] = new Select();
-            components[i].setIcon(icons[i]);
-            vlo.addComponent(components[i]);
-        }
-        baseLayout.addComponent(vlo);
-        final VerticalLayout vlo2 = getTestLaytout();
-        for (int i = 0; i < components.length; i++) {
-            components[i] = new Button();
-            components[i].setComponentError(new UserError(
-                    "component error, user error"));
-            components[i].setIcon(icons[i]);
-            vlo2.addComponent(components[i]);
-        }
-
-        for (int i = 0; i < components.length; i++) {
-            components[i] = new Link("Link", null);
-            components[i].setIcon(icons[i]);
-            vlo2.addComponent(components[i]);
-        }
-        baseLayout.addComponent(vlo2);
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getMarginSpacingTests() {
-        Layout baseLayout = getBaseLayout();
-        final VerticalLayout vlo = getTestLaytout();
-        vlo.setSpacing(false);
-        vlo.setMargin(false);
-
-        final AbstractComponent c1 = getTestTable();
-        c1.setSizeFull();
-        final AbstractComponent c2 = getTestTable();
-        c2.setSizeFull();
-
-        final Button button1 = new Button("Set margin on");
-        final Button button2 = new Button("Set spacing on");
-        final Button button3 = new Button("Set margin off");
-        final Button button4 = new Button("Set spacing off");
-
-        vlo.addComponent(button1);
-        vlo.addComponent(button2);
-        vlo.addComponent(button3);
-        vlo.addComponent(button4);
-        button1.setEnabled(true);
-        button2.setEnabled(false);
-        button3.setEnabled(false);
-        button4.setEnabled(false);
-
-        baseLayout.addComponent(vlo);
-        final VerticalLayout vlo2 = getTestLaytout();
-
-        vlo2.addComponent(c1);
-        vlo2.addComponent(new Label("<hr />", Label.CONTENT_XHTML));
-        vlo2.addComponent(c2);
-        vlo2.setExpandRatio(c1, 0.5f);
-        vlo2.setExpandRatio(c2, 0.5f);
-        baseLayout.addComponent(vlo2);
-
-        button1.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo2.setMargin(true);
-                button1.setEnabled(false);
-                button2.setEnabled(true);
-            }
-        });
-        button2.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo2.setSpacing(true);
-                button2.setEnabled(false);
-                button3.setEnabled(true);
-            }
-        });
-        button3.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo2.setMargin(false);
-                button3.setEnabled(false);
-                button4.setEnabled(true);
-            }
-        });
-        button4.addListener(new Button.ClickListener() {
-            private static final long serialVersionUID = 7716267156088629379L;
-
-            public void buttonClick(ClickEvent event) {
-                vlo2.setSpacing(false);
-                button4.setEnabled(false);
-            }
-        });
-
-        return baseLayout;
-    }
-
-    @Override
-    protected Layout getRequiredErrorIndicatorsTests() {
-        Layout baseLayout = getBaseLayout();
-        VerticalLayout vlo = getTestLaytout();
-        AbstractComponent[] components = new AbstractComponent[4];
-        components[0] = new Label("LABEL");
-        components[0].setSizeUndefined();
-        components[1] = new Button("BUTTON");
-        components[2] = getTestTable();
-        components[3] = getTestTabsheet();
-        components[3].setIcon(new ThemeResource(LOCK_16_PNG));
-
-        AbstractField[] fields = new AbstractField[6];
-        fields[0] = new TextField();
-        fields[0].setRequired(true);
-        fields[0].setValidationVisible(true);
-        fields[0].setRequiredError("required error");
-
-        fields[1] = new TextField();
-        fields[1].setValue("TEXTFIELD2");
-        fields[1]
-                .setComponentError(new UserError("component error, user error"));
-
-        fields[2] = new Select();
-        fields[2].setComponentError(new SystemError(
-                "component error, system error"));
-        fields[3] = new DateField();
-        fields[3].setComponentError(new SystemError(
-                "component error, system error"));
-
-        fields[4] = new CheckBox();
-        fields[4]
-                .setComponentError(new UserError("component error, user error"));
-
-        fields[5] = new NativeSelect();
-        fields[5].setRequired(true);
-        fields[5].setValidationVisible(true);
-        fields[5].setRequiredError("required error");
-        fields[5]
-                .setComponentError(new UserError("component error, user error"));
-        fields[5].setIcon(new ThemeResource(CALENDAR_32_PNG));
-
-        for (int i = 0; i < components.length; i++) {
-            components[i].setComponentError(new UserError(
-                    "component error, user error"));
-            vlo.addComponent(components[i]);
-        }
-        baseLayout.addComponent(vlo);
-        final VerticalLayout vlo2 = getTestLaytout();
-        for (int i = 0; i < fields.length; i++) {
-            vlo2.addComponent(fields[i]);
-        }
-
-        baseLayout.addComponent(vlo2);
-        return baseLayout;
-    }
-
-    private HorizontalLayout getBaseLayout() {
-        HorizontalLayout hlo = new HorizontalLayout();
-        hlo.setSizeUndefined();
-        return hlo;
-    }
-
-    private VerticalLayout getTestLaytout() {
-        VerticalLayout vlo = new VerticalLayout();
-        vlo.setHeight("500px");
-        vlo.setWidth("400px");
-        return vlo;
-    }
-
-    private AbstractComponent getTestTabsheet() {
-        TabSheet tabsheet = new TabSheet();
-        tabsheet.setSizeUndefined();
-        tabsheet.addTab(new UndefWideLabel("TAB1"), "TAB1", new ThemeResource(
-                GLOBE_16_PNG));
-        tabsheet.addTab(new UndefWideLabel("TAB2"), "TAB2", null);
-        return tabsheet;
-    }
-
-    private Table getTestTable() {
-        Table t = new Table();
-        t.setSizeUndefined();
-        t.setPageLength(5);
-        t.addContainerProperty("test", String.class, null);
-        t.addItem(new Object[] { "qwertyuiop asdfghjköäxccvbnm,m,." }, 1);
-        t.addItem(new Object[] { "YGVYTCTCTRXRXRXRX" }, 2);
-        return t;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/m.gif b/tests/src/com/vaadin/tests/m.gif
deleted file mode 100644
index 2201bdfc1c..0000000000
Binary files a/tests/src/com/vaadin/tests/m.gif and /dev/null differ
diff --git a/tests/src/com/vaadin/tests/resources/DownloadLargeFileResource.java b/tests/src/com/vaadin/tests/resources/DownloadLargeFileResource.java
deleted file mode 100644
index 3d7379aafe..0000000000
--- a/tests/src/com/vaadin/tests/resources/DownloadLargeFileResource.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.vaadin.tests.resources;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-import com.vaadin.terminal.FileResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-
-public class DownloadLargeFileResource extends TestBase {
-
-    private FileResource hugeFileResource = null;
-    private long fileSize = (long) (1233.2 * 1024.0 * 1024.0);
-
-    @Override
-    protected void setup() {
-        Button b = new Button(
-                "Download a "
-                        + String.format("%.1f", fileSize / 1024.0 / 1024.0)
-                        + "MB file", new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        download();
-                    }
-                });
-        addComponent(b);
-    }
-
-    protected void download() {
-        if (hugeFileResource == null) {
-            createFile();
-        }
-
-        getMainWindow().open(hugeFileResource);
-
-    }
-
-    private void createFile() {
-        try {
-            File hugeFile = File.createTempFile("huge", ".txt");
-            hugeFile.deleteOnExit();
-            BufferedOutputStream os = new BufferedOutputStream(
-                    new FileOutputStream(hugeFile));
-            int writeAtOnce = 1024 * 1024;
-            byte[] b = new byte[writeAtOnce];
-            for (int i = 0; i < fileSize; i += writeAtOnce) {
-                os.write(b);
-            }
-            os.close();
-            hugeFileResource = new FileResource(hugeFile, this);
-        } catch (IOException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Click the button to download huge-file.txt. The file is generated on the first download.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 5356;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/resources/NonExistingFileResource.java b/tests/src/com/vaadin/tests/resources/NonExistingFileResource.java
deleted file mode 100644
index 2299ba4d26..0000000000
--- a/tests/src/com/vaadin/tests/resources/NonExistingFileResource.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.vaadin.tests.resources;
-
-import java.io.File;
-
-import com.vaadin.terminal.FileResource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-
-public class NonExistingFileResource extends TestBase {
-
-    @Override
-    protected void setup() {
-        Button existing = createButton("WEB-INF/web.xml");
-        Button nonExisting = createButton("WEB-INF/web2.xml");
-        addComponent(existing);
-        addComponent(nonExisting);
-
-    }
-
-    private Button createButton(final String filename) {
-        Button b = new Button("Download " + filename);
-        b.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                FileResource res = new FileResource(new File(getContext()
-                        .getBaseDirectory() + "/" + filename),
-                        NonExistingFileResource.this);
-                getMainWindow().open(res);
-
-            }
-        });
-        return b;
-    }
-
-    @Override
-    protected String getDescription() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/resources/ResourceDownload.java b/tests/src/com/vaadin/tests/resources/ResourceDownload.java
deleted file mode 100644
index d7da9c2d63..0000000000
--- a/tests/src/com/vaadin/tests/resources/ResourceDownload.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.vaadin.tests.resources;
-
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import com.vaadin.terminal.StreamResource;
-import com.vaadin.terminal.StreamResource.StreamSource;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-
-public class ResourceDownload extends TestBase {
-
-    @Override
-    public void setup() {
-
-        Button b = new Button("Download (_new)", new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                download("_new");
-            }
-        });
-        addComponent(b);
-
-        b = new Button("Download (_blank)", new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                download("_blank");
-            }
-        });
-        addComponent(b);
-
-        b = new Button("Download ()", new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                download("");
-            }
-        });
-        addComponent(b);
-
-        b = new Button("Download (_top)", new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                download("_top");
-            }
-        });
-        addComponent(b);
-
-        b = new Button("Test", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                ResourceDownload.this.getMainWindow().showNotification(
-                        "Still working");
-            }
-
-        });
-        addComponent(b);
-
-    }
-
-    protected void download(String target) {
-        String filename = "filename";
-        StreamResource streamResource = new StreamResource(new StreamSource() {
-
-            public InputStream getStream() {
-                try {
-                    return new FileInputStream("FIXME C:/temp/file.xls");
-                } catch (FileNotFoundException e) {
-                    // TODO Auto-generated catch block
-                    e.printStackTrace();
-                    return null;
-                }
-            }
-        }, filename + ".xls", this);
-        streamResource.setCacheTime(5000); // no cache (<=0) does not work with
-        // IE8
-        streamResource.setMIMEType("application/x-msexcel");
-
-        getMainWindow().open(streamResource, target);
-
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Downloading with target _new should work, aswell as with target _blank and _top.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 3289;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/BrowserUserAgentParser.java b/tests/src/com/vaadin/tests/server/BrowserUserAgentParser.java
deleted file mode 100644
index e5ce882ffd..0000000000
--- a/tests/src/com/vaadin/tests/server/BrowserUserAgentParser.java
+++ /dev/null
@@ -1,369 +0,0 @@
-package com.vaadin.tests.server;
-
-import junit.framework.TestCase;
-
-import com.vaadin.terminal.gwt.client.VBrowserDetails;
-
-public class BrowserUserAgentParser extends TestCase {
-
-    private static final String FIREFOX30_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6";
-    private static final String FIREFOX30_LINUX = "Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.0.12) Gecko/2009070811 Ubuntu/9.04 (jaunty) Firefox/3.0.12";
-    private static final String FIREFOX35_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 (.NET CLR 3.5.30729) FirePHP/0.4";
-    private static final String FIREFOX36_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)";
-    private static final String FIREFOX36B_MAC = "UAString mozilla/5.0 (macintosh; u; intel mac os x 10.6; en-us; rv:1.9.2) gecko/20100115 firefox/3.6";
-    private static final String FIREFOX_30B5_MAC = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5";
-    private static final String FIREFOX_40B7_WIN = "Mozilla/5.0 (Windows NT 5.1; rv:2.0b7) Gecko/20100101 Firefox/4.0b7";
-    private static final String FIREFOX_40B11_WIN = "Mozilla/5.0 (Windows NT 5.1; rv:2.0b11) Gecko/20100101 Firefox/4.0b11";
-    private static final String KONQUEROR_LINUX = "Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Exabot-Thumbnails)";
-
-    private static final String IE6_WINDOWS = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";
-    private static final String IE7_WINDOWS = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
-
-    private static final String IE8_WINDOWS = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)";
-    private static final String IE8_IN_IE7_MODE_WINDOWS = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)";
-
-    private static final String IE9_BETA_IN_IE7_MODE_WINDOWS_7 = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)";
-    private static final String IE9_BETA_IN_IE8_MODE_WINDOWS_7 = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)";
-    private static final String IE9_BETA_WINDOWS_7 = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";
-
-    // "Version/" was added in 10.00
-    private static final String OPERA964_WINDOWS = "Opera/9.64(Windows NT 5.1; U; en) Presto/2.1.1";
-    private static final String OPERA1010_WINDOWS = "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10";
-    private static final String OPERA1050_WINDOWS = "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.5.22 Version/10.50";
-
-    private static final String CHROME3_MAC = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.198 Safari/532.0";
-    private static final String CHROME4_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.89 Safari/532.5";
-
-    private static final String SAFARI3_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 5.1; cs-CZ) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.29";
-    private static final String SAFARI4_MAC = "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; en-us) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7";
-
-    public void testSafari3() {
-        VBrowserDetails bd = new VBrowserDetails(SAFARI3_WINDOWS);
-        assertWebKit(bd);
-        assertSafari(bd);
-        assertBrowserMajorVersion(bd, 3);
-        assertBrowserMinorVersion(bd, 2);
-        assertEngineVersion(bd, 525.0f);
-        assertWindows(bd);
-    }
-
-    public void testSafari4() {
-        VBrowserDetails bd = new VBrowserDetails(SAFARI4_MAC);
-        assertWebKit(bd);
-        assertSafari(bd);
-        assertBrowserMajorVersion(bd, 4);
-        assertBrowserMinorVersion(bd, 0);
-        assertEngineVersion(bd, 531f);
-        assertMacOSX(bd);
-    }
-
-    public void testChrome3() {
-        VBrowserDetails bd = new VBrowserDetails(CHROME3_MAC);
-        assertWebKit(bd);
-        assertChrome(bd);
-        assertBrowserMajorVersion(bd, 3);
-        assertBrowserMinorVersion(bd, 0);
-        assertEngineVersion(bd, 532.0f);
-        assertMacOSX(bd);
-    }
-
-    public void testChrome4() {
-        VBrowserDetails bd = new VBrowserDetails(CHROME4_WINDOWS);
-        assertWebKit(bd);
-        assertChrome(bd);
-        assertBrowserMajorVersion(bd, 4);
-        assertBrowserMinorVersion(bd, 0);
-        assertEngineVersion(bd, 532f);
-        assertWindows(bd);
-    }
-
-    public void testFirefox3() {
-        VBrowserDetails bd = new VBrowserDetails(FIREFOX30_WINDOWS);
-        assertGecko(bd);
-        assertFirefox(bd);
-        assertBrowserMajorVersion(bd, 3);
-        assertBrowserMinorVersion(bd, 0);
-        assertEngineVersion(bd, 1.9f);
-        assertWindows(bd);
-
-        bd = new VBrowserDetails(FIREFOX30_LINUX);
-        assertGecko(bd);
-        assertFirefox(bd);
-        assertBrowserMajorVersion(bd, 3);
-        assertBrowserMinorVersion(bd, 0);
-        assertEngineVersion(bd, 1.9f);
-        assertLinux(bd);
-    }
-
-    public void testFirefox35() {
-        VBrowserDetails bd = new VBrowserDetails(FIREFOX35_WINDOWS);
-        assertGecko(bd);
-        assertFirefox(bd);
-        assertBrowserMajorVersion(bd, 3);
-        assertBrowserMinorVersion(bd, 5);
-        assertEngineVersion(bd, 1.9f);
-        assertWindows(bd);
-    }
-
-    public void testFirefox36() {
-        VBrowserDetails bd = new VBrowserDetails(FIREFOX36_WINDOWS);
-        assertGecko(bd);
-        assertFirefox(bd);
-        assertBrowserMajorVersion(bd, 3);
-        assertBrowserMinorVersion(bd, 6);
-        assertEngineVersion(bd, 1.9f);
-        assertWindows(bd);
-    }
-
-    public void testFirefox30b5() {
-        VBrowserDetails bd = new VBrowserDetails(FIREFOX_30B5_MAC);
-        assertGecko(bd);
-        assertFirefox(bd);
-        assertBrowserMajorVersion(bd, 3);
-        assertBrowserMinorVersion(bd, 0);
-        assertEngineVersion(bd, 1.9f);
-        assertMacOSX(bd);
-    }
-
-    public void testFirefox40b11() {
-        VBrowserDetails bd = new VBrowserDetails(FIREFOX_40B11_WIN);
-        assertGecko(bd);
-        assertFirefox(bd);
-        assertBrowserMajorVersion(bd, 4);
-        assertBrowserMinorVersion(bd, 0);
-        assertEngineVersion(bd, 2.0f);
-        assertWindows(bd);
-    }
-
-    public void testFirefox40b7() {
-        VBrowserDetails bd = new VBrowserDetails(FIREFOX_40B7_WIN);
-        assertGecko(bd);
-        assertFirefox(bd);
-        assertBrowserMajorVersion(bd, 4);
-        assertBrowserMinorVersion(bd, 0);
-        assertEngineVersion(bd, 2.0f);
-        assertWindows(bd);
-    }
-
-    public void testKonquerorLinux() {
-        // Just ensure detection does not crash
-        VBrowserDetails bd = new VBrowserDetails(KONQUEROR_LINUX);
-        assertLinux(bd);
-    }
-
-    public void testFirefox36b() {
-        VBrowserDetails bd = new VBrowserDetails(FIREFOX36B_MAC);
-        assertGecko(bd);
-        assertFirefox(bd);
-        assertBrowserMajorVersion(bd, 3);
-        assertBrowserMinorVersion(bd, 6);
-        assertEngineVersion(bd, 1.9f);
-        assertMacOSX(bd);
-    }
-
-    public void testOpera964() {
-        VBrowserDetails bd = new VBrowserDetails(OPERA964_WINDOWS);
-        assertPresto(bd);
-        assertOpera(bd);
-        assertBrowserMajorVersion(bd, 9);
-        assertBrowserMinorVersion(bd, 64);
-        assertWindows(bd);
-    }
-
-    public void testOpera1010() {
-        VBrowserDetails bd = new VBrowserDetails(OPERA1010_WINDOWS);
-        assertPresto(bd);
-        assertOpera(bd);
-        assertBrowserMajorVersion(bd, 10);
-        assertBrowserMinorVersion(bd, 10);
-        assertWindows(bd);
-    }
-
-    public void testOpera1050() {
-        VBrowserDetails bd = new VBrowserDetails(OPERA1050_WINDOWS);
-        assertPresto(bd);
-        assertOpera(bd);
-        assertBrowserMajorVersion(bd, 10);
-        assertBrowserMinorVersion(bd, 50);
-        assertWindows(bd);
-    }
-
-    public void testIE6() {
-        VBrowserDetails bd = new VBrowserDetails(IE6_WINDOWS);
-        // assertTrident(bd);
-        assertIE(bd);
-        assertBrowserMajorVersion(bd, 6);
-        assertBrowserMinorVersion(bd, 0);
-        assertWindows(bd);
-    }
-
-    public void testIE7() {
-        VBrowserDetails bd = new VBrowserDetails(IE7_WINDOWS);
-        // assertTrident(bd);
-        assertIE(bd);
-        assertBrowserMajorVersion(bd, 7);
-        assertBrowserMinorVersion(bd, 0);
-        assertWindows(bd);
-    }
-
-    public void testIE8() {
-        VBrowserDetails bd = new VBrowserDetails(IE8_WINDOWS);
-        // assertTrident(bd);
-        assertIE(bd);
-        assertBrowserMajorVersion(bd, 8);
-        assertBrowserMinorVersion(bd, 0);
-        assertWindows(bd);
-    }
-
-    public void testIE8CompatibilityMode() {
-        VBrowserDetails bd = new VBrowserDetails(IE8_IN_IE7_MODE_WINDOWS);
-        bd.setIEMode(7);
-
-        // assertTrident(bd);
-        assertIE(bd);
-        assertBrowserMajorVersion(bd, 7);
-        assertBrowserMinorVersion(bd, 0);
-
-        assertWindows(bd);
-    }
-
-    public void testIE9() {
-        VBrowserDetails bd = new VBrowserDetails(IE9_BETA_WINDOWS_7);
-        // assertTrident(bd);
-        assertIE(bd);
-        assertBrowserMajorVersion(bd, 9);
-        assertBrowserMinorVersion(bd, 0);
-        assertWindows(bd);
-    }
-
-    public void testIE9InIE7CompatibilityMode() {
-        VBrowserDetails bd = new VBrowserDetails(IE9_BETA_IN_IE7_MODE_WINDOWS_7);
-        // bd.setIE8InCompatibilityMode();
-
-        // assertTrident(bd);
-        assertIE(bd);
-        assertBrowserMajorVersion(bd, 7);
-        assertBrowserMinorVersion(bd, 0);
-
-        assertWindows(bd);
-    }
-
-    public void testIE9InIE8CompatibilityMode() {
-        VBrowserDetails bd = new VBrowserDetails(IE9_BETA_IN_IE8_MODE_WINDOWS_7);
-        // bd.setIE8InCompatibilityMode();
-
-        // assertTrident(bd);
-        assertIE(bd);
-        assertBrowserMajorVersion(bd, 8);
-        assertBrowserMinorVersion(bd, 0);
-
-        assertWindows(bd);
-    }
-
-    /*
-     * Helper methods below
-     */
-
-    private void assertEngineVersion(VBrowserDetails browserDetails,
-            float version) {
-        assertEquals(version, browserDetails.getBrowserEngineVersion());
-
-    }
-
-    private void assertBrowserMajorVersion(VBrowserDetails browserDetails,
-            int version) {
-        assertEquals(version, browserDetails.getBrowserMajorVersion());
-
-    }
-
-    private void assertBrowserMinorVersion(VBrowserDetails browserDetails,
-            int version) {
-        assertEquals(version, browserDetails.getBrowserMinorVersion());
-
-    }
-
-    private void assertGecko(VBrowserDetails browserDetails) {
-        // Engine
-        assertTrue(browserDetails.isGecko());
-        assertFalse(browserDetails.isWebKit());
-        assertFalse(browserDetails.isPresto());
-    }
-
-    private void assertPresto(VBrowserDetails browserDetails) {
-        // Engine
-        assertFalse(browserDetails.isGecko());
-        assertFalse(browserDetails.isWebKit());
-        assertTrue(browserDetails.isPresto());
-    }
-
-    private void assertWebKit(VBrowserDetails browserDetails) {
-        // Engine
-        assertFalse(browserDetails.isGecko());
-        assertTrue(browserDetails.isWebKit());
-        assertFalse(browserDetails.isPresto());
-    }
-
-    private void assertFirefox(VBrowserDetails browserDetails) {
-        // Browser
-        assertTrue(browserDetails.isFirefox());
-        assertFalse(browserDetails.isChrome());
-        assertFalse(browserDetails.isIE());
-        assertFalse(browserDetails.isOpera());
-        assertFalse(browserDetails.isSafari());
-    }
-
-    private void assertChrome(VBrowserDetails browserDetails) {
-        // Browser
-        assertFalse(browserDetails.isFirefox());
-        assertTrue(browserDetails.isChrome());
-        assertFalse(browserDetails.isIE());
-        assertFalse(browserDetails.isOpera());
-        assertFalse(browserDetails.isSafari());
-    }
-
-    private void assertIE(VBrowserDetails browserDetails) {
-        // Browser
-        assertFalse(browserDetails.isFirefox());
-        assertFalse(browserDetails.isChrome());
-        assertTrue(browserDetails.isIE());
-        assertFalse(browserDetails.isOpera());
-        assertFalse(browserDetails.isSafari());
-    }
-
-    private void assertOpera(VBrowserDetails browserDetails) {
-        // Browser
-        assertFalse(browserDetails.isFirefox());
-        assertFalse(browserDetails.isChrome());
-        assertFalse(browserDetails.isIE());
-        assertTrue(browserDetails.isOpera());
-        assertFalse(browserDetails.isSafari());
-    }
-
-    private void assertSafari(VBrowserDetails browserDetails) {
-        // Browser
-        assertFalse(browserDetails.isFirefox());
-        assertFalse(browserDetails.isChrome());
-        assertFalse(browserDetails.isIE());
-        assertFalse(browserDetails.isOpera());
-        assertTrue(browserDetails.isSafari());
-    }
-
-    private void assertMacOSX(VBrowserDetails browserDetails) {
-        assertFalse(browserDetails.isLinux());
-        assertFalse(browserDetails.isWindows());
-        assertTrue(browserDetails.isMacOSX());
-    }
-
-    private void assertWindows(VBrowserDetails browserDetails) {
-        assertFalse(browserDetails.isLinux());
-        assertTrue(browserDetails.isWindows());
-        assertFalse(browserDetails.isMacOSX());
-    }
-
-    private void assertLinux(VBrowserDetails browserDetails) {
-        assertTrue(browserDetails.isLinux());
-        assertFalse(browserDetails.isWindows());
-        assertFalse(browserDetails.isMacOSX());
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/IndexedContainerListeners.java b/tests/src/com/vaadin/tests/server/IndexedContainerListeners.java
deleted file mode 100644
index 2dc0caade3..0000000000
--- a/tests/src/com/vaadin/tests/server/IndexedContainerListeners.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.vaadin.tests.server;
-
-import com.vaadin.data.Container.PropertySetChangeEvent;
-import com.vaadin.data.Container.PropertySetChangeListener;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-
-public class IndexedContainerListeners extends AbstractListenerMethodsTest {
-    public void testValueChangeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(IndexedContainer.class,
-                ValueChangeEvent.class, ValueChangeListener.class);
-    }
-
-    public void testPropertySetChangeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(IndexedContainer.class,
-                PropertySetChangeEvent.class, PropertySetChangeListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/LicenseInJavaFiles.java b/tests/src/com/vaadin/tests/server/LicenseInJavaFiles.java
deleted file mode 100644
index f6b53f682b..0000000000
--- a/tests/src/com/vaadin/tests/server/LicenseInJavaFiles.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.vaadin.tests.server;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.HashSet;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import org.apache.commons.io.IOUtils;
-
-public class LicenseInJavaFiles extends TestCase {
-
-    /**
-     * The tests are run in the build directory.
-     */
-    public static String SRC_DIR = "../src";
-
-    public void testJavaFilesContainsLicense() throws IOException {
-        File srcDir = new File(SRC_DIR);
-        System.out.println(new File(".").getAbsolutePath());
-        HashSet<String> missing = new HashSet<String>();
-        checkForLicense(srcDir, missing);
-        if (!missing.isEmpty()) {
-            throw new RuntimeException(
-                    "The following files are missing license information:\n"
-                            + missing.toString());
-        }
-    }
-
-    private void checkForLicense(File srcDir, HashSet<String> missing)
-            throws IOException {
-        Assert.assertTrue("Source directory " + srcDir + " does not exist",
-                srcDir.exists());
-
-        for (File f : srcDir.listFiles()) {
-            if (f.isDirectory()) {
-                checkForLicense(f, missing);
-            } else if (f.getName().endsWith(".java")) {
-                checkForLicenseInFile(f, missing);
-            }
-        }
-    }
-
-    private void checkForLicenseInFile(File f, HashSet<String> missing)
-            throws IOException {
-        String contents = IOUtils.toString(new FileInputStream(f));
-        if (!contents.contains("@" + "ITMillApache2LicenseForJavaFiles" + "@")) {
-            missing.add(f.getPath());
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/PropertysetItemListeners.java b/tests/src/com/vaadin/tests/server/PropertysetItemListeners.java
deleted file mode 100644
index 69cbbbfb7c..0000000000
--- a/tests/src/com/vaadin/tests/server/PropertysetItemListeners.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.server;
-
-import com.vaadin.data.Item.PropertySetChangeEvent;
-import com.vaadin.data.Item.PropertySetChangeListener;
-import com.vaadin.data.util.PropertysetItem;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-
-public class PropertysetItemListeners extends AbstractListenerMethodsTest {
-    public void testPropertySetChangeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(PropertysetItem.class,
-                PropertySetChangeEvent.class, PropertySetChangeListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/TestAbstractBeanContainerListeners.java b/tests/src/com/vaadin/tests/server/TestAbstractBeanContainerListeners.java
deleted file mode 100644
index ae70757b3e..0000000000
--- a/tests/src/com/vaadin/tests/server/TestAbstractBeanContainerListeners.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.vaadin.tests.server;
-
-import com.vaadin.data.Container.PropertySetChangeEvent;
-import com.vaadin.data.Container.PropertySetChangeListener;
-import com.vaadin.data.util.BeanItemContainer;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-
-public class TestAbstractBeanContainerListeners extends AbstractListenerMethodsTest {
-    public void testPropertySetChangeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(BeanItemContainer.class,
-                PropertySetChangeEvent.class, PropertySetChangeListener.class,
-                new BeanItemContainer<PropertySetChangeListener>(
-                        PropertySetChangeListener.class));
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/TestAbstractContainerListeners.java b/tests/src/com/vaadin/tests/server/TestAbstractContainerListeners.java
deleted file mode 100644
index d10c5d7791..0000000000
--- a/tests/src/com/vaadin/tests/server/TestAbstractContainerListeners.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.vaadin.tests.server;
-
-import com.vaadin.data.Container.ItemSetChangeEvent;
-import com.vaadin.data.Container.ItemSetChangeListener;
-import com.vaadin.data.Container.PropertySetChangeEvent;
-import com.vaadin.data.Container.PropertySetChangeListener;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-
-public class TestAbstractContainerListeners extends AbstractListenerMethodsTest {
-
-    public void testItemSetChangeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(IndexedContainer.class,
-                ItemSetChangeEvent.class, ItemSetChangeListener.class);
-    }
-
-    public void testPropertySetChangeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(IndexedContainer.class,
-                PropertySetChangeEvent.class, PropertySetChangeListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/TestAbstractInMemoryContainerListeners.java b/tests/src/com/vaadin/tests/server/TestAbstractInMemoryContainerListeners.java
deleted file mode 100644
index 754f152936..0000000000
--- a/tests/src/com/vaadin/tests/server/TestAbstractInMemoryContainerListeners.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.server;
-
-import com.vaadin.data.Container.ItemSetChangeEvent;
-import com.vaadin.data.Container.ItemSetChangeListener;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-
-public class TestAbstractInMemoryContainerListeners extends AbstractListenerMethodsTest {
-    public void testItemSetChangeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(IndexedContainer.class,
-                ItemSetChangeEvent.class, ItemSetChangeListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/TestAbstractPropertyListeners.java b/tests/src/com/vaadin/tests/server/TestAbstractPropertyListeners.java
deleted file mode 100644
index 58dee08643..0000000000
--- a/tests/src/com/vaadin/tests/server/TestAbstractPropertyListeners.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.vaadin.tests.server;
-
-import com.vaadin.data.Property.ReadOnlyStatusChangeEvent;
-import com.vaadin.data.Property.ReadOnlyStatusChangeListener;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.data.util.AbstractProperty;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-
-public class TestAbstractPropertyListeners extends AbstractListenerMethodsTest {
-    public void testValueChangeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(AbstractProperty.class,
-                ValueChangeEvent.class, ValueChangeListener.class,
-                new ObjectProperty<String>(""));
-    }
-
-    public void testReadOnlyStatusChangeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(AbstractProperty.class,
-                ReadOnlyStatusChangeEvent.class,
-                ReadOnlyStatusChangeListener.class, new ObjectProperty<String>(
-                        ""));
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/TestClassesSerializable.java b/tests/src/com/vaadin/tests/server/TestClassesSerializable.java
deleted file mode 100644
index f7beafb927..0000000000
--- a/tests/src/com/vaadin/tests/server/TestClassesSerializable.java
+++ /dev/null
@@ -1,241 +0,0 @@
-package com.vaadin.tests.server;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-
-import junit.framework.TestCase;
-
-public class TestClassesSerializable extends TestCase {
-
-    /**
-     * JARs that will be scanned for classes to test, in addition to classpath
-     * directories.
-     */
-    private static String JAR_PATTERN = ".*vaadin.*\\.jar";
-
-    private static String[] BASE_PACKAGES = { "com.vaadin" };
-
-    private static String[] EXCLUDED_PATTERNS = {
-            "com\\.vaadin\\.demo\\..*", //
-            "com\\.vaadin\\.external\\.org\\.apache\\.commons\\.fileupload\\..*", //
-            "com\\.vaadin\\.launcher\\..*", //
-            "com\\.vaadin\\.terminal\\.gwt\\.client\\..*", //
-            "com\\.vaadin\\.terminal\\.gwt\\.widgetsetutils\\..*", //
-            "com\\.vaadin\\.tests\\..*", // exclude automated tests
-            "com\\.vaadin\\.tools\\..*", //
-            "com\\.vaadin\\.ui\\.themes\\..*", //
-            // exact class level filtering
-            "com\\.vaadin\\.event\\.FieldEvents", //
-            "com\\.vaadin\\.event\\.LayoutEvents", //
-            "com\\.vaadin\\.event\\.MouseEvents", //
-            "com\\.vaadin\\.terminal\\.gwt\\.server\\.AbstractApplicationPortlet", //
-            "com\\.vaadin\\.terminal\\.gwt\\.server\\.ApplicationPortlet2", //
-            "com\\.vaadin\\.terminal\\.gwt\\.server\\.Constants", //
-            "com\\.vaadin\\.util\\.SerializerHelper", // fully static
-            // class level filtering, also affecting nested classes and
-            // interfaces
-            "com\\.vaadin\\.terminal\\.gwt\\.server\\.AbstractCommunicationManager.*", //
-            "com\\.vaadin\\.terminal\\.gwt\\.server\\.ApplicationRunnerServlet.*", //
-            "com\\.vaadin\\.terminal\\.gwt\\.server\\.CommunicationManager.*", //
-            "com\\.vaadin\\.terminal\\.gwt\\.server\\.PortletCommunicationManager.*", //
-    };
-
-    /**
-     * Tests that all the relevant classes and interfaces under
-     * {@link #BASE_PACKAGES} implement Serializable.
-     * 
-     * @throws Exception
-     */
-    public void testClassesSerializable() throws Exception {
-        List<String> rawClasspathEntries = getRawClasspathEntries();
-
-        List<String> classes = new ArrayList<String>();
-        for (String location : rawClasspathEntries) {
-            classes.addAll(findServerClasses(location));
-        }
-
-        ArrayList<Class<?>> nonSerializableClasses = new ArrayList<Class<?>>();
-        for (String className : classes) {
-            Class<?> cls = Class.forName(className);
-            // skip annotations and synthetic classes
-            if (cls.isAnnotation() || cls.isSynthetic()) {
-                continue;
-            }
-            // report non-serializable classes and interfaces
-            if (!Serializable.class.isAssignableFrom(cls)) {
-                nonSerializableClasses.add(cls);
-                // TODO easier to read when testing
-                // System.err.println(cls);
-            }
-        }
-
-        // useful failure message including all non-serializable classes and
-        // interfaces
-        if (!nonSerializableClasses.isEmpty()) {
-            String nonSerializableString = "";
-            Iterator<Class<?>> it = nonSerializableClasses.iterator();
-            nonSerializableString = it.next().getName();
-            while (it.hasNext()) {
-                nonSerializableString += ", " + it.next().getName();
-            }
-            fail("Serializable not implemented by the following classes and interfaces: "
-                    + nonSerializableString);
-        }
-    }
-
-    /**
-     * Lists all class path entries by splitting the class path string.
-     * 
-     * Adapted from ClassPathExplorer.getRawClasspathEntries(), but without
-     * filtering.
-     * 
-     * @return List of class path segment strings
-     */
-    //
-    private final static List<String> getRawClasspathEntries() {
-        // try to keep the order of the classpath
-        List<String> locations = new ArrayList<String>();
-
-        String pathSep = System.getProperty("path.separator");
-        String classpath = System.getProperty("java.class.path");
-
-        if (classpath.startsWith("\"")) {
-            classpath = classpath.substring(1);
-        }
-        if (classpath.endsWith("\"")) {
-            classpath = classpath.substring(0, classpath.length() - 1);
-        }
-
-        String[] split = classpath.split(pathSep);
-        for (int i = 0; i < split.length; i++) {
-            String classpathEntry = split[i];
-            locations.add(classpathEntry);
-        }
-
-        return locations;
-    }
-
-    /**
-     * Finds the server side classes/interfaces under a class path entry -
-     * either a directory or a JAR that matches {@link #JAR_PATTERN}.
-     * 
-     * Only classes under {@link #BASE_PACKAGES} are considered, and those
-     * matching {@link #EXCLUDED_PATTERNS} are filtered out.
-     * 
-     * @param classpathEntry
-     * @return
-     * @throws IOException
-     */
-    private List<String> findServerClasses(String classpathEntry)
-            throws IOException {
-        Collection<String> classes = new ArrayList<String>();
-
-        File file = new File(classpathEntry);
-        if (file.isDirectory()) {
-            classes = findClassesInDirectory(null, file);
-        } else if (file.getName().matches(JAR_PATTERN)) {
-            classes = findClassesInJar(file);
-        } else {
-            System.out.println("Ignoring " + classpathEntry);
-            return Collections.emptyList();
-        }
-
-        List<String> filteredClasses = new ArrayList<String>();
-        for (String className : classes) {
-            boolean ok = false;
-            for (String basePackage : BASE_PACKAGES) {
-                if (className.startsWith(basePackage + ".")) {
-                    ok = true;
-                    break;
-                }
-            }
-            for (String excludedPrefix : EXCLUDED_PATTERNS) {
-                if (className.matches(excludedPrefix)) {
-                    ok = false;
-                    break;
-                }
-            }
-            if (ok) {
-                filteredClasses.add(className);
-            }
-        }
-
-        return filteredClasses;
-    }
-
-    /**
-     * Lists class names (based on .class files) in a JAR file.
-     * 
-     * @param file
-     *            a valid JAR file
-     * @return collection of fully qualified class names in the JAR
-     * @throws IOException
-     */
-    private Collection<String> findClassesInJar(File file) throws IOException {
-        Collection<String> classes = new ArrayList<String>();
-
-        JarFile jar = new JarFile(file);
-        Enumeration<JarEntry> e = jar.entries();
-        while (e.hasMoreElements()) {
-            JarEntry entry = e.nextElement();
-            if (entry.getName().endsWith(".class")) {
-                String nameWithoutExtension = entry.getName().replaceAll(
-                        "\\.class", "");
-                String className = nameWithoutExtension.replace('/', '.');
-                classes.add(className);
-            }
-        }
-        return classes;
-    }
-
-    /**
-     * Lists class names (based on .class files) in a directory (a package path
-     * root).
-     * 
-     * @param parentPackage
-     *            parent package name or null at root of hierarchy, used by
-     *            recursion
-     * @param parent
-     *            File representing the directory to scan
-     * @return collection of fully qualified class names in the directory
-     */
-    private final static Collection<String> findClassesInDirectory(
-            String parentPackage, File parent) {
-        if (parent.isHidden()
-                || parent.getPath().contains(File.separator + ".")) {
-            return Collections.emptyList();
-        }
-
-        if (parentPackage == null) {
-            parentPackage = "";
-        } else {
-            parentPackage += ".";
-        }
-
-        Collection<String> classNames = new ArrayList<String>();
-
-        // add all directories recursively
-        File[] files = parent.listFiles();
-        for (File child : files) {
-            if (child.isDirectory()) {
-                classNames.addAll(findClassesInDirectory(
-                        parentPackage + child.getName(), child));
-            } else if (child.getName().endsWith(".class")) {
-                classNames.add(parentPackage.replace(File.separatorChar, '.')
-                        + child.getName().replaceAll("\\.class", ""));
-            }
-        }
-
-        return classNames;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/TestEventRouter.java b/tests/src/com/vaadin/tests/server/TestEventRouter.java
deleted file mode 100644
index dc388a66ac..0000000000
--- a/tests/src/com/vaadin/tests/server/TestEventRouter.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.vaadin.tests.server;
-
-import junit.framework.TestCase;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.ui.TextField;
-
-public class TestEventRouter extends TestCase {
-
-    int innerListenerCalls = 0;
-
-    public void testAddInEventListener() {
-        final TextField tf = new TextField();
-
-        final ValueChangeListener outer = new ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                ValueChangeListener inner = new ValueChangeListener() {
-
-                    public void valueChange(ValueChangeEvent event) {
-                        innerListenerCalls++;
-                        System.out.println("The inner listener was called");
-                    }
-                };
-
-                tf.addListener(inner);
-            }
-        };
-
-        tf.addListener(outer);
-        tf.setValue("abc"); // No inner listener calls, adds one inner
-        tf.setValue("def"); // One inner listener call, adds one inner
-        tf.setValue("ghi"); // Two inner listener calls, adds one inner
-        assert (innerListenerCalls == 3);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/TestFileTypeResolver.java b/tests/src/com/vaadin/tests/server/TestFileTypeResolver.java
deleted file mode 100644
index 8a368ead53..0000000000
--- a/tests/src/com/vaadin/tests/server/TestFileTypeResolver.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.vaadin.tests.server;
-
-import java.io.File;
-
-import junit.framework.TestCase;
-
-import com.vaadin.service.FileTypeResolver;
-
-public class TestFileTypeResolver extends TestCase {
-
-    private static final String FLASH_MIME_TYPE = "application/x-shockwave-flash";
-    private static final String TEXT_MIME_TYPE = "text/plain";
-    private static final String HTML_MIME_TYPE = "text/html";
-
-    public void testMimeTypes() {
-        File plainFlash = new File("MyFlash.swf");
-        File plainText = new File("/a/b/MyFlash.txt");
-        File plainHtml = new File("c:\\MyFlash.html");
-
-        // Flash
-        assertEquals(
-                FileTypeResolver.getMIMEType(plainFlash.getAbsolutePath()),
-                FLASH_MIME_TYPE);
-        assertEquals(
-                FileTypeResolver.getMIMEType(plainFlash.getAbsolutePath()
-                        + "?param1=value1"), FLASH_MIME_TYPE);
-        assertEquals(
-                FileTypeResolver.getMIMEType(plainFlash.getAbsolutePath()
-                        + "?param1=value1&param2=value2"), FLASH_MIME_TYPE);
-
-        // Plain text
-        assertEquals(FileTypeResolver.getMIMEType(plainText.getAbsolutePath()),
-                TEXT_MIME_TYPE);
-        assertEquals(
-                FileTypeResolver.getMIMEType(plainText.getAbsolutePath()
-                        + "?param1=value1"), TEXT_MIME_TYPE);
-        assertEquals(
-                FileTypeResolver.getMIMEType(plainText.getAbsolutePath()
-                        + "?param1=value1&param2=value2"), TEXT_MIME_TYPE);
-
-        // Plain text
-        assertEquals(FileTypeResolver.getMIMEType(plainHtml.getAbsolutePath()),
-                HTML_MIME_TYPE);
-        assertEquals(
-                FileTypeResolver.getMIMEType(plainHtml.getAbsolutePath()
-                        + "?param1=value1"), HTML_MIME_TYPE);
-        assertEquals(
-                FileTypeResolver.getMIMEType(plainHtml.getAbsolutePath()
-                        + "?param1=value1&param2=value2"), HTML_MIME_TYPE);
-
-        // Filename missing
-        assertEquals(FileTypeResolver.DEFAULT_MIME_TYPE,
-                FileTypeResolver.getMIMEType(""));
-        assertEquals(FileTypeResolver.DEFAULT_MIME_TYPE,
-                FileTypeResolver.getMIMEType("?param1"));
-
-    }
-
-    public void testExtensionCase() {
-        assertEquals("image/jpeg", FileTypeResolver.getMIMEType("abc.jpg"));
-        assertEquals("image/jpeg", FileTypeResolver.getMIMEType("abc.jPg"));
-        assertEquals("image/jpeg", FileTypeResolver.getMIMEType("abc.JPG"));
-        assertEquals("image/jpeg", FileTypeResolver.getMIMEType("abc.JPEG"));
-        assertEquals("image/jpeg", FileTypeResolver.getMIMEType("abc.Jpeg"));
-        assertEquals("image/jpeg", FileTypeResolver.getMIMEType("abc.JPE"));
-    }
-
-    public void testCustomMimeType() {
-        assertEquals(FileTypeResolver.DEFAULT_MIME_TYPE,
-                FileTypeResolver.getMIMEType("vaadin.foo"));
-
-        FileTypeResolver.addExtension("foo", "Vaadin Foo/Bar");
-        FileTypeResolver.addExtension("FOO2", "Vaadin Foo/Bar2");
-        assertEquals("Vaadin Foo/Bar",
-                FileTypeResolver.getMIMEType("vaadin.foo"));
-        assertEquals("Vaadin Foo/Bar2",
-                FileTypeResolver.getMIMEType("vaadin.Foo2"));
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/TestKeyMapper.java b/tests/src/com/vaadin/tests/server/TestKeyMapper.java
deleted file mode 100644
index 02ea45ce7c..0000000000
--- a/tests/src/com/vaadin/tests/server/TestKeyMapper.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.vaadin.tests.server;
-
-import java.lang.reflect.Field;
-import java.util.Hashtable;
-
-import junit.framework.TestCase;
-
-import com.vaadin.terminal.KeyMapper;
-
-public class TestKeyMapper extends TestCase {
-
-    public void testAdd() {
-        KeyMapper mapper = new KeyMapper();
-        Object o1 = new Object();
-        Object o2 = new Object();
-        Object o3 = new Object();
-
-        // Create new ids
-        String key1 = mapper.key(o1);
-        String key2 = mapper.key(o2);
-        String key3 = mapper.key(o3);
-
-        assertEquals(mapper.get(key1), o1);
-        assertEquals(mapper.get(key2), o2);
-        assertEquals(mapper.get(key3), o3);
-        assertNotSame(key1, key2);
-        assertNotSame(key1, key3);
-        assertNotSame(key2, key3);
-
-        assertSize(mapper, 3);
-
-        // Key should not add if there already is a mapping
-        assertEquals(mapper.key(o3), key3);
-        assertSize(mapper, 3);
-
-        // Remove -> add should return a new key
-        mapper.remove(o1);
-        String newkey1 = mapper.key(o1);
-        assertNotSame(key1, newkey1);
-
-    }
-
-    public void testRemoveAll() {
-        KeyMapper mapper = new KeyMapper();
-        Object o1 = new Object();
-        Object o2 = new Object();
-        Object o3 = new Object();
-
-        // Create new ids
-        mapper.key(o1);
-        mapper.key(o2);
-        mapper.key(o3);
-
-        assertSize(mapper, 3);
-        mapper.removeAll();
-        assertSize(mapper, 0);
-
-    }
-
-    public void testRemove() {
-        KeyMapper mapper = new KeyMapper();
-        Object o1 = new Object();
-        Object o2 = new Object();
-        Object o3 = new Object();
-
-        // Create new ids
-        mapper.key(o1);
-        mapper.key(o2);
-        mapper.key(o3);
-
-        assertSize(mapper, 3);
-        mapper.remove(o1);
-        assertSize(mapper, 2);
-        mapper.key(o1);
-        assertSize(mapper, 3);
-        mapper.remove(o1);
-        assertSize(mapper, 2);
-
-        mapper.remove(o2);
-        mapper.remove(o3);
-        assertSize(mapper, 0);
-
-    }
-
-    private void assertSize(KeyMapper mapper, int i) {
-        try {
-            Field f1 = KeyMapper.class.getDeclaredField("objectKeyMap");
-            Field f2 = KeyMapper.class.getDeclaredField("keyObjectMap");
-            f1.setAccessible(true);
-            f2.setAccessible(true);
-
-            Hashtable<?, ?> h1 = (Hashtable<?, ?>) f1.get(mapper);
-            Hashtable<?, ?> h2 = (Hashtable<?, ?>) f2.get(mapper);
-
-            assertEquals(i, h1.size());
-            assertEquals(i, h2.size());
-        } catch (Throwable t) {
-            t.printStackTrace();
-            fail();
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/TestMimeTypes.java b/tests/src/com/vaadin/tests/server/TestMimeTypes.java
deleted file mode 100644
index 8231030666..0000000000
--- a/tests/src/com/vaadin/tests/server/TestMimeTypes.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.vaadin.tests.server;
-
-import junit.framework.TestCase;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.ClassResource;
-import com.vaadin.ui.Embedded;
-
-public class TestMimeTypes extends TestCase {
-
-    public void testEmbeddedPDF() {
-        Application app = new Application() {
-
-            @Override
-            public void init() {
-                // TODO Auto-generated method stub
-
-            }
-        };
-        Embedded e = new Embedded("A pdf", new ClassResource("file.pddf", app));
-        assertEquals("Invalid mimetype", "application/octet-stream",
-                e.getMimeType());
-        e = new Embedded("A pdf", new ClassResource("file.pdf", app));
-        assertEquals("Invalid mimetype", "application/pdf", e.getMimeType());
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/TestSerialization.java b/tests/src/com/vaadin/tests/server/TestSerialization.java
deleted file mode 100644
index 03a9d3e262..0000000000
--- a/tests/src/com/vaadin/tests/server/TestSerialization.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package com.vaadin.tests.server;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-
-import junit.framework.TestCase;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.data.util.MethodProperty;
-import com.vaadin.data.validator.RegexpValidator;
-import com.vaadin.ui.Form;
-
-public class TestSerialization extends TestCase {
-
-    public void testValidators() throws Exception {
-        RegexpValidator validator = new RegexpValidator(".*", "Error");
-        validator.isValid("aaa");
-        RegexpValidator validator2 = (RegexpValidator) serializeAndDeserialize(validator);
-        validator2.isValid("aaa");
-    }
-
-    public void testForm() throws Exception {
-        Form f = new Form();
-        String propertyId = "My property";
-        f.addItemProperty(propertyId, new MethodProperty<Object>(new Data(),
-                "dummyGetterAndSetter"));
-        f.replaceWithSelect(propertyId, new Object[] { "a", "b", null },
-                new String[] { "Item a", "ITem b", "Null item" });
-
-        serializeAndDeserialize(f);
-
-    }
-
-    public void testIndedexContainerItemIds() throws Exception {
-        IndexedContainer ic = new IndexedContainer();
-        ic.addContainerProperty("prop1", String.class, null);
-        Object id = ic.addItem();
-        ic.getItem(id).getItemProperty("prop1").setValue("1");
-
-        Item item2 = ic.addItem("item2");
-        item2.getItemProperty("prop1").setValue("2");
-
-        serializeAndDeserialize(ic);
-    }
-
-    public void testMethodPropertyGetter() throws Exception {
-        MethodProperty<?> mp = new MethodProperty<Object>(new Data(),
-                "dummyGetter");
-        serializeAndDeserialize(mp);
-    }
-
-    public void testMethodPropertyGetterAndSetter() throws Exception {
-        MethodProperty<?> mp = new MethodProperty<Object>(new Data(),
-                "dummyGetterAndSetter");
-        serializeAndDeserialize(mp);
-    }
-
-    public void testMethodPropertyInt() throws Exception {
-        MethodProperty<?> mp = new MethodProperty<Object>(new Data(),
-                "dummyInt");
-        serializeAndDeserialize(mp);
-    }
-
-    private static Serializable serializeAndDeserialize(Serializable s)
-            throws IOException, ClassNotFoundException {
-        // Serialize and deserialize
-
-        ByteArrayOutputStream bs = new ByteArrayOutputStream();
-        ObjectOutputStream out = new ObjectOutputStream(bs);
-        out.writeObject(s);
-        byte[] data = bs.toByteArray();
-        ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(
-                data));
-        Serializable s2 = (Serializable) in.readObject();
-
-        if (s.equals(s2)) {
-            System.out.println(s + " equals " + s2);
-        } else {
-            System.out.println(s + " does NOT equal " + s2);
-        }
-
-        return s2;
-    }
-
-    public static class Data implements Serializable {
-        private String dummyGetter;
-        private String dummyGetterAndSetter;
-        private int dummyInt;
-
-        public String getDummyGetterAndSetter() {
-            return dummyGetterAndSetter;
-        }
-
-        public void setDummyGetterAndSetter(String dummyGetterAndSetter) {
-            this.dummyGetterAndSetter = dummyGetterAndSetter;
-        }
-
-        public int getDummyInt() {
-            return dummyInt;
-        }
-
-        public void setDummyInt(int dummyInt) {
-            this.dummyInt = dummyInt;
-        }
-
-        public String getDummyGetter() {
-            return dummyGetter;
-        }
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/server/TestSimpleMultiPartInputStream.java b/tests/src/com/vaadin/tests/server/TestSimpleMultiPartInputStream.java
deleted file mode 100644
index 65455eba37..0000000000
--- a/tests/src/com/vaadin/tests/server/TestSimpleMultiPartInputStream.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package com.vaadin.tests.server;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.Arrays;
-
-import junit.framework.TestCase;
-
-import com.vaadin.terminal.gwt.server.AbstractCommunicationManager.SimpleMultiPartInputStream;
-
-public class TestSimpleMultiPartInputStream extends TestCase {
-
-    /**
-     * Check that the output for a given stream until boundary is as expected.
-     * 
-     * @param input
-     * @param boundary
-     * @param expected
-     * @throws Exception
-     */
-    protected void checkBoundaryDetection(byte[] input, String boundary,
-            byte[] expected) throws Exception {
-        ByteArrayInputStream bais = new ByteArrayInputStream(input);
-        SimpleMultiPartInputStream smpis = new SimpleMultiPartInputStream(bais,
-                boundary);
-        ByteArrayOutputStream resultStream = new ByteArrayOutputStream();
-        int outbyte;
-        try {
-            while ((outbyte = smpis.read()) != -1) {
-                resultStream.write(outbyte);
-            }
-        } catch (IOException e) {
-            throw new IOException(e.getMessage() + "; expected "
-                    + new String(expected) + " but got "
-                    + resultStream.toString());
-        }
-        if (!Arrays.equals(expected, resultStream.toByteArray())) {
-            throw new Exception("Mismatch: expected " + new String(expected)
-                    + " but got " + resultStream.toString());
-        }
-    }
-
-    protected void checkBoundaryDetection(String input, String boundary,
-            String expected) throws Exception {
-        checkBoundaryDetection(input.getBytes(), boundary, expected.getBytes());
-    }
-
-    public void testSingleByteBoundaryAtEnd() throws Exception {
-        checkBoundaryDetection("xyz123" + getFullBoundary("a"), "a", "xyz123");
-    }
-
-    public void testSingleByteBoundaryInMiddle() throws Exception {
-        checkBoundaryDetection("xyz" + getFullBoundary("a") + "123", "a", "xyz");
-    }
-
-    public void testCorrectBoundaryAtEnd() throws Exception {
-        checkBoundaryDetection("xyz123" + getFullBoundary("abc"), "abc",
-                "xyz123");
-    }
-
-    public void testCorrectBoundaryNearEnd() throws Exception {
-        checkBoundaryDetection("xyz123" + getFullBoundary("abc") + "de", "abc",
-                "xyz123");
-    }
-
-    public void testCorrectBoundaryAtBeginning() throws Exception {
-        checkBoundaryDetection(getFullBoundary("abc") + "xyz123", "abc", "");
-    }
-
-    public void testRepeatingCharacterBoundary() throws Exception {
-        checkBoundaryDetection(getFullBoundary("aa") + "xyz123", "aa", "");
-        checkBoundaryDetection("axyz" + getFullBoundary("aa") + "123", "aa",
-                "axyz");
-        checkBoundaryDetection("xyz123" + getFullBoundary("aa"), "aa", "xyz123");
-    }
-
-    /**
-     * Note, the boundary in this test is invalid. Boundary strings don't
-     * contain CR/LF.
-     * 
-     */
-    // public void testRepeatingNewlineBoundary() throws Exception {
-    // checkBoundaryDetection("1234567890" + getFullBoundary("\n\n")
-    // + "1234567890", "\n\n", "");
-    // }
-
-    public void testRepeatingStringBoundary() throws Exception {
-        checkBoundaryDetection(getFullBoundary("abab") + "xyz123", "abab", "");
-        checkBoundaryDetection("abaxyz" + getFullBoundary("abab") + "123",
-                "abab", "abaxyz");
-        checkBoundaryDetection("xyz123" + getFullBoundary("abab"), "abab",
-                "xyz123");
-    }
-
-    public void testOverlappingBoundary() throws Exception {
-        checkBoundaryDetection("abc" + getFullBoundary("abcabd") + "xyz123",
-                "abcabd", "abc");
-        checkBoundaryDetection("xyzabc" + getFullBoundary("abcabd") + "123",
-                "abcabd", "xyzabc");
-        checkBoundaryDetection("xyz123abc" + getFullBoundary("abcabd"),
-                "abcabd", "xyz123abc");
-    }
-
-    /*
-     * TODO fix these tests, they don't do what their method name says.
-     */
-
-    // public void testNoBoundaryInInput() throws Exception {
-    // try {
-    // checkBoundaryDetection("xyz123", "abc", "xyz123");
-    // fail();
-    // } catch (IOException e) {
-    // }
-    // }
-    //
-    // public void testPartialBoundaryAtInputEnd() throws Exception {
-    // try {
-    // // This should lead to IOException (stream end), not AIOOBE
-    // checkBoundaryDetection("xyz123ab", "abc", "xyz123ab");
-    // fail();
-    // } catch (IOException e) {
-    // }
-    // }
-    //
-    // public void testPartialBoundaryAtInputBeginning() throws Exception {
-    // try {
-    // checkBoundaryDetection("abxyz123", "abc", "abxyz123");
-    // fail();
-    // } catch (IOException e) {
-    // }
-    // }
-
-    public static String getFullBoundary(String str) {
-        return "\r\n--" + str + "--";
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/TransactionListenersConcurrency.java b/tests/src/com/vaadin/tests/server/TransactionListenersConcurrency.java
deleted file mode 100644
index 3f16bb262b..0000000000
--- a/tests/src/com/vaadin/tests/server/TransactionListenersConcurrency.java
+++ /dev/null
@@ -1,185 +0,0 @@
-package com.vaadin.tests.server;
-
-import static org.easymock.EasyMock.createMock;
-
-import java.lang.Thread.UncaughtExceptionHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-import java.util.Random;
-
-import javax.servlet.http.HttpSession;
-
-import junit.framework.TestCase;
-
-import org.easymock.EasyMock;
-
-import com.vaadin.Application;
-import com.vaadin.service.ApplicationContext.TransactionListener;
-import com.vaadin.terminal.gwt.server.AbstractWebApplicationContext;
-import com.vaadin.terminal.gwt.server.WebApplicationContext;
-
-public class TransactionListenersConcurrency extends TestCase {
-
-    /**
-     * This test starts N threads concurrently. Each thread creates an
-     * application which adds a transaction listener to the context. A
-     * transaction is then started for each application. Some semi-random delays
-     * are included so that calls to addTransactionListener and
-     * WebApplicationContext.startTransaction are mixed.
-     * 
-     */
-    public void testTransactionListeners() throws Exception {
-        final List<Throwable> exceptions = new ArrayList<Throwable>();
-
-        HttpSession session = createSession();
-        final WebApplicationContext context = WebApplicationContext
-                .getApplicationContext(session);
-        List<Thread> threads = new ArrayList<Thread>();
-
-        for (int i = 0; i < 5; i++) {
-            Thread t = new Thread(new Runnable() {
-
-                public void run() {
-                    Application app = new Application() {
-
-                        @Override
-                        public void init() {
-                            // Sleep 0-1000ms so another transaction has time to
-                            // start before we add the transaction listener.
-                            try {
-                                Thread.sleep((long) (1000 * new Random()
-                                        .nextDouble()));
-                            } catch (InterruptedException e) {
-                                // TODO Auto-generated catch block
-                                e.printStackTrace();
-                            }
-
-                            getContext().addTransactionListener(
-                                    new DelayTransactionListener(2000));
-                        }
-
-                    };
-
-                    // Start the application so the transaction listener is
-                    // called later on.
-                    try {
-
-                        app.start(new URL("http://localhost/"),
-                                new Properties(), context);
-                    } catch (MalformedURLException e) {
-                        // TODO Auto-generated catch block
-                        e.printStackTrace();
-                    }
-
-                    try {
-                        // Call the transaction listener using reflection as
-                        // startTransaction is protected.
-
-                        Method m = AbstractWebApplicationContext.class
-                                .getDeclaredMethod("startTransaction",
-                                        Application.class, Object.class);
-                        m.setAccessible(true);
-                        m.invoke(context, app, null);
-                    } catch (Exception e) {
-                        throw new RuntimeException(e);
-                    }
-                }
-
-            });
-
-            threads.add(t);
-            t.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
-
-                public void uncaughtException(Thread t, Throwable e) {
-                    e = e.getCause();
-                    exceptions.add(e);
-                }
-            });
-        }
-
-        // Start the threads and wait for all of them to finish
-        for (Thread t : threads) {
-            t.start();
-        }
-        int running = threads.size();
-
-        while (running > 0) {
-            for (Iterator<Thread> i = threads.iterator(); i.hasNext();) {
-                Thread t = i.next();
-                if (!t.isAlive()) {
-                    running--;
-                    i.remove();
-                }
-            }
-        }
-
-        for (Throwable t : exceptions) {
-            if (t instanceof InvocationTargetException) {
-                t = t.getCause();
-            }
-            t.printStackTrace(System.err);
-            fail(t.getClass().getName());
-        }
-
-        System.out.println("Done, all ok");
-
-    }
-
-    /**
-     * Creates a HttpSession mock
-     * 
-     */
-    private static HttpSession createSession() {
-        HttpSession session = createMock(HttpSession.class);
-        EasyMock.expect(
-                session.getAttribute(WebApplicationContext.class.getName()))
-                .andReturn(null).anyTimes();
-        session.setAttribute(
-                EasyMock.eq(WebApplicationContext.class.getName()),
-                EasyMock.anyObject());
-
-        EasyMock.replay(session);
-        return session;
-    }
-
-    /**
-     * A transaction listener that just sleeps for the given amount of time in
-     * transactionStart and transactionEnd.
-     * 
-     */
-    public static class DelayTransactionListener implements TransactionListener {
-
-        private int delay;
-
-        public DelayTransactionListener(int delay) {
-            this.delay = delay;
-        }
-
-        public void transactionStart(Application application,
-                Object transactionData) {
-            try {
-                Thread.sleep(delay);
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-            }
-
-        }
-
-        public void transactionEnd(Application application,
-                Object transactionData) {
-            try {
-                Thread.sleep(delay);
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-            }
-
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/applicationservlet/TestStaticFilesLocation.java b/tests/src/com/vaadin/tests/server/applicationservlet/TestStaticFilesLocation.java
deleted file mode 100644
index 29ef40e546..0000000000
--- a/tests/src/com/vaadin/tests/server/applicationservlet/TestStaticFilesLocation.java
+++ /dev/null
@@ -1,205 +0,0 @@
-package com.vaadin.tests.server.applicationservlet;
-
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.Properties;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-
-import junit.framework.TestCase;
-
-import com.vaadin.terminal.gwt.server.AbstractApplicationServlet;
-import com.vaadin.terminal.gwt.server.ApplicationServlet;
-
-public class TestStaticFilesLocation extends TestCase {
-
-    ApplicationServlet servlet;
-
-    private Method getStaticFilesLocationMethod;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        servlet = new ApplicationServlet();
-
-        // Workaround to avoid calling init and creating servlet config
-        Field f = AbstractApplicationServlet.class
-                .getDeclaredField("applicationProperties");
-        f.setAccessible(true);
-        f.set(servlet, new Properties());
-
-        getStaticFilesLocationMethod = AbstractApplicationServlet.class
-                .getDeclaredMethod(
-                        "getStaticFilesLocation",
-                        new Class[] { javax.servlet.http.HttpServletRequest.class });
-        getStaticFilesLocationMethod.setAccessible(true);
-
-    }
-
-    public class DummyServletConfig implements ServletConfig {
-
-        // public DummyServletConfig(Map<String,String> initParameters, )
-        public String getInitParameter(String name) {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        public Enumeration<Object> getInitParameterNames() {
-            return new Enumeration<Object>() {
-
-                public boolean hasMoreElements() {
-                    return false;
-                }
-
-                public Object nextElement() {
-                    return null;
-                }
-            };
-        }
-
-        public ServletContext getServletContext() {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        public String getServletName() {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-    }
-
-    public void testWidgetSetLocation() throws Exception {
-        String location;
-
-        /* SERVLETS */
-        // http://dummy.host:8080/contextpath/servlet
-        // should return /contextpath
-        location = testLocation("http://dummy.host:8080", "/contextpath",
-                "/servlet", "");
-        assertEquals("/contextpath", location);
-
-        // http://dummy.host:8080/servlet
-        // should return ""
-        location = testLocation("http://dummy.host:8080", "", "/servlet", "");
-        assertEquals("", location);
-
-        // http://dummy.host/contextpath/servlet/extra/stuff
-        // should return /contextpath
-        location = testLocation("http://dummy.host", "/contextpath",
-                "/servlet", "/extra/stuff");
-        assertEquals("/contextpath", location);
-
-        // http://dummy.host/context/path/servlet/extra/stuff
-        // should return /context/path
-        location = testLocation("http://dummy.host", "/context/path",
-                "/servlet", "/extra/stuff");
-        assertEquals("/context/path", location);
-
-        /* Include requests */
-        location = testIncludedLocation("http://my.portlet.server", "/user",
-                "/tmpservletlocation1", "");
-        assertEquals("Wrong widgetset location", "/user", location);
-
-    }
-
-    private String testLocation(String base, String contextPath,
-            String servletPath, String pathInfo) throws Exception {
-
-        HttpServletRequest request = createNonIncludeRequest(base, contextPath,
-                servletPath, pathInfo);
-        // Set request into replay mode
-        replay(request);
-
-        String location = (String) getStaticFilesLocationMethod.invoke(servlet,
-                request);
-        return location;
-    }
-
-    private String testIncludedLocation(String base, String portletContextPath,
-            String servletPath, String pathInfo) throws Exception {
-
-        HttpServletRequest request = createIncludeRequest(base,
-                portletContextPath, servletPath, pathInfo);
-        // Set request into replay mode
-        replay(request);
-
-        String location = (String) getStaticFilesLocationMethod.invoke(servlet,
-                request);
-        return location;
-    }
-
-    private HttpServletRequest createIncludeRequest(String base,
-            String realContextPath, String realServletPath, String pathInfo)
-            throws Exception {
-        HttpServletRequest request = createRequest(base, "", "", pathInfo);
-        expect(request.getAttribute("javax.servlet.include.context_path"))
-                .andReturn(realContextPath).anyTimes();
-        expect(request.getAttribute("javax.servlet.include.servlet_path"))
-                .andReturn(realServletPath).anyTimes();
-        expect(
-                request.getAttribute(AbstractApplicationServlet.REQUEST_VAADIN_STATIC_FILE_PATH))
-                .andReturn(null).anyTimes();
-
-        return request;
-    }
-
-    private HttpServletRequest createNonIncludeRequest(String base,
-            String realContextPath, String realServletPath, String pathInfo)
-            throws Exception {
-        HttpServletRequest request = createRequest(base, realContextPath,
-                realServletPath, pathInfo);
-        expect(request.getAttribute("javax.servlet.include.context_path"))
-                .andReturn(null).anyTimes();
-        expect(request.getAttribute("javax.servlet.include.servlet_path"))
-                .andReturn(null).anyTimes();
-        expect(
-                request.getAttribute(ApplicationServlet.REQUEST_VAADIN_STATIC_FILE_PATH))
-                .andReturn(null).anyTimes();
-
-        return request;
-    }
-
-    /**
-     * Creates a HttpServletRequest mock using the supplied parameters.
-     * 
-     * @param base
-     *            The base url, e.g. http://localhost:8080
-     * @param contextPath
-     *            The context path where the application is deployed, e.g.
-     *            /mycontext
-     * @param servletPath
-     *            The servlet path to the servlet we are testing, e.g. /myapp
-     * @param pathInfo
-     *            Any text following the servlet path in the request, not
-     *            including query parameters, e.g. /UIDL/
-     * @return A mock HttpServletRequest object useful for testing
-     * @throws MalformedURLException
-     */
-    private HttpServletRequest createRequest(String base, String contextPath,
-            String servletPath, String pathInfo) throws MalformedURLException {
-        URL url = new URL(base + contextPath + pathInfo);
-        HttpServletRequest request = createMock(HttpServletRequest.class);
-        expect(request.isSecure()).andReturn(
-                url.getProtocol().equalsIgnoreCase("https")).anyTimes();
-        expect(request.getServerName()).andReturn(url.getHost()).anyTimes();
-        expect(request.getServerPort()).andReturn(url.getPort()).anyTimes();
-        expect(request.getRequestURI()).andReturn(url.getPath()).anyTimes();
-        expect(request.getContextPath()).andReturn(contextPath).anyTimes();
-        expect(request.getPathInfo()).andReturn(pathInfo).anyTimes();
-        expect(request.getServletPath()).andReturn(servletPath).anyTimes();
-
-        return request;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/component/AbstractListenerMethodsTest.java b/tests/src/com/vaadin/tests/server/component/AbstractListenerMethodsTest.java
deleted file mode 100644
index 355f5167d7..0000000000
--- a/tests/src/com/vaadin/tests/server/component/AbstractListenerMethodsTest.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package com.vaadin.tests.server.component;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-
-import junit.framework.TestCase;
-
-import org.easymock.EasyMock;
-import org.junit.Assert;
-
-import com.vaadin.tests.VaadinClasses;
-import com.vaadin.ui.Component;
-
-public abstract class AbstractListenerMethodsTest extends TestCase {
-
-    public static void main(String[] args) {
-        findAllListenerMethods();
-    }
-
-    private static void findAllListenerMethods() {
-        Set<Class<?>> classes = new HashSet<Class<?>>();
-        for (Class<?> c : VaadinClasses.getAllServerSideClasses()) {
-            while (c != null && c.getName().startsWith("com.vaadin.")) {
-                classes.add(c);
-                c = c.getSuperclass();
-            }
-        }
-
-        for (Class<?> c : classes) {
-            boolean found = false;
-            for (Method m : c.getDeclaredMethods()) {
-                if (m.getName().equals("addListener")) {
-                    if (m.getParameterTypes().length != 1) {
-                        continue;
-                    }
-                    String packageName = "com.vaadin.tests.server";
-                    if (Component.class.isAssignableFrom(c)) {
-                        packageName += ".component."
-                                + c.getSimpleName().toLowerCase();
-                        continue;
-                    }
-
-                    if (!found) {
-                        found = true;
-                        System.out.println("package " + packageName + ";");
-
-                        System.out.println("import "
-                                + AbstractListenerMethodsTest.class.getName() + ";");
-                        System.out.println("import " + c.getName() + ";");
-                        System.out.println("public class " + c.getSimpleName()
-                                + "Listeners extends "
-                                + AbstractListenerMethodsTest.class.getSimpleName() + " {");
-                    }
-
-                    String listenerClassName = m.getParameterTypes()[0]
-                            .getSimpleName();
-                    String eventClassName = listenerClassName.replaceFirst(
-                            "Listener$", "Event");
-                    System.out.println("public void test" + listenerClassName
-                            + "() throws Exception {");
-                    System.out.println("    testListener(" + c.getSimpleName()
-                            + ".class, " + eventClassName + ".class, "
-                            + listenerClassName + ".class);");
-                    System.out.println("}");
-                }
-            }
-            if (found) {
-                System.out.println("}");
-                System.out.println();
-            }
-        }
-    }
-
-    protected void testListenerAddGetRemove(Class<?> testClass,
-            Class<?> eventClass, Class<?> listenerClass) throws Exception {
-        // Create a component for testing
-        Object c = testClass.newInstance();
-        testListenerAddGetRemove(testClass, eventClass, listenerClass, c);
-
-    }
-
-    protected void testListenerAddGetRemove(Class<?> cls, Class<?> eventClass,
-            Class<?> listenerClass, Object c) throws Exception {
-
-        Object mockListener1 = EasyMock.createMock(listenerClass);
-        Object mockListener2 = EasyMock.createMock(listenerClass);
-
-        // Verify we start from no listeners
-        verifyListeners(c, eventClass);
-
-        // Add one listener and verify
-        addListener(c, mockListener1, listenerClass);
-        verifyListeners(c, eventClass, mockListener1);
-
-        // Add another listener and verify
-        addListener(c, mockListener2, listenerClass);
-        verifyListeners(c, eventClass, mockListener1, mockListener2);
-
-        // Ensure we can fetch using parent class also
-        if (eventClass.getSuperclass() != null) {
-            verifyListeners(c, eventClass.getSuperclass(), mockListener1,
-                    mockListener2);
-        }
-
-        // Remove the first and verify
-        removeListener(c, mockListener1, listenerClass);
-        verifyListeners(c, eventClass, mockListener2);
-
-        // Remove the remaining and verify
-        removeListener(c, mockListener2, listenerClass);
-        verifyListeners(c, eventClass);
-
-    }
-
-    private void removeListener(Object c, Object listener,
-            Class<?> listenerClass) throws IllegalArgumentException,
-            IllegalAccessException, InvocationTargetException,
-            SecurityException, NoSuchMethodException {
-        Method method = getRemoveListenerMethod(c.getClass(), listenerClass);
-        method.invoke(c, listener);
-
-    }
-
-    private void addListener(Object c, Object listener1, Class<?> listenerClass)
-            throws IllegalArgumentException, IllegalAccessException,
-            InvocationTargetException, SecurityException, NoSuchMethodException {
-        Method method = getAddListenerMethod(c.getClass(), listenerClass);
-        method.invoke(c, listener1);
-    }
-
-    private Collection<?> getListeners(Object c, Class<?> eventType)
-            throws IllegalArgumentException, IllegalAccessException,
-            InvocationTargetException, SecurityException, NoSuchMethodException {
-        Method method = getGetListenersMethod(c.getClass());
-        return (Collection<?>) method.invoke(c, eventType);
-    }
-
-    private Method getGetListenersMethod(Class<? extends Object> cls)
-            throws SecurityException, NoSuchMethodException {
-        return cls.getMethod("getListeners", Class.class);
-    }
-
-    private Method getAddListenerMethod(Class<?> cls, Class<?> listenerClass)
-            throws SecurityException, NoSuchMethodException {
-        return cls.getMethod("addListener", listenerClass);
-
-    }
-
-    private Method getRemoveListenerMethod(Class<?> cls, Class<?> listenerClass)
-            throws SecurityException, NoSuchMethodException {
-        return cls.getMethod("removeListener", listenerClass);
-
-    }
-
-    private void verifyListeners(Object c, Class<?> eventClass,
-            Object... expectedListeners) throws IllegalArgumentException,
-            SecurityException, IllegalAccessException,
-            InvocationTargetException, NoSuchMethodException {
-        Collection<?> registeredListeners = getListeners(c, eventClass);
-        assertEquals("Number of listeners", expectedListeners.length,
-                registeredListeners.size());
-
-        Assert.assertArrayEquals(expectedListeners,
-                registeredListeners.toArray());
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/FinalMethodTest.java b/tests/src/com/vaadin/tests/server/component/FinalMethodTest.java
deleted file mode 100644
index ad80007882..0000000000
--- a/tests/src/com/vaadin/tests/server/component/FinalMethodTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.vaadin.tests.server.component;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.HashSet;
-
-import junit.framework.TestCase;
-
-import com.vaadin.tests.VaadinClasses;
-import com.vaadin.ui.Component;
-
-public class FinalMethodTest extends TestCase {
-
-    // public void testThatContainersHaveNoFinalMethods() {
-    // HashSet<Class<?>> tested = new HashSet<Class<?>>();
-    // for (Class<?> c : VaadinClasses.getAllServerSideClasses()) {
-    // if (Container.class.isAssignableFrom(c)) {
-    // ensureNoFinalMethods(c, tested);
-    // }
-    // }
-    // }
-
-    public void testThatComponentsHaveNoFinalMethods() {
-        HashSet<Class<?>> tested = new HashSet<Class<?>>();
-        for (Class<? extends Component> c : VaadinClasses.getComponents()) {
-            ensureNoFinalMethods(c, tested);
-        }
-    }
-
-    private void ensureNoFinalMethods(Class<?> c, HashSet<Class<?>> tested) {
-        if (tested.contains(c)) {
-            return;
-        }
-
-        tested.add(c);
-
-        if (c == Object.class) {
-            return;
-        }
-        System.out.println("Checking " + c.getName());
-        for (Method m : c.getDeclaredMethods()) {
-            if (isPrivate(m)) {
-                continue;
-            }
-            if (isFinal(m)) {
-                String error = "Class " + c.getName() + " contains a "
-                        + (isPublic(m) ? "public" : "non-public")
-                        + " final method: " + m.getName();
-                // System.err.println(error);
-                throw new RuntimeException(error);
-            }
-        }
-        ensureNoFinalMethods(c.getSuperclass(), tested);
-
-    }
-
-    private boolean isFinal(Method m) {
-        return Modifier.isFinal(m.getModifiers());
-    }
-
-    private boolean isPrivate(Method m) {
-        return Modifier.isPrivate(m.getModifiers());
-    }
-
-    private boolean isPublic(Method m) {
-        return Modifier.isPublic(m.getModifiers());
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/absolutelayout/AbsoluteLayoutListeners.java b/tests/src/com/vaadin/tests/server/component/absolutelayout/AbsoluteLayoutListeners.java
deleted file mode 100644
index a569ea03e9..0000000000
--- a/tests/src/com/vaadin/tests/server/component/absolutelayout/AbsoluteLayoutListeners.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.server.component.absolutelayout;
-
-import com.vaadin.event.LayoutEvents.LayoutClickEvent;
-import com.vaadin.event.LayoutEvents.LayoutClickListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.AbsoluteLayout;
-
-public class AbsoluteLayoutListeners extends AbstractListenerMethodsTest {
-    public void testLayoutClickListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(AbsoluteLayout.class, LayoutClickEvent.class,
-                LayoutClickListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/absolutelayout/ComponentPosition.java b/tests/src/com/vaadin/tests/server/component/absolutelayout/ComponentPosition.java
deleted file mode 100644
index 6fc7fbba0d..0000000000
--- a/tests/src/com/vaadin/tests/server/component/absolutelayout/ComponentPosition.java
+++ /dev/null
@@ -1,205 +0,0 @@
-package com.vaadin.tests.server.component.absolutelayout;
-
-import junit.framework.TestCase;
-
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.ui.AbsoluteLayout;
-import com.vaadin.ui.Button;
-
-public class ComponentPosition extends TestCase {
-
-    private static final String CSS = "top:7.0px;right:7.0%;bottom:7.0pc;left:7.0em;z-index:7;";
-    private static final String PARTIAL_CSS = "top:7.0px;left:7.0em;";
-    private static final Float CSS_VALUE = Float.valueOf(7);
-
-    private static final int UNIT_UNSET = Sizeable.UNITS_PIXELS;
-
-    /**
-     * Add component w/o giving positions, assert that everything is unset
-     */
-    public void testNoPosition() {
-        AbsoluteLayout layout = new AbsoluteLayout();
-        Button b = new Button();
-        layout.addComponent(b);
-
-        assertNull(layout.getPosition(b).getTopValue());
-        assertNull(layout.getPosition(b).getBottomValue());
-        assertNull(layout.getPosition(b).getLeftValue());
-        assertNull(layout.getPosition(b).getRightValue());
-
-        assertEquals(UNIT_UNSET, layout.getPosition(b).getTopUnits());
-        assertEquals(UNIT_UNSET, layout.getPosition(b).getBottomUnits());
-        assertEquals(UNIT_UNSET, layout.getPosition(b).getLeftUnits());
-        assertEquals(UNIT_UNSET, layout.getPosition(b).getRightUnits());
-
-        assertEquals(-1, layout.getPosition(b).getZIndex());
-
-        assertEquals("", layout.getPosition(b).getCSSString());
-
-    }
-
-    /**
-     * Add component, setting all attributes using CSS, assert getter agree
-     */
-    public void testFullCss() {
-        AbsoluteLayout layout = new AbsoluteLayout();
-        Button b = new Button();
-        layout.addComponent(b, CSS);
-
-        assertEquals(CSS_VALUE, layout.getPosition(b).getTopValue());
-        assertEquals(CSS_VALUE, layout.getPosition(b).getBottomValue());
-        assertEquals(CSS_VALUE, layout.getPosition(b).getLeftValue());
-        assertEquals(CSS_VALUE, layout.getPosition(b).getRightValue());
-
-        assertEquals(Sizeable.UNITS_PIXELS, layout.getPosition(b).getTopUnits());
-        assertEquals(Sizeable.UNITS_PICAS, layout.getPosition(b)
-                .getBottomUnits());
-        assertEquals(Sizeable.UNITS_EM, layout.getPosition(b).getLeftUnits());
-        assertEquals(Sizeable.UNITS_PERCENTAGE, layout.getPosition(b)
-                .getRightUnits());
-
-        assertEquals(7, layout.getPosition(b).getZIndex());
-
-        assertEquals(CSS, layout.getPosition(b).getCSSString());
-
-    }
-
-    /**
-     * Add component, setting some attributes using CSS, assert getters agree
-     */
-    public void testPartialCss() {
-        AbsoluteLayout layout = new AbsoluteLayout();
-        Button b = new Button();
-        layout.addComponent(b, PARTIAL_CSS);
-
-        assertEquals(CSS_VALUE, layout.getPosition(b).getTopValue());
-        assertNull(layout.getPosition(b).getBottomValue());
-        assertEquals(CSS_VALUE, layout.getPosition(b).getLeftValue());
-        assertNull(layout.getPosition(b).getRightValue());
-
-        assertEquals(Sizeable.UNITS_PIXELS, layout.getPosition(b).getTopUnits());
-        assertEquals(UNIT_UNSET, layout.getPosition(b).getBottomUnits());
-        assertEquals(Sizeable.UNITS_EM, layout.getPosition(b).getLeftUnits());
-        assertEquals(UNIT_UNSET, layout.getPosition(b).getRightUnits());
-
-        assertEquals(-1, layout.getPosition(b).getZIndex());
-
-        assertEquals(PARTIAL_CSS, layout.getPosition(b).getCSSString());
-
-    }
-
-    /**
-     * Add component setting all attributes using CSS, then reset using partial
-     * CSS; assert getters agree and the appropriate attributes are unset.
-     */
-    public void testPartialCssReset() {
-        AbsoluteLayout layout = new AbsoluteLayout();
-        Button b = new Button();
-        layout.addComponent(b, CSS);
-
-        layout.getPosition(b).setCSSString(PARTIAL_CSS);
-
-        assertEquals(CSS_VALUE, layout.getPosition(b).getTopValue());
-        assertNull(layout.getPosition(b).getBottomValue());
-        assertEquals(CSS_VALUE, layout.getPosition(b).getLeftValue());
-        assertNull(layout.getPosition(b).getRightValue());
-
-        assertEquals(Sizeable.UNITS_PIXELS, layout.getPosition(b).getTopUnits());
-        assertEquals(UNIT_UNSET, layout.getPosition(b).getBottomUnits());
-        assertEquals(Sizeable.UNITS_EM, layout.getPosition(b).getLeftUnits());
-        assertEquals(UNIT_UNSET, layout.getPosition(b).getRightUnits());
-
-        assertEquals(-1, layout.getPosition(b).getZIndex());
-
-        assertEquals(PARTIAL_CSS, layout.getPosition(b).getCSSString());
-
-    }
-
-    /**
-     * Add component, then set all position attributes with individual setters
-     * for value and units; assert getters agree.
-     */
-    public void testSetPosition() {
-        final Float SIZE = Float.valueOf(12);
-
-        AbsoluteLayout layout = new AbsoluteLayout();
-        Button b = new Button();
-        layout.addComponent(b);
-
-        layout.getPosition(b).setTopValue(SIZE);
-        layout.getPosition(b).setRightValue(SIZE);
-        layout.getPosition(b).setBottomValue(SIZE);
-        layout.getPosition(b).setLeftValue(SIZE);
-
-        layout.getPosition(b).setTopUnits(Sizeable.UNITS_CM);
-        layout.getPosition(b).setRightUnits(Sizeable.UNITS_EX);
-        layout.getPosition(b).setBottomUnits(Sizeable.UNITS_INCH);
-        layout.getPosition(b).setLeftUnits(Sizeable.UNITS_MM);
-
-        assertEquals(SIZE, layout.getPosition(b).getTopValue());
-        assertEquals(SIZE, layout.getPosition(b).getRightValue());
-        assertEquals(SIZE, layout.getPosition(b).getBottomValue());
-        assertEquals(SIZE, layout.getPosition(b).getLeftValue());
-
-        assertEquals(Sizeable.UNITS_CM, layout.getPosition(b).getTopUnits());
-        assertEquals(Sizeable.UNITS_EX, layout.getPosition(b).getRightUnits());
-        assertEquals(Sizeable.UNITS_INCH, layout.getPosition(b)
-                .getBottomUnits());
-        assertEquals(Sizeable.UNITS_MM, layout.getPosition(b).getLeftUnits());
-
-    }
-
-    /**
-     * Add component, then set all position attributes with combined setters for
-     * value and units; assert getters agree.
-     */
-    public void testSetPosition2() {
-        final Float SIZE = Float.valueOf(12);
-        AbsoluteLayout layout = new AbsoluteLayout();
-        Button b = new Button();
-        layout.addComponent(b);
-
-        layout.getPosition(b).setTop(SIZE, Sizeable.UNITS_CM);
-        layout.getPosition(b).setRight(SIZE, Sizeable.UNITS_EX);
-        layout.getPosition(b).setBottom(SIZE, Sizeable.UNITS_INCH);
-        layout.getPosition(b).setLeft(SIZE, Sizeable.UNITS_MM);
-
-        assertEquals(SIZE, layout.getPosition(b).getTopValue());
-        assertEquals(SIZE, layout.getPosition(b).getRightValue());
-        assertEquals(SIZE, layout.getPosition(b).getBottomValue());
-        assertEquals(SIZE, layout.getPosition(b).getLeftValue());
-
-        assertEquals(Sizeable.UNITS_CM, layout.getPosition(b).getTopUnits());
-        assertEquals(Sizeable.UNITS_EX, layout.getPosition(b).getRightUnits());
-        assertEquals(Sizeable.UNITS_INCH, layout.getPosition(b)
-                .getBottomUnits());
-        assertEquals(Sizeable.UNITS_MM, layout.getPosition(b).getLeftUnits());
-
-    }
-
-    /**
-     * Add component, set all attributes using CSS, unset some using method
-     * calls, assert getters agree.
-     */
-    public void testUnsetPosition() {
-        AbsoluteLayout layout = new AbsoluteLayout();
-        Button b = new Button();
-        layout.addComponent(b, CSS);
-
-        layout.getPosition(b).setTopValue(null);
-        layout.getPosition(b).setRightValue(null);
-        layout.getPosition(b).setBottomValue(null);
-        layout.getPosition(b).setLeftValue(null);
-
-        layout.getPosition(b).setZIndex(-1);
-
-        assertNull(layout.getPosition(b).getTopValue());
-        assertNull(layout.getPosition(b).getBottomValue());
-        assertNull(layout.getPosition(b).getLeftValue());
-        assertNull(layout.getPosition(b).getRightValue());
-
-        assertEquals("", layout.getPosition(b).getCSSString());
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/component/abstractcomponent/TestAbstractComponentStyleNames.java b/tests/src/com/vaadin/tests/server/component/abstractcomponent/TestAbstractComponentStyleNames.java
deleted file mode 100644
index b1c4a8f4be..0000000000
--- a/tests/src/com/vaadin/tests/server/component/abstractcomponent/TestAbstractComponentStyleNames.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.vaadin.tests.server.component.abstractcomponent;
-
-import junit.framework.TestCase;
-
-import com.vaadin.ui.AbstractComponent;
-
-public class TestAbstractComponentStyleNames extends TestCase {
-
-    public void testSetMultiple() {
-        AbstractComponent component = getComponent();
-        component.setStyleName("style1 style2");
-        assertEquals(component.getStyleName(), "style1 style2");
-    }
-
-    public void testSetAdd() {
-        AbstractComponent component = getComponent();
-        component.setStyleName("style1");
-        component.addStyleName("style2");
-        assertEquals(component.getStyleName(), "style1 style2");
-    }
-
-    public void testAddSame() {
-        AbstractComponent component = getComponent();
-        component.setStyleName("style1 style2");
-        component.addStyleName("style1");
-        assertEquals(component.getStyleName(), "style1 style2");
-    }
-
-    public void testSetRemove() {
-        AbstractComponent component = getComponent();
-        component.setStyleName("style1 style2");
-        component.removeStyleName("style1");
-        assertEquals(component.getStyleName(), "style2");
-    }
-
-    public void testAddRemove() {
-        AbstractComponent component = getComponent();
-        component.addStyleName("style1");
-        component.addStyleName("style2");
-        component.removeStyleName("style1");
-        assertEquals(component.getStyleName(), "style2");
-    }
-
-    public void testRemoveMultipleWithExtraSpaces() {
-        AbstractComponent component = getComponent();
-        component.setStyleName("style1 style2 style3");
-        component.removeStyleName(" style1  style3 ");
-        assertEquals(component.getStyleName(), "style2");
-    }
-
-    public void testSetWithExtraSpaces() {
-        AbstractComponent component = getComponent();
-        component.setStyleName(" style1  style2 ");
-        assertEquals(component.getStyleName(), "style1 style2");
-    }
-
-    private AbstractComponent getComponent() {
-        return new AbstractComponent() {
-        };
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/component/abstractcomponentcontainer/TestAbstractComponentContainerListeners.java b/tests/src/com/vaadin/tests/server/component/abstractcomponentcontainer/TestAbstractComponentContainerListeners.java
deleted file mode 100644
index adf9c8d72e..0000000000
--- a/tests/src/com/vaadin/tests/server/component/abstractcomponentcontainer/TestAbstractComponentContainerListeners.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.vaadin.tests.server.component.abstractcomponentcontainer;
-
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.ComponentContainer.ComponentAttachEvent;
-import com.vaadin.ui.ComponentContainer.ComponentAttachListener;
-import com.vaadin.ui.ComponentContainer.ComponentDetachEvent;
-import com.vaadin.ui.ComponentContainer.ComponentDetachListener;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.VerticalLayout;
-
-public class TestAbstractComponentContainerListeners extends AbstractListenerMethodsTest {
-    public void testComponentDetachListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(HorizontalLayout.class,
-                ComponentDetachEvent.class, ComponentDetachListener.class);
-    }
-
-    public void testComponentAttachListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(VerticalLayout.class,
-                ComponentAttachEvent.class, ComponentAttachListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/abstractfield/TestAbstractFieldListeners.java b/tests/src/com/vaadin/tests/server/component/abstractfield/TestAbstractFieldListeners.java
deleted file mode 100644
index 63536baf68..0000000000
--- a/tests/src/com/vaadin/tests/server/component/abstractfield/TestAbstractFieldListeners.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.vaadin.tests.server.component.abstractfield;
-
-import com.vaadin.data.Property.ReadOnlyStatusChangeEvent;
-import com.vaadin.data.Property.ReadOnlyStatusChangeListener;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.Button;
-
-public class TestAbstractFieldListeners extends AbstractListenerMethodsTest {
-    public void testReadOnlyStatusChangeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Button.class, ReadOnlyStatusChangeEvent.class,
-                ReadOnlyStatusChangeListener.class);
-    }
-
-    public void testValueChangeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Button.class, ValueChangeEvent.class,
-                ValueChangeListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/abstractorderedlayout/TestAbstractOrderedLayoutListeners.java b/tests/src/com/vaadin/tests/server/component/abstractorderedlayout/TestAbstractOrderedLayoutListeners.java
deleted file mode 100644
index 05dfc47126..0000000000
--- a/tests/src/com/vaadin/tests/server/component/abstractorderedlayout/TestAbstractOrderedLayoutListeners.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.server.component.abstractorderedlayout;
-
-import com.vaadin.event.LayoutEvents.LayoutClickEvent;
-import com.vaadin.event.LayoutEvents.LayoutClickListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.VerticalLayout;
-
-public class TestAbstractOrderedLayoutListeners extends AbstractListenerMethodsTest {
-    public void testLayoutClickListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(VerticalLayout.class, LayoutClickEvent.class,
-                LayoutClickListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/abstractselect/TestAbstractSelectListeners.java b/tests/src/com/vaadin/tests/server/component/abstractselect/TestAbstractSelectListeners.java
deleted file mode 100644
index c1886943fd..0000000000
--- a/tests/src/com/vaadin/tests/server/component/abstractselect/TestAbstractSelectListeners.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.vaadin.tests.server.component.abstractselect;
-
-import com.vaadin.data.Container.ItemSetChangeEvent;
-import com.vaadin.data.Container.ItemSetChangeListener;
-import com.vaadin.data.Container.PropertySetChangeEvent;
-import com.vaadin.data.Container.PropertySetChangeListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.ComboBox;
-
-public class TestAbstractSelectListeners extends AbstractListenerMethodsTest {
-    public void testItemSetChangeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(ComboBox.class, ItemSetChangeEvent.class,
-                ItemSetChangeListener.class);
-    }
-
-    public void testPropertySetChangeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(ComboBox.class, PropertySetChangeEvent.class,
-                PropertySetChangeListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/abstractsplitpanel/TestAbstractSplitPanelListeners.java b/tests/src/com/vaadin/tests/server/component/abstractsplitpanel/TestAbstractSplitPanelListeners.java
deleted file mode 100644
index 4f66d1446b..0000000000
--- a/tests/src/com/vaadin/tests/server/component/abstractsplitpanel/TestAbstractSplitPanelListeners.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.server.component.abstractsplitpanel;
-
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.AbstractSplitPanel.SplitterClickEvent;
-import com.vaadin.ui.AbstractSplitPanel.SplitterClickListener;
-import com.vaadin.ui.HorizontalSplitPanel;
-
-public class TestAbstractSplitPanelListeners extends AbstractListenerMethodsTest {
-    public void testSplitterClickListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(HorizontalSplitPanel.class,
-                SplitterClickEvent.class, SplitterClickListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/abstracttextfield/TestAbstractTextFieldListeners.java b/tests/src/com/vaadin/tests/server/component/abstracttextfield/TestAbstractTextFieldListeners.java
deleted file mode 100644
index fb8eb65f55..0000000000
--- a/tests/src/com/vaadin/tests/server/component/abstracttextfield/TestAbstractTextFieldListeners.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.vaadin.tests.server.component.abstracttextfield;
-
-import com.vaadin.event.FieldEvents.BlurEvent;
-import com.vaadin.event.FieldEvents.BlurListener;
-import com.vaadin.event.FieldEvents.FocusEvent;
-import com.vaadin.event.FieldEvents.FocusListener;
-import com.vaadin.event.FieldEvents.TextChangeEvent;
-import com.vaadin.event.FieldEvents.TextChangeListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.TextField;
-
-public class TestAbstractTextFieldListeners extends AbstractListenerMethodsTest {
-    public void testTextChangeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(TextField.class, TextChangeEvent.class,
-                TextChangeListener.class);
-    }
-
-    public void testFocusListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(TextField.class, FocusEvent.class,
-                FocusListener.class);
-    }
-
-    public void testBlurListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(TextField.class, BlurEvent.class,
-                BlurListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/button/ButtonListeners.java b/tests/src/com/vaadin/tests/server/component/button/ButtonListeners.java
deleted file mode 100644
index 59ddad4efe..0000000000
--- a/tests/src/com/vaadin/tests/server/component/button/ButtonListeners.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.vaadin.tests.server.component.button;
-
-import com.vaadin.event.FieldEvents.BlurEvent;
-import com.vaadin.event.FieldEvents.BlurListener;
-import com.vaadin.event.FieldEvents.FocusEvent;
-import com.vaadin.event.FieldEvents.FocusListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-
-public class ButtonListeners extends AbstractListenerMethodsTest {
-    public void testFocusListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Button.class, FocusEvent.class,
-                FocusListener.class);
-    }
-
-    public void testBlurListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Button.class, BlurEvent.class,
-                BlurListener.class);
-    }
-
-    public void testClickListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Button.class, ClickEvent.class,
-                ClickListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/csslayout/CssLayoutListeners.java b/tests/src/com/vaadin/tests/server/component/csslayout/CssLayoutListeners.java
deleted file mode 100644
index e646467cb2..0000000000
--- a/tests/src/com/vaadin/tests/server/component/csslayout/CssLayoutListeners.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.server.component.csslayout;
-
-import com.vaadin.event.LayoutEvents.LayoutClickEvent;
-import com.vaadin.event.LayoutEvents.LayoutClickListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.CssLayout;
-
-public class CssLayoutListeners extends AbstractListenerMethodsTest {
-    public void testLayoutClickListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(CssLayout.class, LayoutClickEvent.class,
-                LayoutClickListener.class);
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/server/component/datefield/DateFieldListeners.java b/tests/src/com/vaadin/tests/server/component/datefield/DateFieldListeners.java
deleted file mode 100644
index 1d7f729868..0000000000
--- a/tests/src/com/vaadin/tests/server/component/datefield/DateFieldListeners.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.vaadin.tests.server.component.datefield;
-
-import com.vaadin.event.FieldEvents.BlurEvent;
-import com.vaadin.event.FieldEvents.BlurListener;
-import com.vaadin.event.FieldEvents.FocusEvent;
-import com.vaadin.event.FieldEvents.FocusListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.DateField;
-
-public class DateFieldListeners extends AbstractListenerMethodsTest {
-    public void testFocusListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(DateField.class, FocusEvent.class,
-                FocusListener.class);
-    }
-
-    public void testBlurListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(DateField.class, BlurEvent.class,
-                BlurListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/datefield/WeekNumberCalculation.java b/tests/src/com/vaadin/tests/server/component/datefield/WeekNumberCalculation.java
deleted file mode 100644
index 428a8634b3..0000000000
--- a/tests/src/com/vaadin/tests/server/component/datefield/WeekNumberCalculation.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.vaadin.tests.server.component.datefield;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import com.vaadin.terminal.gwt.client.DateTimeService;
-
-public class WeekNumberCalculation extends TestCase {
-
-    final long MILLISECONDS_PER_DAY = 24 * 3600 * 1000;
-
-    static Map<Date, Integer> isoWeekNumbers = new HashMap<Date, Integer>();
-    static {
-        isoWeekNumbers.put(getDate(2005, 02, 02), 5);
-
-        isoWeekNumbers.put(getDate(2005, 1, 1), 53);
-        isoWeekNumbers.put(getDate(2005, 1, 2), 53);
-        isoWeekNumbers.put(getDate(2005, 1, 3), 1);
-        isoWeekNumbers.put(getDate(2005, 1, 4), 1);
-        isoWeekNumbers.put(getDate(2005, 1, 5), 1);
-        isoWeekNumbers.put(getDate(2005, 1, 6), 1);
-        isoWeekNumbers.put(getDate(2005, 1, 7), 1);
-        isoWeekNumbers.put(getDate(2005, 1, 8), 1);
-        isoWeekNumbers.put(getDate(2005, 1, 9), 1);
-        isoWeekNumbers.put(getDate(2005, 1, 10), 2);
-        isoWeekNumbers.put(getDate(2005, 12, 31), 52);
-        isoWeekNumbers.put(getDate(2005, 12, 30), 52);
-        isoWeekNumbers.put(getDate(2005, 12, 29), 52);
-        isoWeekNumbers.put(getDate(2005, 12, 28), 52);
-        isoWeekNumbers.put(getDate(2005, 12, 27), 52);
-        isoWeekNumbers.put(getDate(2005, 12, 26), 52);
-        isoWeekNumbers.put(getDate(2005, 12, 25), 51);
-        isoWeekNumbers.put(getDate(2007, 1, 1), 1);
-        isoWeekNumbers.put(getDate(2007, 12, 30), 52);
-        isoWeekNumbers.put(getDate(2007, 12, 31), 1);
-        isoWeekNumbers.put(getDate(2008, 1, 1), 1);
-        isoWeekNumbers.put(getDate(2008, 12, 28), 52);
-        isoWeekNumbers.put(getDate(2008, 12, 29), 1);
-        isoWeekNumbers.put(getDate(2008, 12, 30), 1);
-        isoWeekNumbers.put(getDate(2008, 12, 31), 1);
-        isoWeekNumbers.put(getDate(2009, 1, 1), 1);
-        isoWeekNumbers.put(getDate(2009, 12, 31), 53);
-        isoWeekNumbers.put(getDate(2010, 1, 1), 53);
-        isoWeekNumbers.put(getDate(2010, 1, 2), 53);
-        isoWeekNumbers.put(getDate(2010, 1, 3), 53);
-        isoWeekNumbers.put(getDate(2010, 1, 4), 1);
-        isoWeekNumbers.put(getDate(2010, 1, 5), 1);
-        isoWeekNumbers.put(getDate(2010, 10, 10), 40);
-
-    }
-
-    /**
-     * Test all dates from 1990-1992 + some more and see that {@link Calendar}
-     * calculates the ISO week number like we do.
-     * 
-     */
-    public void testISOWeekNumbers() {
-        Calendar c = Calendar.getInstance();
-        c.set(1990, 1, 1);
-        long start = c.getTimeInMillis();
-
-        for (int i = 0; i < 1000; i++) {
-            Date d = new Date(start + i * MILLISECONDS_PER_DAY);
-            int expected = getCalendarISOWeekNr(d);
-            int calculated = DateTimeService.getISOWeekNumber(d);
-            assertEquals(d + " should be week " + expected, expected,
-                    calculated);
-
-        }
-    }
-
-    /**
-     * Verify that special cases are handled correctly by us (and
-     * {@link Calendar}).
-     * 
-     */
-    public void testSampleISOWeekNumbers() {
-        for (Date d : isoWeekNumbers.keySet()) {
-            // System.out.println("Sample: " + d);
-            int expected = isoWeekNumbers.get(d);
-            int calculated = DateTimeService.getISOWeekNumber(d);
-            assertEquals(d + " should be week " + expected
-                    + " (Java Calendar is wrong?)", expected,
-                    getCalendarISOWeekNr(d));
-            assertEquals(d + " should be week " + expected, expected,
-                    calculated);
-
-        }
-    }
-
-    private int getCalendarISOWeekNr(Date d) {
-        Calendar c = Calendar.getInstance();
-        c.setFirstDayOfWeek(Calendar.MONDAY);
-        c.setMinimalDaysInFirstWeek(4);
-        c.setTime(d);
-
-        return c.get(Calendar.WEEK_OF_YEAR);
-    }
-
-    private static Date getDate(int year, int month, int date) {
-        Calendar c = Calendar.getInstance();
-        c.clear();
-        c.set(year, month - 1, date);
-        return c.getTime();
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/component/embedded/EmbeddedListeners.java b/tests/src/com/vaadin/tests/server/component/embedded/EmbeddedListeners.java
deleted file mode 100644
index 66a9a2b5d5..0000000000
--- a/tests/src/com/vaadin/tests/server/component/embedded/EmbeddedListeners.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.server.component.embedded;
-
-import com.vaadin.event.MouseEvents.ClickEvent;
-import com.vaadin.event.MouseEvents.ClickListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.Embedded;
-
-public class EmbeddedListeners extends AbstractListenerMethodsTest {
-    public void testClickListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Embedded.class, ClickEvent.class,
-                ClickListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/gridlayout/GridLayoutListeners.java b/tests/src/com/vaadin/tests/server/component/gridlayout/GridLayoutListeners.java
deleted file mode 100644
index 24db0856da..0000000000
--- a/tests/src/com/vaadin/tests/server/component/gridlayout/GridLayoutListeners.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.server.component.gridlayout;
-
-import com.vaadin.event.LayoutEvents.LayoutClickEvent;
-import com.vaadin.event.LayoutEvents.LayoutClickListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.GridLayout;
-
-public class GridLayoutListeners extends AbstractListenerMethodsTest {
-    public void testLayoutClickListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(GridLayout.class, LayoutClickEvent.class,
-                LayoutClickListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/label/LabelListeners.java b/tests/src/com/vaadin/tests/server/component/label/LabelListeners.java
deleted file mode 100644
index a25309b32f..0000000000
--- a/tests/src/com/vaadin/tests/server/component/label/LabelListeners.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.server.component.label;
-
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ValueChangeEvent;
-
-public class LabelListeners extends AbstractListenerMethodsTest {
-    public void testValueChangeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Label.class, ValueChangeEvent.class,
-                ValueChangeListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/loginform/LoginFormListeners.java b/tests/src/com/vaadin/tests/server/component/loginform/LoginFormListeners.java
deleted file mode 100644
index a8e7d76710..0000000000
--- a/tests/src/com/vaadin/tests/server/component/loginform/LoginFormListeners.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.server.component.loginform;
-
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.LoginForm;
-import com.vaadin.ui.LoginForm.LoginEvent;
-import com.vaadin.ui.LoginForm.LoginListener;
-
-public class LoginFormListeners extends AbstractListenerMethodsTest {
-    public void testLoginListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(LoginForm.class, LoginEvent.class,
-                LoginListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/menubar/MenuBarIds.java b/tests/src/com/vaadin/tests/server/component/menubar/MenuBarIds.java
deleted file mode 100644
index 9ce55361bd..0000000000
--- a/tests/src/com/vaadin/tests/server/component/menubar/MenuBarIds.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.vaadin.tests.server.component.menubar;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import junit.framework.TestCase;
-
-import com.vaadin.ui.MenuBar;
-import com.vaadin.ui.MenuBar.Command;
-import com.vaadin.ui.MenuBar.MenuItem;
-
-public class MenuBarIds extends TestCase implements Command {
-
-    private MenuItem lastSelectedItem;
-    private MenuItem menuFile;
-    private MenuItem menuEdit;
-    private MenuItem menuEditCopy;
-    private MenuItem menuEditCut;
-    private MenuItem menuEditPaste;
-    private MenuItem menuEditFind;
-    private MenuItem menuFileOpen;
-    private MenuItem menuFileSave;
-    private MenuItem menuFileExit;
-    private Set<MenuItem> menuItems = new HashSet<MenuItem>();
-
-    private MenuBar menuBar;
-
-    @Override
-    public void setUp() {
-        menuBar = new MenuBar();
-        menuFile = menuBar.addItem("File", this);
-        menuEdit = menuBar.addItem("Edit", this);
-        menuEditCopy = menuEdit.addItem("Copy", this);
-        menuEditCut = menuEdit.addItem("Cut", this);
-        menuEditPaste = menuEdit.addItem("Paste", this);
-        menuEdit.addSeparator();
-        menuEditFind = menuEdit.addItem("Find...", this);
-        menuFileOpen = menuFile.addItem("Open", this);
-        menuFileSave = menuFile.addItem("Save", this);
-        menuFile.addSeparator();
-        menuFileExit = menuFile.addItem("Exit", this);
-
-        menuItems.add(menuFile);
-        menuItems.add(menuEdit);
-        menuItems.add(menuEditCopy);
-        menuItems.add(menuEditCut);
-        menuItems.add(menuEditPaste);
-        menuItems.add(menuEditFind);
-        menuItems.add(menuFileOpen);
-        menuItems.add(menuFileSave);
-        menuItems.add(menuFileExit);
-    }
-
-    public void testMenubarIdUniqueness() {
-        // Ids within a menubar must be unique
-        assertUniqueIds(menuBar);
-
-        menuBar.removeItem(menuFile);
-        MenuItem file2 = menuBar.addItem("File2", this);
-        MenuItem file3 = menuBar.addItem("File3", this);
-        MenuItem file2sub = file2.addItem("File2 sub menu", this);
-        menuItems.add(file2);
-        menuItems.add(file2sub);
-        menuItems.add(file3);
-
-        assertUniqueIds(menuBar);
-    }
-
-    private static void assertUniqueIds(MenuBar menuBar) {
-
-        Set<Object> ids = new HashSet<Object>();
-
-        for (MenuItem item : menuBar.getItems()) {
-            assertUniqueIds(ids, item);
-        }
-    }
-
-    private static void assertUniqueIds(Set<Object> ids, MenuItem item) {
-        int id = item.getId();
-        System.out.println("Item " + item.getText() + ", id: " + id);
-        assertFalse(ids.contains(id));
-        ids.add(id);
-        if (item.getChildren() != null) {
-            for (MenuItem subItem : item.getChildren()) {
-                assertUniqueIds(ids, subItem);
-            }
-        }
-    }
-
-    public void menuSelected(MenuItem selectedItem) {
-        assertNull("lastSelectedItem was not cleared before selecting an item",
-                lastSelectedItem);
-
-        lastSelectedItem = selectedItem;
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/optiongroup/OptionGroupListeners.java b/tests/src/com/vaadin/tests/server/component/optiongroup/OptionGroupListeners.java
deleted file mode 100644
index a4c2289da4..0000000000
--- a/tests/src/com/vaadin/tests/server/component/optiongroup/OptionGroupListeners.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.vaadin.tests.server.component.optiongroup;
-
-import com.vaadin.event.FieldEvents.BlurEvent;
-import com.vaadin.event.FieldEvents.BlurListener;
-import com.vaadin.event.FieldEvents.FocusEvent;
-import com.vaadin.event.FieldEvents.FocusListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.OptionGroup;
-
-public class OptionGroupListeners extends AbstractListenerMethodsTest {
-    public void testFocusListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(OptionGroup.class, FocusEvent.class,
-                FocusListener.class);
-    }
-
-    public void testBlurListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(OptionGroup.class, BlurEvent.class,
-                BlurListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/orderedlayout/TestOrderedLayout.java b/tests/src/com/vaadin/tests/server/component/orderedlayout/TestOrderedLayout.java
deleted file mode 100644
index e17fb284dc..0000000000
--- a/tests/src/com/vaadin/tests/server/component/orderedlayout/TestOrderedLayout.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.vaadin.tests.server.component.orderedlayout;
-
-import java.util.Iterator;
-
-import junit.framework.TestCase;
-
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-
-public class TestOrderedLayout extends TestCase {
-
-    public void testVLIteration() {
-        testIndexing(new VerticalLayout(), 10);
-    }
-
-    public void testHLIteration() {
-        testIndexing(new HorizontalLayout(), 12);
-    }
-
-    public void testIndexing(AbstractOrderedLayout aol, int nrComponents) {
-        Component[] components = generateComponents(nrComponents);
-        for (Component c : components) {
-            aol.addComponent(c);
-        }
-        for (int i = 0; i < nrComponents; i++) {
-            assert (aol.getComponent(i) == components[i]);
-            assert (aol.getComponentIndex(components[i]) == i);
-        }
-
-        // Iteration should be in indexed order
-        int idx = 0;
-        for (Iterator<Component> i = aol.getComponentIterator(); i.hasNext();) {
-            Component c = i.next();
-            assert (aol.getComponentIndex(c) == idx++);
-        }
-    }
-
-    private Component[] generateComponents(int nr) {
-        Component[] components = new Component[nr];
-        for (int i = 0; i < nr; i++) {
-            components[i] = new Label("" + i);
-        }
-
-        return components;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/panel/PanelListeners.java b/tests/src/com/vaadin/tests/server/component/panel/PanelListeners.java
deleted file mode 100644
index e6094225e2..0000000000
--- a/tests/src/com/vaadin/tests/server/component/panel/PanelListeners.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.server.component.panel;
-
-import com.vaadin.event.MouseEvents.ClickEvent;
-import com.vaadin.event.MouseEvents.ClickListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.Panel;
-
-public class PanelListeners extends AbstractListenerMethodsTest {
-    public void testClickListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Panel.class, ClickEvent.class,
-                ClickListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/popupview/PopupViewListeners.java b/tests/src/com/vaadin/tests/server/component/popupview/PopupViewListeners.java
deleted file mode 100644
index 5b5fc2eb31..0000000000
--- a/tests/src/com/vaadin/tests/server/component/popupview/PopupViewListeners.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.vaadin.tests.server.component.popupview;
-
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.PopupView;
-import com.vaadin.ui.PopupView.PopupVisibilityEvent;
-import com.vaadin.ui.PopupView.PopupVisibilityListener;
-
-public class PopupViewListeners extends AbstractListenerMethodsTest {
-    public void testPopupVisibilityListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(PopupView.class, PopupVisibilityEvent.class,
-                PopupVisibilityListener.class, new PopupView("", new Label()));
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/select/SelectListeners.java b/tests/src/com/vaadin/tests/server/component/select/SelectListeners.java
deleted file mode 100644
index 8f90f2021e..0000000000
--- a/tests/src/com/vaadin/tests/server/component/select/SelectListeners.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.vaadin.tests.server.component.select;
-
-import com.vaadin.event.FieldEvents.BlurEvent;
-import com.vaadin.event.FieldEvents.BlurListener;
-import com.vaadin.event.FieldEvents.FocusEvent;
-import com.vaadin.event.FieldEvents.FocusListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.Select;
-
-public class SelectListeners extends AbstractListenerMethodsTest {
-    public void testFocusListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Select.class, FocusEvent.class,
-                FocusListener.class);
-    }
-
-    public void testBlurListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Select.class, BlurEvent.class,
-                BlurListener.class);
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/server/component/table/TableColumnAlignments.java b/tests/src/com/vaadin/tests/server/component/table/TableColumnAlignments.java
deleted file mode 100644
index 04f436f5c4..0000000000
--- a/tests/src/com/vaadin/tests/server/component/table/TableColumnAlignments.java
+++ /dev/null
@@ -1,165 +0,0 @@
-package com.vaadin.tests.server.component.table;
-
-import static org.junit.Assert.assertArrayEquals;
-
-import org.junit.Test;
-
-import com.vaadin.ui.Table;
-
-public class TableColumnAlignments {
-
-    @Test
-    public void defaultColumnAlignments() {
-        for (int properties = 0; properties < 10; properties++) {
-            Table t = TableGenerator.createTableWithDefaultContainer(
-                    properties, 10);
-            Object[] expected = new Object[properties];
-            for (int i = 0; i < properties; i++) {
-                expected[i] = Table.ALIGN_LEFT;
-            }
-            org.junit.Assert.assertArrayEquals("getColumnAlignments", expected,
-                    t.getColumnAlignments());
-        }
-    }
-
-    @Test
-    public void explicitColumnAlignments() {
-        int properties = 5;
-        Table t = TableGenerator
-                .createTableWithDefaultContainer(properties, 10);
-        String[] explicitAlignments = new String[] { Table.ALIGN_CENTER,
-                Table.ALIGN_LEFT, Table.ALIGN_RIGHT, Table.ALIGN_RIGHT,
-                Table.ALIGN_LEFT };
-
-        t.setColumnAlignments(explicitAlignments);
-
-        assertArrayEquals("Explicit visible columns, 5 properties",
-                explicitAlignments, t.getColumnAlignments());
-    }
-
-    @Test
-    public void invalidColumnAlignmentStrings() {
-        Table t = TableGenerator.createTableWithDefaultContainer(3, 7);
-        String[] defaultAlignments = new String[] { Table.ALIGN_LEFT,
-                Table.ALIGN_LEFT, Table.ALIGN_LEFT };
-        try {
-            t.setColumnAlignments(new String[] { "a", "b", "c" });
-            junit.framework.Assert
-                    .fail("No exception thrown for invalid array length");
-        } catch (IllegalArgumentException e) {
-            // Ok, expected
-        }
-
-        assertArrayEquals("Invalid change affected alignments",
-                defaultAlignments, t.getColumnAlignments());
-
-    }
-
-    @Test
-    public void invalidColumnAlignmentString() {
-        Table t = TableGenerator.createTableWithDefaultContainer(3, 7);
-        String[] defaultAlignments = new String[] { Table.ALIGN_LEFT,
-                Table.ALIGN_LEFT, Table.ALIGN_LEFT };
-        try {
-            t.setColumnAlignment("Property 1", "a");
-            junit.framework.Assert
-                    .fail("No exception thrown for invalid array length");
-        } catch (IllegalArgumentException e) {
-            // Ok, expected
-        }
-
-        assertArrayEquals("Invalid change affected alignments",
-                defaultAlignments, t.getColumnAlignments());
-
-    }
-
-    @Test
-    public void columnAlignmentForPropertyNotInContainer() {
-        Table t = TableGenerator.createTableWithDefaultContainer(3, 7);
-        String[] defaultAlignments = new String[] { Table.ALIGN_LEFT,
-                Table.ALIGN_LEFT, Table.ALIGN_LEFT };
-        try {
-            t.setColumnAlignment("Property 1200", Table.ALIGN_LEFT);
-            // FIXME: Uncomment as there should be an exception (#6475)
-            // junit.framework.Assert
-            // .fail("No exception thrown for property not in container");
-        } catch (IllegalArgumentException e) {
-            // Ok, expected
-        }
-
-        assertArrayEquals("Invalid change affected alignments",
-                defaultAlignments, t.getColumnAlignments());
-
-        // FIXME: Uncomment as null should be returned (#6474)
-        // junit.framework.Assert.assertEquals(
-        // "Column alignment for property not in container returned",
-        // null, t.getColumnAlignment("Property 1200"));
-
-    }
-
-    @Test
-    public void invalidColumnAlignmentsLength() {
-        Table t = TableGenerator.createTableWithDefaultContainer(7, 7);
-        String[] defaultAlignments = new String[] { Table.ALIGN_LEFT,
-                Table.ALIGN_LEFT, Table.ALIGN_LEFT, Table.ALIGN_LEFT,
-                Table.ALIGN_LEFT, Table.ALIGN_LEFT, Table.ALIGN_LEFT };
-
-        try {
-            t.setColumnAlignments(new String[] { Table.ALIGN_LEFT });
-            junit.framework.Assert
-                    .fail("No exception thrown for invalid array length");
-        } catch (IllegalArgumentException e) {
-            // Ok, expected
-        }
-        assertArrayEquals("Invalid change affected alignments",
-                defaultAlignments, t.getColumnAlignments());
-
-        try {
-            t.setColumnAlignments(new String[] {});
-            junit.framework.Assert
-                    .fail("No exception thrown for invalid array length");
-        } catch (IllegalArgumentException e) {
-            // Ok, expected
-        }
-        assertArrayEquals("Invalid change affected alignments",
-                defaultAlignments, t.getColumnAlignments());
-
-        try {
-            t.setColumnAlignments(new String[] { Table.ALIGN_LEFT,
-                    Table.ALIGN_LEFT, Table.ALIGN_LEFT, Table.ALIGN_LEFT,
-                    Table.ALIGN_LEFT, Table.ALIGN_LEFT, Table.ALIGN_LEFT,
-                    Table.ALIGN_LEFT });
-            junit.framework.Assert
-                    .fail("No exception thrown for invalid array length");
-        } catch (IllegalArgumentException e) {
-            // Ok, expected
-        }
-        assertArrayEquals("Invalid change affected alignments",
-                defaultAlignments, t.getColumnAlignments());
-
-    }
-
-    @Test
-    public void explicitColumnAlignmentOneByOne() {
-        int properties = 5;
-        Table t = TableGenerator
-                .createTableWithDefaultContainer(properties, 10);
-        String[] explicitAlignments = new String[] { Table.ALIGN_CENTER,
-                Table.ALIGN_LEFT, Table.ALIGN_RIGHT, Table.ALIGN_RIGHT,
-                Table.ALIGN_LEFT };
-
-        String[] currentAlignments = new String[] { Table.ALIGN_LEFT,
-                Table.ALIGN_LEFT, Table.ALIGN_LEFT, Table.ALIGN_LEFT,
-                Table.ALIGN_LEFT };
-
-        for (int i = 0; i < properties; i++) {
-            t.setColumnAlignment("Property " + i, explicitAlignments[i]);
-            currentAlignments[i] = explicitAlignments[i];
-
-            assertArrayEquals("Explicit visible columns, " + i
-                    + " alignments set", currentAlignments,
-                    t.getColumnAlignments());
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/table/TableGenerator.java b/tests/src/com/vaadin/tests/server/component/table/TableGenerator.java
deleted file mode 100644
index 0e63049944..0000000000
--- a/tests/src/com/vaadin/tests/server/component/table/TableGenerator.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.server.component.table;
-
-import org.junit.Test;
-
-import com.vaadin.data.Item;
-import com.vaadin.ui.Table;
-
-public class TableGenerator {
-    public static Table createTableWithDefaultContainer(int properties,
-            int items) {
-        Table t = new Table();
-
-        for (int i = 0; i < properties; i++) {
-            t.addContainerProperty("Property " + i, String.class, null);
-        }
-
-        for (int j = 0; j < items; j++) {
-            Item item = t.addItem("Item " + j);
-            for (int i = 0; i < properties; i++) {
-                item.getItemProperty("Property " + i).setValue(
-                        "Item " + j + "/Property " + i);
-            }
-        }
-
-        return t;
-    }
-
-    @Test
-    public void testTableGenerator() {
-        Table t = createTableWithDefaultContainer(1, 1);
-        junit.framework.Assert.assertEquals(t.size(), 1);
-        junit.framework.Assert.assertEquals(t.getContainerPropertyIds().size(),
-                1);
-
-        t = createTableWithDefaultContainer(100, 50);
-        junit.framework.Assert.assertEquals(t.size(), 50);
-        junit.framework.Assert.assertEquals(t.getContainerPropertyIds().size(),
-                100);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/component/table/TableListeners.java b/tests/src/com/vaadin/tests/server/component/table/TableListeners.java
deleted file mode 100644
index 75ec839823..0000000000
--- a/tests/src/com/vaadin/tests/server/component/table/TableListeners.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.vaadin.tests.server.component.table;
-
-import com.vaadin.event.ItemClickEvent;
-import com.vaadin.event.ItemClickEvent.ItemClickListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.ColumnReorderEvent;
-import com.vaadin.ui.Table.ColumnReorderListener;
-import com.vaadin.ui.Table.ColumnResizeEvent;
-import com.vaadin.ui.Table.ColumnResizeListener;
-import com.vaadin.ui.Table.FooterClickEvent;
-import com.vaadin.ui.Table.FooterClickListener;
-import com.vaadin.ui.Table.HeaderClickEvent;
-import com.vaadin.ui.Table.HeaderClickListener;
-
-public class TableListeners extends AbstractListenerMethodsTest {
-    public void testColumnResizeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Table.class, ColumnResizeEvent.class,
-                ColumnResizeListener.class);
-    }
-
-    public void testItemClickListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Table.class, ItemClickEvent.class, ItemClickListener.class);
-    }
-
-    public void testFooterClickListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Table.class, FooterClickEvent.class,
-                FooterClickListener.class);
-    }
-
-    public void testHeaderClickListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Table.class, HeaderClickEvent.class,
-                HeaderClickListener.class);
-    }
-
-    public void testColumnReorderListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Table.class, ColumnReorderEvent.class,
-                ColumnReorderListener.class);
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/server/component/table/TableVisibleColumns.java b/tests/src/com/vaadin/tests/server/component/table/TableVisibleColumns.java
deleted file mode 100644
index be312044db..0000000000
--- a/tests/src/com/vaadin/tests/server/component/table/TableVisibleColumns.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.vaadin.tests.server.component.table;
-
-import static org.junit.Assert.assertArrayEquals;
-
-import org.junit.Test;
-
-import com.vaadin.ui.Table;
-
-public class TableVisibleColumns {
-
-    String[] defaultColumns3 = new String[] { "Property 0", "Property 1",
-            "Property 2" };
-
-    @Test
-    public void defaultVisibleColumns() {
-        for (int properties = 0; properties < 10; properties++) {
-            Table t = TableGenerator.createTableWithDefaultContainer(
-                    properties, 10);
-            Object[] expected = new Object[properties];
-            for (int i = 0; i < properties; i++) {
-                expected[i] = "Property " + i;
-            }
-            org.junit.Assert.assertArrayEquals("getVisibleColumns", expected,
-                    t.getVisibleColumns());
-        }
-    }
-
-    @Test
-    public void explicitVisibleColumns() {
-        Table t = TableGenerator.createTableWithDefaultContainer(5, 10);
-        Object[] newVisibleColumns = new Object[] { "Property 1", "Property 2" };
-        t.setVisibleColumns(newVisibleColumns);
-        assertArrayEquals("Explicit visible columns, 5 properties",
-                newVisibleColumns, t.getVisibleColumns());
-
-    }
-
-    @Test
-    public void invalidVisibleColumnIds() {
-        Table t = TableGenerator.createTableWithDefaultContainer(3, 10);
-
-        try {
-            t.setVisibleColumns(new Object[] { "a", "Property 2", "Property 3" });
-            junit.framework.Assert.fail("IllegalArgumentException expected");
-        } catch (IllegalArgumentException e) {
-            // OK, expected
-        }
-        assertArrayEquals(defaultColumns3, t.getVisibleColumns());
-    }
-
-    @Test
-    public void duplicateVisibleColumnIds() {
-        Table t = TableGenerator.createTableWithDefaultContainer(3, 10);
-        try {
-            t.setVisibleColumns(new Object[] { "Property 0", "Property 1",
-                    "Property 2", "Property 1" });
-            // FIXME: Multiple properties in the Object array should be detected
-            // (#6476)
-            // junit.framework.Assert.fail("IllegalArgumentException expected");
-        } catch (IllegalArgumentException e) {
-            // OK, expected
-        }
-        // FIXME: Multiple properties in the Object array should be detected
-        // (#6476)
-        // assertArrayEquals(defaultColumns3, t.getVisibleColumns());
-    }
-
-    @Test
-    public void noVisibleColumns() {
-        Table t = TableGenerator.createTableWithDefaultContainer(3, 10);
-        t.setVisibleColumns(new Object[] {});
-        assertArrayEquals(new Object[] {}, t.getVisibleColumns());
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/table/TestFooter.java b/tests/src/com/vaadin/tests/server/component/table/TestFooter.java
deleted file mode 100644
index 647d13855b..0000000000
--- a/tests/src/com/vaadin/tests/server/component/table/TestFooter.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.vaadin.tests.server.component.table;
-
-import junit.framework.TestCase;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.ui.Table;
-
-/**
- * Test case for testing the footer API
- * 
- */
-public class TestFooter extends TestCase {
-
-    /**
-     * Tests if setting the footer visibility works properly
-     */
-    public void testFooterVisibility() {
-        Table table = new Table("Test table", createContainer());
-
-        // The footer should by default be hidden
-        assertFalse(table.isFooterVisible());
-
-        // Set footer visibility to tru should be reflected in the
-        // isFooterVisible() method
-        table.setFooterVisible(true);
-        assertTrue(table.isFooterVisible());
-    }
-
-    /**
-     * Tests adding footers to the columns
-     */
-    public void testAddingFooters() {
-        Table table = new Table("Test table", createContainer());
-
-        // Table should not contain any footers at initialization
-        assertNull(table.getColumnFooter("col1"));
-        assertNull(table.getColumnFooter("col2"));
-        assertNull(table.getColumnFooter("col3"));
-
-        // Adding column footer
-        table.setColumnFooter("col1", "Footer1");
-        assertEquals("Footer1", table.getColumnFooter("col1"));
-
-        // Add another footer
-        table.setColumnFooter("col2", "Footer2");
-        assertEquals("Footer2", table.getColumnFooter("col2"));
-
-        // Add footer for a non-existing column
-        table.setColumnFooter("fail", "FooterFail");
-    }
-
-    /**
-     * Test removing footers
-     */
-    public void testRemovingFooters() {
-        Table table = new Table("Test table", createContainer());
-        table.setColumnFooter("col1", "Footer1");
-        table.setColumnFooter("col2", "Footer2");
-
-        // Test removing footer
-        assertNotNull(table.getColumnFooter("col1"));
-        table.setColumnFooter("col1", null);
-        assertNull(table.getColumnFooter("col1"));
-
-        // The other footer should still be there
-        assertNotNull(table.getColumnFooter("col2"));
-
-        // Remove non-existing footer
-        table.setColumnFooter("fail", null);
-    }
-
-    /**
-     * Creates a container with three properties "col1,col2,col3" with 100 items
-     * 
-     * @return Returns the created table
-     */
-    private static Container createContainer() {
-        IndexedContainer container = new IndexedContainer();
-        container.addContainerProperty("col1", String.class, "");
-        container.addContainerProperty("col2", String.class, "");
-        container.addContainerProperty("col3", String.class, "");
-
-        for (int i = 0; i < 100; i++) {
-            Item item = container.addItem("item " + i);
-            item.getItemProperty("col1").setValue("first" + i);
-            item.getItemProperty("col2").setValue("middle" + i);
-            item.getItemProperty("col3").setValue("last" + i);
-        }
-
-        return container;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/table/TestMultipleSelection.java b/tests/src/com/vaadin/tests/server/component/table/TestMultipleSelection.java
deleted file mode 100644
index 767b651b68..0000000000
--- a/tests/src/com/vaadin/tests/server/component/table/TestMultipleSelection.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.vaadin.tests.server.component.table;
-
-import java.util.Arrays;
-import java.util.Set;
-
-import junit.framework.TestCase;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.ui.AbstractSelect.MultiSelectMode;
-import com.vaadin.ui.Table;
-
-public class TestMultipleSelection extends TestCase {
-
-    /**
-     * Tests weather the multiple select mode is set when using Table.set
-     */
-    @SuppressWarnings("unchecked")
-    public void testSetMultipleItems() {
-        Table table = new Table("", createTestContainer());
-
-        // Tests if multiple selection is set
-        table.setMultiSelect(true);
-        assertTrue(table.isMultiSelect());
-
-        // Test multiselect by setting several items at once
-
-        table.setValue(Arrays.asList("1", new String[] { "3" }));
-        assertEquals(2, ((Set<String>) table.getValue()).size());
-    }
-
-    /**
-     * Tests setting the multiselect mode of the Table. The multiselect mode
-     * affects how mouse selection is made in the table by the user.
-     */
-    public void testSetMultiSelectMode() {
-        Table table = new Table("", createTestContainer());
-
-        // Default multiselect mode should be MultiSelectMode.DEFAULT
-        assertEquals(MultiSelectMode.DEFAULT, table.getMultiSelectMode());
-
-        // Tests if multiselectmode is set
-        table.setMultiSelectMode(MultiSelectMode.SIMPLE);
-        assertEquals(MultiSelectMode.SIMPLE, table.getMultiSelectMode());
-    }
-
-    /**
-     * Creates a testing container for the tests
-     * 
-     * @return A new container with test items
-     */
-    private Container createTestContainer() {
-        IndexedContainer container = new IndexedContainer(Arrays.asList("1",
-                new String[] { "2", "3", "4" }));
-        return container;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/tabsheet/TabSheetListeners.java b/tests/src/com/vaadin/tests/server/component/tabsheet/TabSheetListeners.java
deleted file mode 100644
index 30dcbca155..0000000000
--- a/tests/src/com/vaadin/tests/server/component/tabsheet/TabSheetListeners.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.server.component.tabsheet;
-
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
-import com.vaadin.ui.TabSheet.SelectedTabChangeListener;
-
-public class TabSheetListeners extends AbstractListenerMethodsTest {
-    public void testSelectedTabChangeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(TabSheet.class, SelectedTabChangeEvent.class,
-                SelectedTabChangeListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/tabsheet/TestTabSheet.java b/tests/src/com/vaadin/tests/server/component/tabsheet/TestTabSheet.java
deleted file mode 100644
index 873bb1c030..0000000000
--- a/tests/src/com/vaadin/tests/server/component/tabsheet/TestTabSheet.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package com.vaadin.tests.server.component.tabsheet;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import java.util.Iterator;
-
-import org.junit.Test;
-
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TabSheet.Tab;
-
-public class TestTabSheet {
-
-    @Test
-    public void addExistingComponent() {
-        Component c = new Label("abc");
-        TabSheet tabSheet = new TabSheet();
-        tabSheet.addComponent(c);
-        tabSheet.addComponent(c);
-
-        Iterator<Component> iter = tabSheet.getComponentIterator();
-
-        assertEquals(c, iter.next());
-        assertEquals(false, iter.hasNext());
-        assertNotNull(tabSheet.getTab(c));
-    }
-
-    @Test
-    public void getComponentFromTab() {
-        Component c = new Label("abc");
-        TabSheet tabSheet = new TabSheet();
-        Tab tab = tabSheet.addTab(c);
-        assertEquals(c, tab.getComponent());
-    }
-
-    @Test
-    public void addTabWithComponentOnly() {
-        TabSheet tabSheet = new TabSheet();
-        Tab tab1 = tabSheet.addTab(new Label("aaa"));
-        Tab tab2 = tabSheet.addTab(new Label("bbb"));
-        Tab tab3 = tabSheet.addTab(new Label("ccc"));
-
-        // Check right order of tabs
-        assertEquals(0, tabSheet.getTabPosition(tab1));
-        assertEquals(1, tabSheet.getTabPosition(tab2));
-        assertEquals(2, tabSheet.getTabPosition(tab3));
-
-        // Calling addTab with existing component does not move tab
-        tabSheet.addTab(tab1.getComponent());
-
-        // Check right order of tabs
-        assertEquals(0, tabSheet.getTabPosition(tab1));
-        assertEquals(1, tabSheet.getTabPosition(tab2));
-        assertEquals(2, tabSheet.getTabPosition(tab3));
-    }
-
-    @Test
-    public void addTabWithComponentAndIndex() {
-        TabSheet tabSheet = new TabSheet();
-        Tab tab1 = tabSheet.addTab(new Label("aaa"));
-        Tab tab2 = tabSheet.addTab(new Label("bbb"));
-        Tab tab3 = tabSheet.addTab(new Label("ccc"));
-
-        Tab tab4 = tabSheet.addTab(new Label("ddd"), 1);
-        Tab tab5 = tabSheet.addTab(new Label("eee"), 3);
-
-        assertEquals(0, tabSheet.getTabPosition(tab1));
-        assertEquals(1, tabSheet.getTabPosition(tab4));
-        assertEquals(2, tabSheet.getTabPosition(tab2));
-        assertEquals(3, tabSheet.getTabPosition(tab5));
-        assertEquals(4, tabSheet.getTabPosition(tab3));
-
-        // Calling addTab with existing component does not move tab
-        tabSheet.addTab(tab1.getComponent(), 3);
-
-        assertEquals(0, tabSheet.getTabPosition(tab1));
-        assertEquals(1, tabSheet.getTabPosition(tab4));
-        assertEquals(2, tabSheet.getTabPosition(tab2));
-        assertEquals(3, tabSheet.getTabPosition(tab5));
-        assertEquals(4, tabSheet.getTabPosition(tab3));
-    }
-
-    @Test
-    public void addTabWithAllParameters() {
-        TabSheet tabSheet = new TabSheet();
-        Tab tab1 = tabSheet.addTab(new Label("aaa"));
-        Tab tab2 = tabSheet.addTab(new Label("bbb"));
-        Tab tab3 = tabSheet.addTab(new Label("ccc"));
-
-        Tab tab4 = tabSheet.addTab(new Label("ddd"), "ddd", null, 1);
-        Tab tab5 = tabSheet.addTab(new Label("eee"), "eee", null, 3);
-
-        assertEquals(0, tabSheet.getTabPosition(tab1));
-        assertEquals(1, tabSheet.getTabPosition(tab4));
-        assertEquals(2, tabSheet.getTabPosition(tab2));
-        assertEquals(3, tabSheet.getTabPosition(tab5));
-        assertEquals(4, tabSheet.getTabPosition(tab3));
-
-        // Calling addTab with existing component does not move tab
-        tabSheet.addTab(tab1.getComponent(), "xxx", null, 3);
-
-        assertEquals(0, tabSheet.getTabPosition(tab1));
-        assertEquals(1, tabSheet.getTabPosition(tab4));
-        assertEquals(2, tabSheet.getTabPosition(tab2));
-        assertEquals(3, tabSheet.getTabPosition(tab5));
-        assertEquals(4, tabSheet.getTabPosition(tab3));
-    }
-
-    @Test
-    public void getTabByPosition() {
-        TabSheet tabSheet = new TabSheet();
-        Tab tab1 = tabSheet.addTab(new Label("aaa"));
-        Tab tab2 = tabSheet.addTab(new Label("bbb"));
-        Tab tab3 = tabSheet.addTab(new Label("ccc"));
-
-        assertEquals(tab1, tabSheet.getTab(0));
-        assertEquals(tab2, tabSheet.getTab(1));
-        assertEquals(tab3, tabSheet.getTab(2));
-    }
-    
-}
diff --git a/tests/src/com/vaadin/tests/server/component/tree/TestListeners.java b/tests/src/com/vaadin/tests/server/component/tree/TestListeners.java
deleted file mode 100644
index 391ef02e3c..0000000000
--- a/tests/src/com/vaadin/tests/server/component/tree/TestListeners.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package com.vaadin.tests.server.component.tree;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.Tree.CollapseEvent;
-import com.vaadin.ui.Tree.CollapseListener;
-import com.vaadin.ui.Tree.ExpandEvent;
-import com.vaadin.ui.Tree.ExpandListener;
-
-public class TestListeners extends TestCase implements ExpandListener,
-        CollapseListener {
-    private int expandCalled;
-    private int collapseCalled;
-    private Object lastExpanded;
-    private Object lastCollapsed;
-
-    @Override
-    protected void setUp() {
-        expandCalled = 0;
-    }
-
-    public void testExpandListener() {
-        Tree tree = createTree(10, 20, false);
-        tree.addListener((ExpandListener) this);
-        List<Object> rootIds = new ArrayList<Object>(tree.rootItemIds());
-
-        assertEquals(10, rootIds.size());
-        assertEquals(10 + 10 * 20 + 10, tree.size());
-
-        // Expanding should send one expand event for the root item id
-        tree.expandItem(rootIds.get(0));
-        assertEquals(1, expandCalled);
-        assertEquals(rootIds.get(0), lastExpanded);
-
-        // Expand should send one event for each expanded item id.
-        // In this case root + child 4
-        expandCalled = 0;
-        tree.expandItemsRecursively(rootIds.get(1));
-        assertEquals(2, expandCalled);
-        List<Object> c = new ArrayList<Object>(tree.getChildren(rootIds.get(1)));
-
-        assertEquals(c.get(4), lastExpanded);
-
-        // Expanding an already expanded item should send no expand event
-        expandCalled = 0;
-        tree.expandItem(rootIds.get(0));
-        assertEquals(0, expandCalled);
-    }
-
-    /**
-     * Creates a tree with "rootItems" roots, each with "children" children,
-     * each with 1 child.
-     * 
-     * @param rootItems
-     * @param children
-     * @param expand
-     * @return
-     */
-    private Tree createTree(int rootItems, int children, boolean expand) {
-        Tree tree = new Tree();
-        for (int i = 0; i < rootItems; i++) {
-            String rootId = "root " + i;
-            tree.addItem(rootId);
-            if (expand) {
-                tree.expandItemsRecursively(rootId);
-            } else {
-                tree.collapseItemsRecursively(rootId);
-
-            }
-            for (int j = 0; j < children; j++) {
-                String childId = "child " + i + "/" + j;
-                tree.addItem(childId);
-                tree.setParent(childId, rootId);
-                tree.setChildrenAllowed(childId, false);
-                if (j == 4) {
-                    tree.setChildrenAllowed(childId, true);
-                    Object grandChildId = tree.addItem();
-                    tree.setParent(grandChildId, childId);
-                    tree.setChildrenAllowed(grandChildId, false);
-                    if (expand) {
-                        tree.expandItemsRecursively(childId);
-                    } else {
-                        tree.collapseItemsRecursively(childId);
-                    }
-                }
-            }
-        }
-
-        return tree;
-    }
-
-    public void testCollapseListener() {
-        Tree tree = createTree(7, 15, true);
-        tree.addListener((CollapseListener) this);
-
-        List<Object> rootIds = new ArrayList<Object>(tree.rootItemIds());
-
-        assertEquals(7, rootIds.size());
-        assertEquals(7 + 7 * 15 + 7, tree.size());
-
-        // Expanding should send one expand event for the root item id
-        tree.collapseItem(rootIds.get(0));
-        assertEquals(1, collapseCalled);
-        assertEquals(rootIds.get(0), lastCollapsed);
-
-        // Collapse sends one event for each collapsed node.
-        // In this case root + child 4
-        collapseCalled = 0;
-        tree.collapseItemsRecursively(rootIds.get(1));
-        assertEquals(2, collapseCalled);
-        List<Object> c = new ArrayList<Object>(tree.getChildren(rootIds.get(1)));
-        assertEquals(c.get(4), lastCollapsed);
-
-        // Collapsing an already expanded item should send no expand event
-        collapseCalled = 0;
-        tree.collapseItem(rootIds.get(0));
-        assertEquals(0, collapseCalled);
-    }
-
-    public void nodeExpand(ExpandEvent event) {
-        lastExpanded = event.getItemId();
-        expandCalled++;
-
-    }
-
-    public void nodeCollapse(CollapseEvent event) {
-        lastCollapsed = event.getItemId();
-        collapseCalled++;
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/tree/TreeListeners.java b/tests/src/com/vaadin/tests/server/component/tree/TreeListeners.java
deleted file mode 100644
index 8ba2e1de4d..0000000000
--- a/tests/src/com/vaadin/tests/server/component/tree/TreeListeners.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.vaadin.tests.server.component.tree;
-
-import com.vaadin.event.ItemClickEvent;
-import com.vaadin.event.ItemClickEvent.ItemClickListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.Tree.CollapseEvent;
-import com.vaadin.ui.Tree.CollapseListener;
-import com.vaadin.ui.Tree.ExpandEvent;
-import com.vaadin.ui.Tree.ExpandListener;
-
-public class TreeListeners extends AbstractListenerMethodsTest {
-    public void testExpandListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Tree.class, ExpandEvent.class,
-                ExpandListener.class);
-    }
-
-    public void testItemClickListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Tree.class, ItemClickEvent.class,
-                ItemClickListener.class);
-    }
-
-    public void testCollapseListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Tree.class, CollapseEvent.class,
-                CollapseListener.class);
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/server/component/treetable/EmptyTreeTable.java b/tests/src/com/vaadin/tests/server/component/treetable/EmptyTreeTable.java
deleted file mode 100644
index 535ed8e860..0000000000
--- a/tests/src/com/vaadin/tests/server/component/treetable/EmptyTreeTable.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.server.component.treetable;
-
-import junit.framework.TestCase;
-
-import com.vaadin.ui.TreeTable;
-
-public class EmptyTreeTable extends TestCase {
-    public void testLastId() {
-        TreeTable treeTable = new TreeTable();
-
-        assertFalse(treeTable.isLastId(treeTable.getValue()));
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/upload/UploadListeners.java b/tests/src/com/vaadin/tests/server/component/upload/UploadListeners.java
deleted file mode 100644
index ea5fa94326..0000000000
--- a/tests/src/com/vaadin/tests/server/component/upload/UploadListeners.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.vaadin.tests.server.component.upload;
-
-import com.vaadin.terminal.StreamVariable.StreamingProgressEvent;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.Upload;
-import com.vaadin.ui.Upload.FailedEvent;
-import com.vaadin.ui.Upload.FailedListener;
-import com.vaadin.ui.Upload.FinishedEvent;
-import com.vaadin.ui.Upload.FinishedListener;
-import com.vaadin.ui.Upload.ProgressListener;
-import com.vaadin.ui.Upload.StartedEvent;
-import com.vaadin.ui.Upload.StartedListener;
-import com.vaadin.ui.Upload.SucceededEvent;
-import com.vaadin.ui.Upload.SucceededListener;
-
-public class UploadListeners extends AbstractListenerMethodsTest {
-    public void testProgressListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Upload.class, StreamingProgressEvent.class,
-                ProgressListener.class);
-    }
-
-    public void testSucceededListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Upload.class, SucceededEvent.class,
-                SucceededListener.class);
-    }
-
-    public void testStartedListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Upload.class, StartedEvent.class,
-                StartedListener.class);
-    }
-
-    public void testFailedListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Upload.class, FailedEvent.class,
-                FailedListener.class);
-    }
-
-    public void testFinishedListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Upload.class, FinishedEvent.class,
-                FinishedListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/urifragmentutility/UriFragmentUtilityListeners.java b/tests/src/com/vaadin/tests/server/component/urifragmentutility/UriFragmentUtilityListeners.java
deleted file mode 100644
index fe400e55b9..0000000000
--- a/tests/src/com/vaadin/tests/server/component/urifragmentutility/UriFragmentUtilityListeners.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.server.component.urifragmentutility;
-
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.UriFragmentUtility;
-import com.vaadin.ui.UriFragmentUtility.FragmentChangedEvent;
-import com.vaadin.ui.UriFragmentUtility.FragmentChangedListener;
-
-public class UriFragmentUtilityListeners extends AbstractListenerMethodsTest {
-    public void testFragmentChangedListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(UriFragmentUtility.class,
-                FragmentChangedEvent.class, FragmentChangedListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/window/AddRemoveSubWindow.java b/tests/src/com/vaadin/tests/server/component/window/AddRemoveSubWindow.java
deleted file mode 100644
index afc050b981..0000000000
--- a/tests/src/com/vaadin/tests/server/component/window/AddRemoveSubWindow.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.vaadin.tests.server.component.window;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import org.junit.Test;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Window;
-
-public class AddRemoveSubWindow {
-
-    public class TestApp extends Application {
-
-        @Override
-        public void init() {
-            Window w = new Window("Main window");
-            setMainWindow(w);
-        }
-    }
-
-    @Test
-    public void addSubWindow() {
-        TestApp app = new TestApp();
-        app.init();
-        Window subWindow = new Window("Sub window");
-        Window mainWindow = app.getMainWindow();
-
-        mainWindow.addWindow(subWindow);
-        // Added to main window so the parent of the sub window should be the
-        // main window
-        assertEquals(subWindow.getParent(), mainWindow);
-
-        try {
-            mainWindow.addWindow(subWindow);
-            assertTrue("Window.addWindow did not throw the expected exception",
-                    false);
-        } catch (IllegalArgumentException e) {
-            // Should throw an exception as it has already been added to the
-            // main window
-        }
-
-        // Try to add the same sub window to another window
-        try {
-            Window w = new Window();
-            w.addWindow(subWindow);
-            assertTrue("Window.addWindow did not throw the expected exception",
-                    false);
-        } catch (IllegalArgumentException e) {
-            // Should throw an exception as it has already been added to the
-            // main window
-        }
-
-    }
-
-    @Test
-    public void removeSubWindow() {
-        TestApp app = new TestApp();
-        app.init();
-        Window subWindow = new Window("Sub window");
-        Window mainWindow = app.getMainWindow();
-        mainWindow.addWindow(subWindow);
-
-        // Added to main window so the parent of the sub window should be the
-        // main window
-        assertEquals(subWindow.getParent(), mainWindow);
-
-        // Remove from the wrong window, should result in an exception
-        boolean removed = subWindow.removeWindow(subWindow);
-        assertFalse("Window was removed even though it should not have been",
-                removed);
-
-        // Parent should still be set
-        assertEquals(subWindow.getParent(), mainWindow);
-
-        // Remove from the main window and assert it has been removed
-        removed = mainWindow.removeWindow(subWindow);
-        assertTrue("Window was not removed correctly", removed);
-        assertNull(subWindow.getParent());
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/component/window/WindowListeners.java b/tests/src/com/vaadin/tests/server/component/window/WindowListeners.java
deleted file mode 100644
index b8d9579dae..0000000000
--- a/tests/src/com/vaadin/tests/server/component/window/WindowListeners.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.vaadin.tests.server.component.window;
-
-import com.vaadin.event.FieldEvents.BlurEvent;
-import com.vaadin.event.FieldEvents.BlurListener;
-import com.vaadin.event.FieldEvents.FocusEvent;
-import com.vaadin.event.FieldEvents.FocusListener;
-import com.vaadin.tests.server.component.AbstractListenerMethodsTest;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Window.CloseEvent;
-import com.vaadin.ui.Window.CloseListener;
-import com.vaadin.ui.Window.ResizeEvent;
-import com.vaadin.ui.Window.ResizeListener;
-
-public class WindowListeners extends AbstractListenerMethodsTest {
-    public void testFocusListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Window.class, FocusEvent.class,
-                FocusListener.class);
-    }
-
-    public void testBlurListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Window.class, BlurEvent.class,
-                BlurListener.class);
-    }
-
-    public void testResizeListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Window.class, ResizeEvent.class,
-                ResizeListener.class);
-    }
-
-    public void testCloseListenerAddGetRemove() throws Exception {
-        testListenerAddGetRemove(Window.class, CloseEvent.class,
-                CloseListener.class);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/componentcontainer/AddRemoveComponentTest.java b/tests/src/com/vaadin/tests/server/componentcontainer/AddRemoveComponentTest.java
deleted file mode 100644
index 828404bd5a..0000000000
--- a/tests/src/com/vaadin/tests/server/componentcontainer/AddRemoveComponentTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.vaadin.tests.server.componentcontainer;
-
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import com.vaadin.tests.VaadinClasses;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.CustomLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-
-public class AddRemoveComponentTest extends TestCase {
-
-    public void testRemoveComponentFromWrongContainer()
-            throws InstantiationException, IllegalAccessException {
-        List<Class<? extends ComponentContainer>> containerClasses = VaadinClasses
-                .getComponentContainersSupportingAddRemoveComponent();
-
-        // No default constructor, special case
-        containerClasses.remove(CustomLayout.class);
-        testRemoveComponentFromWrongContainer(new CustomLayout("dummy"));
-
-        for (Class<? extends ComponentContainer> c : containerClasses) {
-            testRemoveComponentFromWrongContainer(c.newInstance());
-        }
-    }
-
-    private void testRemoveComponentFromWrongContainer(
-            ComponentContainer componentContainer) {
-        HorizontalLayout hl = new HorizontalLayout();
-        Label label = new Label();
-        hl.addComponent(label);
-
-        componentContainer.removeComponent(label);
-        assertEquals(
-                "Parent no longer correct for " + componentContainer.getClass(),
-                hl, label.getParent());
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/components/AbstractTestFieldValueChange.java b/tests/src/com/vaadin/tests/server/components/AbstractTestFieldValueChange.java
deleted file mode 100644
index 3aebd5bf9d..0000000000
--- a/tests/src/com/vaadin/tests/server/components/AbstractTestFieldValueChange.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package com.vaadin.tests.server.components;
-
-import junit.framework.TestCase;
-
-import org.easymock.EasyMock;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.data.Property.ValueChangeNotifier;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.ui.AbstractField;
-
-/**
- * Base class for tests for checking that value change listeners for fields are
- * not called exactly once when they should be, and not at other times.
- * 
- * Does not check all cases (e.g. properties that do not implement
- * {@link ValueChangeNotifier}).
- * 
- * Subclasses should implement {@link #setValue()} and call
- * <code>super.setValue(AbstractField)</code>. Also, subclasses should typically
- * override {@link #setValue(AbstractField)} to set the field value via
- * <code>changeVariables()</code>.
- */
-public abstract class AbstractTestFieldValueChange extends TestCase {
-
-    private AbstractField field;
-    private ValueChangeListener listener;
-
-    protected void setUp(AbstractField field) throws Exception {
-        this.field = field;
-        listener = EasyMock.createStrictMock(ValueChangeListener.class);
-
-    }
-
-    protected ValueChangeListener getListener() {
-        return listener;
-    }
-
-    /**
-     * Test that listeners are not called when they have been unregistered.
-     */
-    public void testRemoveListener() {
-        getField().setPropertyDataSource(new ObjectProperty<String>(""));
-        getField().setWriteThrough(true);
-        getField().setReadThrough(true);
-
-        // Expectations and start test
-        listener.valueChange(EasyMock.isA(ValueChangeEvent.class));
-        EasyMock.replay(listener);
-
-        // Add listener and set the value -> should end up in listener once
-        getField().addListener(listener);
-        setValue(getField());
-
-        // Ensure listener was called once
-        EasyMock.verify(listener);
-
-        // Remove the listener and set the value -> should not end up in
-        // listener
-        getField().removeListener(listener);
-        setValue(getField());
-
-        // Ensure listener still has been called only once
-        EasyMock.verify(listener);
-    }
-
-    /**
-     * Common unbuffered case: both writeThrough (auto-commit) and readThrough
-     * are on. Calling commit() should not cause notifications.
-     * 
-     * Using the readThrough mode allows changes made to the property value to
-     * be seen in some cases also when there is no notification of value change
-     * from the property.
-     * 
-     * Field value change notifications closely mirror value changes of the data
-     * source behind the field.
-     */
-    public void testWriteThroughReadThrough() {
-        getField().setPropertyDataSource(new ObjectProperty<String>(""));
-        getField().setWriteThrough(true);
-        getField().setReadThrough(true);
-
-        expectValueChangeFromSetValueNotCommit();
-    }
-
-    /**
-     * Fully buffered use where the data source is neither read nor modified
-     * during editing, and is updated at commit().
-     * 
-     * Field value change notifications reflect the buffered value in the field,
-     * not the original data source value changes.
-     */
-    public void testNoWriteThroughNoReadThrough() {
-        getField().setPropertyDataSource(new ObjectProperty<String>(""));
-        getField().setWriteThrough(false);
-        getField().setReadThrough(false);
-
-        expectValueChangeFromSetValueNotCommit();
-    }
-
-    /**
-     * Less common partly buffered case: writeThrough (auto-commit) is on and
-     * readThrough is off. Calling commit() should not cause notifications.
-     * 
-     * Without readThrough activated, changes to the data source that do not
-     * cause notifications are not reflected by the field value.
-     * 
-     * Field value change notifications correspond to changes made to the data
-     * source value through the text field or the (notifying) property.
-     */
-    public void testWriteThroughNoReadThrough() {
-        getField().setPropertyDataSource(new ObjectProperty<String>(""));
-        getField().setWriteThrough(true);
-        getField().setReadThrough(false);
-
-        expectValueChangeFromSetValueNotCommit();
-    }
-
-    /**
-     * Partly buffered use where the data source is read but not nor modified
-     * during editing, and is updated at commit().
-     * 
-     * When used like this, a field is updated from the data source if necessary
-     * when its value is requested and the property value has changed but the
-     * field has not been modified in its buffer.
-     * 
-     * Field value change notifications reflect the buffered value in the field,
-     * not the original data source value changes.
-     */
-    public void testNoWriteThroughReadThrough() {
-        getField().setPropertyDataSource(new ObjectProperty<String>(""));
-        getField().setWriteThrough(false);
-        getField().setReadThrough(true);
-
-        expectValueChangeFromSetValueNotCommit();
-    }
-
-    protected void expectValueChangeFromSetValueNotCommit() {
-        // Expectations and start test
-        listener.valueChange(EasyMock.isA(ValueChangeEvent.class));
-        EasyMock.replay(listener);
-
-        // Add listener and set the value -> should end up in listener once
-        getField().addListener(listener);
-        setValue(getField());
-
-        // Ensure listener was called once
-        EasyMock.verify(listener);
-
-        // commit
-        getField().commit();
-
-        // Ensure listener was not called again
-        EasyMock.verify(listener);
-    }
-
-    protected AbstractField getField() {
-        return field;
-    }
-
-    /**
-     * Override in subclasses to set value with changeVariables().
-     */
-    protected void setValue(AbstractField field) {
-        field.setValue("newValue");
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/components/ComponentAttachDetachListenerTest.java b/tests/src/com/vaadin/tests/server/components/ComponentAttachDetachListenerTest.java
deleted file mode 100644
index 1e01d9a55f..0000000000
--- a/tests/src/com/vaadin/tests/server/components/ComponentAttachDetachListenerTest.java
+++ /dev/null
@@ -1,343 +0,0 @@
-package com.vaadin.tests.server.components;
-
-import java.util.Iterator;
-
-import junit.framework.TestCase;
-
-import com.vaadin.ui.AbsoluteLayout;
-import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.ComponentContainer.ComponentAttachEvent;
-import com.vaadin.ui.ComponentContainer.ComponentAttachListener;
-import com.vaadin.ui.ComponentContainer.ComponentDetachEvent;
-import com.vaadin.ui.ComponentContainer.ComponentDetachListener;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.GridLayout.Area;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-
-public class ComponentAttachDetachListenerTest extends TestCase {
-
-    private AbstractOrderedLayout olayout;
-    private GridLayout gridlayout;
-    private AbsoluteLayout absolutelayout;
-    private CssLayout csslayout;
-
-    // General variables
-    private int attachCounter = 0;
-    private Component attachedComponent = null;
-    private ComponentContainer attachTarget = null;
-    private boolean foundInContainer = false;
-
-    private int detachCounter = 0;
-    private Component detachedComponent = null;
-    private ComponentContainer detachedTarget = null;
-
-    // Ordered layout specific variables
-    private int indexOfComponent = -1;
-
-    // Grid layout specific variables
-    private Area componentArea = null;
-
-    // Absolute layout specific variables
-    private ComponentPosition componentPosition = null;
-
-    private class MyAttachListener implements ComponentAttachListener {
-        public void componentAttachedToContainer(ComponentAttachEvent event) {
-            attachCounter++;
-            attachedComponent = event.getAttachedComponent();
-            attachTarget = event.getContainer();
-
-            // Search for component in container (should be found)
-            Iterator<Component> iter = attachTarget.getComponentIterator();
-            while (iter.hasNext()) {
-                if (iter.next() == attachedComponent) {
-                    foundInContainer = true;
-                    break;
-                }
-            }
-
-            // Get layout specific variables
-            if (attachTarget instanceof AbstractOrderedLayout) {
-                indexOfComponent = ((AbstractOrderedLayout) attachTarget)
-                        .getComponentIndex(attachedComponent);
-            } else if (attachTarget instanceof GridLayout) {
-                componentArea = ((GridLayout) attachTarget)
-                        .getComponentArea(attachedComponent);
-            } else if (attachTarget instanceof AbsoluteLayout) {
-                componentPosition = ((AbsoluteLayout) attachTarget)
-                        .getPosition(attachedComponent);
-            }
-        }
-    }
-
-    private class MyDetachListener implements ComponentDetachListener {
-        public void componentDetachedFromContainer(ComponentDetachEvent event) {
-            detachCounter++;
-            detachedComponent = event.getDetachedComponent();
-            detachedTarget = event.getContainer();
-
-            // Search for component in container (should NOT be found)
-            Iterator<Component> iter = detachedTarget.getComponentIterator();
-            while (iter.hasNext()) {
-                if (iter.next() == detachedComponent) {
-                    foundInContainer = true;
-                    break;
-                }
-            }
-
-            // Get layout specific variables
-            if (detachedTarget instanceof AbstractOrderedLayout) {
-                indexOfComponent = ((AbstractOrderedLayout) detachedTarget)
-                        .getComponentIndex(detachedComponent);
-            } else if (detachedTarget instanceof GridLayout) {
-                componentArea = ((GridLayout) detachedTarget)
-                        .getComponentArea(detachedComponent);
-            } else if (detachedTarget instanceof AbsoluteLayout) {
-                componentPosition = ((AbsoluteLayout) detachedTarget)
-                        .getPosition(detachedComponent);
-            }
-
-        }
-    }
-
-    private void resetVariables() {
-        // Attach
-        attachCounter = 0;
-        attachedComponent = null;
-        attachTarget = null;
-        foundInContainer = false;
-
-        // Detach
-        detachCounter = 0;
-        detachedComponent = null;
-        detachedTarget = null;
-
-        // Common
-        indexOfComponent = -1;
-        componentArea = null;
-        componentPosition = null;
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        olayout = new HorizontalLayout();
-        olayout.addListener(new MyAttachListener());
-        olayout.addListener(new MyDetachListener());
-
-        gridlayout = new GridLayout();
-        gridlayout.addListener(new MyAttachListener());
-        gridlayout.addListener(new MyDetachListener());
-
-        absolutelayout = new AbsoluteLayout();
-        absolutelayout.addListener(new MyAttachListener());
-        absolutelayout.addListener(new MyDetachListener());
-
-        csslayout = new CssLayout();
-        csslayout.addListener(new MyAttachListener());
-        csslayout.addListener(new MyDetachListener());
-    }
-
-    public void testOrderedLayoutAttachListener() {
-        // Reset state variables
-        resetVariables();
-
-        // Add component -> Should trigger attach listener
-        Component comp = new Label();
-        olayout.addComponent(comp);
-
-        // Attach counter should get incremented
-        assertEquals(1, attachCounter);
-
-        // The attached component should be the label
-        assertSame(comp, attachedComponent);
-
-        // The attached target should be the layout
-        assertSame(olayout, attachTarget);
-
-        // The attached component should be found in the container
-        assertTrue(foundInContainer);
-
-        // The index of the component should not be -1
-        assertFalse(indexOfComponent == -1);
-    }
-
-    public void testOrderedLayoutDetachListener() {
-        // Add a component to detach
-        Component comp = new Label();
-        olayout.addComponent(comp);
-
-        // Reset state variables (since they are set by the attach listener)
-        resetVariables();
-
-        // Detach the component -> triggers the detach listener
-        olayout.removeComponent(comp);
-
-        // Detach counter should get incremented
-        assertEquals(1, detachCounter);
-
-        // The detached component should be the label
-        assertSame(comp, detachedComponent);
-
-        // The detached target should be the layout
-        assertSame(olayout, detachedTarget);
-
-        // The detached component should not be found in the container
-        assertFalse(foundInContainer);
-
-        // The index of the component should be -1
-        assertEquals(-1, indexOfComponent);
-    }
-
-    public void testGridLayoutAttachListener() {
-        // Reset state variables
-        resetVariables();
-
-        // Add component -> Should trigger attach listener
-        Component comp = new Label();
-        gridlayout.addComponent(comp);
-
-        // Attach counter should get incremented
-        assertEquals(1, attachCounter);
-
-        // The attached component should be the label
-        assertSame(comp, attachedComponent);
-
-        // The attached target should be the layout
-        assertSame(gridlayout, attachTarget);
-
-        // The attached component should be found in the container
-        assertTrue(foundInContainer);
-
-        // The grid area should not be null
-        assertNotNull(componentArea);
-    }
-
-    public void testGridLayoutDetachListener() {
-        // Add a component to detach
-        Component comp = new Label();
-        gridlayout.addComponent(comp);
-
-        // Reset state variables (since they are set by the attach listener)
-        resetVariables();
-
-        // Detach the component -> triggers the detach listener
-        gridlayout.removeComponent(comp);
-
-        // Detach counter should get incremented
-        assertEquals(1, detachCounter);
-
-        // The detached component should be the label
-        assertSame(comp, detachedComponent);
-
-        // The detached target should be the layout
-        assertSame(gridlayout, detachedTarget);
-
-        // The detached component should not be found in the container
-        assertFalse(foundInContainer);
-
-        // The grid area should be null
-        assertNull(componentArea);
-    }
-
-    public void testAbsoluteLayoutAttachListener() {
-        // Reset state variables
-        resetVariables();
-
-        // Add component -> Should trigger attach listener
-        Component comp = new Label();
-        absolutelayout.addComponent(comp);
-
-        // Attach counter should get incremented
-        assertEquals(1, attachCounter);
-
-        // The attached component should be the label
-        assertSame(comp, attachedComponent);
-
-        // The attached target should be the layout
-        assertSame(absolutelayout, attachTarget);
-
-        // The attached component should be found in the container
-        assertTrue(foundInContainer);
-
-        // The component position should not be null
-        assertNotNull(componentPosition);
-    }
-
-    public void testAbsoluteLayoutDetachListener() {
-        // Add a component to detach
-        Component comp = new Label();
-        absolutelayout.addComponent(comp);
-
-        // Reset state variables (since they are set by the attach listener)
-        resetVariables();
-
-        // Detach the component -> triggers the detach listener
-        absolutelayout.removeComponent(comp);
-
-        // Detach counter should get incremented
-        assertEquals(1, detachCounter);
-
-        // The detached component should be the label
-        assertSame(comp, detachedComponent);
-
-        // The detached target should be the layout
-        assertSame(absolutelayout, detachedTarget);
-
-        // The detached component should not be found in the container
-        assertFalse(foundInContainer);
-
-        // The component position should be null
-        assertNull(componentPosition);
-    }
-
-    public void testCSSLayoutAttachListener() {
-        // Reset state variables
-        resetVariables();
-
-        // Add component -> Should trigger attach listener
-        Component comp = new Label();
-        csslayout.addComponent(comp);
-
-        // Attach counter should get incremented
-        assertEquals(1, attachCounter);
-
-        // The attached component should be the label
-        assertSame(comp, attachedComponent);
-
-        // The attached target should be the layout
-        assertSame(csslayout, attachTarget);
-
-        // The attached component should be found in the container
-        assertTrue(foundInContainer);
-    }
-
-    public void testCSSLayoutDetachListener() {
-        // Add a component to detach
-        Component comp = new Label();
-        csslayout.addComponent(comp);
-
-        // Reset state variables (since they are set by the attach listener)
-        resetVariables();
-
-        // Detach the component -> triggers the detach listener
-        csslayout.removeComponent(comp);
-
-        // Detach counter should get incremented
-        assertEquals(1, detachCounter);
-
-        // The detached component should be the label
-        assertSame(comp, detachedComponent);
-
-        // The detached target should be the layout
-        assertSame(csslayout, detachedTarget);
-
-        // The detached component should not be found in the container
-        assertFalse(foundInContainer);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/components/TestComboBoxValueChange.java b/tests/src/com/vaadin/tests/server/components/TestComboBoxValueChange.java
deleted file mode 100644
index cb73199fb8..0000000000
--- a/tests/src/com/vaadin/tests/server/components/TestComboBoxValueChange.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.vaadin.tests.server.components;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.vaadin.ui.AbstractField;
-import com.vaadin.ui.ComboBox;
-
-/**
- * Check that the value change listener for a combo box is triggered exactly
- * once when setting the value, at the correct time.
- * 
- * See <a href="http://dev.vaadin.com/ticket/4394">Ticket 4394</a>.
- */
-public class TestComboBoxValueChange extends AbstractTestFieldValueChange {
-    @Override
-    protected void setUp() throws Exception {
-        ComboBox combo = new ComboBox();
-        combo.addItem("myvalue");
-        super.setUp(combo);
-    }
-
-    @Override
-    protected void setValue(AbstractField field) {
-        Map<String, Object> variables = new HashMap<String, Object>();
-        variables.put("selected", new String[] { "myvalue" });
-        field.changeVariables(field, variables);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/components/TestGridLayoutLastRowRemoval.java b/tests/src/com/vaadin/tests/server/components/TestGridLayoutLastRowRemoval.java
deleted file mode 100644
index 92664917fd..0000000000
--- a/tests/src/com/vaadin/tests/server/components/TestGridLayoutLastRowRemoval.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.vaadin.tests.server.components;
-
-import junit.framework.TestCase;
-
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-
-public class TestGridLayoutLastRowRemoval extends TestCase {
-
-    public void testRemovingLastRow() {
-        GridLayout grid = new GridLayout(2, 1);
-        grid.addComponent(new Label("Col1"));
-        grid.addComponent(new Label("Col2"));
-
-        try {
-            // Removing the last row in the grid
-            grid.removeRow(0);
-        } catch (IllegalArgumentException iae) {
-            // Removing the last row should not throw an
-            // IllegalArgumentException
-            fail("removeRow(0) threw an IllegalArgumentExcetion when removing the last row");
-        }
-
-        // The column amount should be preserved
-        assertEquals(2, grid.getColumns());
-
-        // There should be one row left
-        assertEquals(1, grid.getRows());
-
-        // There should be no component left in the grid layout
-        assertNull("A component should not be left in the layout",
-                grid.getComponent(0, 0));
-        assertNull("A component should not be left in the layout",
-                grid.getComponent(1, 0));
-
-        // The cursor should be in the first cell
-        assertEquals(0, grid.getCursorX());
-        assertEquals(0, grid.getCursorY());
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/components/TestTextFieldValueChange.java b/tests/src/com/vaadin/tests/server/components/TestTextFieldValueChange.java
deleted file mode 100644
index 1144caf805..0000000000
--- a/tests/src/com/vaadin/tests/server/components/TestTextFieldValueChange.java
+++ /dev/null
@@ -1,180 +0,0 @@
-package com.vaadin.tests.server.components;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import junit.framework.Assert;
-
-import org.easymock.EasyMock;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.ui.AbstractField;
-import com.vaadin.ui.TextField;
-
-/**
- * Check that the value change listener for a text field is triggered exactly
- * once when setting the value, at the correct time.
- * 
- * See <a href="http://dev.vaadin.com/ticket/4394">Ticket 4394</a>.
- */
-public class TestTextFieldValueChange extends AbstractTestFieldValueChange {
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp(new TextField());
-    }
-
-    /**
-     * Case where the text field only uses its internal buffer, no external
-     * property data source.
-     */
-    public void testNoDataSource() {
-        getField().setPropertyDataSource(null);
-
-        expectValueChangeFromSetValueNotCommit();
-    }
-
-    @Override
-    protected void setValue(AbstractField field) {
-        Map<String, Object> variables = new HashMap<String, Object>();
-        variables.put("text", "newValue");
-        field.changeVariables(field, variables);
-    }
-
-    /**
-     * Test that field propagates value change events originating from property,
-     * but don't fire value change events twice if value has only changed once.
-     * 
-     * 
-     * TODO make test field type agnostic (eg. combobox)
-     */
-    public void testValueChangeEventPropagationWithReadThrough() {
-        ObjectProperty<String> property = new ObjectProperty<String>("");
-        getField().setPropertyDataSource(property);
-
-        // defaults, buffering off
-        getField().setWriteThrough(true);
-        getField().setReadThrough(true);
-
-        // Expectations and start test
-        getListener().valueChange(EasyMock.isA(ValueChangeEvent.class));
-        EasyMock.replay(getListener());
-
-        // Add listener and set the value -> should end up in listener once
-        getField().addListener(getListener());
-
-        property.setValue("Foo");
-
-        // Ensure listener was called once
-        EasyMock.verify(getListener());
-
-        // get value should not fire value change again
-        Object value = getField().getValue();
-        Assert.assertEquals("Foo", value);
-
-        // Ensure listener still has been called only once
-        EasyMock.verify(getListener());
-    }
-
-    /**
-     * If read through is on and value has been modified, but not committed, the
-     * value should not propagate similar to
-     * {@link #testValueChangeEventPropagationWithReadThrough()}
-     * 
-     * TODO make test field type agnostic (eg. combobox)
-     */
-    public void testValueChangePropagationWithReadThroughWithModifiedValue() {
-        final String initialValue = "initial";
-        ObjectProperty<String> property = new ObjectProperty<String>(
-                initialValue);
-        getField().setPropertyDataSource(property);
-
-        // write buffering on, read buffering off
-        getField().setWriteThrough(false);
-        getField().setReadThrough(true);
-
-        // Expect no value changes calls to listener
-        EasyMock.replay(getListener());
-
-        // first set the value (note, write through false -> not forwarded to
-        // property)
-        setValue(getField());
-
-        Assert.assertTrue(getField().isModified());
-
-        // Add listener and set the value -> should end up in listener once
-        getField().addListener(getListener());
-
-        // modify property value, should not fire value change in field as the
-        // field has uncommitted value (aka isModified() == true)
-        property.setValue("Foo");
-
-        // Ensure listener was called once
-        EasyMock.verify(getListener());
-
-        // get value should not fire value change again
-        Object value = getField().getValue();
-        // Ensure listener still has been called only once
-        EasyMock.verify(getListener());
-
-        // field value should be different from the original value and current
-        // proeprty value
-        boolean isValueEqualToInitial = value.equals(initialValue);
-        Assert.assertFalse(isValueEqualToInitial);
-        boolean isValueEqualToPropertyValue = value.equals(property.getValue());
-        Assert.assertFalse(isValueEqualToPropertyValue);
-
-        // Ensure listener has not been called
-        EasyMock.verify(getListener());
-
-    }
-
-    /**
-     * Value change events from property should not propagate if read through is
-     * false. Execpt when the property is being set.
-     * 
-     * TODO make test field type agnostic (eg. combobox)
-     */
-    public void testValueChangePropagationWithReadThroughOff() {
-        final String initialValue = "initial";
-        ObjectProperty<String> property = new ObjectProperty<String>(
-                initialValue);
-
-        // set buffering
-        getField().setWriteThrough(false);
-        getField().setReadThrough(false);
-
-        // Value change should only happen once, when setting the property,
-        // further changes via property should not cause value change listener
-        // in field to be notified
-        getListener().valueChange(EasyMock.isA(ValueChangeEvent.class));
-        EasyMock.replay(getListener());
-
-        getField().addListener(getListener());
-        getField().setPropertyDataSource(property);
-
-        // Ensure listener was called once
-        EasyMock.verify(getListener());
-
-        // modify property value, should not fire value change in field as the
-        // read buffering is on (read through == false)
-        property.setValue("Foo");
-
-        // Ensure listener still has been called only once
-        EasyMock.verify(getListener());
-
-        // get value should not fire value change again
-        Object value = getField().getValue();
-
-        // field value should be different from the original value and current
-        // proeprty value
-        boolean isValueEqualToInitial = value.equals(initialValue);
-        Assert.assertTrue(isValueEqualToInitial);
-
-        // Ensure listener still has been called only once
-        EasyMock.verify(getListener());
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/components/TestWindow.java b/tests/src/com/vaadin/tests/server/components/TestWindow.java
deleted file mode 100644
index 05604aba61..0000000000
--- a/tests/src/com/vaadin/tests/server/components/TestWindow.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.vaadin.tests.server.components;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.easymock.EasyMock;
-
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Window.CloseEvent;
-import com.vaadin.ui.Window.CloseListener;
-import com.vaadin.ui.Window.ResizeEvent;
-import com.vaadin.ui.Window.ResizeListener;
-
-public class TestWindow extends TestCase {
-
-    private Window window;
-
-    @Override
-    protected void setUp() throws Exception {
-        window = new Window();
-    }
-
-    public void testCloseListener() {
-        CloseListener cl = EasyMock.createMock(Window.CloseListener.class);
-
-        // Expectations
-        cl.windowClose(EasyMock.isA(CloseEvent.class));
-
-        // Start actual test
-        EasyMock.replay(cl);
-
-        // Add listener and send a close event -> should end up in listener once
-        window.addListener(cl);
-        sendClose(window);
-
-        // Ensure listener was called once
-        EasyMock.verify(cl);
-
-        // Remove the listener and send close event -> should not end up in
-        // listener
-        window.removeListener(cl);
-        sendClose(window);
-
-        // Ensure listener still has been called only once
-        EasyMock.verify(cl);
-
-    }
-
-    public void testResizeListener() {
-        ResizeListener rl = EasyMock.createMock(Window.ResizeListener.class);
-
-        // Expectations
-        rl.windowResized(EasyMock.isA(ResizeEvent.class));
-
-        // Start actual test
-        EasyMock.replay(rl);
-
-        // Add listener and send a resize event -> should end up in listener
-        // once
-        window.addListener(rl);
-        sendResize(window);
-
-        // Ensure listener was called once
-        EasyMock.verify(rl);
-
-        // Remove the listener and send close event -> should not end up in
-        // listener
-        window.removeListener(rl);
-        sendResize(window);
-
-        // Ensure listener still has been called only once
-        EasyMock.verify(rl);
-
-    }
-
-    private void sendResize(Window window2) {
-        Map<String, Object> variables = new HashMap<String, Object>();
-        variables.put("height", 1234);
-        window.changeVariables(window, variables);
-
-    }
-
-    private static void sendClose(Window window) {
-        Map<String, Object> variables = new HashMap<String, Object>();
-        variables.put("close", true);
-        window.changeVariables(window, variables);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/AbstractBeanContainerTest.java b/tests/src/com/vaadin/tests/server/container/AbstractBeanContainerTest.java
deleted file mode 100644
index f11cd60f96..0000000000
--- a/tests/src/com/vaadin/tests/server/container/AbstractBeanContainerTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package com.vaadin.tests.server.container;
-
-import com.vaadin.data.util.AbstractBeanContainer;
-import com.vaadin.data.util.BeanContainer;
-import com.vaadin.data.util.BeanItemContainer;
-
-/**
- * Automated test for {@link AbstractBeanContainer}.
- * 
- * Only a limited subset of the functionality is tested here, the rest in tests
- * of subclasses including {@link BeanItemContainer} and {@link BeanContainer}.
- */
-public abstract class AbstractBeanContainerTest extends
-        AbstractInMemoryContainerTest {
-
-    public static class Person {
-        private String name;
-
-        public Person(String name) {
-            setName(name);
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public String getName() {
-            return name;
-        }
-    }
-
-    public static class ClassName {
-        // field names match constants in parent test class
-        private String fullyQualifiedName;
-        private String simpleName;
-        private String reverseFullyQualifiedName;
-        private Integer idNumber;
-
-        public ClassName(String fullyQualifiedName, Integer idNumber) {
-            this.fullyQualifiedName = fullyQualifiedName;
-            simpleName = AbstractContainerTest
-                    .getSimpleName(fullyQualifiedName);
-            reverseFullyQualifiedName = reverse(fullyQualifiedName);
-            this.idNumber = idNumber;
-        }
-
-        public String getFullyQualifiedName() {
-            return fullyQualifiedName;
-        }
-
-        public void setFullyQualifiedName(String fullyQualifiedName) {
-            this.fullyQualifiedName = fullyQualifiedName;
-        }
-
-        public String getSimpleName() {
-            return simpleName;
-        }
-
-        public void setSimpleName(String simpleName) {
-            this.simpleName = simpleName;
-        }
-
-        public String getReverseFullyQualifiedName() {
-            return reverseFullyQualifiedName;
-        }
-
-        public void setReverseFullyQualifiedName(
-                String reverseFullyQualifiedName) {
-            this.reverseFullyQualifiedName = reverseFullyQualifiedName;
-        }
-
-        public Integer getIdNumber() {
-            return idNumber;
-        }
-
-        public void setIdNumber(Integer idNumber) {
-            this.idNumber = idNumber;
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/AbstractContainerTest.java b/tests/src/com/vaadin/tests/server/container/AbstractContainerTest.java
deleted file mode 100644
index a83fcfc0f7..0000000000
--- a/tests/src/com/vaadin/tests/server/container/AbstractContainerTest.java
+++ /dev/null
@@ -1,670 +0,0 @@
-package com.vaadin.tests.server.container;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Container.Filterable;
-import com.vaadin.data.Container.ItemSetChangeEvent;
-import com.vaadin.data.Container.ItemSetChangeListener;
-import com.vaadin.data.Container.Sortable;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.filter.SimpleStringFilter;
-
-public abstract class AbstractContainerTest extends TestCase {
-
-    /**
-     * Helper class for testing e.g. listeners expecting events to be fired.
-     */
-    protected abstract static class AbstractEventCounter {
-        private int eventCount = 0;
-        private int lastAssertedEventCount = 0;
-
-        /**
-         * Increment the event count. To be called by subclasses e.g. from a
-         * listener method.
-         */
-        protected void increment() {
-            ++eventCount;
-        }
-
-        /**
-         * Check that no one event has occurred since the previous assert call.
-         */
-        public void assertNone() {
-            Assert.assertEquals(lastAssertedEventCount, eventCount);
-        }
-
-        /**
-         * Check that exactly one event has occurred since the previous assert
-         * call.
-         */
-        public void assertOnce() {
-            Assert.assertEquals(++lastAssertedEventCount, eventCount);
-        }
-
-        /**
-         * Reset the counter and the expected count.
-         */
-        public void reset() {
-            eventCount = 0;
-            lastAssertedEventCount = 0;
-        }
-    }
-
-    /**
-     * Test class for counting item set change events and verifying they have
-     * been received.
-     */
-    protected static class ItemSetChangeCounter extends AbstractEventCounter
-            implements ItemSetChangeListener {
-
-        public void containerItemSetChange(ItemSetChangeEvent event) {
-            increment();
-        }
-
-    }
-
-    // #6043: for items that have been filtered out, Container interface does
-    // not specify what to return from getItem() and getContainerProperty(), so
-    // need checkGetItemNull parameter for the test to be usable for most
-    // current containers
-    protected void validateContainer(Container container,
-            Object expectedFirstItemId, Object expectedLastItemId,
-            Object itemIdInSet, Object itemIdNotInSet,
-            boolean checkGetItemNull, int expectedSize) {
-        Container.Indexed indexed = null;
-        if (container instanceof Container.Indexed) {
-            indexed = (Container.Indexed) container;
-        }
-
-        List<Object> itemIdList = new ArrayList<Object>(container.getItemIds());
-
-        // size()
-        assertEquals(expectedSize, container.size());
-        assertEquals(expectedSize, itemIdList.size());
-
-        // first item, last item
-        Object first = itemIdList.get(0);
-        Object last = itemIdList.get(itemIdList.size() - 1);
-
-        assertEquals(expectedFirstItemId, first);
-        assertEquals(expectedLastItemId, last);
-
-        // containsId
-        assertFalse(container.containsId(itemIdNotInSet));
-        assertTrue(container.containsId(itemIdInSet));
-
-        // getItem
-        if (checkGetItemNull) {
-            assertNull(container.getItem(itemIdNotInSet));
-        }
-        assertNotNull(container.getItem(itemIdInSet));
-
-        // getContainerProperty
-        for (Object propId : container.getContainerPropertyIds()) {
-            if (checkGetItemNull) {
-                assertNull(container.getContainerProperty(itemIdNotInSet,
-                        propId));
-            }
-            assertNotNull(container.getContainerProperty(itemIdInSet, propId));
-        }
-
-        if (indexed != null) {
-            // firstItemId
-            assertEquals(first, indexed.firstItemId());
-
-            // lastItemId
-            assertEquals(last, indexed.lastItemId());
-
-            // nextItemId
-            assertEquals(itemIdList.get(1), indexed.nextItemId(first));
-
-            // prevItemId
-            assertEquals(itemIdList.get(itemIdList.size() - 2),
-                    indexed.prevItemId(last));
-
-            // isFirstId
-            assertTrue(indexed.isFirstId(first));
-            assertFalse(indexed.isFirstId(last));
-
-            // isLastId
-            assertTrue(indexed.isLastId(last));
-            assertFalse(indexed.isLastId(first));
-
-            // indexOfId
-            assertEquals(0, indexed.indexOfId(first));
-            assertEquals(expectedSize - 1, indexed.indexOfId(last));
-
-            // getIdByIndex
-            assertEquals(indexed.getIdByIndex(0), first);
-            assertEquals(indexed.getIdByIndex(expectedSize - 1), last);
-
-        }
-
-    }
-
-    protected static final Object FULLY_QUALIFIED_NAME = "fullyQualifiedName";
-    protected static final Object SIMPLE_NAME = "simpleName";
-    protected static final Object REVERSE_FULLY_QUALIFIED_NAME = "reverseFullyQualifiedName";
-    protected static final Object ID_NUMBER = "idNumber";
-
-    protected void testBasicContainerOperations(Container container) {
-        initializeContainer(container);
-
-        // Basic container
-        validateContainer(container, sampleData[0],
-                sampleData[sampleData.length - 1], sampleData[10], "abc", true,
-                sampleData.length);
-    }
-
-    protected void testContainerOrdered(Container.Ordered container) {
-        Object id = container.addItem();
-        assertNotNull(id);
-        Item item = container.getItem(id);
-        assertNotNull(item);
-
-        assertEquals(id, container.firstItemId());
-        assertEquals(id, container.lastItemId());
-
-        // isFirstId
-        assertTrue(container.isFirstId(id));
-        assertTrue(container.isFirstId(container.firstItemId()));
-        // isLastId
-        assertTrue(container.isLastId(id));
-        assertTrue(container.isLastId(container.lastItemId()));
-
-        // Add a new item before the first
-        // addItemAfter
-        Object newFirstId = container.addItemAfter(null);
-        assertNotNull(newFirstId);
-        assertNotNull(container.getItem(newFirstId));
-
-        // isFirstId
-        assertTrue(container.isFirstId(newFirstId));
-        assertTrue(container.isFirstId(container.firstItemId()));
-        // isLastId
-        assertTrue(container.isLastId(id));
-        assertTrue(container.isLastId(container.lastItemId()));
-
-        // nextItemId
-        assertEquals(id, container.nextItemId(newFirstId));
-        assertNull(container.nextItemId(id));
-        assertNull(container.nextItemId("not-in-container"));
-
-        // prevItemId
-        assertEquals(newFirstId, container.prevItemId(id));
-        assertNull(container.prevItemId(newFirstId));
-        assertNull(container.prevItemId("not-in-container"));
-
-        // addItemAfter(Object)
-        Object newSecondItemId = container.addItemAfter(newFirstId);
-        // order is now: newFirstId, newSecondItemId, id
-        assertNotNull(newSecondItemId);
-        assertNotNull(container.getItem(newSecondItemId));
-        assertEquals(id, container.nextItemId(newSecondItemId));
-        assertEquals(newFirstId, container.prevItemId(newSecondItemId));
-
-        // addItemAfter(Object,Object)
-        String fourthId = "id of the fourth item";
-        Item fourth = container.addItemAfter(newFirstId, fourthId);
-        // order is now: newFirstId, fourthId, newSecondItemId, id
-        assertNotNull(fourth);
-        assertEquals(fourth, container.getItem(fourthId));
-        assertEquals(newSecondItemId, container.nextItemId(fourthId));
-        assertEquals(newFirstId, container.prevItemId(fourthId));
-
-        // addItemAfter(Object,Object)
-        Object fifthId = new Object();
-        Item fifth = container.addItemAfter(null, fifthId);
-        // order is now: fifthId, newFirstId, fourthId, newSecondItemId, id
-        assertNotNull(fifth);
-        assertEquals(fifth, container.getItem(fifthId));
-        assertEquals(newFirstId, container.nextItemId(fifthId));
-        assertNull(container.prevItemId(fifthId));
-
-    }
-
-    protected void testContainerIndexed(Container.Indexed container,
-            Object itemId, int itemPosition, boolean testAddEmptyItemAt,
-            Object newItemId, boolean testAddItemAtWithId) {
-        initializeContainer(container);
-
-        // indexOfId
-        Assert.assertEquals(itemPosition, container.indexOfId(itemId));
-
-        // getIdByIndex
-        Assert.assertEquals(itemId, container.getIdByIndex(itemPosition));
-
-        // addItemAt
-        if (testAddEmptyItemAt) {
-            Object addedId = container.addItemAt(itemPosition);
-            Assert.assertEquals(itemPosition, container.indexOfId(addedId));
-            Assert.assertEquals(itemPosition + 1, container.indexOfId(itemId));
-            Assert.assertEquals(addedId, container.getIdByIndex(itemPosition));
-            Assert.assertEquals(itemId,
-                    container.getIdByIndex(itemPosition + 1));
-
-            Object newFirstId = container.addItemAt(0);
-            Assert.assertEquals(0, container.indexOfId(newFirstId));
-            Assert.assertEquals(itemPosition + 2, container.indexOfId(itemId));
-            Assert.assertEquals(newFirstId, container.firstItemId());
-            Assert.assertEquals(newFirstId, container.getIdByIndex(0));
-            Assert.assertEquals(itemId,
-                    container.getIdByIndex(itemPosition + 2));
-
-            Object newLastId = container.addItemAt(container.size());
-            Assert.assertEquals(container.size() - 1,
-                    container.indexOfId(newLastId));
-            Assert.assertEquals(itemPosition + 2, container.indexOfId(itemId));
-            Assert.assertEquals(newLastId, container.lastItemId());
-            Assert.assertEquals(newLastId,
-                    container.getIdByIndex(container.size() - 1));
-            Assert.assertEquals(itemId,
-                    container.getIdByIndex(itemPosition + 2));
-
-            Assert.assertTrue(container.removeItem(addedId));
-            Assert.assertTrue(container.removeItem(newFirstId));
-            Assert.assertTrue(container.removeItem(newLastId));
-
-            Assert.assertFalse(
-                    "Removing non-existing item should indicate failure",
-                    container.removeItem(addedId));
-        }
-
-        // addItemAt
-        if (testAddItemAtWithId) {
-            container.addItemAt(itemPosition, newItemId);
-            Assert.assertEquals(itemPosition, container.indexOfId(newItemId));
-            Assert.assertEquals(itemPosition + 1, container.indexOfId(itemId));
-            Assert.assertEquals(newItemId, container.getIdByIndex(itemPosition));
-            Assert.assertEquals(itemId,
-                    container.getIdByIndex(itemPosition + 1));
-            Assert.assertTrue(container.removeItem(newItemId));
-            Assert.assertFalse(container.containsId(newItemId));
-
-            container.addItemAt(0, newItemId);
-            Assert.assertEquals(0, container.indexOfId(newItemId));
-            Assert.assertEquals(itemPosition + 1, container.indexOfId(itemId));
-            Assert.assertEquals(newItemId, container.firstItemId());
-            Assert.assertEquals(newItemId, container.getIdByIndex(0));
-            Assert.assertEquals(itemId,
-                    container.getIdByIndex(itemPosition + 1));
-            Assert.assertTrue(container.removeItem(newItemId));
-            Assert.assertFalse(container.containsId(newItemId));
-
-            container.addItemAt(container.size(), newItemId);
-            Assert.assertEquals(container.size() - 1,
-                    container.indexOfId(newItemId));
-            Assert.assertEquals(itemPosition, container.indexOfId(itemId));
-            Assert.assertEquals(newItemId, container.lastItemId());
-            Assert.assertEquals(newItemId,
-                    container.getIdByIndex(container.size() - 1));
-            Assert.assertEquals(itemId, container.getIdByIndex(itemPosition));
-            Assert.assertTrue(container.removeItem(newItemId));
-            Assert.assertFalse(container.containsId(newItemId));
-        }
-    }
-
-    protected void testContainerFiltering(Container.Filterable container) {
-        initializeContainer(container);
-
-        // Filter by "contains ab"
-        container.addContainerFilter(new SimpleStringFilter(
-                FULLY_QUALIFIED_NAME, "ab", false, false));
-
-        validateContainer(container, "com.vaadin.data.BufferedValidatable",
-                "com.vaadin.ui.TabSheet",
-                "com.vaadin.terminal.gwt.client.Focusable",
-                "com.vaadin.data.Buffered", isFilteredOutItemNull(), 20);
-
-        // Filter by "contains da" (reversed as ad here)
-        container.removeAllContainerFilters();
-        container.addContainerFilter(new SimpleStringFilter(
-                REVERSE_FULLY_QUALIFIED_NAME, "ad", false, false));
-
-        validateContainer(container, "com.vaadin.data.Buffered",
-                "com.vaadin.terminal.gwt.server.ComponentSizeValidator",
-                "com.vaadin.data.util.IndexedContainer",
-                "com.vaadin.terminal.gwt.client.ui.VUriFragmentUtility",
-                isFilteredOutItemNull(), 37);
-    }
-
-    /**
-     * Override in subclasses to return false if the container getItem() method
-     * returns a non-null value for an item that has been filtered out.
-     * 
-     * @return
-     */
-    protected boolean isFilteredOutItemNull() {
-        return true;
-    }
-
-    protected void testContainerSortingAndFiltering(Container.Sortable sortable) {
-        Filterable filterable = (Filterable) sortable;
-
-        initializeContainer(sortable);
-
-        // Filter by "contains ab"
-        filterable.addContainerFilter(new SimpleStringFilter(
-                FULLY_QUALIFIED_NAME, "ab", false, false));
-
-        // Must be able to sort based on PROP1 for this test
-        assertTrue(sortable.getSortableContainerPropertyIds().contains(
-                FULLY_QUALIFIED_NAME));
-
-        sortable.sort(new Object[] { FULLY_QUALIFIED_NAME },
-                new boolean[] { true });
-
-        validateContainer(sortable, "com.vaadin.data.BufferedValidatable",
-                "com.vaadin.ui.TableFieldFactory",
-                "com.vaadin.ui.TableFieldFactory",
-                "com.vaadin.data.util.BeanItem", isFilteredOutItemNull(), 20);
-    }
-
-    protected void testContainerSorting(Container.Filterable container) {
-        Container.Sortable sortable = (Sortable) container;
-
-        initializeContainer(container);
-
-        // Must be able to sort based on PROP1 for this test
-        assertTrue(sortable.getSortableContainerPropertyIds().contains(
-                FULLY_QUALIFIED_NAME));
-        assertTrue(sortable.getSortableContainerPropertyIds().contains(
-                REVERSE_FULLY_QUALIFIED_NAME));
-
-        sortable.sort(new Object[] { FULLY_QUALIFIED_NAME },
-                new boolean[] { true });
-
-        validateContainer(container, "com.vaadin.Application",
-                "org.vaadin.test.LastClass",
-                "com.vaadin.terminal.ApplicationResource", "blah", true,
-                sampleData.length);
-
-        sortable.sort(new Object[] { REVERSE_FULLY_QUALIFIED_NAME },
-                new boolean[] { true });
-
-        validateContainer(container,
-                "com.vaadin.terminal.gwt.server.ApplicationPortlet2",
-                "com.vaadin.data.util.ObjectProperty",
-                "com.vaadin.ui.BaseFieldFactory", "blah", true,
-                sampleData.length);
-
-    }
-
-    protected void initializeContainer(Container container) {
-        Assert.assertTrue(container.removeAllItems());
-        Object[] propertyIds = container.getContainerPropertyIds().toArray();
-        for (Object propertyId : propertyIds) {
-            container.removeContainerProperty(propertyId);
-        }
-
-        container.addContainerProperty(FULLY_QUALIFIED_NAME, String.class, "");
-        container.addContainerProperty(SIMPLE_NAME, String.class, "");
-        container.addContainerProperty(REVERSE_FULLY_QUALIFIED_NAME,
-                String.class, null);
-        container.addContainerProperty(ID_NUMBER, Integer.class, null);
-
-        for (int i = 0; i < sampleData.length; i++) {
-            String id = sampleData[i];
-            Item item = container.addItem(id);
-
-            item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(sampleData[i]);
-            item.getItemProperty(SIMPLE_NAME).setValue(
-                    getSimpleName(sampleData[i]));
-            item.getItemProperty(REVERSE_FULLY_QUALIFIED_NAME).setValue(
-                    reverse(sampleData[i]));
-            item.getItemProperty(ID_NUMBER).setValue(i);
-        }
-    }
-
-    protected static String getSimpleName(String name) {
-        if (name.contains(".")) {
-            return name.substring(name.lastIndexOf('.') + 1);
-        } else {
-            return name;
-        }
-    }
-
-    protected static String reverse(String string) {
-        return new StringBuilder(string).reverse().toString();
-    }
-
-    protected final String[] sampleData = {
-            "com.vaadin.annotations.AutoGenerated", "com.vaadin.Application",
-            "com.vaadin.data.Buffered", "com.vaadin.data.BufferedValidatable",
-            "com.vaadin.data.Container", "com.vaadin.data.Item",
-            "com.vaadin.data.Property", "com.vaadin.data.util.BeanItem",
-            "com.vaadin.data.util.BeanItemContainer",
-            "com.vaadin.data.util.ContainerHierarchicalWrapper",
-            "com.vaadin.data.util.ContainerOrderedWrapper",
-            "com.vaadin.data.util.DefaultItemSorter",
-            "com.vaadin.data.util.FilesystemContainer",
-            "com.vaadin.data.util.Filter",
-            "com.vaadin.data.util.HierarchicalContainer",
-            "com.vaadin.data.util.IndexedContainer",
-            "com.vaadin.data.util.ItemSorter",
-            "com.vaadin.data.util.MethodProperty",
-            "com.vaadin.data.util.ObjectProperty",
-            "com.vaadin.data.util.PropertyFormatter",
-            "com.vaadin.data.util.PropertysetItem",
-            "com.vaadin.data.util.QueryContainer",
-            "com.vaadin.data.util.TextFileProperty",
-            "com.vaadin.data.Validatable",
-            "com.vaadin.data.validator.AbstractStringValidator",
-            "com.vaadin.data.validator.AbstractValidator",
-            "com.vaadin.data.validator.CompositeValidator",
-            "com.vaadin.data.validator.DoubleValidator",
-            "com.vaadin.data.validator.EmailValidator",
-            "com.vaadin.data.validator.IntegerValidator",
-            "com.vaadin.data.validator.NullValidator",
-            "com.vaadin.data.validator.RegexpValidator",
-            "com.vaadin.data.validator.StringLengthValidator",
-            "com.vaadin.data.Validator", "com.vaadin.event.Action",
-            "com.vaadin.event.ComponentEventListener",
-            "com.vaadin.event.EventRouter", "com.vaadin.event.FieldEvents",
-            "com.vaadin.event.ItemClickEvent", "com.vaadin.event.LayoutEvents",
-            "com.vaadin.event.ListenerMethod",
-            "com.vaadin.event.MethodEventSource",
-            "com.vaadin.event.MouseEvents", "com.vaadin.event.ShortcutAction",
-            "com.vaadin.launcher.DemoLauncher",
-            "com.vaadin.launcher.DevelopmentServerLauncher",
-            "com.vaadin.launcher.util.BrowserLauncher",
-            "com.vaadin.service.ApplicationContext",
-            "com.vaadin.service.FileTypeResolver",
-            "com.vaadin.terminal.ApplicationResource",
-            "com.vaadin.terminal.ClassResource",
-            "com.vaadin.terminal.CompositeErrorMessage",
-            "com.vaadin.terminal.DownloadStream",
-            "com.vaadin.terminal.ErrorMessage",
-            "com.vaadin.terminal.ExternalResource",
-            "com.vaadin.terminal.FileResource",
-            "com.vaadin.terminal.gwt.client.ApplicationConfiguration",
-            "com.vaadin.terminal.gwt.client.ApplicationConnection",
-            "com.vaadin.terminal.gwt.client.BrowserInfo",
-            "com.vaadin.terminal.gwt.client.ClientExceptionHandler",
-            "com.vaadin.terminal.gwt.client.ComponentDetail",
-            "com.vaadin.terminal.gwt.client.ComponentDetailMap",
-            "com.vaadin.terminal.gwt.client.ComponentLocator",
-            "com.vaadin.terminal.gwt.client.Console",
-            "com.vaadin.terminal.gwt.client.Container",
-            "com.vaadin.terminal.gwt.client.ContainerResizedListener",
-            "com.vaadin.terminal.gwt.client.CSSRule",
-            "com.vaadin.terminal.gwt.client.DateTimeService",
-            "com.vaadin.terminal.gwt.client.DefaultWidgetSet",
-            "com.vaadin.terminal.gwt.client.Focusable",
-            "com.vaadin.terminal.gwt.client.HistoryImplIEVaadin",
-            "com.vaadin.terminal.gwt.client.LocaleNotLoadedException",
-            "com.vaadin.terminal.gwt.client.LocaleService",
-            "com.vaadin.terminal.gwt.client.MouseEventDetails",
-            "com.vaadin.terminal.gwt.client.NullConsole",
-            "com.vaadin.terminal.gwt.client.Paintable",
-            "com.vaadin.terminal.gwt.client.RenderInformation",
-            "com.vaadin.terminal.gwt.client.RenderSpace",
-            "com.vaadin.terminal.gwt.client.StyleConstants",
-            "com.vaadin.terminal.gwt.client.TooltipInfo",
-            "com.vaadin.terminal.gwt.client.ui.Action",
-            "com.vaadin.terminal.gwt.client.ui.ActionOwner",
-            "com.vaadin.terminal.gwt.client.ui.AlignmentInfo",
-            "com.vaadin.terminal.gwt.client.ui.CalendarEntry",
-            "com.vaadin.terminal.gwt.client.ui.ClickEventHandler",
-            "com.vaadin.terminal.gwt.client.ui.Field",
-            "com.vaadin.terminal.gwt.client.ui.Icon",
-            "com.vaadin.terminal.gwt.client.ui.layout.CellBasedLayout",
-            "com.vaadin.terminal.gwt.client.ui.layout.ChildComponentContainer",
-            "com.vaadin.terminal.gwt.client.ui.layout.Margins",
-            "com.vaadin.terminal.gwt.client.ui.LayoutClickEventHandler",
-            "com.vaadin.terminal.gwt.client.ui.MenuBar",
-            "com.vaadin.terminal.gwt.client.ui.MenuItem",
-            "com.vaadin.terminal.gwt.client.ui.richtextarea.VRichTextArea",
-            "com.vaadin.terminal.gwt.client.ui.richtextarea.VRichTextToolbar",
-            "com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler",
-            "com.vaadin.terminal.gwt.client.ui.SubPartAware",
-            "com.vaadin.terminal.gwt.client.ui.Table",
-            "com.vaadin.terminal.gwt.client.ui.TreeAction",
-            "com.vaadin.terminal.gwt.client.ui.TreeImages",
-            "com.vaadin.terminal.gwt.client.ui.VAbsoluteLayout",
-            "com.vaadin.terminal.gwt.client.ui.VAccordion",
-            "com.vaadin.terminal.gwt.client.ui.VButton",
-            "com.vaadin.terminal.gwt.client.ui.VCalendarPanel",
-            "com.vaadin.terminal.gwt.client.ui.VCheckBox",
-            "com.vaadin.terminal.gwt.client.ui.VContextMenu",
-            "com.vaadin.terminal.gwt.client.ui.VCssLayout",
-            "com.vaadin.terminal.gwt.client.ui.VCustomComponent",
-            "com.vaadin.terminal.gwt.client.ui.VCustomLayout",
-            "com.vaadin.terminal.gwt.client.ui.VDateField",
-            "com.vaadin.terminal.gwt.client.ui.VDateFieldCalendar",
-            "com.vaadin.terminal.gwt.client.ui.VEmbedded",
-            "com.vaadin.terminal.gwt.client.ui.VFilterSelect",
-            "com.vaadin.terminal.gwt.client.ui.VForm",
-            "com.vaadin.terminal.gwt.client.ui.VFormLayout",
-            "com.vaadin.terminal.gwt.client.ui.VGridLayout",
-            "com.vaadin.terminal.gwt.client.ui.VHorizontalLayout",
-            "com.vaadin.terminal.gwt.client.ui.VLabel",
-            "com.vaadin.terminal.gwt.client.ui.VLink",
-            "com.vaadin.terminal.gwt.client.ui.VListSelect",
-            "com.vaadin.terminal.gwt.client.ui.VMarginInfo",
-            "com.vaadin.terminal.gwt.client.ui.VMenuBar",
-            "com.vaadin.terminal.gwt.client.ui.VNativeButton",
-            "com.vaadin.terminal.gwt.client.ui.VNativeSelect",
-            "com.vaadin.terminal.gwt.client.ui.VNotification",
-            "com.vaadin.terminal.gwt.client.ui.VOptionGroup",
-            "com.vaadin.terminal.gwt.client.ui.VOptionGroupBase",
-            "com.vaadin.terminal.gwt.client.ui.VOrderedLayout",
-            "com.vaadin.terminal.gwt.client.ui.VOverlay",
-            "com.vaadin.terminal.gwt.client.ui.VPanel",
-            "com.vaadin.terminal.gwt.client.ui.VPasswordField",
-            "com.vaadin.terminal.gwt.client.ui.VPopupCalendar",
-            "com.vaadin.terminal.gwt.client.ui.VPopupView",
-            "com.vaadin.terminal.gwt.client.ui.VProgressIndicator",
-            "com.vaadin.terminal.gwt.client.ui.VScrollTable",
-            "com.vaadin.terminal.gwt.client.ui.VSlider",
-            "com.vaadin.terminal.gwt.client.ui.VSplitPanel",
-            "com.vaadin.terminal.gwt.client.ui.VSplitPanelHorizontal",
-            "com.vaadin.terminal.gwt.client.ui.VSplitPanelVertical",
-            "com.vaadin.terminal.gwt.client.ui.VTablePaging",
-            "com.vaadin.terminal.gwt.client.ui.VTabsheet",
-            "com.vaadin.terminal.gwt.client.ui.VTabsheetBase",
-            "com.vaadin.terminal.gwt.client.ui.VTabsheetPanel",
-            "com.vaadin.terminal.gwt.client.ui.VTextArea",
-            "com.vaadin.terminal.gwt.client.ui.VTextField",
-            "com.vaadin.terminal.gwt.client.ui.VTextualDate",
-            "com.vaadin.terminal.gwt.client.ui.VTime",
-            "com.vaadin.terminal.gwt.client.ui.VTree",
-            "com.vaadin.terminal.gwt.client.ui.VTwinColSelect",
-            "com.vaadin.terminal.gwt.client.ui.VUnknownComponent",
-            "com.vaadin.terminal.gwt.client.ui.VUpload",
-            "com.vaadin.terminal.gwt.client.ui.VUriFragmentUtility",
-            "com.vaadin.terminal.gwt.client.ui.VVerticalLayout",
-            "com.vaadin.terminal.gwt.client.ui.VView",
-            "com.vaadin.terminal.gwt.client.ui.VWindow",
-            "com.vaadin.terminal.gwt.client.UIDL",
-            "com.vaadin.terminal.gwt.client.Util",
-            "com.vaadin.terminal.gwt.client.ValueMap",
-            "com.vaadin.terminal.gwt.client.VCaption",
-            "com.vaadin.terminal.gwt.client.VCaptionWrapper",
-            "com.vaadin.terminal.gwt.client.VDebugConsole",
-            "com.vaadin.terminal.gwt.client.VErrorMessage",
-            "com.vaadin.terminal.gwt.client.VTooltip",
-            "com.vaadin.terminal.gwt.client.VUIDLBrowser",
-            "com.vaadin.terminal.gwt.client.WidgetMap",
-            "com.vaadin.terminal.gwt.client.WidgetSet",
-            "com.vaadin.terminal.gwt.server.AbstractApplicationPortlet",
-            "com.vaadin.terminal.gwt.server.AbstractApplicationServlet",
-            "com.vaadin.terminal.gwt.server.AbstractCommunicationManager",
-            "com.vaadin.terminal.gwt.server.AbstractWebApplicationContext",
-            "com.vaadin.terminal.gwt.server.ApplicationPortlet",
-            "com.vaadin.terminal.gwt.server.ApplicationPortlet2",
-            "com.vaadin.terminal.gwt.server.ApplicationRunnerServlet",
-            "com.vaadin.terminal.gwt.server.ApplicationServlet",
-            "com.vaadin.terminal.gwt.server.ChangeVariablesErrorEvent",
-            "com.vaadin.terminal.gwt.server.CommunicationManager",
-            "com.vaadin.terminal.gwt.server.ComponentSizeValidator",
-            "com.vaadin.terminal.gwt.server.Constants",
-            "com.vaadin.terminal.gwt.server.GAEApplicationServlet",
-            "com.vaadin.terminal.gwt.server.HttpServletRequestListener",
-            "com.vaadin.terminal.gwt.server.HttpUploadStream",
-            "com.vaadin.terminal.gwt.server.JsonPaintTarget",
-            "com.vaadin.terminal.gwt.server.PortletApplicationContext",
-            "com.vaadin.terminal.gwt.server.PortletApplicationContext2",
-            "com.vaadin.terminal.gwt.server.PortletCommunicationManager",
-            "com.vaadin.terminal.gwt.server.PortletRequestListener",
-            "com.vaadin.terminal.gwt.server.RestrictedRenderResponse",
-            "com.vaadin.terminal.gwt.server.SessionExpiredException",
-            "com.vaadin.terminal.gwt.server.SystemMessageException",
-            "com.vaadin.terminal.gwt.server.WebApplicationContext",
-            "com.vaadin.terminal.gwt.server.WebBrowser",
-            "com.vaadin.terminal.gwt.widgetsetutils.ClassPathExplorer",
-            "com.vaadin.terminal.gwt.widgetsetutils.WidgetMapGenerator",
-            "com.vaadin.terminal.gwt.widgetsetutils.WidgetSetBuilder",
-            "com.vaadin.terminal.KeyMapper", "com.vaadin.terminal.Paintable",
-            "com.vaadin.terminal.PaintException",
-            "com.vaadin.terminal.PaintTarget",
-            "com.vaadin.terminal.ParameterHandler",
-            "com.vaadin.terminal.Resource", "com.vaadin.terminal.Scrollable",
-            "com.vaadin.terminal.Sizeable",
-            "com.vaadin.terminal.StreamResource",
-            "com.vaadin.terminal.SystemError", "com.vaadin.terminal.Terminal",
-            "com.vaadin.terminal.ThemeResource",
-            "com.vaadin.terminal.UploadStream",
-            "com.vaadin.terminal.URIHandler", "com.vaadin.terminal.UserError",
-            "com.vaadin.terminal.VariableOwner",
-            "com.vaadin.tools.ReflectTools",
-            "com.vaadin.tools.WidgetsetCompiler",
-            "com.vaadin.ui.AbsoluteLayout", "com.vaadin.ui.AbstractComponent",
-            "com.vaadin.ui.AbstractComponentContainer",
-            "com.vaadin.ui.AbstractField", "com.vaadin.ui.AbstractLayout",
-            "com.vaadin.ui.AbstractOrderedLayout",
-            "com.vaadin.ui.AbstractSelect", "com.vaadin.ui.Accordion",
-            "com.vaadin.ui.Alignment", "com.vaadin.ui.AlignmentUtils",
-            "com.vaadin.ui.BaseFieldFactory", "com.vaadin.ui.Button",
-            "com.vaadin.ui.CheckBox", "com.vaadin.ui.ClientWidget",
-            "com.vaadin.ui.ComboBox", "com.vaadin.ui.Component",
-            "com.vaadin.ui.ComponentContainer", "com.vaadin.ui.CssLayout",
-            "com.vaadin.ui.CustomComponent", "com.vaadin.ui.CustomLayout",
-            "com.vaadin.ui.DateField", "com.vaadin.ui.DefaultFieldFactory",
-            "com.vaadin.ui.Embedded", "com.vaadin.ui.ExpandLayout",
-            "com.vaadin.ui.Field", "com.vaadin.ui.FieldFactory",
-            "com.vaadin.ui.Form", "com.vaadin.ui.FormFieldFactory",
-            "com.vaadin.ui.FormLayout", "com.vaadin.ui.GridLayout",
-            "com.vaadin.ui.HorizontalLayout", "com.vaadin.ui.InlineDateField",
-            "com.vaadin.ui.Label", "com.vaadin.ui.Layout",
-            "com.vaadin.ui.Link", "com.vaadin.ui.ListSelect",
-            "com.vaadin.ui.LoginForm", "com.vaadin.ui.MenuBar",
-            "com.vaadin.ui.NativeButton", "com.vaadin.ui.NativeSelect",
-            "com.vaadin.ui.OptionGroup", "com.vaadin.ui.OrderedLayout",
-            "com.vaadin.ui.Panel", "com.vaadin.ui.PopupDateField",
-            "com.vaadin.ui.PopupView", "com.vaadin.ui.ProgressIndicator",
-            "com.vaadin.ui.RichTextArea", "com.vaadin.ui.Select",
-            "com.vaadin.ui.Slider", "com.vaadin.ui.SplitPanel",
-            "com.vaadin.ui.Table", "com.vaadin.ui.TableFieldFactory",
-            "com.vaadin.ui.TabSheet", "com.vaadin.ui.TextField",
-            "com.vaadin.ui.Tree", "com.vaadin.ui.TwinColSelect",
-            "com.vaadin.ui.Upload", "com.vaadin.ui.UriFragmentUtility",
-            "com.vaadin.ui.VerticalLayout", "com.vaadin.ui.Window",
-            "com.vaadin.util.SerializerHelper", "org.vaadin.test.LastClass" };
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/AbstractHierarchicalContainerTest.java b/tests/src/com/vaadin/tests/server/container/AbstractHierarchicalContainerTest.java
deleted file mode 100644
index 5c4dfc658f..0000000000
--- a/tests/src/com/vaadin/tests/server/container/AbstractHierarchicalContainerTest.java
+++ /dev/null
@@ -1,256 +0,0 @@
-package com.vaadin.tests.server.container;
-
-import java.util.Collection;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Container.Hierarchical;
-import com.vaadin.data.Container.Sortable;
-import com.vaadin.data.Item;
-
-public abstract class AbstractHierarchicalContainerTest extends
-        AbstractContainerTest {
-
-    /**
-     * @param container
-     *            The container to validate
-     * @param expectedFirstItemId
-     *            Expected first item id
-     * @param expectedLastItemId
-     *            Expected last item id
-     * @param itemIdInSet
-     *            An item id that is in the container
-     * @param itemIdNotInSet
-     *            An item id that is not in the container
-     * @param checkGetItemNull
-     *            true if getItem() should return null for itemIdNotInSet, false
-     *            to skip the check (container.containsId() is checked in any
-     *            case)
-     * @param expectedSize
-     *            Expected number of items in the container. Not related to
-     *            hierarchy.
-     * @param expectedTraversalSize
-     *            Expected number of items found when traversing from the roots
-     *            down to all available nodes.
-     * @param expectedRootSize
-     *            Expected number of root items
-     * @param rootsHaveChildren
-     *            true if all roots have children, false otherwise (skips some
-     *            asserts)
-     */
-    protected void validateHierarchicalContainer(Hierarchical container,
-            Object expectedFirstItemId, Object expectedLastItemId,
-            Object itemIdInSet, Object itemIdNotInSet,
-            boolean checkGetItemNull, int expectedSize, int expectedRootSize,
-            boolean rootsHaveChildren) {
-
-        validateContainer(container, expectedFirstItemId, expectedLastItemId,
-                itemIdInSet, itemIdNotInSet, checkGetItemNull, expectedSize);
-
-        // rootItemIds
-        Collection<?> rootIds = container.rootItemIds();
-        assertEquals(expectedRootSize, rootIds.size());
-
-        for (Object rootId : rootIds) {
-            // All roots must be in container
-            assertTrue(container.containsId(rootId));
-
-            // All roots must have no parent
-            assertNull(container.getParent(rootId));
-
-            // all roots must be roots
-            assertTrue(container.isRoot(rootId));
-
-            if (rootsHaveChildren) {
-                // all roots have children allowed in this case
-                assertTrue(container.areChildrenAllowed(rootId));
-
-                // all roots have children in this case
-                Collection<?> children = container.getChildren(rootId);
-                assertNotNull(rootId + " should have children", children);
-                assertTrue(rootId + " should have children",
-                        (children.size() > 0));
-                // getParent
-                for (Object childId : children) {
-                    assertEquals(container.getParent(childId), rootId);
-                }
-
-            }
-        }
-
-        // isRoot should return false for unknown items
-        assertFalse(container.isRoot(itemIdNotInSet));
-
-        // hasChildren should return false for unknown items
-        assertFalse(container.hasChildren(itemIdNotInSet));
-
-        // areChildrenAllowed should return false for unknown items
-        assertFalse(container.areChildrenAllowed(itemIdNotInSet));
-
-        // removeItem of unknown items should return false
-        assertFalse(container.removeItem(itemIdNotInSet));
-
-        assertEquals(expectedSize, countNodes(container));
-
-        validateHierarchy(container);
-    }
-
-    private int countNodes(Hierarchical container) {
-        int totalNodes = 0;
-        for (Object rootId : container.rootItemIds()) {
-            totalNodes += countNodes(container, rootId);
-        }
-
-        return totalNodes;
-    }
-
-    private int countNodes(Hierarchical container, Object itemId) {
-        int nodes = 1; // This
-        Collection<?> children = container.getChildren(itemId);
-        if (children != null) {
-            for (Object id : children) {
-                nodes += countNodes(container, id);
-            }
-        }
-
-        return nodes;
-    }
-
-    private void validateHierarchy(Hierarchical container) {
-        for (Object rootId : container.rootItemIds()) {
-            validateHierarchy(container, rootId, null);
-        }
-    }
-
-    private void validateHierarchy(Hierarchical container, Object itemId,
-            Object parentId) {
-        Collection<?> children = container.getChildren(itemId);
-
-        // getParent
-        assertEquals(container.getParent(itemId), parentId);
-
-        if (!container.areChildrenAllowed(itemId)) {
-            // If no children is allowed the item should have no children
-            assertFalse(container.hasChildren(itemId));
-            assertTrue(children == null || children.size() == 0);
-
-            return;
-        }
-        if (children != null) {
-            for (Object id : children) {
-                validateHierarchy(container, id, itemId);
-            }
-        }
-    }
-
-    protected void testHierarchicalContainer(Container.Hierarchical container) {
-        initializeContainer(container);
-
-        int packages = 21 + 3;
-        int expectedSize = sampleData.length + packages;
-        validateHierarchicalContainer(container, "com",
-                "org.vaadin.test.LastClass",
-                "com.vaadin.terminal.ApplicationResource", "blah", true,
-                expectedSize, 2, true);
-
-    }
-
-    protected void testHierarchicalSorting(Container.Hierarchical container) {
-        Container.Sortable sortable = (Sortable) container;
-
-        initializeContainer(container);
-
-        // Must be able to sort based on PROP1 and PROP2 for this test
-        assertTrue(sortable.getSortableContainerPropertyIds().contains(
-                FULLY_QUALIFIED_NAME));
-        assertTrue(sortable.getSortableContainerPropertyIds().contains(
-                REVERSE_FULLY_QUALIFIED_NAME));
-
-        sortable.sort(new Object[] { FULLY_QUALIFIED_NAME },
-                new boolean[] { true });
-
-        int packages = 21 + 3;
-        int expectedSize = sampleData.length + packages;
-        validateHierarchicalContainer(container, "com",
-                "org.vaadin.test.LastClass",
-                "com.vaadin.terminal.ApplicationResource", "blah", true,
-                expectedSize, 2, true);
-
-        sortable.sort(new Object[] { REVERSE_FULLY_QUALIFIED_NAME },
-                new boolean[] { true });
-
-        validateHierarchicalContainer(container,
-                "com.vaadin.terminal.gwt.server.ApplicationPortlet2",
-                "com.vaadin.data.util.ObjectProperty",
-                "com.vaadin.terminal.ApplicationResource", "blah", true,
-                expectedSize, 2, true);
-
-    }
-
-    protected void initializeContainer(Container.Hierarchical container) {
-        container.removeAllItems();
-        Object[] propertyIds = container.getContainerPropertyIds().toArray();
-        for (Object propertyId : propertyIds) {
-            container.removeContainerProperty(propertyId);
-        }
-
-        container.addContainerProperty(FULLY_QUALIFIED_NAME, String.class, "");
-        container.addContainerProperty(SIMPLE_NAME, String.class, "");
-        container.addContainerProperty(REVERSE_FULLY_QUALIFIED_NAME,
-                String.class, null);
-        container.addContainerProperty(ID_NUMBER, Integer.class, null);
-
-        for (int i = 0; i < sampleData.length; i++) {
-            String id = sampleData[i];
-
-            // Add path as parent
-            String paths[] = id.split("\\.");
-            String path = paths[0];
-            // Adds "com" and other items multiple times so should return null
-            // for all but the first time
-            if (container.addItem(path) != null) {
-                assertTrue(container.setChildrenAllowed(path, false));
-                Item item = container.getItem(path);
-                item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(path);
-                item.getItemProperty(SIMPLE_NAME).setValue(getSimpleName(path));
-                item.getItemProperty(REVERSE_FULLY_QUALIFIED_NAME).setValue(
-                        reverse(path));
-                item.getItemProperty(ID_NUMBER).setValue(1);
-            }
-            for (int j = 1; j < paths.length; j++) {
-                String parent = path;
-                path = path + "." + paths[j];
-
-                // Adds "com" and other items multiple times so should return
-                // null for all but the first time
-                if (container.addItem(path) != null) {
-                    assertTrue(container.setChildrenAllowed(path, false));
-
-                    Item item = container.getItem(path);
-                    item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(path);
-                    item.getItemProperty(SIMPLE_NAME).setValue(
-                            getSimpleName(path));
-                    item.getItemProperty(REVERSE_FULLY_QUALIFIED_NAME)
-                            .setValue(reverse(path));
-                    item.getItemProperty(ID_NUMBER).setValue(1);
-
-                }
-                assertTrue(container.setChildrenAllowed(parent, true));
-                assertTrue(
-                        "Failed to set " + parent + " as parent for " + path,
-                        container.setParent(path, parent));
-            }
-
-            Item item = container.getItem(id);
-            assertNotNull(item);
-            String parent = id.substring(0, id.lastIndexOf('.'));
-            assertTrue(container.setParent(id, parent));
-            item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(sampleData[i]);
-            item.getItemProperty(SIMPLE_NAME).setValue(
-                    getSimpleName(sampleData[i]));
-            item.getItemProperty(REVERSE_FULLY_QUALIFIED_NAME).setValue(
-                    reverse(sampleData[i]));
-            item.getItemProperty(ID_NUMBER).setValue(i % 2);
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/AbstractInMemoryContainerTest.java b/tests/src/com/vaadin/tests/server/container/AbstractInMemoryContainerTest.java
deleted file mode 100644
index 68db547ccb..0000000000
--- a/tests/src/com/vaadin/tests/server/container/AbstractInMemoryContainerTest.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.vaadin.tests.server.container;
-
-public abstract class AbstractInMemoryContainerTest extends
-        AbstractContainerTest {
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/BeanContainerTest.java b/tests/src/com/vaadin/tests/server/container/BeanContainerTest.java
deleted file mode 100644
index 1b3bf69745..0000000000
--- a/tests/src/com/vaadin/tests/server/container/BeanContainerTest.java
+++ /dev/null
@@ -1,425 +0,0 @@
-package com.vaadin.tests.server.container;
-
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import junit.framework.Assert;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.AbstractBeanContainer.BeanIdResolver;
-import com.vaadin.data.util.BeanContainer;
-
-public class BeanContainerTest extends AbstractBeanContainerTest {
-
-    protected static class PersonNameResolver implements
-            BeanIdResolver<String, Person> {
-
-        public String getIdForBean(Person bean) {
-            return bean != null ? bean.getName() : null;
-        }
-
-    }
-
-    protected static class NullResolver implements
-            BeanIdResolver<String, Person> {
-
-        public String getIdForBean(Person bean) {
-            return null;
-        }
-
-    }
-
-    private Map<String, ClassName> nameToBean = new LinkedHashMap<String, ClassName>();
-
-    private BeanContainer<String, ClassName> getContainer() {
-        return new BeanContainer<String, ClassName>(ClassName.class);
-    }
-
-    @Override
-    public void setUp() {
-        nameToBean.clear();
-
-        for (int i = 0; i < sampleData.length; i++) {
-            ClassName className = new ClassName(sampleData[i], i);
-            nameToBean.put(sampleData[i], className);
-        }
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    protected void initializeContainer(Container container) {
-        BeanContainer<String, ClassName> beanItemContainer = (BeanContainer<String, ClassName>) container;
-
-        beanItemContainer.removeAllItems();
-
-        for (Entry<String, ClassName> entry : nameToBean.entrySet()) {
-            beanItemContainer.addItem(entry.getKey(), entry.getValue());
-        }
-    }
-
-    @Override
-    protected boolean isFilteredOutItemNull() {
-        return false;
-    }
-
-    public void testBasicOperations() {
-        testBasicContainerOperations(getContainer());
-    }
-
-    public void testFiltering() {
-        testContainerFiltering(getContainer());
-    }
-
-    public void testSorting() {
-        testContainerSorting(getContainer());
-    }
-
-    public void testSortingAndFiltering() {
-        testContainerSortingAndFiltering(getContainer());
-    }
-
-    // duplicated from parent class and modified - adding items to
-    // BeanContainer differs from other containers
-    public void testContainerOrdered() {
-        BeanContainer<String, String> container = new BeanContainer<String, String>(
-                String.class);
-
-        String id = "test1";
-
-        Item item = container.addItem(id, "value");
-        assertNotNull(item);
-
-        assertEquals(id, container.firstItemId());
-        assertEquals(id, container.lastItemId());
-
-        // isFirstId
-        assertTrue(container.isFirstId(id));
-        assertTrue(container.isFirstId(container.firstItemId()));
-        // isLastId
-        assertTrue(container.isLastId(id));
-        assertTrue(container.isLastId(container.lastItemId()));
-
-        // Add a new item before the first
-        // addItemAfter
-        String newFirstId = "newFirst";
-        item = container.addItemAfter(null, newFirstId, "newFirstValue");
-        assertNotNull(item);
-        assertNotNull(container.getItem(newFirstId));
-
-        // isFirstId
-        assertTrue(container.isFirstId(newFirstId));
-        assertTrue(container.isFirstId(container.firstItemId()));
-        // isLastId
-        assertTrue(container.isLastId(id));
-        assertTrue(container.isLastId(container.lastItemId()));
-
-        // nextItemId
-        assertEquals(id, container.nextItemId(newFirstId));
-        assertNull(container.nextItemId(id));
-        assertNull(container.nextItemId("not-in-container"));
-
-        // prevItemId
-        assertEquals(newFirstId, container.prevItemId(id));
-        assertNull(container.prevItemId(newFirstId));
-        assertNull(container.prevItemId("not-in-container"));
-
-        // addItemAfter(IDTYPE, IDTYPE, BT)
-        String newSecondItemId = "newSecond";
-        item = container.addItemAfter(newFirstId, newSecondItemId,
-                "newSecondValue");
-        // order is now: newFirstId, newSecondItemId, id
-        assertNotNull(item);
-        assertNotNull(container.getItem(newSecondItemId));
-        assertEquals(id, container.nextItemId(newSecondItemId));
-        assertEquals(newFirstId, container.prevItemId(newSecondItemId));
-
-        // addItemAfter(IDTYPE, IDTYPE, BT)
-        String fourthId = "id of the fourth item";
-        Item fourth = container.addItemAfter(newFirstId, fourthId,
-                "fourthValue");
-        // order is now: newFirstId, fourthId, newSecondItemId, id
-        assertNotNull(fourth);
-        assertEquals(fourth, container.getItem(fourthId));
-        assertEquals(newSecondItemId, container.nextItemId(fourthId));
-        assertEquals(newFirstId, container.prevItemId(fourthId));
-
-        // addItemAfter(IDTYPE, IDTYPE, BT)
-        String fifthId = "fifth";
-        Item fifth = container.addItemAfter(null, fifthId, "fifthValue");
-        // order is now: fifthId, newFirstId, fourthId, newSecondItemId, id
-        assertNotNull(fifth);
-        assertEquals(fifth, container.getItem(fifthId));
-        assertEquals(newFirstId, container.nextItemId(fifthId));
-        assertNull(container.prevItemId(fifthId));
-
-    }
-
-    // TODO test Container.Indexed interface operation - testContainerIndexed()?
-
-    public void testAddItemAt() {
-        BeanContainer<String, String> container = new BeanContainer<String, String>(
-                String.class);
-
-        container.addItem("id1", "value1");
-        // id1
-        container.addItemAt(0, "id2", "value2");
-        // id2, id1
-        container.addItemAt(1, "id3", "value3");
-        // id2, id3, id1
-        container.addItemAt(container.size(), "id4", "value4");
-        // id2, id3, id1, id4
-
-        assertNull(container.addItemAt(-1, "id5", "value5"));
-        assertNull(container.addItemAt(container.size() + 1, "id6", "value6"));
-
-        assertEquals(4, container.size());
-        assertEquals("id2", container.getIdByIndex(0));
-        assertEquals("id3", container.getIdByIndex(1));
-        assertEquals("id1", container.getIdByIndex(2));
-        assertEquals("id4", container.getIdByIndex(3));
-    }
-
-    public void testUnsupportedMethods() {
-        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
-                Person.class);
-        container.addItem("John", new Person("John"));
-
-        try {
-            container.addItem();
-            Assert.fail();
-        } catch (UnsupportedOperationException e) {
-            // should get exception
-        }
-
-        try {
-            container.addItem(null);
-            Assert.fail();
-        } catch (UnsupportedOperationException e) {
-            // should get exception
-        }
-
-        try {
-            container.addItemAfter(null, null);
-            Assert.fail();
-        } catch (UnsupportedOperationException e) {
-            // should get exception
-        }
-
-        try {
-            container.addItemAfter(new Person("Jane"));
-            Assert.fail();
-        } catch (UnsupportedOperationException e) {
-            // should get exception
-        }
-
-        try {
-            container.addItemAt(0);
-            Assert.fail();
-        } catch (UnsupportedOperationException e) {
-            // should get exception
-        }
-
-        try {
-            container.addItemAt(0, new Person("Jane"));
-            Assert.fail();
-        } catch (UnsupportedOperationException e) {
-            // should get exception
-        }
-
-        try {
-            container.addContainerProperty("lastName", String.class, "");
-            Assert.fail();
-        } catch (UnsupportedOperationException e) {
-            // should get exception
-        }
-
-        assertEquals(1, container.size());
-    }
-
-    public void testRemoveContainerProperty() {
-        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
-                Person.class);
-        container.setBeanIdResolver(new PersonNameResolver());
-        container.addBean(new Person("John"));
-
-        Assert.assertEquals("John",
-                container.getContainerProperty("John", "name").getValue());
-        Assert.assertTrue(container.removeContainerProperty("name"));
-        Assert.assertNull(container.getContainerProperty("John", "name"));
-
-        Assert.assertNotNull(container.getItem("John"));
-        // property removed also from item
-        Assert.assertNull(container.getItem("John").getItemProperty("name"));
-    }
-
-    public void testAddNullBeans() {
-        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
-                Person.class);
-
-        assertNull(container.addItem("id1", null));
-        assertNull(container.addItemAfter(null, "id2", null));
-        assertNull(container.addItemAt(0, "id3", null));
-
-        assertEquals(0, container.size());
-    }
-
-    public void testAddNullId() {
-        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
-                Person.class);
-
-        Person john = new Person("John");
-
-        assertNull(container.addItem(null, john));
-        assertNull(container.addItemAfter(null, null, john));
-        assertNull(container.addItemAt(0, null, john));
-
-        assertEquals(0, container.size());
-    }
-
-    public void testEmptyContainer() {
-        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
-                Person.class);
-
-        assertNull(container.firstItemId());
-        assertNull(container.lastItemId());
-
-        assertEquals(0, container.size());
-
-        // could test more about empty container
-    }
-
-    public void testAddBeanWithoutResolver() {
-        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
-                Person.class);
-
-        try {
-            container.addBean(new Person("John"));
-            Assert.fail();
-        } catch (IllegalStateException e) {
-            // should get exception
-        }
-        try {
-            container.addBeanAfter(null, new Person("Jane"));
-            Assert.fail();
-        } catch (IllegalStateException e) {
-            // should get exception
-        }
-        try {
-            container.addBeanAt(0, new Person("Jack"));
-            Assert.fail();
-        } catch (IllegalStateException e) {
-            // should get exception
-        }
-        try {
-            container
-                    .addAll(Arrays.asList(new Person[] { new Person("Jack") }));
-            Assert.fail();
-        } catch (IllegalStateException e) {
-            // should get exception
-        }
-
-        assertEquals(0, container.size());
-    }
-
-    public void testAddBeanWithNullResolver() {
-        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
-                Person.class);
-        // resolver that returns null as item id
-        container.setBeanIdResolver(new NullResolver());
-
-        try {
-            container.addBean(new Person("John"));
-            Assert.fail();
-        } catch (IllegalArgumentException e) {
-            // should get exception
-        }
-        try {
-            container.addBeanAfter(null, new Person("Jane"));
-            Assert.fail();
-        } catch (IllegalArgumentException e) {
-            // should get exception
-        }
-        try {
-            container.addBeanAt(0, new Person("Jack"));
-            Assert.fail();
-        } catch (IllegalArgumentException e) {
-            // should get exception
-        }
-
-        assertEquals(0, container.size());
-    }
-
-    public void testAddBeanWithResolver() {
-        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
-                Person.class);
-        container.setBeanIdResolver(new PersonNameResolver());
-
-        assertNotNull(container.addBean(new Person("John")));
-        assertNotNull(container.addBeanAfter(null, new Person("Jane")));
-        assertNotNull(container.addBeanAt(0, new Person("Jack")));
-
-        container.addAll(Arrays.asList(new Person[] { new Person("Jill"),
-                new Person("Joe") }));
-
-        assertTrue(container.containsId("John"));
-        assertTrue(container.containsId("Jane"));
-        assertTrue(container.containsId("Jack"));
-        assertTrue(container.containsId("Jill"));
-        assertTrue(container.containsId("Joe"));
-        assertEquals(3, container.indexOfId("Jill"));
-        assertEquals(4, container.indexOfId("Joe"));
-        assertEquals(5, container.size());
-    }
-
-    public void testAddNullBeansWithResolver() {
-        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
-                Person.class);
-        container.setBeanIdResolver(new PersonNameResolver());
-
-        assertNull(container.addBean(null));
-        assertNull(container.addBeanAfter(null, null));
-        assertNull(container.addBeanAt(0, null));
-
-        assertEquals(0, container.size());
-    }
-
-    public void testAddBeanWithPropertyResolver() {
-        BeanContainer<String, Person> container = new BeanContainer<String, Person>(
-                Person.class);
-        container.setBeanIdProperty("name");
-
-        assertNotNull(container.addBean(new Person("John")));
-        assertNotNull(container.addBeanAfter(null, new Person("Jane")));
-        assertNotNull(container.addBeanAt(0, new Person("Jack")));
-
-        container.addAll(Arrays.asList(new Person[] { new Person("Jill"),
-                new Person("Joe") }));
-
-        assertTrue(container.containsId("John"));
-        assertTrue(container.containsId("Jane"));
-        assertTrue(container.containsId("Jack"));
-        assertTrue(container.containsId("Jill"));
-        assertTrue(container.containsId("Joe"));
-        assertEquals(3, container.indexOfId("Jill"));
-        assertEquals(4, container.indexOfId("Joe"));
-        assertEquals(5, container.size());
-    }
-
-    public void testAddNestedContainerProperty() {
-        BeanContainer<String, NestedMethodPropertyTest.Person> container = new BeanContainer<String, NestedMethodPropertyTest.Person>(
-                NestedMethodPropertyTest.Person.class);
-        container.setBeanIdProperty("name");
-
-        container.addBean(new NestedMethodPropertyTest.Person("John",
-                new NestedMethodPropertyTest.Address("Ruukinkatu 2-4", 20540)));
-
-        assertTrue(container.addNestedContainerProperty("address.street"));
-        assertEquals("Ruukinkatu 2-4",
-                container.getContainerProperty("John", "address.street")
-                        .getValue());
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/BeanItemContainerSortTest.java b/tests/src/com/vaadin/tests/server/container/BeanItemContainerSortTest.java
deleted file mode 100644
index 8c9654709b..0000000000
--- a/tests/src/com/vaadin/tests/server/container/BeanItemContainerSortTest.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package com.vaadin.tests.server.container;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import junit.framework.Assert;
-
-import org.junit.Test;
-
-import com.vaadin.data.util.BeanItemContainer;
-import com.vaadin.data.util.DefaultItemSorter;
-
-public class BeanItemContainerSortTest {
-    public class Person {
-        private String name;
-
-        public int getAge() {
-            return age;
-        }
-
-        public void setAge(int age) {
-            this.age = age;
-        }
-
-        private int age;
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public String getName() {
-            return name;
-        }
-    }
-
-    public class Parent extends Person {
-        private Set<Person> children = new HashSet<Person>();
-
-        public void setChildren(Set<Person> children) {
-            this.children = children;
-        }
-
-        public Set<Person> getChildren() {
-            return children;
-        }
-    }
-
-    String[] names = new String[] { "Antti", "Ville", "Sirkka", "Jaakko",
-            "Pekka", "John" };
-    int[] ages = new int[] { 10, 20, 50, 12, 64, 67 };
-    String[] sortedByAge = new String[] { names[0], names[3], names[1],
-            names[2], names[4], names[5] };
-
-    public BeanItemContainer<Person> getContainer() {
-        BeanItemContainer<Person> bc = new BeanItemContainer<Person>(
-                Person.class);
-        for (int i = 0; i < names.length; i++) {
-            Person p = new Person();
-            p.setName(names[i]);
-            p.setAge(ages[i]);
-            bc.addBean(p);
-        }
-        return bc;
-
-    }
-
-    public BeanItemContainer<Parent> getParentContainer() {
-        BeanItemContainer<Parent> bc = new BeanItemContainer<Parent>(
-                Parent.class);
-        for (int i = 0; i < names.length; i++) {
-            Parent p = new Parent();
-            p.setName(names[i]);
-            p.setAge(ages[i]);
-            bc.addBean(p);
-        }
-        return bc;
-    }
-
-    @Test
-    public void testSort() {
-        testSort(true);
-    }
-
-    public void testSort(boolean b) {
-        BeanItemContainer<Person> container = getContainer();
-        container.sort(new Object[] { "name" }, new boolean[] { b });
-
-        List<String> asList = Arrays.asList(names);
-        Collections.sort(asList);
-        if (!b) {
-            Collections.reverse(asList);
-        }
-
-        int i = 0;
-        for (String string : asList) {
-            Person idByIndex = container.getIdByIndex(i++);
-            Assert.assertTrue(container.containsId(idByIndex));
-            Assert.assertEquals(string, idByIndex.getName());
-        }
-    }
-
-    @Test
-    public void testReverseSort() {
-        testSort(false);
-    }
-
-    @Test
-    public void primitiveSorting() {
-        BeanItemContainer<Person> container = getContainer();
-        container.sort(new Object[] { "age" }, new boolean[] { true });
-
-        int i = 0;
-        for (String string : sortedByAge) {
-            Person idByIndex = container.getIdByIndex(i++);
-            Assert.assertTrue(container.containsId(idByIndex));
-            Assert.assertEquals(string, idByIndex.getName());
-        }
-    }
-
-    @Test
-    public void customSorting() {
-        BeanItemContainer<Person> container = getContainer();
-
-        // custom sorter using the reverse order
-        container.setItemSorter(new DefaultItemSorter() {
-            @Override
-            public int compare(Object o1, Object o2) {
-                return -super.compare(o1, o2);
-            }
-        });
-
-        container.sort(new Object[] { "age" }, new boolean[] { true });
-
-        int i = container.size() - 1;
-        for (String string : sortedByAge) {
-            Person idByIndex = container.getIdByIndex(i--);
-            Assert.assertTrue(container.containsId(idByIndex));
-            Assert.assertEquals(string, idByIndex.getName());
-        }
-    }
-
-    @Test
-    public void testGetSortableProperties() {
-        BeanItemContainer<Person> container = getContainer();
-
-        Collection<?> sortablePropertyIds = container
-                .getSortableContainerPropertyIds();
-        Assert.assertEquals(2, sortablePropertyIds.size());
-        Assert.assertTrue(sortablePropertyIds.contains("name"));
-        Assert.assertTrue(sortablePropertyIds.contains("age"));
-    }
-
-    @Test
-    public void testGetNonSortableProperties() {
-        BeanItemContainer<Parent> container = getParentContainer();
-
-        Assert.assertEquals(3, container.getContainerPropertyIds().size());
-
-        Collection<?> sortablePropertyIds = container
-                .getSortableContainerPropertyIds();
-        Assert.assertEquals(2, sortablePropertyIds.size());
-        Assert.assertTrue(sortablePropertyIds.contains("name"));
-        Assert.assertTrue(sortablePropertyIds.contains("age"));
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/BeanItemContainerTest.java b/tests/src/com/vaadin/tests/server/container/BeanItemContainerTest.java
deleted file mode 100644
index 09062fa138..0000000000
--- a/tests/src/com/vaadin/tests/server/container/BeanItemContainerTest.java
+++ /dev/null
@@ -1,718 +0,0 @@
-package com.vaadin.tests.server.container;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import junit.framework.Assert;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.BeanItemContainer;
-
-/**
- * Test basic functionality of BeanItemContainer.
- * 
- * Most sorting related tests are in {@link BeanItemContainerSortTest}.
- */
-public class BeanItemContainerTest extends AbstractBeanContainerTest {
-
-    // basics from the common container test
-
-    private Map<String, ClassName> nameToBean = new LinkedHashMap<String, ClassName>();
-
-    private BeanItemContainer<ClassName> getContainer() {
-        return new BeanItemContainer<ClassName>(ClassName.class);
-    }
-
-    @Override
-    public void setUp() {
-        nameToBean.clear();
-
-        for (int i = 0; i < sampleData.length; i++) {
-            ClassName className = new ClassName(sampleData[i], i);
-            nameToBean.put(sampleData[i], className);
-        }
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    protected void initializeContainer(Container container) {
-        BeanItemContainer<ClassName> beanItemContainer = (BeanItemContainer<ClassName>) container;
-
-        beanItemContainer.removeAllItems();
-
-        Iterator<ClassName> it = nameToBean.values().iterator();
-        while (it.hasNext()) {
-            beanItemContainer.addBean(it.next());
-        }
-    }
-
-    @Override
-    protected void validateContainer(Container container,
-            Object expectedFirstItemId, Object expectedLastItemId,
-            Object itemIdInSet, Object itemIdNotInSet,
-            boolean checkGetItemNull, int expectedSize) {
-        Object notInSet = nameToBean.get(itemIdNotInSet);
-        if (notInSet == null && itemIdNotInSet != null) {
-            notInSet = new ClassName(String.valueOf(itemIdNotInSet), 9999);
-        }
-        super.validateContainer(container, nameToBean.get(expectedFirstItemId),
-                nameToBean.get(expectedLastItemId),
-                nameToBean.get(itemIdInSet), notInSet, checkGetItemNull,
-                expectedSize);
-    }
-
-    @Override
-    protected boolean isFilteredOutItemNull() {
-        return false;
-    }
-
-    public void testBasicOperations() {
-        testBasicContainerOperations(getContainer());
-    }
-
-    public void testFiltering() {
-        testContainerFiltering(getContainer());
-    }
-
-    public void testSorting() {
-        testContainerSorting(getContainer());
-    }
-
-    public void testSortingAndFiltering() {
-        testContainerSortingAndFiltering(getContainer());
-    }
-
-    // duplicated from parent class and modified - adding items to
-    // BeanItemContainer differs from other containers
-    public void testContainerOrdered() {
-        BeanItemContainer<String> container = new BeanItemContainer<String>(
-                String.class);
-
-        String id = "test1";
-
-        Item item = container.addBean(id);
-        assertNotNull(item);
-
-        assertEquals(id, container.firstItemId());
-        assertEquals(id, container.lastItemId());
-
-        // isFirstId
-        assertTrue(container.isFirstId(id));
-        assertTrue(container.isFirstId(container.firstItemId()));
-        // isLastId
-        assertTrue(container.isLastId(id));
-        assertTrue(container.isLastId(container.lastItemId()));
-
-        // Add a new item before the first
-        // addItemAfter
-        String newFirstId = "newFirst";
-        item = container.addItemAfter(null, newFirstId);
-        assertNotNull(item);
-        assertNotNull(container.getItem(newFirstId));
-
-        // isFirstId
-        assertTrue(container.isFirstId(newFirstId));
-        assertTrue(container.isFirstId(container.firstItemId()));
-        // isLastId
-        assertTrue(container.isLastId(id));
-        assertTrue(container.isLastId(container.lastItemId()));
-
-        // nextItemId
-        assertEquals(id, container.nextItemId(newFirstId));
-        assertNull(container.nextItemId(id));
-        assertNull(container.nextItemId("not-in-container"));
-
-        // prevItemId
-        assertEquals(newFirstId, container.prevItemId(id));
-        assertNull(container.prevItemId(newFirstId));
-        assertNull(container.prevItemId("not-in-container"));
-
-        // addItemAfter(Object)
-        String newSecondItemId = "newSecond";
-        item = container.addItemAfter(newFirstId, newSecondItemId);
-        // order is now: newFirstId, newSecondItemId, id
-        assertNotNull(item);
-        assertNotNull(container.getItem(newSecondItemId));
-        assertEquals(id, container.nextItemId(newSecondItemId));
-        assertEquals(newFirstId, container.prevItemId(newSecondItemId));
-
-        // addItemAfter(Object,Object)
-        String fourthId = "id of the fourth item";
-        Item fourth = container.addItemAfter(newFirstId, fourthId);
-        // order is now: newFirstId, fourthId, newSecondItemId, id
-        assertNotNull(fourth);
-        assertEquals(fourth, container.getItem(fourthId));
-        assertEquals(newSecondItemId, container.nextItemId(fourthId));
-        assertEquals(newFirstId, container.prevItemId(fourthId));
-
-        // addItemAfter(Object,Object)
-        Object fifthId = "fifth";
-        Item fifth = container.addItemAfter(null, fifthId);
-        // order is now: fifthId, newFirstId, fourthId, newSecondItemId, id
-        assertNotNull(fifth);
-        assertEquals(fifth, container.getItem(fifthId));
-        assertEquals(newFirstId, container.nextItemId(fifthId));
-        assertNull(container.prevItemId(fifthId));
-
-    }
-
-    public void testContainerIndexed() {
-        testContainerIndexed(getContainer(), nameToBean.get(sampleData[2]), 2,
-                false, new ClassName("org.vaadin.test.Test", 8888), true);
-    }
-
-    @SuppressWarnings("deprecation")
-    public void testCollectionConstructors() {
-        List<ClassName> classNames = new ArrayList<ClassName>();
-        classNames.add(new ClassName("a.b.c.Def", 1));
-        classNames.add(new ClassName("a.b.c.Fed", 2));
-        classNames.add(new ClassName("b.c.d.Def", 3));
-
-        // note that this constructor is problematic, users should use the
-        // version that
-        // takes the bean class as a parameter
-        BeanItemContainer<ClassName> container = new BeanItemContainer<ClassName>(
-                classNames);
-
-        Assert.assertEquals(3, container.size());
-        Assert.assertEquals(classNames.get(0), container.firstItemId());
-        Assert.assertEquals(classNames.get(1), container.getIdByIndex(1));
-        Assert.assertEquals(classNames.get(2), container.lastItemId());
-
-        BeanItemContainer<ClassName> container2 = new BeanItemContainer<ClassName>(
-                ClassName.class, classNames);
-
-        Assert.assertEquals(3, container2.size());
-        Assert.assertEquals(classNames.get(0), container2.firstItemId());
-        Assert.assertEquals(classNames.get(1), container2.getIdByIndex(1));
-        Assert.assertEquals(classNames.get(2), container2.lastItemId());
-    }
-
-    // this only applies to the collection constructor with no type parameter
-    @SuppressWarnings("deprecation")
-    public void testEmptyCollectionConstructor() {
-        try {
-            new BeanItemContainer<ClassName>((Collection<ClassName>) null);
-            Assert.fail("Initializing BeanItemContainer from a null collection should not work!");
-        } catch (IllegalArgumentException e) {
-            // success
-        }
-        try {
-            new BeanItemContainer<ClassName>(new ArrayList<ClassName>());
-            Assert.fail("Initializing BeanItemContainer from an empty collection should not work!");
-        } catch (IllegalArgumentException e) {
-            // success
-        }
-    }
-
-    public void testItemSetChangeListeners() {
-        BeanItemContainer<ClassName> container = getContainer();
-        ItemSetChangeCounter counter = new ItemSetChangeCounter();
-        container.addListener(counter);
-
-        ClassName cn1 = new ClassName("com.example.Test", 1111);
-        ClassName cn2 = new ClassName("com.example.Test2", 2222);
-
-        initializeContainer(container);
-        counter.reset();
-        container.addBean(cn1);
-        counter.assertOnce();
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItem(cn1);
-        counter.assertOnce();
-        // no notification if already in container
-        container.addItem(cn1);
-        counter.assertNone();
-        container.addItem(cn2);
-        counter.assertOnce();
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAfter(null, cn1);
-        counter.assertOnce();
-        Assert.assertEquals(
-                "com.example.Test",
-                container.getContainerProperty(container.firstItemId(),
-                        FULLY_QUALIFIED_NAME).getValue());
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAfter(container.firstItemId(), cn1);
-        counter.assertOnce();
-        Assert.assertEquals(
-                "com.example.Test",
-                container.getContainerProperty(container.getIdByIndex(1),
-                        FULLY_QUALIFIED_NAME).getValue());
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAfter(container.lastItemId(), cn1);
-        counter.assertOnce();
-        Assert.assertEquals(
-                "com.example.Test",
-                container.getContainerProperty(container.lastItemId(),
-                        FULLY_QUALIFIED_NAME).getValue());
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAt(0, cn1);
-        counter.assertOnce();
-        Assert.assertEquals(
-                "com.example.Test",
-                container.getContainerProperty(container.firstItemId(),
-                        FULLY_QUALIFIED_NAME).getValue());
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAt(1, cn1);
-        counter.assertOnce();
-        Assert.assertEquals(
-                "com.example.Test",
-                container.getContainerProperty(container.getIdByIndex(1),
-                        FULLY_QUALIFIED_NAME).getValue());
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAt(container.size(), cn1);
-        counter.assertOnce();
-        Assert.assertEquals(
-                "com.example.Test",
-                container.getContainerProperty(container.lastItemId(),
-                        FULLY_QUALIFIED_NAME).getValue());
-
-        initializeContainer(container);
-        counter.reset();
-        container.removeItem(nameToBean.get(sampleData[0]));
-        counter.assertOnce();
-
-        initializeContainer(container);
-        counter.reset();
-        // no notification for removing a non-existing item
-        container.removeItem(cn1);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        container.removeAllItems();
-        counter.assertOnce();
-        // already empty
-        container.removeAllItems();
-        counter.assertNone();
-
-    }
-
-    public void testItemSetChangeListenersFiltering() {
-        BeanItemContainer<ClassName> container = getContainer();
-        ItemSetChangeCounter counter = new ItemSetChangeCounter();
-        container.addListener(counter);
-
-        ClassName cn1 = new ClassName("com.example.Test", 1111);
-        ClassName cn2 = new ClassName("com.example.Test2", 2222);
-        ClassName other = new ClassName("com.example.Other", 3333);
-
-        // simply adding or removing container filters should cause event
-        // (content changes)
-
-        initializeContainer(container);
-        counter.reset();
-        container.addContainerFilter(SIMPLE_NAME, "a", true, false);
-        counter.assertOnce();
-        container.removeContainerFilters(SIMPLE_NAME);
-        counter.assertOnce();
-
-        initializeContainer(container);
-        counter.reset();
-        container.addContainerFilter(SIMPLE_NAME, "a", true, false);
-        counter.assertOnce();
-        container.removeAllContainerFilters();
-        counter.assertOnce();
-
-        // perform operations while filtering container
-
-        initializeContainer(container);
-        counter.reset();
-        container.addContainerFilter(FULLY_QUALIFIED_NAME, "Test", true, false);
-        counter.assertOnce();
-
-        // passes filter
-        container.addBean(cn1);
-        counter.assertOnce();
-
-        // passes filter but already in the container
-        container.addBean(cn1);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-
-        // passes filter
-        container.addItem(cn1);
-        counter.assertOnce();
-        // already in the container
-        container.addItem(cn1);
-        counter.assertNone();
-        container.addItem(cn2);
-        counter.assertOnce();
-        // does not pass filter
-        container.addItem(other);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAfter(null, cn1);
-        counter.assertOnce();
-        Assert.assertEquals(
-                "com.example.Test",
-                container.getContainerProperty(container.firstItemId(),
-                        FULLY_QUALIFIED_NAME).getValue());
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAfter(container.firstItemId(), cn1);
-        counter.assertOnce();
-        Assert.assertEquals(
-                "com.example.Test",
-                container.getContainerProperty(container.getIdByIndex(1),
-                        FULLY_QUALIFIED_NAME).getValue());
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAfter(container.lastItemId(), cn1);
-        counter.assertOnce();
-        Assert.assertEquals(
-                "com.example.Test",
-                container.getContainerProperty(container.lastItemId(),
-                        FULLY_QUALIFIED_NAME).getValue());
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAt(0, cn1);
-        counter.assertOnce();
-        Assert.assertEquals(
-                "com.example.Test",
-                container.getContainerProperty(container.firstItemId(),
-                        FULLY_QUALIFIED_NAME).getValue());
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAt(1, cn1);
-        counter.assertOnce();
-        Assert.assertEquals(
-                "com.example.Test",
-                container.getContainerProperty(container.getIdByIndex(1),
-                        FULLY_QUALIFIED_NAME).getValue());
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAt(container.size(), cn1);
-        counter.assertOnce();
-        Assert.assertEquals(
-                "com.example.Test",
-                container.getContainerProperty(container.lastItemId(),
-                        FULLY_QUALIFIED_NAME).getValue());
-
-        // does not pass filter
-        // note: testAddRemoveWhileFiltering() checks position for these after
-        // removing filter etc, here concentrating on listeners
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAfter(null, other);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAfter(container.firstItemId(), other);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAfter(container.lastItemId(), other);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAt(0, other);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAt(1, other);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAt(container.size(), other);
-        counter.assertNone();
-
-        // passes filter
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItem(cn1);
-        counter.assertOnce();
-        container.removeItem(cn1);
-        counter.assertOnce();
-
-        // does not pass filter
-
-        initializeContainer(container);
-        counter.reset();
-        // not visible
-        container.removeItem(nameToBean.get(sampleData[0]));
-        counter.assertNone();
-
-        container.removeAllItems();
-        counter.assertOnce();
-        // no visible items
-        container.removeAllItems();
-        counter.assertNone();
-    }
-
-    public void testAddRemoveWhileFiltering() {
-        BeanItemContainer<Person> container = new BeanItemContainer<Person>(
-                Person.class);
-
-        Person john = new Person("John");
-        Person jane = new Person("Jane");
-        Person matthew = new Person("Matthew");
-
-        Person jack = new Person("Jack");
-        Person michael = new Person("Michael");
-        Person william = new Person("William");
-        Person julia = new Person("Julia");
-        Person george = new Person("George");
-        Person mark = new Person("Mark");
-
-        container.addBean(john);
-        container.addBean(jane);
-        container.addBean(matthew);
-
-        assertEquals(3, container.size());
-        // john, jane, matthew
-
-        container.addContainerFilter("name", "j", true, true);
-
-        assertEquals(2, container.size());
-        // john, jane, (matthew)
-
-        // add a bean that passes the filter
-        container.addBean(jack);
-        assertEquals(3, container.size());
-        assertEquals(jack, container.lastItemId());
-        // john, jane, (matthew), jack
-
-        // add beans that do not pass the filter
-        container.addBean(michael);
-        // john, jane, (matthew), jack, (michael)
-        container.addItemAfter(null, william);
-        // (william), john, jane, (matthew), jack, (michael)
-
-        // add after an item that is shown
-        container.addItemAfter(john, george);
-        // (william), john, (george), jane, (matthew), jack, (michael)
-        assertEquals(3, container.size());
-        assertEquals(john, container.firstItemId());
-
-        // add after an item that is not shown does nothing
-        container.addItemAfter(william, julia);
-        // (william), john, (george), jane, (matthew), jack, (michael)
-        assertEquals(3, container.size());
-        assertEquals(john, container.firstItemId());
-
-        container.addItemAt(1, julia);
-        // (william), john, julia, (george), jane, (matthew), jack, (michael)
-
-        container.addItemAt(2, mark);
-        // (william), john, julia, (mark), (george), jane, (matthew), jack,
-        // (michael)
-
-        container.removeItem(matthew);
-        // (william), john, julia, (mark), (george), jane, jack, (michael)
-
-        assertEquals(4, container.size());
-        assertEquals(jack, container.lastItemId());
-
-        container.removeContainerFilters("name");
-
-        assertEquals(8, container.size());
-        assertEquals(william, container.firstItemId());
-        assertEquals(john, container.nextItemId(william));
-        assertEquals(julia, container.nextItemId(john));
-        assertEquals(mark, container.nextItemId(julia));
-        assertEquals(george, container.nextItemId(mark));
-        assertEquals(jane, container.nextItemId(george));
-        assertEquals(jack, container.nextItemId(jane));
-        assertEquals(michael, container.lastItemId());
-    }
-
-    public void testRefilterOnPropertyModification() {
-        BeanItemContainer<Person> container = new BeanItemContainer<Person>(
-                Person.class);
-
-        Person john = new Person("John");
-        Person jane = new Person("Jane");
-        Person matthew = new Person("Matthew");
-
-        container.addBean(john);
-        container.addBean(jane);
-        container.addBean(matthew);
-
-        assertEquals(3, container.size());
-        // john, jane, matthew
-
-        container.addContainerFilter("name", "j", true, true);
-
-        assertEquals(2, container.size());
-        // john, jane, (matthew)
-
-        // #6053 currently, modification of an item that is not visible does not
-        // trigger refiltering - should it?
-        // matthew.setName("Julia");
-        // assertEquals(3, container.size());
-        // john, jane, julia
-
-        john.setName("Mark");
-        assertEquals(2, container.size());
-        // (mark), jane, julia
-
-        container.removeAllContainerFilters();
-
-        assertEquals(3, container.size());
-    }
-
-    public void testAddAll() {
-        BeanItemContainer<Person> container = new BeanItemContainer<Person>(
-                Person.class);
-
-        Person john = new Person("John");
-        Person jane = new Person("Jane");
-        Person matthew = new Person("Matthew");
-
-        container.addBean(john);
-        container.addBean(jane);
-        container.addBean(matthew);
-
-        assertEquals(3, container.size());
-        // john, jane, matthew
-
-        Person jack = new Person("Jack");
-        Person michael = new Person("Michael");
-
-        // addAll
-        container.addAll(Arrays.asList(jack, michael));
-        // john, jane, matthew, jack, michael
-
-        assertEquals(5, container.size());
-        assertEquals(jane, container.nextItemId(john));
-        assertEquals(matthew, container.nextItemId(jane));
-        assertEquals(jack, container.nextItemId(matthew));
-        assertEquals(michael, container.nextItemId(jack));
-    }
-
-    public void testUnsupportedMethods() {
-        BeanItemContainer<Person> container = new BeanItemContainer<Person>(
-                Person.class);
-        container.addBean(new Person("John"));
-
-        try {
-            container.addItem();
-            Assert.fail();
-        } catch (UnsupportedOperationException e) {
-            // should get exception
-        }
-
-        try {
-            container.addItemAfter(new Person("Jane"));
-            Assert.fail();
-        } catch (UnsupportedOperationException e) {
-            // should get exception
-        }
-
-        try {
-            container.addItemAt(0);
-            Assert.fail();
-        } catch (UnsupportedOperationException e) {
-            // should get exception
-        }
-
-        try {
-            container.addContainerProperty("lastName", String.class, "");
-            Assert.fail();
-        } catch (UnsupportedOperationException e) {
-            // should get exception
-        }
-
-        assertEquals(1, container.size());
-    }
-
-    public void testRemoveContainerProperty() {
-        BeanItemContainer<Person> container = new BeanItemContainer<Person>(
-                Person.class);
-        Person john = new Person("John");
-        container.addBean(john);
-
-        Assert.assertEquals("John", container
-                .getContainerProperty(john, "name").getValue());
-        Assert.assertTrue(container.removeContainerProperty("name"));
-        Assert.assertNull(container.getContainerProperty(john, "name"));
-
-        Assert.assertNotNull(container.getItem(john));
-        // property removed also from item
-        Assert.assertNull(container.getItem(john).getItemProperty("name"));
-    }
-
-    public void testAddNullBean() {
-        BeanItemContainer<Person> container = new BeanItemContainer<Person>(
-                Person.class);
-        Person john = new Person("John");
-        container.addBean(john);
-
-        assertNull(container.addItem(null));
-        assertNull(container.addItemAfter(null, null));
-        assertNull(container.addItemAfter(john, null));
-        assertNull(container.addItemAt(0, null));
-
-        assertEquals(1, container.size());
-    }
-
-    public void testBeanIdResolver() {
-        BeanItemContainer<Person> container = new BeanItemContainer<Person>(
-                Person.class);
-        Person john = new Person("John");
-
-        assertSame(john, container.getBeanIdResolver().getIdForBean(john));
-    }
-
-    public void testNullBeanClass() {
-        try {
-            new BeanItemContainer<Object>((Class<Object>) null);
-        } catch (IllegalArgumentException e) {
-            // should get exception
-        }
-    }
-
-    public void testAddNestedContainerProperty() {
-        BeanItemContainer<NestedMethodPropertyTest.Person> container = new BeanItemContainer<NestedMethodPropertyTest.Person>(
-                NestedMethodPropertyTest.Person.class);
-
-        NestedMethodPropertyTest.Person john = new NestedMethodPropertyTest.Person(
-                "John", new NestedMethodPropertyTest.Address("Ruukinkatu 2-4",
-                        20540));
-        container.addBean(john);
-
-        assertTrue(container.addNestedContainerProperty("address.street"));
-        assertEquals("Ruukinkatu 2-4",
-                container.getContainerProperty(john, "address.street")
-                        .getValue());
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/BeanItemTest.java b/tests/src/com/vaadin/tests/server/container/BeanItemTest.java
deleted file mode 100644
index 70c419fbbd..0000000000
--- a/tests/src/com/vaadin/tests/server/container/BeanItemTest.java
+++ /dev/null
@@ -1,337 +0,0 @@
-package com.vaadin.tests.server.container;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import com.vaadin.data.util.BeanItem;
-import com.vaadin.data.util.MethodProperty;
-import com.vaadin.data.util.MethodPropertyDescriptor;
-import com.vaadin.data.util.VaadinPropertyDescriptor;
-
-/**
- * Test BeanItem specific features.
- * 
- * Only public API is tested, not the methods with package visibility.
- * 
- * See also {@link PropertySetItemTest}, which tests the base class.
- */
-public class BeanItemTest extends TestCase {
-
-    @SuppressWarnings("unused")
-    protected static class MySuperClass {
-        private int superPrivate = 1;
-        private int superPrivate2 = 2;
-        protected double superProtected = 3.0;
-        private double superProtected2 = 4.0;
-        public boolean superPublic = true;
-        private boolean superPublic2 = true;
-
-        public int getSuperPrivate() {
-            return superPrivate;
-        }
-
-        public void setSuperPrivate(int superPrivate) {
-            this.superPrivate = superPrivate;
-        }
-
-        public double getSuperProtected() {
-            return superProtected;
-        }
-
-        public void setSuperProtected(double superProtected) {
-            this.superProtected = superProtected;
-        }
-
-        public boolean isSuperPublic() {
-            return superPublic;
-        }
-
-        public void setSuperPublic(boolean superPublic) {
-            this.superPublic = superPublic;
-        }
-
-    }
-
-    protected static class MyClass extends MySuperClass {
-        private String name;
-        public int value = 123;
-
-        public MyClass(String name) {
-            this.name = name;
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public void setNoField(String name) {
-        }
-
-        public String getNoField() {
-            return "no field backing this setter";
-        }
-
-        public String getName2() {
-            return name;
-        }
-    }
-
-    protected static class MyClass2 extends MyClass {
-        public MyClass2(String name) {
-            super(name);
-        }
-
-        @Override
-        public void setName(String name) {
-            super.setName(name + "2");
-        }
-
-        @Override
-        public String getName() {
-            return super.getName() + "2";
-        }
-
-        @Override
-        public String getName2() {
-            return super.getName();
-        }
-
-        public void setName2(String name) {
-            super.setName(name);
-        }
-    }
-
-    protected static interface MySuperInterface {
-        public int getSuper1();
-
-        public void setSuper1(int i);
-
-        public int getOverride();
-    }
-
-    protected static interface MySuperInterface2 {
-        public int getSuper2();
-    }
-
-    protected static interface MySubInterface extends MySuperInterface,
-            MySuperInterface2 {
-        public int getSub();
-
-        public void setSub(int i);
-
-        public int getOverride();
-
-        public void setOverride(int i);
-    }
-
-    public void testGetProperties() {
-        BeanItem<MySuperClass> item = new BeanItem<MySuperClass>(
-                new MySuperClass());
-
-        Collection<?> itemPropertyIds = item.getItemPropertyIds();
-        Assert.assertEquals(3, itemPropertyIds.size());
-        Assert.assertTrue(itemPropertyIds.contains("superPrivate"));
-        Assert.assertTrue(itemPropertyIds.contains("superProtected"));
-        Assert.assertTrue(itemPropertyIds.contains("superPublic"));
-    }
-
-    public void testGetSuperClassProperties() {
-        BeanItem<MyClass> item = new BeanItem<MyClass>(new MyClass("bean1"));
-
-        Collection<?> itemPropertyIds = item.getItemPropertyIds();
-        Assert.assertEquals(6, itemPropertyIds.size());
-        Assert.assertTrue(itemPropertyIds.contains("superPrivate"));
-        Assert.assertTrue(itemPropertyIds.contains("superProtected"));
-        Assert.assertTrue(itemPropertyIds.contains("superPublic"));
-        Assert.assertTrue(itemPropertyIds.contains("name"));
-        Assert.assertTrue(itemPropertyIds.contains("noField"));
-        Assert.assertTrue(itemPropertyIds.contains("name2"));
-    }
-
-    public void testOverridingProperties() {
-        BeanItem<MyClass2> item = new BeanItem<MyClass2>(new MyClass2("bean2"));
-
-        Collection<?> itemPropertyIds = item.getItemPropertyIds();
-        Assert.assertEquals(6, itemPropertyIds.size());
-
-        Assert.assertTrue(MyClass2.class.equals(item.getBean().getClass()));
-
-        // check that name2 accessed via MyClass2, not MyClass
-        Assert.assertFalse(item.getItemProperty("name2").isReadOnly());
-    }
-
-    public void testGetInterfaceProperties() throws SecurityException,
-            NoSuchMethodException, IllegalArgumentException,
-            IllegalAccessException, InvocationTargetException {
-        Method method = BeanItem.class.getDeclaredMethod(
-                "getPropertyDescriptors", Class.class);
-        method.setAccessible(true);
-        LinkedHashMap<String, VaadinPropertyDescriptor<Class>> propertyDescriptors = (LinkedHashMap<String, VaadinPropertyDescriptor<Class>>) method
-                .invoke(null, MySuperInterface.class);
-
-        Assert.assertEquals(2, propertyDescriptors.size());
-        Assert.assertTrue(propertyDescriptors.containsKey("super1"));
-        Assert.assertTrue(propertyDescriptors.containsKey("override"));
-
-        MethodProperty<?> property = (MethodProperty<?>) propertyDescriptors
-                .get("override").createProperty(getClass());
-        Assert.assertTrue(property.isReadOnly());
-    }
-
-    public void testGetSuperInterfaceProperties() throws SecurityException,
-            NoSuchMethodException, IllegalArgumentException,
-            IllegalAccessException, InvocationTargetException {
-        Method method = BeanItem.class.getDeclaredMethod(
-                "getPropertyDescriptors", Class.class);
-        method.setAccessible(true);
-        LinkedHashMap<String, VaadinPropertyDescriptor<Class>> propertyDescriptors = (LinkedHashMap<String, VaadinPropertyDescriptor<Class>>) method
-                .invoke(null, MySubInterface.class);
-
-        Assert.assertEquals(4, propertyDescriptors.size());
-        Assert.assertTrue(propertyDescriptors.containsKey("sub"));
-        Assert.assertTrue(propertyDescriptors.containsKey("super1"));
-        Assert.assertTrue(propertyDescriptors.containsKey("super2"));
-        Assert.assertTrue(propertyDescriptors.containsKey("override"));
-
-        MethodProperty<?> property = (MethodProperty<?>) propertyDescriptors
-                .get("override").createProperty(getClass());
-        Assert.assertFalse(property.isReadOnly());
-    }
-
-    public void testPropertyExplicitOrder() {
-        Collection<String> ids = new ArrayList<String>();
-        ids.add("name");
-        ids.add("superPublic");
-        ids.add("name2");
-        ids.add("noField");
-
-        BeanItem<MyClass> item = new BeanItem<MyClass>(new MyClass("bean1"),
-                ids);
-
-        Iterator<?> it = item.getItemPropertyIds().iterator();
-        Assert.assertEquals("name", it.next());
-        Assert.assertEquals("superPublic", it.next());
-        Assert.assertEquals("name2", it.next());
-        Assert.assertEquals("noField", it.next());
-        Assert.assertFalse(it.hasNext());
-    }
-
-    public void testPropertyExplicitOrder2() {
-        BeanItem<MyClass> item = new BeanItem<MyClass>(new MyClass("bean1"),
-                new String[] { "name", "superPublic", "name2", "noField" });
-
-        Iterator<?> it = item.getItemPropertyIds().iterator();
-        Assert.assertEquals("name", it.next());
-        Assert.assertEquals("superPublic", it.next());
-        Assert.assertEquals("name2", it.next());
-        Assert.assertEquals("noField", it.next());
-        Assert.assertFalse(it.hasNext());
-    }
-
-    public void testPropertyBadPropertyName() {
-        Collection<String> ids = new ArrayList<String>();
-        ids.add("name3");
-        ids.add("name");
-
-        // currently silently ignores non-existent properties
-        BeanItem<MyClass> item = new BeanItem<MyClass>(new MyClass("bean1"),
-                ids);
-
-        Iterator<?> it = item.getItemPropertyIds().iterator();
-        Assert.assertEquals("name", it.next());
-        Assert.assertFalse(it.hasNext());
-    }
-
-    public void testRemoveProperty() {
-        BeanItem<MyClass> item = new BeanItem<MyClass>(new MyClass("bean1"));
-
-        Collection<?> itemPropertyIds = item.getItemPropertyIds();
-        Assert.assertEquals(6, itemPropertyIds.size());
-
-        item.removeItemProperty("name2");
-        Assert.assertEquals(5, itemPropertyIds.size());
-        Assert.assertFalse(itemPropertyIds.contains("name2"));
-    }
-
-    public void testRemoveSuperProperty() {
-        BeanItem<MyClass> item = new BeanItem<MyClass>(new MyClass("bean1"));
-
-        Collection<?> itemPropertyIds = item.getItemPropertyIds();
-        Assert.assertEquals(6, itemPropertyIds.size());
-
-        item.removeItemProperty("superPrivate");
-        Assert.assertEquals(5, itemPropertyIds.size());
-        Assert.assertFalse(itemPropertyIds.contains("superPrivate"));
-    }
-
-    public void testPropertyTypes() {
-        BeanItem<MyClass> item = new BeanItem<MyClass>(new MyClass("bean1"));
-
-        Assert.assertTrue(Integer.class.equals(item.getItemProperty(
-                "superPrivate").getType()));
-        Assert.assertTrue(Double.class.equals(item.getItemProperty(
-                "superProtected").getType()));
-        Assert.assertTrue(Boolean.class.equals(item.getItemProperty(
-                "superPublic").getType()));
-        Assert.assertTrue(String.class.equals(item.getItemProperty("name")
-                .getType()));
-    }
-
-    public void testPropertyReadOnly() {
-        BeanItem<MyClass> item = new BeanItem<MyClass>(new MyClass("bean1"));
-
-        Assert.assertFalse(item.getItemProperty("name").isReadOnly());
-        Assert.assertTrue(item.getItemProperty("name2").isReadOnly());
-    }
-
-    public void testCustomProperties() throws Exception {
-        LinkedHashMap<String, VaadinPropertyDescriptor<MyClass>> propertyDescriptors = new LinkedHashMap<String, VaadinPropertyDescriptor<MyClass>>();
-        propertyDescriptors.put(
-                "myname",
-                new MethodPropertyDescriptor<BeanItemTest.MyClass>("myname",
-                        MyClass.class, MyClass.class
-                                .getDeclaredMethod("getName"), MyClass.class
-                                .getDeclaredMethod("setName", String.class)));
-        MyClass instance = new MyClass("bean1");
-        Constructor<BeanItem> constructor = BeanItem.class
-                .getDeclaredConstructor(Object.class, Map.class);
-        constructor.setAccessible(true);
-        BeanItem<MyClass> item = constructor.newInstance(instance,
-                propertyDescriptors);
-
-        Assert.assertEquals(1, item.getItemPropertyIds().size());
-        Assert.assertEquals("bean1", item.getItemProperty("myname").getValue());
-    }
-
-    public void testAddRemoveProperty() throws Exception {
-        MethodPropertyDescriptor<BeanItemTest.MyClass> pd = new MethodPropertyDescriptor<BeanItemTest.MyClass>(
-                "myname", MyClass.class,
-                MyClass.class.getDeclaredMethod("getName"),
-                MyClass.class.getDeclaredMethod("setName", String.class));
-
-        BeanItem<MyClass> item = new BeanItem(new MyClass("bean1"));
-
-        Assert.assertEquals(6, item.getItemPropertyIds().size());
-        Assert.assertEquals(null, item.getItemProperty("myname"));
-
-        item.addItemProperty("myname", pd.createProperty(item.getBean()));
-        Assert.assertEquals(7, item.getItemPropertyIds().size());
-        Assert.assertEquals("bean1", item.getItemProperty("myname").getValue());
-        item.removeItemProperty("myname");
-        Assert.assertEquals(6, item.getItemPropertyIds().size());
-        Assert.assertEquals(null, item.getItemProperty("myname"));
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/NestedMethodPropertyTest.java b/tests/src/com/vaadin/tests/server/container/NestedMethodPropertyTest.java
deleted file mode 100644
index 80d5236919..0000000000
--- a/tests/src/com/vaadin/tests/server/container/NestedMethodPropertyTest.java
+++ /dev/null
@@ -1,326 +0,0 @@
-package com.vaadin.tests.server.container;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import com.vaadin.data.util.NestedMethodProperty;
-
-public class NestedMethodPropertyTest extends TestCase {
-
-    public static class Address implements Serializable {
-        private String street;
-        private int postalCodePrimitive;
-        private Integer postalCodeObject;
-
-        public Address(String street, int postalCode) {
-            this.street = street;
-            postalCodePrimitive = postalCode;
-            postalCodeObject = postalCode;
-        }
-
-        public void setStreet(String street) {
-            this.street = street;
-        }
-
-        public String getStreet() {
-            return street;
-        }
-
-        public void setPostalCodePrimitive(int postalCodePrimitive) {
-            this.postalCodePrimitive = postalCodePrimitive;
-        }
-
-        public int getPostalCodePrimitive() {
-            return postalCodePrimitive;
-        }
-
-        public void setPostalCodeObject(Integer postalCodeObject) {
-            this.postalCodeObject = postalCodeObject;
-        }
-
-        public Integer getPostalCodeObject() {
-            return postalCodeObject;
-        }
-
-        // read-only boolean property
-        public boolean isBoolean() {
-            return true;
-        }
-    }
-
-    public static class Person implements Serializable {
-        private String name;
-        private Address address;
-
-        public Person(String name, Address address) {
-            this.name = name;
-            this.address = address;
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public void setAddress(Address address) {
-            this.address = address;
-        }
-
-        public Address getAddress() {
-            return address;
-        }
-    }
-
-    public static class Team implements Serializable {
-        private String name;
-        private Person manager;
-
-        public Team(String name, Person manager) {
-            this.name = name;
-            this.manager = manager;
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public void setManager(Person manager) {
-            this.manager = manager;
-        }
-
-        public Person getManager() {
-            return manager;
-        }
-    }
-
-    private Address oldMill;
-    private Person joonas;
-    private Team vaadin;
-
-    @Override
-    public void setUp() {
-        oldMill = new Address("Ruukinkatu 2-4", 20540);
-        joonas = new Person("Joonas", oldMill);
-        vaadin = new Team("Vaadin", joonas);
-    }
-
-    @Override
-    public void tearDown() {
-        vaadin = null;
-        joonas = null;
-        oldMill = null;
-    }
-
-    public void testSingleLevelNestedSimpleProperty() {
-        NestedMethodProperty nameProperty = new NestedMethodProperty(vaadin,
-                "name");
-
-        Assert.assertEquals(String.class, nameProperty.getType());
-        Assert.assertEquals("Vaadin", nameProperty.getValue());
-    }
-
-    public void testSingleLevelNestedObjectProperty() {
-        NestedMethodProperty managerProperty = new NestedMethodProperty(vaadin,
-                "manager");
-
-        Assert.assertEquals(Person.class, managerProperty.getType());
-        Assert.assertEquals(joonas, managerProperty.getValue());
-    }
-
-    public void testMultiLevelNestedProperty() {
-        NestedMethodProperty managerNameProperty = new NestedMethodProperty(
-                vaadin, "manager.name");
-        NestedMethodProperty addressProperty = new NestedMethodProperty(vaadin,
-                "manager.address");
-        NestedMethodProperty streetProperty = new NestedMethodProperty(vaadin,
-                "manager.address.street");
-        NestedMethodProperty postalCodePrimitiveProperty = new NestedMethodProperty(
-                vaadin, "manager.address.postalCodePrimitive");
-        NestedMethodProperty postalCodeObjectProperty = new NestedMethodProperty(
-                vaadin, "manager.address.postalCodeObject");
-        NestedMethodProperty booleanProperty = new NestedMethodProperty(vaadin,
-                "manager.address.boolean");
-
-        Assert.assertEquals(String.class, managerNameProperty.getType());
-        Assert.assertEquals("Joonas", managerNameProperty.getValue());
-
-        Assert.assertEquals(Address.class, addressProperty.getType());
-        Assert.assertEquals(oldMill, addressProperty.getValue());
-
-        Assert.assertEquals(String.class, streetProperty.getType());
-        Assert.assertEquals("Ruukinkatu 2-4", streetProperty.getValue());
-
-        Assert.assertEquals(Integer.class,
-                postalCodePrimitiveProperty.getType());
-        Assert.assertEquals(20540, postalCodePrimitiveProperty.getValue());
-
-        Assert.assertEquals(Integer.class, postalCodeObjectProperty.getType());
-        Assert.assertEquals(20540, postalCodeObjectProperty.getValue());
-
-        Assert.assertEquals(Boolean.class, booleanProperty.getType());
-        Assert.assertEquals(true, booleanProperty.getValue());
-    }
-
-    public void testEmptyPropertyName() {
-        try {
-            new NestedMethodProperty(vaadin, "");
-            fail();
-        } catch (IllegalArgumentException e) {
-            // should get exception
-        }
-
-        try {
-            new NestedMethodProperty(vaadin, " ");
-            fail();
-        } catch (IllegalArgumentException e) {
-            // should get exception
-        }
-    }
-
-    public void testInvalidPropertyName() {
-        try {
-            new NestedMethodProperty(vaadin, ".");
-            fail();
-        } catch (IllegalArgumentException e) {
-            // should get exception
-        }
-        try {
-            new NestedMethodProperty(vaadin, ".manager");
-            fail();
-        } catch (IllegalArgumentException e) {
-            // should get exception
-        }
-        try {
-            new NestedMethodProperty(vaadin, "manager.");
-            fail();
-        } catch (IllegalArgumentException e) {
-            // should get exception
-        }
-        try {
-            new NestedMethodProperty(vaadin, "manager..name");
-            fail();
-        } catch (IllegalArgumentException e) {
-            // should get exception
-        }
-    }
-
-    public void testInvalidNestedPropertyName() {
-        try {
-            new NestedMethodProperty(vaadin, "member");
-            fail();
-        } catch (IllegalArgumentException e) {
-            // should get exception
-        }
-
-        try {
-            new NestedMethodProperty(vaadin, "manager.pet");
-            fail();
-        } catch (IllegalArgumentException e) {
-            // should get exception
-        }
-
-        try {
-            new NestedMethodProperty(vaadin, "manager.address.city");
-            fail();
-        } catch (IllegalArgumentException e) {
-            // should get exception
-        }
-    }
-
-    public void testNullNestedProperty() {
-        NestedMethodProperty managerNameProperty = new NestedMethodProperty(
-                vaadin, "manager.name");
-        NestedMethodProperty streetProperty = new NestedMethodProperty(vaadin,
-                "manager.address.street");
-
-        joonas.setAddress(null);
-        try {
-            streetProperty.getValue();
-            fail();
-        } catch (Exception e) {
-            // should get exception
-        }
-
-        vaadin.setManager(null);
-        try {
-            managerNameProperty.getValue();
-            fail();
-        } catch (Exception e) {
-            // should get exception
-        }
-        try {
-            streetProperty.getValue();
-            fail();
-        } catch (Exception e) {
-            // should get exception
-        }
-
-        vaadin.setManager(joonas);
-        Assert.assertEquals("Joonas", managerNameProperty.getValue());
-    }
-
-    public void testMultiLevelNestedPropertySetValue() {
-        NestedMethodProperty managerNameProperty = new NestedMethodProperty(
-                vaadin, "manager.name");
-        NestedMethodProperty addressProperty = new NestedMethodProperty(vaadin,
-                "manager.address");
-        NestedMethodProperty streetProperty = new NestedMethodProperty(vaadin,
-                "manager.address.street");
-        NestedMethodProperty postalCodePrimitiveProperty = new NestedMethodProperty(
-                vaadin, "manager.address.postalCodePrimitive");
-        NestedMethodProperty postalCodeObjectProperty = new NestedMethodProperty(
-                vaadin, "manager.address.postalCodeObject");
-
-        managerNameProperty.setValue("Joonas L");
-        Assert.assertEquals("Joonas L", joonas.getName());
-        streetProperty.setValue("Ruukinkatu");
-        Assert.assertEquals("Ruukinkatu", oldMill.getStreet());
-        postalCodePrimitiveProperty.setValue(0);
-        postalCodeObjectProperty.setValue(1);
-        Assert.assertEquals(0, oldMill.getPostalCodePrimitive());
-        Assert.assertEquals(Integer.valueOf(1), oldMill.getPostalCodeObject());
-
-        postalCodeObjectProperty.setValue(null);
-        Assert.assertNull(oldMill.getPostalCodeObject());
-
-        Address address2 = new Address("Other street", 12345);
-        addressProperty.setValue(address2);
-        Assert.assertEquals("Other street", streetProperty.getValue());
-    }
-
-    public void testSerialization() throws IOException, ClassNotFoundException {
-        NestedMethodProperty streetProperty = new NestedMethodProperty(vaadin,
-                "manager.address.street");
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        new ObjectOutputStream(baos).writeObject(streetProperty);
-        NestedMethodProperty property2 = (NestedMethodProperty) new ObjectInputStream(
-                new ByteArrayInputStream(baos.toByteArray())).readObject();
-
-        Assert.assertEquals("Ruukinkatu 2-4", property2.getValue());
-    }
-
-    public void testIsReadOnly() {
-        NestedMethodProperty streetProperty = new NestedMethodProperty(vaadin,
-                "manager.address.street");
-        NestedMethodProperty booleanProperty = new NestedMethodProperty(vaadin,
-                "manager.address.boolean");
-
-        Assert.assertFalse(streetProperty.isReadOnly());
-        Assert.assertTrue(booleanProperty.isReadOnly());
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/ObjectPropertyTest.java b/tests/src/com/vaadin/tests/server/container/ObjectPropertyTest.java
deleted file mode 100644
index 0cdd659afd..0000000000
--- a/tests/src/com/vaadin/tests/server/container/ObjectPropertyTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.vaadin.tests.server.container;
-
-import junit.framework.TestCase;
-
-import org.junit.Assert;
-
-import com.vaadin.data.util.ObjectProperty;
-
-public class ObjectPropertyTest extends TestCase {
-
-    public static class TestSuperClass {
-        private String name;
-
-        public TestSuperClass(String name) {
-            this.name = name;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        @Override
-        public String toString() {
-            return getName();
-        }
-    }
-
-    public static class TestSubClass extends TestSuperClass {
-        public TestSubClass(String name) {
-            super("Subclass: " + name);
-        }
-    }
-
-    private TestSuperClass super1 = new TestSuperClass("super1");
-    private TestSubClass sub1 = new TestSubClass("sub1");
-
-    public void testSimple() {
-        ObjectProperty<TestSuperClass> prop1 = new ObjectProperty<TestSuperClass>(
-                super1, TestSuperClass.class);
-        Assert.assertEquals("super1", prop1.getValue().getName());
-        prop1 = new ObjectProperty<TestSuperClass>(super1);
-        Assert.assertEquals("super1", prop1.getValue().getName());
-
-        ObjectProperty<TestSubClass> prop2 = new ObjectProperty<TestSubClass>(
-                sub1, TestSubClass.class);
-        Assert.assertEquals("Subclass: sub1", prop2.getValue().getName());
-        prop2 = new ObjectProperty<TestSubClass>(sub1);
-        Assert.assertEquals("Subclass: sub1", prop2.getValue().getName());
-    }
-
-    public void testSetValueObjectSuper() {
-        ObjectProperty<TestSuperClass> prop = new ObjectProperty<TestSuperClass>(
-                super1, TestSuperClass.class);
-        Assert.assertEquals("super1", prop.getValue().getName());
-        prop.setValue(new TestSuperClass("super2"));
-        Assert.assertEquals("super1", super1.getName());
-        Assert.assertEquals("super2", prop.getValue().getName());
-    }
-
-    public void testSetValueObjectSub() {
-        ObjectProperty<TestSubClass> prop = new ObjectProperty<TestSubClass>(
-                sub1, TestSubClass.class);
-        Assert.assertEquals("Subclass: sub1", prop.getValue().getName());
-        prop.setValue(new TestSubClass("sub2"));
-        Assert.assertEquals("Subclass: sub1", sub1.getName());
-        Assert.assertEquals("Subclass: sub2", prop.getValue().getName());
-    }
-
-    public void testSetValueStringSuper() {
-        ObjectProperty<TestSuperClass> prop = new ObjectProperty<TestSuperClass>(
-                super1, TestSuperClass.class);
-        Assert.assertEquals("super1", prop.getValue().getName());
-        prop.setValue("super2");
-        Assert.assertEquals("super1", super1.getName());
-        Assert.assertEquals("super2", prop.getValue().getName());
-    }
-
-    public void testSetValueStringSub() {
-        ObjectProperty<TestSubClass> prop = new ObjectProperty<TestSubClass>(
-                sub1, TestSubClass.class);
-        Assert.assertEquals("Subclass: sub1", prop.getValue().getName());
-        prop.setValue("sub2");
-        Assert.assertEquals("Subclass: sub1", sub1.getName());
-        Assert.assertEquals("Subclass: sub2", prop.getValue().getName());
-    }
-
-    public void testMixedGenerics() {
-        ObjectProperty<TestSuperClass> prop = new ObjectProperty<TestSuperClass>(
-                sub1);
-        Assert.assertEquals("Subclass: sub1", prop.getValue().getName());
-        Assert.assertEquals(prop.getType(), TestSubClass.class);
-        // create correct subclass based on the runtime type of the instance
-        // given to ObjectProperty constructor, which is a subclass of the type
-        // parameter
-        prop.setValue("sub2");
-        Assert.assertEquals("Subclass: sub2", prop.getValue().getName());
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/PerformanceTestIndexedContainer.java b/tests/src/com/vaadin/tests/server/container/PerformanceTestIndexedContainer.java
deleted file mode 100644
index 62e6d88e72..0000000000
--- a/tests/src/com/vaadin/tests/server/container/PerformanceTestIndexedContainer.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package com.vaadin.tests.server.container;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import com.vaadin.data.util.IndexedContainer;
-
-public class PerformanceTestIndexedContainer extends TestCase {
-
-    private static final int REPEATS = 10;
-    private final static int ITEMS = 50000;
-    private static final long ADD_ITEM_FAIL_THRESHOLD = 200;
-    // TODO should improve performance of these methods
-    private static final long ADD_ITEM_AT_FAIL_THRESHOLD = 5000;
-    private static final long ADD_ITEM_AFTER_FAIL_THRESHOLD = 5000;
-    private static final long ADD_ITEM_AFTER_LAST_FAIL_THRESHOLD = 5000;
-    private static final long ADD_ITEMS_CONSTRUCTOR_FAIL_THRESHOLD = 200;
-
-    public void testAddItemPerformance() {
-        Collection<Long> times = new ArrayList<Long>();
-        for (int j = 0; j < REPEATS; ++j) {
-            IndexedContainer c = new IndexedContainer();
-            long start = System.currentTimeMillis();
-            for (int i = 0; i < ITEMS; i++) {
-                c.addItem();
-            }
-            times.add(System.currentTimeMillis() - start);
-        }
-        checkMedian(ITEMS, times, "IndexedContainer.addItem()",
-                ADD_ITEM_FAIL_THRESHOLD);
-    }
-
-    public void testAddItemAtPerformance() {
-        Collection<Long> times = new ArrayList<Long>();
-        for (int j = 0; j < REPEATS; ++j) {
-            IndexedContainer c = new IndexedContainer();
-            long start = System.currentTimeMillis();
-            for (int i = 0; i < ITEMS; i++) {
-                c.addItemAt(0);
-            }
-            times.add(System.currentTimeMillis() - start);
-        }
-        checkMedian(ITEMS, times, "IndexedContainer.addItemAt()",
-                ADD_ITEM_AT_FAIL_THRESHOLD);
-    }
-
-    public void testAddItemAfterPerformance() {
-        Object initialId = "Item0";
-        Collection<Long> times = new ArrayList<Long>();
-        for (int j = 0; j < REPEATS; ++j) {
-            IndexedContainer c = new IndexedContainer();
-            c.addItem(initialId);
-            long start = System.currentTimeMillis();
-            for (int i = 0; i < ITEMS; i++) {
-                c.addItemAfter(initialId);
-            }
-            times.add(System.currentTimeMillis() - start);
-        }
-        checkMedian(ITEMS, times, "IndexedContainer.addItemAfter()",
-                ADD_ITEM_AFTER_FAIL_THRESHOLD);
-    }
-
-    public void testAddItemAfterLastPerformance() {
-        // TODO running with less items because slow otherwise
-        Collection<Long> times = new ArrayList<Long>();
-        for (int j = 0; j < REPEATS; ++j) {
-            IndexedContainer c = new IndexedContainer();
-            c.addItem();
-            long start = System.currentTimeMillis();
-            for (int i = 0; i < ITEMS / 3; i++) {
-                c.addItemAfter(c.lastItemId());
-            }
-            times.add(System.currentTimeMillis() - start);
-        }
-        checkMedian(ITEMS / 3, times, "IndexedContainer.addItemAfter(lastId)",
-                ADD_ITEM_AFTER_LAST_FAIL_THRESHOLD);
-    }
-
-    public void testAddItemsConstructorPerformance() {
-        Collection<Object> items = new ArrayList<Object>(50000);
-        for (int i = 0; i < ITEMS; ++i) {
-            items.add(new Object());
-        }
-
-        SortedSet<Long> times = new TreeSet<Long>();
-        for (int j = 0; j < REPEATS; ++j) {
-            long start = System.currentTimeMillis();
-            new IndexedContainer(items);
-            times.add(System.currentTimeMillis() - start);
-        }
-        checkMedian(ITEMS, times, "IndexedContainer(Collection)",
-                ADD_ITEMS_CONSTRUCTOR_FAIL_THRESHOLD);
-    }
-
-    private void checkMedian(int items, Collection<Long> times,
-            String methodName, long threshold) {
-        long median = median(times);
-        System.out.println(methodName + " timings (ms) for " + items
-                + " items: " + times);
-        Assert.assertTrue(methodName + " too slow, median time " + median
-                + "ms for " + items + " items", median <= threshold);
-    }
-
-    private Long median(Collection<Long> times) {
-        ArrayList<Long> list = new ArrayList<Long>(times);
-        Collections.sort(list);
-        // not exact median in some cases, but good enough
-        return list.get(list.size() / 2);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/PropertyDescriptorTest.java b/tests/src/com/vaadin/tests/server/container/PropertyDescriptorTest.java
deleted file mode 100644
index c66d36ce8e..0000000000
--- a/tests/src/com/vaadin/tests/server/container/PropertyDescriptorTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.vaadin.tests.server.container;
-
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.util.MethodPropertyDescriptor;
-import com.vaadin.data.util.NestedPropertyDescriptor;
-import com.vaadin.data.util.VaadinPropertyDescriptor;
-import com.vaadin.tests.server.container.NestedMethodPropertyTest.Person;
-
-public class PropertyDescriptorTest extends TestCase {
-    public void testMethodPropertyDescriptorSerialization() throws Exception {
-        PropertyDescriptor[] pds = Introspector.getBeanInfo(Person.class)
-                .getPropertyDescriptors();
-
-        MethodPropertyDescriptor<Person> descriptor = null;
-
-        for (PropertyDescriptor pd : pds) {
-            if ("name".equals(pd.getName())) {
-                descriptor = new MethodPropertyDescriptor<Person>(pd.getName(),
-                        String.class, pd.getReadMethod(), pd.getWriteMethod());
-                break;
-            }
-        }
-
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        new ObjectOutputStream(baos).writeObject(descriptor);
-        VaadinPropertyDescriptor<Person> descriptor2 = (VaadinPropertyDescriptor<Person>) new ObjectInputStream(
-                new ByteArrayInputStream(baos.toByteArray())).readObject();
-
-        Property property = descriptor2
-                .createProperty(new Person("John", null));
-        Assert.assertEquals("John", property.getValue());
-    }
-
-    public void testNestedPropertyDescriptorSerialization() throws Exception {
-        NestedPropertyDescriptor<Person> pd = new NestedPropertyDescriptor<Person>(
-                "name", Person.class);
-
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        new ObjectOutputStream(baos).writeObject(pd);
-        VaadinPropertyDescriptor<Person> pd2 = (VaadinPropertyDescriptor<Person>) new ObjectInputStream(
-                new ByteArrayInputStream(baos.toByteArray())).readObject();
-
-        Property property = pd2.createProperty(new Person("John", null));
-        Assert.assertEquals("John", property.getValue());
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/PropertySetItemTest.java b/tests/src/com/vaadin/tests/server/container/PropertySetItemTest.java
deleted file mode 100644
index 5a2af14b7e..0000000000
--- a/tests/src/com/vaadin/tests/server/container/PropertySetItemTest.java
+++ /dev/null
@@ -1,407 +0,0 @@
-package com.vaadin.tests.server.container;
-
-import java.util.Iterator;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import org.easymock.EasyMock;
-
-import com.vaadin.data.Item.PropertySetChangeEvent;
-import com.vaadin.data.Item.PropertySetChangeListener;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.data.util.PropertysetItem;
-
-public class PropertySetItemTest extends TestCase {
-
-    private static final String ID1 = "id1";
-    private static final String ID2 = "id2";
-    private static final String ID3 = "id3";
-
-    private static final String VALUE1 = "value1";
-    private static final String VALUE2 = "value2";
-    private static final String VALUE3 = "value3";
-
-    private ObjectProperty<String> prop1;
-    private ObjectProperty<String> prop2;
-    private ObjectProperty<String> prop3;
-
-    private PropertySetChangeListener propertySetListenerMock;
-    private PropertySetChangeListener propertySetListenerMock2;
-
-    @Override
-    protected void setUp() throws Exception {
-        prop1 = new ObjectProperty<String>(VALUE1, String.class);
-        prop2 = new ObjectProperty<String>(VALUE2, String.class);
-        prop3 = new ObjectProperty<String>(VALUE3, String.class);
-
-        propertySetListenerMock = EasyMock
-                .createStrictMock(PropertySetChangeListener.class);
-        propertySetListenerMock2 = EasyMock
-                .createMock(PropertySetChangeListener.class);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        prop1 = null;
-        prop2 = null;
-        prop3 = null;
-
-        propertySetListenerMock = null;
-        propertySetListenerMock2 = null;
-    }
-
-    private PropertysetItem createPropertySetItem() {
-        return new PropertysetItem();
-    }
-
-    public void testEmptyItem() {
-        PropertysetItem item = createPropertySetItem();
-        Assert.assertNotNull(item.getItemPropertyIds());
-        Assert.assertEquals(0, item.getItemPropertyIds().size());
-    }
-
-    public void testGetProperty() {
-        PropertysetItem item = createPropertySetItem();
-
-        Assert.assertNull(item.getItemProperty(ID1));
-
-        item.addItemProperty(ID1, prop1);
-
-        Assert.assertEquals(prop1, item.getItemProperty(ID1));
-        Assert.assertNull(item.getItemProperty(ID2));
-    }
-
-    public void testAddSingleProperty() {
-        PropertysetItem item = createPropertySetItem();
-
-        item.addItemProperty(ID1, prop1);
-        Assert.assertEquals(1, item.getItemPropertyIds().size());
-        Object firstValue = item.getItemPropertyIds().iterator().next();
-        Assert.assertEquals(ID1, firstValue);
-        Assert.assertEquals(prop1, item.getItemProperty(ID1));
-    }
-
-    public void testAddMultipleProperties() {
-        PropertysetItem item = createPropertySetItem();
-
-        item.addItemProperty(ID1, prop1);
-        Assert.assertEquals(1, item.getItemPropertyIds().size());
-        Assert.assertEquals(prop1, item.getItemProperty(ID1));
-
-        item.addItemProperty(ID2, prop2);
-        Assert.assertEquals(2, item.getItemPropertyIds().size());
-        Assert.assertEquals(prop1, item.getItemProperty(ID1));
-        Assert.assertEquals(prop2, item.getItemProperty(ID2));
-
-        item.addItemProperty(ID3, prop3);
-        Assert.assertEquals(3, item.getItemPropertyIds().size());
-    }
-
-    public void testAddedPropertyOrder() {
-        PropertysetItem item = createPropertySetItem();
-        item.addItemProperty(ID1, prop1);
-        item.addItemProperty(ID2, prop2);
-        item.addItemProperty(ID3, prop3);
-
-        Iterator<?> it = item.getItemPropertyIds().iterator();
-        Assert.assertEquals(ID1, it.next());
-        Assert.assertEquals(ID2, it.next());
-        Assert.assertEquals(ID3, it.next());
-    }
-
-    public void testAddPropertyTwice() {
-        PropertysetItem item = createPropertySetItem();
-        Assert.assertTrue(item.addItemProperty(ID1, prop1));
-        Assert.assertFalse(item.addItemProperty(ID1, prop1));
-
-        Assert.assertEquals(1, item.getItemPropertyIds().size());
-        Assert.assertEquals(prop1, item.getItemProperty(ID1));
-    }
-
-    public void testCannotChangeProperty() {
-        PropertysetItem item = createPropertySetItem();
-        Assert.assertTrue(item.addItemProperty(ID1, prop1));
-
-        Assert.assertEquals(prop1, item.getItemProperty(ID1));
-
-        Assert.assertFalse(item.addItemProperty(ID1, prop2));
-
-        Assert.assertEquals(1, item.getItemPropertyIds().size());
-        Assert.assertEquals(prop1, item.getItemProperty(ID1));
-    }
-
-    public void testRemoveProperty() {
-        PropertysetItem item = createPropertySetItem();
-        item.addItemProperty(ID1, prop1);
-        item.removeItemProperty(ID1);
-
-        Assert.assertEquals(0, item.getItemPropertyIds().size());
-        Assert.assertNull(item.getItemProperty(ID1));
-    }
-
-    public void testRemovePropertyOrder() {
-        PropertysetItem item = createPropertySetItem();
-        item.addItemProperty(ID1, prop1);
-        item.addItemProperty(ID2, prop2);
-        item.addItemProperty(ID3, prop3);
-
-        item.removeItemProperty(ID2);
-
-        Iterator<?> it = item.getItemPropertyIds().iterator();
-        Assert.assertEquals(ID1, it.next());
-        Assert.assertEquals(ID3, it.next());
-    }
-
-    public void testRemoveNonExistentListener() {
-        PropertysetItem item = createPropertySetItem();
-        item.removeListener(propertySetListenerMock);
-    }
-
-    public void testRemoveListenerTwice() {
-        PropertysetItem item = createPropertySetItem();
-        item.addListener(propertySetListenerMock);
-        item.removeListener(propertySetListenerMock);
-        item.removeListener(propertySetListenerMock);
-    }
-
-    public void testAddPropertyNotification() {
-        // exactly one notification each time
-        PropertysetItem item = createPropertySetItem();
-
-        // Expectations and start test
-        propertySetListenerMock.itemPropertySetChange(EasyMock
-                .isA(PropertySetChangeEvent.class));
-        EasyMock.replay(propertySetListenerMock);
-
-        // Add listener and add a property -> should end up in listener once
-        item.addListener(propertySetListenerMock);
-        item.addItemProperty(ID1, prop1);
-
-        // Ensure listener was called once
-        EasyMock.verify(propertySetListenerMock);
-
-        // Remove the listener -> should not end up in listener when adding a
-        // property
-        item.removeListener(propertySetListenerMock);
-        item.addItemProperty(ID2, prop2);
-
-        // Ensure listener still has been called only once
-        EasyMock.verify(propertySetListenerMock);
-    }
-
-    public void testRemovePropertyNotification() {
-        // exactly one notification each time
-        PropertysetItem item = createPropertySetItem();
-        item.addItemProperty(ID1, prop1);
-        item.addItemProperty(ID2, prop2);
-
-        // Expectations and start test
-        propertySetListenerMock.itemPropertySetChange(EasyMock
-                .isA(PropertySetChangeEvent.class));
-        EasyMock.replay(propertySetListenerMock);
-
-        // Add listener and add a property -> should end up in listener once
-        item.addListener(propertySetListenerMock);
-        item.removeItemProperty(ID1);
-
-        // Ensure listener was called once
-        EasyMock.verify(propertySetListenerMock);
-
-        // Remove the listener -> should not end up in listener
-        item.removeListener(propertySetListenerMock);
-        item.removeItemProperty(ID2);
-
-        // Ensure listener still has been called only once
-        EasyMock.verify(propertySetListenerMock);
-    }
-
-    public void testItemEqualsNull() {
-        PropertysetItem item = createPropertySetItem();
-
-        Assert.assertFalse(item.equals(null));
-    }
-
-    public void testEmptyItemEquals() {
-        PropertysetItem item1 = createPropertySetItem();
-        PropertysetItem item2 = createPropertySetItem();
-
-        Assert.assertTrue(item1.equals(item2));
-    }
-
-    public void testItemEqualsSingleProperty() {
-        PropertysetItem item1 = createPropertySetItem();
-        PropertysetItem item2 = createPropertySetItem();
-        item2.addItemProperty(ID1, prop1);
-        PropertysetItem item3 = createPropertySetItem();
-        item3.addItemProperty(ID1, prop1);
-        PropertysetItem item4 = createPropertySetItem();
-        item4.addItemProperty(ID1, prop2);
-        PropertysetItem item5 = createPropertySetItem();
-        item5.addItemProperty(ID2, prop2);
-
-        Assert.assertFalse(item1.equals(item2));
-        Assert.assertFalse(item1.equals(item3));
-        Assert.assertFalse(item1.equals(item4));
-        Assert.assertFalse(item1.equals(item5));
-
-        Assert.assertTrue(item2.equals(item3));
-        Assert.assertFalse(item2.equals(item4));
-        Assert.assertFalse(item2.equals(item5));
-
-        Assert.assertFalse(item3.equals(item4));
-        Assert.assertFalse(item3.equals(item5));
-
-        Assert.assertFalse(item4.equals(item5));
-
-        Assert.assertFalse(item2.equals(item1));
-    }
-
-    public void testItemEqualsMultipleProperties() {
-        PropertysetItem item1 = createPropertySetItem();
-        item1.addItemProperty(ID1, prop1);
-
-        PropertysetItem item2 = createPropertySetItem();
-        item2.addItemProperty(ID1, prop1);
-        item2.addItemProperty(ID2, prop2);
-
-        PropertysetItem item3 = createPropertySetItem();
-        item3.addItemProperty(ID1, prop1);
-        item3.addItemProperty(ID2, prop2);
-
-        Assert.assertFalse(item1.equals(item2));
-
-        Assert.assertTrue(item2.equals(item3));
-    }
-
-    public void testItemEqualsPropertyOrder() {
-        PropertysetItem item1 = createPropertySetItem();
-        item1.addItemProperty(ID1, prop1);
-        item1.addItemProperty(ID2, prop2);
-
-        PropertysetItem item2 = createPropertySetItem();
-        item2.addItemProperty(ID2, prop2);
-        item2.addItemProperty(ID1, prop1);
-
-        Assert.assertFalse(item1.equals(item2));
-    }
-
-    public void testEqualsSingleListener() {
-        PropertysetItem item1 = createPropertySetItem();
-        PropertysetItem item2 = createPropertySetItem();
-
-        item1.addListener(propertySetListenerMock);
-
-        Assert.assertFalse(item1.equals(item2));
-        Assert.assertFalse(item2.equals(item1));
-
-        item2.addListener(propertySetListenerMock);
-
-        Assert.assertTrue(item1.equals(item2));
-        Assert.assertTrue(item2.equals(item1));
-    }
-
-    public void testEqualsMultipleListeners() {
-        PropertysetItem item1 = createPropertySetItem();
-        PropertysetItem item2 = createPropertySetItem();
-
-        item1.addListener(propertySetListenerMock);
-        item1.addListener(propertySetListenerMock2);
-
-        item2.addListener(propertySetListenerMock);
-
-        Assert.assertFalse(item1.equals(item2));
-        Assert.assertFalse(item2.equals(item1));
-
-        item2.addListener(propertySetListenerMock2);
-
-        Assert.assertTrue(item1.equals(item2));
-        Assert.assertTrue(item2.equals(item1));
-    }
-
-    public void testEqualsAddRemoveListener() {
-        PropertysetItem item1 = createPropertySetItem();
-        PropertysetItem item2 = createPropertySetItem();
-
-        item1.addListener(propertySetListenerMock);
-        item1.removeListener(propertySetListenerMock);
-
-        Assert.assertTrue(item1.equals(item2));
-        Assert.assertTrue(item2.equals(item1));
-    }
-
-    public void testItemHashCodeEmpty() {
-        PropertysetItem item1 = createPropertySetItem();
-        PropertysetItem item2 = createPropertySetItem();
-
-        Assert.assertEquals(item1.hashCode(), item2.hashCode());
-    }
-
-    public void testItemHashCodeAddProperties() {
-        PropertysetItem item1 = createPropertySetItem();
-        PropertysetItem item2 = createPropertySetItem();
-
-        Assert.assertEquals(item1.hashCode(), item2.hashCode());
-
-        item1.addItemProperty(ID1, prop1);
-        item1.addItemProperty(ID2, prop2);
-        // hashCodes can be equal even if items are different
-
-        item2.addItemProperty(ID1, prop1);
-        item2.addItemProperty(ID2, prop2);
-        // but here hashCodes must be equal
-        Assert.assertEquals(item1.hashCode(), item2.hashCode());
-    }
-
-    public void testItemHashCodeAddListeners() {
-        PropertysetItem item1 = createPropertySetItem();
-        PropertysetItem item2 = createPropertySetItem();
-
-        Assert.assertEquals(item1.hashCode(), item2.hashCode());
-
-        item1.addListener(propertySetListenerMock);
-        // hashCodes can be equal even if items are different
-
-        item2.addListener(propertySetListenerMock);
-        // but here hashCodes must be equal
-        Assert.assertEquals(item1.hashCode(), item2.hashCode());
-    }
-
-    public void testItemHashCodeAddRemoveProperty() {
-        PropertysetItem item1 = createPropertySetItem();
-        PropertysetItem item2 = createPropertySetItem();
-
-        item1.addItemProperty(ID1, prop1);
-        item1.removeItemProperty(ID1);
-
-        Assert.assertEquals(item1.hashCode(), item2.hashCode());
-    }
-
-    public void testItemHashCodeAddRemoveListener() {
-        PropertysetItem item1 = createPropertySetItem();
-        PropertysetItem item2 = createPropertySetItem();
-
-        item1.addListener(propertySetListenerMock);
-        item1.removeListener(propertySetListenerMock);
-
-        Assert.assertEquals(item1.hashCode(), item2.hashCode());
-    }
-
-    public void testToString() {
-        // toString() behavior is specified in the class javadoc
-        PropertysetItem item = createPropertySetItem();
-
-        Assert.assertEquals("", item.toString());
-
-        item.addItemProperty(ID1, prop1);
-
-        Assert.assertEquals(String.valueOf(prop1), item.toString());
-
-        item.addItemProperty(ID2, prop2);
-
-        Assert.assertEquals(
-                String.valueOf(prop1) + " " + String.valueOf(prop2),
-                item.toString());
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/TestContainerHierarchicalWrapper.java b/tests/src/com/vaadin/tests/server/container/TestContainerHierarchicalWrapper.java
deleted file mode 100644
index 88251ebca0..0000000000
--- a/tests/src/com/vaadin/tests/server/container/TestContainerHierarchicalWrapper.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.vaadin.tests.server.container;
-
-import java.util.Collection;
-
-import com.vaadin.data.util.ContainerHierarchicalWrapper;
-import com.vaadin.data.util.IndexedContainer;
-
-public class TestContainerHierarchicalWrapper extends
-        AbstractHierarchicalContainerTest {
-
-    public void testBasicOperations() {
-        testBasicContainerOperations(new ContainerHierarchicalWrapper(
-                new IndexedContainer()));
-    }
-
-    public void testHierarchicalContainer() {
-        testHierarchicalContainer(new ContainerHierarchicalWrapper(
-                new IndexedContainer()));
-    }
-
-    public void testRemoveSubtree() {
-        testRemoveHierarchicalWrapperSubtree(new ContainerHierarchicalWrapper(
-                new IndexedContainer()));
-    }
-
-    protected void testRemoveHierarchicalWrapperSubtree(
-            ContainerHierarchicalWrapper container) {
-        initializeContainer(container);
-
-        // remove root item
-        container.removeItemRecursively("org");
-
-        int packages = 21 + 3 - 3;
-        int expectedSize = sampleData.length + packages - 1;
-
-        validateContainer(container, "com", "com.vaadin.util.SerializerHelper",
-                "com.vaadin.terminal.ApplicationResource", "blah", true,
-                expectedSize);
-
-        // rootItemIds
-        Collection<?> rootIds = container.rootItemIds();
-        assertEquals(1, rootIds.size());
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/TestContainerSorting.java b/tests/src/com/vaadin/tests/server/container/TestContainerSorting.java
deleted file mode 100644
index fee398feeb..0000000000
--- a/tests/src/com/vaadin/tests/server/container/TestContainerSorting.java
+++ /dev/null
@@ -1,238 +0,0 @@
-package com.vaadin.tests.server.container;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.data.util.IndexedContainer;
-
-public class TestContainerSorting extends TestCase {
-
-    private static final String ITEM_DATA_MINUS2_NULL = "Data -2 null";
-    private static final String ITEM_DATA_MINUS2 = "Data -2";
-    private static final String ITEM_DATA_MINUS1 = "Data -1";
-    private static final String ITEM_DATA_MINUS1_NULL = "Data -1 null";
-    private static final String ITEM_ANOTHER_NULL = "Another null";
-    private static final String ITEM_STRING_2 = "String 2";
-    private static final String ITEM_STRING_NULL2 = "String null";
-    private static final String ITEM_STRING_1 = "String 1";
-
-    private static final String PROPERTY_INTEGER_NULL2 = "integer-null";
-    private static final String PROPERTY_INTEGER_NOT_NULL = "integer-not-null";
-    private static final String PROPERTY_STRING_NULL = "string-null";
-    private static final String PROPERTY_STRING_ID = "string-not-null";
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-
-    public void testEmptyFilteredIndexedContainer() {
-        IndexedContainer ic = new IndexedContainer();
-
-        addProperties(ic);
-        populate(ic);
-
-        ic.addContainerFilter(PROPERTY_STRING_ID, "aasdfasdfasdf", true, false);
-        ic.sort(new Object[] { PROPERTY_STRING_ID }, new boolean[] { true });
-
-    }
-
-    public void testFilteredIndexedContainer() {
-        IndexedContainer ic = new IndexedContainer();
-
-        addProperties(ic);
-        populate(ic);
-
-        ic.addContainerFilter(PROPERTY_STRING_ID, "a", true, false);
-        ic.sort(new Object[] { PROPERTY_STRING_ID }, new boolean[] { true });
-        verifyOrder(ic,
-                new String[] { ITEM_ANOTHER_NULL, ITEM_DATA_MINUS1,
-                        ITEM_DATA_MINUS1_NULL, ITEM_DATA_MINUS2,
-                        ITEM_DATA_MINUS2_NULL, });
-    }
-
-    public void testIndexedContainer() {
-        IndexedContainer ic = new IndexedContainer();
-
-        addProperties(ic);
-        populate(ic);
-
-        ic.sort(new Object[] { PROPERTY_STRING_ID }, new boolean[] { true });
-        verifyOrder(ic, new String[] { ITEM_ANOTHER_NULL, ITEM_DATA_MINUS1,
-                ITEM_DATA_MINUS1_NULL, ITEM_DATA_MINUS2, ITEM_DATA_MINUS2_NULL,
-                ITEM_STRING_1, ITEM_STRING_2, ITEM_STRING_NULL2 });
-
-        ic.sort(new Object[] { PROPERTY_INTEGER_NOT_NULL,
-                PROPERTY_INTEGER_NULL2, PROPERTY_STRING_ID }, new boolean[] {
-                true, false, true });
-        verifyOrder(ic, new String[] { ITEM_DATA_MINUS2, ITEM_DATA_MINUS2_NULL,
-                ITEM_DATA_MINUS1, ITEM_DATA_MINUS1_NULL, ITEM_ANOTHER_NULL,
-                ITEM_STRING_NULL2, ITEM_STRING_1, ITEM_STRING_2 });
-
-        ic.sort(new Object[] { PROPERTY_INTEGER_NOT_NULL,
-                PROPERTY_INTEGER_NULL2, PROPERTY_STRING_ID }, new boolean[] {
-                true, true, true });
-        verifyOrder(ic, new String[] { ITEM_DATA_MINUS2_NULL, ITEM_DATA_MINUS2,
-                ITEM_DATA_MINUS1_NULL, ITEM_DATA_MINUS1, ITEM_ANOTHER_NULL,
-                ITEM_STRING_NULL2, ITEM_STRING_1, ITEM_STRING_2 });
-
-    }
-
-    public void testHierarchicalContainer() {
-        HierarchicalContainer hc = new HierarchicalContainer();
-        populateContainer(hc);
-        hc.sort(new Object[] { "name" }, new boolean[] { true });
-        verifyOrder(hc, new String[] { "Audi", "C++", "Call of Duty", "Cars",
-                "English", "Fallout", "Finnish", "Ford", "Games", "Java",
-                "Might and Magic", "Natural languages", "PHP",
-                "Programming languages", "Python", "Red Alert", "Swedish",
-                "Toyota", "Volvo" });
-        assertArrays(
-                hc.rootItemIds().toArray(),
-                new Integer[] { nameToId.get("Cars"), nameToId.get("Games"),
-                        nameToId.get("Natural languages"),
-                        nameToId.get("Programming languages") });
-        assertArrays(
-                hc.getChildren(nameToId.get("Games")).toArray(),
-                new Integer[] { nameToId.get("Call of Duty"),
-                        nameToId.get("Fallout"),
-                        nameToId.get("Might and Magic"),
-                        nameToId.get("Red Alert") });
-    }
-
-    private static void populateContainer(HierarchicalContainer container) {
-        container.addContainerProperty("name", String.class, null);
-
-        addItem(container, "Games", null);
-        addItem(container, "Call of Duty", "Games");
-        addItem(container, "Might and Magic", "Games");
-        addItem(container, "Fallout", "Games");
-        addItem(container, "Red Alert", "Games");
-
-        addItem(container, "Cars", null);
-        addItem(container, "Toyota", "Cars");
-        addItem(container, "Volvo", "Cars");
-        addItem(container, "Audi", "Cars");
-        addItem(container, "Ford", "Cars");
-
-        addItem(container, "Natural languages", null);
-        addItem(container, "Swedish", "Natural languages");
-        addItem(container, "English", "Natural languages");
-        addItem(container, "Finnish", "Natural languages");
-
-        addItem(container, "Programming languages", null);
-        addItem(container, "C++", "Programming languages");
-        addItem(container, "PHP", "Programming languages");
-        addItem(container, "Java", "Programming languages");
-        addItem(container, "Python", "Programming languages");
-
-    }
-
-    private static int index = 0;
-    private static Map<String, Integer> nameToId = new HashMap<String, Integer>();
-    private static Map<Integer, String> idToName = new HashMap<Integer, String>();
-
-    public static void addItem(IndexedContainer container, String string,
-            String parent) {
-        nameToId.put(string, index);
-        idToName.put(index, string);
-
-        Item item = container.addItem(index);
-        item.getItemProperty("name").setValue(string);
-
-        if (parent != null && container instanceof HierarchicalContainer) {
-            ((HierarchicalContainer) container).setParent(index,
-                    nameToId.get(parent));
-        }
-
-        index++;
-    }
-
-    private void verifyOrder(Container.Sortable ic, Object[] idOrder) {
-        int size = ic.size();
-        Object[] actual = new Object[size];
-        Iterator<?> i = ic.getItemIds().iterator();
-        int index = 0;
-        while (i.hasNext()) {
-            Object o = i.next();
-            if (o.getClass() == Integer.class
-                    && idOrder[index].getClass() == String.class) {
-                o = idToName.get(o);
-            }
-            actual[index++] = o;
-        }
-
-        assertArrays(actual, idOrder);
-
-    }
-
-    private void assertArrays(Object[] actualObjects, Object[] expectedObjects) {
-        assertEquals(
-                "Actual contains a different number of values than was expected",
-                expectedObjects.length, actualObjects.length);
-
-        for (int i = 0; i < actualObjects.length; i++) {
-            Object actual = actualObjects[i];
-            Object expected = expectedObjects[i];
-
-            assertEquals("Item[" + i + "] does not match", expected, actual);
-        }
-
-    }
-
-    private void populate(IndexedContainer ic) {
-        addItem(ic, ITEM_STRING_1, ITEM_STRING_1, 1, 1);
-        addItem(ic, ITEM_STRING_NULL2, null, 0, null);
-        addItem(ic, ITEM_STRING_2, ITEM_STRING_2, 2, 2);
-        addItem(ic, ITEM_ANOTHER_NULL, null, 0, null);
-        addItem(ic, ITEM_DATA_MINUS1, ITEM_DATA_MINUS1, -1, -1);
-        addItem(ic, ITEM_DATA_MINUS1_NULL, null, -1, null);
-        addItem(ic, ITEM_DATA_MINUS2, ITEM_DATA_MINUS2, -2, -2);
-        addItem(ic, ITEM_DATA_MINUS2_NULL, null, -2, null);
-    }
-
-    private Item addItem(Container ic, String id, String string_null,
-            int integer, Integer integer_null) {
-        Item i = ic.addItem(id);
-        i.getItemProperty(PROPERTY_STRING_ID).setValue(id);
-        i.getItemProperty(PROPERTY_STRING_NULL).setValue(string_null);
-        i.getItemProperty(PROPERTY_INTEGER_NOT_NULL).setValue(integer);
-        i.getItemProperty(PROPERTY_INTEGER_NULL2).setValue(integer_null);
-
-        return i;
-    }
-
-    private void addProperties(IndexedContainer ic) {
-        ic.addContainerProperty("id", String.class, null);
-        ic.addContainerProperty(PROPERTY_STRING_ID, String.class, "");
-        ic.addContainerProperty(PROPERTY_STRING_NULL, String.class, null);
-        ic.addContainerProperty(PROPERTY_INTEGER_NULL2, Integer.class, null);
-        ic.addContainerProperty(PROPERTY_INTEGER_NOT_NULL, Integer.class, 0);
-        ic.addContainerProperty("comparable-null", Integer.class, 0);
-    }
-
-    public class MyObject implements Comparable<MyObject> {
-        private String data;
-
-        public int compareTo(MyObject o) {
-            if (o == null) {
-                return 1;
-            }
-
-            if (o.data == null) {
-                return data == null ? 0 : 1;
-            } else if (data == null) {
-                return -1;
-            } else {
-                return data.compareTo(o.data);
-            }
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/TestHierarchicalContainer.java b/tests/src/com/vaadin/tests/server/container/TestHierarchicalContainer.java
deleted file mode 100644
index 5ca8194646..0000000000
--- a/tests/src/com/vaadin/tests/server/container/TestHierarchicalContainer.java
+++ /dev/null
@@ -1,269 +0,0 @@
-package com.vaadin.tests.server.container;
-
-import com.vaadin.data.Container.Filter;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.HierarchicalContainer;
-
-public class TestHierarchicalContainer extends
-        AbstractHierarchicalContainerTest {
-
-    public void testBasicOperations() {
-        testBasicContainerOperations(new HierarchicalContainer());
-    }
-
-    public void testFiltering() {
-        testContainerFiltering(new HierarchicalContainer());
-    }
-
-    public void testSorting() {
-        testContainerSorting(new HierarchicalContainer());
-    }
-
-    public void testOrdered() {
-        testContainerOrdered(new HierarchicalContainer());
-    }
-
-    public void testHierarchicalSorting() {
-        testHierarchicalSorting(new HierarchicalContainer());
-    }
-
-    public void testSortingAndFiltering() {
-        testContainerSortingAndFiltering(new HierarchicalContainer());
-    }
-
-    public void testRemovingItemsFromFilteredContainer() {
-        HierarchicalContainer container = new HierarchicalContainer();
-        initializeContainer(container);
-        container.setIncludeParentsWhenFiltering(true);
-        container.addContainerFilter(FULLY_QUALIFIED_NAME, "ab", false, false);
-        Object p1 = container.getParent("com.vaadin.ui.TabSheet");
-        assertEquals("com.vaadin.ui", p1);
-
-        container.removeItem("com.vaadin.ui.TabSheet");
-        // Parent for the removed item must be null because the item is no
-        // longer in the container
-        p1 = container.getParent("com.vaadin.ui.TabSheet");
-        assertNull("Parent should be null, is " + p1, p1);
-
-        container.removeAllItems();
-        p1 = container.getParent("com.vaadin.terminal.gwt.client.Focusable");
-        assertNull("Parent should be null, is " + p1, p1);
-
-    }
-
-    public void testParentWhenRemovingFilterFromContainer() {
-        HierarchicalContainer container = new HierarchicalContainer();
-        initializeContainer(container);
-        container.setIncludeParentsWhenFiltering(true);
-        container.addContainerFilter(FULLY_QUALIFIED_NAME, "ab", false, false);
-        Object p1 = container.getParent("com.vaadin.ui.TabSheet");
-        assertEquals("com.vaadin.ui", p1);
-        p1 = container
-                .getParent("com.vaadin.terminal.gwt.client.ui.VPopupCalendar");
-        assertNull(p1);
-        container.removeAllContainerFilters();
-        p1 = container
-                .getParent("com.vaadin.terminal.gwt.client.ui.VPopupCalendar");
-        assertEquals("com.vaadin.terminal.gwt.client.ui", p1);
-
-    }
-
-    public void testChangeParentInFilteredContainer() {
-        HierarchicalContainer container = new HierarchicalContainer();
-        initializeContainer(container);
-        container.setIncludeParentsWhenFiltering(true);
-        container.addContainerFilter(FULLY_QUALIFIED_NAME, "Tab", false, false);
-
-        // Change parent of filtered item
-        Object p1 = container.getParent("com.vaadin.ui.TabSheet");
-        assertEquals("com.vaadin.ui", p1);
-        container.setParent("com.vaadin.ui.TabSheet", "com.vaadin");
-        p1 = container.getParent("com.vaadin.ui.TabSheet");
-        assertEquals("com.vaadin", p1);
-        container.setParent("com.vaadin.ui.TabSheet", "com");
-        p1 = container.getParent("com.vaadin.ui.TabSheet");
-        assertEquals("com", p1);
-        container.setParent("com.vaadin.ui.TabSheet", null);
-        p1 = container.getParent("com.vaadin.ui.TabSheet");
-        assertNull(p1);
-
-        // root -> non-root
-        container.setParent("com.vaadin.ui.TabSheet", "com");
-        p1 = container.getParent("com.vaadin.ui.TabSheet");
-        assertEquals("com", p1);
-
-    }
-
-    public void testHierarchicalFilteringWithParents() {
-        HierarchicalContainer container = new HierarchicalContainer();
-        initializeContainer(container);
-        container.setIncludeParentsWhenFiltering(true);
-
-        // Filter by "contains ab"
-        container.addContainerFilter(FULLY_QUALIFIED_NAME, "ab", false, false);
-
-        // 20 items match the filters and the have 8 parents that should also be
-        // included
-        // only one root "com" should exist
-        // filtered
-        int expectedSize = 29;
-        int expectedRoots = 1;
-
-        validateHierarchicalContainer(container, "com",
-                "com.vaadin.ui.TabSheet",
-                "com.vaadin.terminal.gwt.client.Focusable", "blah", true,
-                expectedSize, expectedRoots, true);
-
-        // only include .gwt.client classes
-        container.removeAllContainerFilters();
-        container.addContainerFilter(FULLY_QUALIFIED_NAME, ".gwt.client.",
-                false, false);
-
-        int packages = 6;
-        int classes = 112;
-
-        expectedSize = packages + classes;
-        expectedRoots = 1;
-
-        validateHierarchicalContainer(container, "com",
-                "com.vaadin.terminal.gwt.client.WidgetSet",
-                "com.vaadin.terminal.gwt.client.ui.VSplitPanelVertical",
-                "blah", true, expectedSize, expectedRoots, true);
-
-        // Additionally remove all without 'm' in the simple name.
-        container.addContainerFilter(SIMPLE_NAME, "m", false, false);
-
-        expectedSize = 7 + 18;
-        expectedRoots = 1;
-
-        validateHierarchicalContainer(
-                container,
-                "com",
-                "com.vaadin.terminal.gwt.client.ui.VUriFragmentUtility",
-                "com.vaadin.terminal.gwt.client.ui.layout.ChildComponentContainer",
-                "blah", true, expectedSize, expectedRoots, true);
-
-    }
-
-    public void testRemoveLastChild() {
-        HierarchicalContainer c = new HierarchicalContainer();
-
-        c.addItem("root");
-        assertEquals(false, c.hasChildren("root"));
-
-        c.addItem("child");
-        c.setParent("child", "root");
-        assertEquals(true, c.hasChildren("root"));
-
-        c.removeItem("child");
-        assertFalse(c.containsId("child"));
-        assertNull(c.getChildren("root"));
-        assertNull(c.getChildren("child"));
-        assertFalse(c.hasChildren("child"));
-        assertFalse(c.hasChildren("root"));
-    }
-
-    public void testRemoveLastChildFromFiltered() {
-        HierarchicalContainer c = new HierarchicalContainer();
-
-        c.addItem("root");
-        assertEquals(false, c.hasChildren("root"));
-
-        c.addItem("child");
-        c.setParent("child", "root");
-        assertEquals(true, c.hasChildren("root"));
-
-        // Dummy filter that does not remove any items
-        c.addContainerFilter(new Filter() {
-
-            public boolean passesFilter(Object itemId, Item item)
-                    throws UnsupportedOperationException {
-                return true;
-            }
-
-            public boolean appliesToProperty(Object propertyId) {
-                return true;
-            }
-        });
-        c.removeItem("child");
-
-        assertFalse(c.containsId("child"));
-        assertNull(c.getChildren("root"));
-        assertNull(c.getChildren("child"));
-        assertFalse(c.hasChildren("child"));
-        assertFalse(c.hasChildren("root"));
-    }
-
-    public void testHierarchicalFilteringWithoutParents() {
-        HierarchicalContainer container = new HierarchicalContainer();
-
-        initializeContainer(container);
-        container.setIncludeParentsWhenFiltering(false);
-
-        // Filter by "contains ab"
-        container.addContainerFilter(SIMPLE_NAME, "ab", false, false);
-
-        // 20 items match the filter.
-        // com.vaadin.data.BufferedValidatable
-        // com.vaadin.data.Validatable
-        // com.vaadin.terminal.gwt.client.Focusable
-        // com.vaadin.terminal.gwt.client.Paintable
-        // com.vaadin.terminal.gwt.client.ui.Table
-        // com.vaadin.terminal.gwt.client.ui.VLabel
-        // com.vaadin.terminal.gwt.client.ui.VScrollTable
-        // com.vaadin.terminal.gwt.client.ui.VTablePaging
-        // com.vaadin.terminal.gwt.client.ui.VTabsheet
-        // com.vaadin.terminal.gwt.client.ui.VTabsheetBase
-        // com.vaadin.terminal.gwt.client.ui.VTabsheetPanel
-        // com.vaadin.terminal.gwt.server.ChangeVariablesErrorEvent
-        // com.vaadin.terminal.Paintable
-        // com.vaadin.terminal.Scrollable
-        // com.vaadin.terminal.Sizeable
-        // com.vaadin.terminal.VariableOwner
-        // com.vaadin.ui.Label
-        // com.vaadin.ui.Table
-        // com.vaadin.ui.TableFieldFactory
-        // com.vaadin.ui.TabSheet
-        // all become roots.
-        int expectedSize = 20;
-        int expectedRoots = 20;
-
-        validateHierarchicalContainer(container,
-                "com.vaadin.data.BufferedValidatable",
-                "com.vaadin.ui.TabSheet",
-                "com.vaadin.terminal.gwt.client.ui.VTabsheetBase", "blah",
-                true, expectedSize, expectedRoots, false);
-
-        // only include .gwt.client classes
-        container.removeAllContainerFilters();
-        container.addContainerFilter(FULLY_QUALIFIED_NAME, ".gwt.client.",
-                false, false);
-
-        int packages = 3;
-        int classes = 110;
-
-        expectedSize = packages + classes;
-        expectedRoots = 35 + 1; // com.vaadin.terminal.gwt.client.ui +
-        // com.vaadin.terminal.gwt.client.*
-
-        // Sorting is case insensitive
-        validateHierarchicalContainer(container,
-                "com.vaadin.terminal.gwt.client.ApplicationConfiguration",
-                "com.vaadin.terminal.gwt.client.WidgetSet",
-                "com.vaadin.terminal.gwt.client.ui.VOptionGroup", "blah", true,
-                expectedSize, expectedRoots, false);
-
-        // Additionally remove all without 'P' in the simple name.
-        container.addContainerFilter(SIMPLE_NAME, "P", false, false);
-
-        expectedSize = 13;
-        expectedRoots = expectedSize;
-
-        validateHierarchicalContainer(container,
-                "com.vaadin.terminal.gwt.client.Paintable",
-                "com.vaadin.terminal.gwt.client.ui.VTabsheetPanel",
-                "com.vaadin.terminal.gwt.client.ui.VPopupCalendar", "blah",
-                true, expectedSize, expectedRoots, false);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/TestIndexedContainer.java b/tests/src/com/vaadin/tests/server/container/TestIndexedContainer.java
deleted file mode 100644
index 5cab89ca9b..0000000000
--- a/tests/src/com/vaadin/tests/server/container/TestIndexedContainer.java
+++ /dev/null
@@ -1,271 +0,0 @@
-package com.vaadin.tests.server.container;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-
-public class TestIndexedContainer extends AbstractInMemoryContainerTest {
-
-    public void testBasicOperations() {
-        testBasicContainerOperations(new IndexedContainer());
-    }
-
-    public void testFiltering() {
-        testContainerFiltering(new IndexedContainer());
-    }
-
-    public void testSorting() {
-        testContainerSorting(new IndexedContainer());
-    }
-
-    public void testSortingAndFiltering() {
-        testContainerSortingAndFiltering(new IndexedContainer());
-    }
-
-    public void testContainerOrdered() {
-        testContainerOrdered(new IndexedContainer());
-    }
-
-    public void testContainerIndexed() {
-        testContainerIndexed(new IndexedContainer(), sampleData[2], 2, true,
-                "newItemId", true);
-    }
-
-    public void testItemSetChangeListeners() {
-        IndexedContainer container = new IndexedContainer();
-        ItemSetChangeCounter counter = new ItemSetChangeCounter();
-        container.addListener(counter);
-
-        String id1 = "id1";
-        String id2 = "id2";
-        String id3 = "id3";
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItem();
-        counter.assertOnce();
-        container.addItem(id1);
-        counter.assertOnce();
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAt(0);
-        counter.assertOnce();
-        container.addItemAt(0, id1);
-        counter.assertOnce();
-        container.addItemAt(0, id2);
-        counter.assertOnce();
-        container.addItemAt(container.size(), id3);
-        counter.assertOnce();
-        // no notification if already in container
-        container.addItemAt(0, id1);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        container.addItemAfter(null);
-        counter.assertOnce();
-        container.addItemAfter(null, id1);
-        counter.assertOnce();
-        container.addItemAfter(id1);
-        counter.assertOnce();
-        container.addItemAfter(id1, id2);
-        counter.assertOnce();
-        container.addItemAfter(container.firstItemId());
-        counter.assertOnce();
-        container.addItemAfter(container.lastItemId());
-        counter.assertOnce();
-        container.addItemAfter(container.lastItemId(), id3);
-        counter.assertOnce();
-        // no notification if already in container
-        container.addItemAfter(0, id1);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        container.removeItem(sampleData[0]);
-        counter.assertOnce();
-
-        initializeContainer(container);
-        counter.reset();
-        // no notification for removing a non-existing item
-        container.removeItem(id1);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        container.removeAllItems();
-        counter.assertOnce();
-        // already empty
-        container.removeAllItems();
-        counter.assertNone();
-
-    }
-
-    public void testAddRemoveContainerFilter() {
-        IndexedContainer container = new IndexedContainer();
-        ItemSetChangeCounter counter = new ItemSetChangeCounter();
-        container.addListener(counter);
-
-        // simply adding or removing container filters should cause events
-        // (content changes)
-
-        initializeContainer(container);
-        counter.reset();
-        container.addContainerFilter(SIMPLE_NAME, "a", true, false);
-        counter.assertOnce();
-        container.removeContainerFilters(SIMPLE_NAME);
-        counter.assertOnce();
-        container.addContainerFilter(SIMPLE_NAME, "a", true, false);
-        counter.assertOnce();
-        container.removeAllContainerFilters();
-        counter.assertOnce();
-    }
-
-    // TODO other tests should check positions after removing filter etc,
-    // here concentrating on listeners
-    public void testItemSetChangeListenersFiltering() {
-        IndexedContainer container = new IndexedContainer();
-        ItemSetChangeCounter counter = new ItemSetChangeCounter();
-        container.addListener(counter);
-
-        counter.reset();
-        container.addContainerFilter(FULLY_QUALIFIED_NAME, "Test", true, false);
-        // no real change, so no notification required
-        counter.assertNone();
-
-        String id1 = "com.example.Test1";
-        String id2 = "com.example.Test2";
-        String id3 = "com.example.Other";
-
-        // perform operations while filtering container
-
-        Item item;
-
-        initializeContainer(container);
-        counter.reset();
-        // passes filter
-        item = container.addItem(id1);
-        // no event if filtered out
-        counter.assertNone();
-        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1);
-        counter.assertOnce();
-        // passes filter but already in the container
-        item = container.addItem(id1);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        // passes filter after change
-        item = container.addItemAt(0, id1);
-        counter.assertNone();
-        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1);
-        counter.assertOnce();
-        item = container.addItemAt(container.size(), id2);
-        counter.assertNone();
-        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id2);
-        counter.assertOnce();
-        // passes filter but already in the container
-        item = container.addItemAt(0, id1);
-        counter.assertNone();
-        item = container.addItemAt(container.size(), id2);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        // passes filter
-        item = container.addItemAfter(null, id1);
-        counter.assertNone();
-        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1);
-        counter.assertOnce();
-        item = container.addItemAfter(container.lastItemId(), id2);
-        counter.assertNone();
-        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id2);
-        counter.assertOnce();
-        // passes filter but already in the container
-        item = container.addItemAfter(null, id1);
-        counter.assertNone();
-        item = container.addItemAfter(container.lastItemId(), id2);
-        counter.assertNone();
-
-        // does not pass filter
-
-        // TODO implement rest
-
-        initializeContainer(container);
-        counter.reset();
-        item = container.addItemAfter(null, id3);
-        counter.assertNone();
-        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        item = container.addItemAfter(container.firstItemId(), id3);
-        counter.assertNone();
-        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        item = container.addItemAfter(container.lastItemId(), id3);
-        counter.assertNone();
-        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        item = container.addItemAt(0, id3);
-        counter.assertNone();
-        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        item = container.addItemAt(1, id3);
-        counter.assertNone();
-        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
-        counter.assertNone();
-
-        initializeContainer(container);
-        counter.reset();
-        item = container.addItemAt(container.size(), id3);
-        counter.assertNone();
-        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
-        counter.assertNone();
-
-        // passes filter
-
-        initializeContainer(container);
-        counter.reset();
-        item = container.addItem(id1);
-        counter.assertNone();
-        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1);
-        counter.assertOnce();
-        container.removeItem(id1);
-        counter.assertOnce();
-        // already removed
-        container.removeItem(id1);
-        counter.assertNone();
-
-        item = container.addItem(id3);
-        counter.assertNone();
-        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
-        counter.assertNone();
-        // not visible
-        container.removeItem(id3);
-        counter.assertNone();
-
-        // remove all
-
-        initializeContainer(container);
-        item = container.addItem(id1);
-        item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1);
-        counter.reset();
-        container.removeAllItems();
-        counter.assertOnce();
-        // no visible items
-        container.removeAllItems();
-        counter.assertNone();
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/filter/AbstractFilterTest.java b/tests/src/com/vaadin/tests/server/container/filter/AbstractFilterTest.java
deleted file mode 100644
index 2e913857a8..0000000000
--- a/tests/src/com/vaadin/tests/server/container/filter/AbstractFilterTest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.vaadin.tests.server.container.filter;
-
-import junit.framework.TestCase;
-
-import com.vaadin.data.Container.Filter;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.data.util.PropertysetItem;
-
-public abstract class AbstractFilterTest<FILTERTYPE extends Filter> extends
-        TestCase {
-
-    protected static final String PROPERTY1 = "property1";
-    protected static final String PROPERTY2 = "property2";
-
-    protected static class TestItem<T1, T2> extends PropertysetItem {
-
-        public TestItem(T1 value1, T2 value2) {
-            addItemProperty(PROPERTY1, new ObjectProperty<T1>(value1));
-            addItemProperty(PROPERTY2, new ObjectProperty<T2>(value2));
-        }
-    }
-
-    protected static class NullProperty implements Property {
-
-        public Object getValue() {
-            return null;
-        }
-
-        public void setValue(Object newValue) throws ReadOnlyException,
-                ConversionException {
-            throw new ReadOnlyException();
-        }
-
-        public Class<?> getType() {
-            return String.class;
-        }
-
-        public boolean isReadOnly() {
-            return true;
-        }
-
-        public void setReadOnly(boolean newStatus) {
-            // do nothing
-        }
-
-    }
-
-    public static class SameItemFilter implements Filter {
-
-        private final Item item;
-        private final Object propertyId;
-
-        public SameItemFilter(Item item) {
-            this(item, "");
-        }
-
-        public SameItemFilter(Item item, Object propertyId) {
-            this.item = item;
-            this.propertyId = propertyId;
-        }
-
-        public boolean passesFilter(Object itemId, Item item)
-                throws UnsupportedOperationException {
-            return this.item == item;
-        }
-
-        public boolean appliesToProperty(Object propertyId) {
-            return this.propertyId != null ? this.propertyId.equals(propertyId)
-                    : true;
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (obj == null || !getClass().equals(obj.getClass())) {
-                return false;
-            }
-            SameItemFilter other = (SameItemFilter) obj;
-            return item == other.item
-                    && (propertyId == null ? other.propertyId == null
-                            : propertyId.equals(other.propertyId));
-        }
-
-        @Override
-        public int hashCode() {
-            return item.hashCode();
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/filter/AndOrFilterTest.java b/tests/src/com/vaadin/tests/server/container/filter/AndOrFilterTest.java
deleted file mode 100644
index 45f4921c35..0000000000
--- a/tests/src/com/vaadin/tests/server/container/filter/AndOrFilterTest.java
+++ /dev/null
@@ -1,234 +0,0 @@
-package com.vaadin.tests.server.container.filter;
-
-import junit.framework.Assert;
-
-import com.vaadin.data.Container.Filter;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.BeanItem;
-import com.vaadin.data.util.filter.And;
-import com.vaadin.data.util.filter.Or;
-
-public class AndOrFilterTest extends AbstractFilterTest {
-
-    protected Item item1 = new BeanItem<Integer>(1);
-    protected Item item2 = new BeanItem<Integer>(2);
-
-    public void testNoFilterAnd() {
-        Filter filter = new And();
-
-        Assert.assertTrue(filter.passesFilter(null, item1));
-    }
-
-    public void testSingleFilterAnd() {
-        Filter filter = new And(new SameItemFilter(item1));
-
-        Assert.assertTrue(filter.passesFilter(null, item1));
-        Assert.assertFalse(filter.passesFilter(null, item2));
-    }
-
-    public void testTwoFilterAnd() {
-        Filter filter1 = new And(new SameItemFilter(item1), new SameItemFilter(
-                item1));
-        Filter filter2 = new And(new SameItemFilter(item1), new SameItemFilter(
-                item2));
-
-        Assert.assertTrue(filter1.passesFilter(null, item1));
-        Assert.assertFalse(filter1.passesFilter(null, item2));
-
-        Assert.assertFalse(filter2.passesFilter(null, item1));
-        Assert.assertFalse(filter2.passesFilter(null, item2));
-    }
-
-    public void testThreeFilterAnd() {
-        Filter filter1 = new And(new SameItemFilter(item1), new SameItemFilter(
-                item1), new SameItemFilter(item1));
-        Filter filter2 = new And(new SameItemFilter(item1), new SameItemFilter(
-                item1), new SameItemFilter(item2));
-
-        Assert.assertTrue(filter1.passesFilter(null, item1));
-        Assert.assertFalse(filter1.passesFilter(null, item2));
-
-        Assert.assertFalse(filter2.passesFilter(null, item1));
-        Assert.assertFalse(filter2.passesFilter(null, item2));
-    }
-
-    public void testNoFilterOr() {
-        Filter filter = new Or();
-
-        Assert.assertFalse(filter.passesFilter(null, item1));
-    }
-
-    public void testSingleFilterOr() {
-        Filter filter = new Or(new SameItemFilter(item1));
-
-        Assert.assertTrue(filter.passesFilter(null, item1));
-        Assert.assertFalse(filter.passesFilter(null, item2));
-    }
-
-    public void testTwoFilterOr() {
-        Filter filter1 = new Or(new SameItemFilter(item1), new SameItemFilter(
-                item1));
-        Filter filter2 = new Or(new SameItemFilter(item1), new SameItemFilter(
-                item2));
-
-        Assert.assertTrue(filter1.passesFilter(null, item1));
-        Assert.assertFalse(filter1.passesFilter(null, item2));
-
-        Assert.assertTrue(filter2.passesFilter(null, item1));
-        Assert.assertTrue(filter2.passesFilter(null, item2));
-    }
-
-    public void testThreeFilterOr() {
-        Filter filter1 = new Or(new SameItemFilter(item1), new SameItemFilter(
-                item1), new SameItemFilter(item1));
-        Filter filter2 = new Or(new SameItemFilter(item1), new SameItemFilter(
-                item1), new SameItemFilter(item2));
-
-        Assert.assertTrue(filter1.passesFilter(null, item1));
-        Assert.assertFalse(filter1.passesFilter(null, item2));
-
-        Assert.assertTrue(filter2.passesFilter(null, item1));
-        Assert.assertTrue(filter2.passesFilter(null, item2));
-    }
-
-    public void testAndEqualsHashCode() {
-        Filter filter0 = new And();
-        Filter filter0b = new And();
-        Filter filter1a = new And(new SameItemFilter(item1));
-        Filter filter1a2 = new And(new SameItemFilter(item1));
-        Filter filter1b = new And(new SameItemFilter(item2));
-        Filter filter2a = new And(new SameItemFilter(item1),
-                new SameItemFilter(item1));
-        Filter filter2b = new And(new SameItemFilter(item1),
-                new SameItemFilter(item2));
-        Filter filter2b2 = new And(new SameItemFilter(item1),
-                new SameItemFilter(item2));
-        Filter other0 = new Or();
-        Filter other1 = new Or(new SameItemFilter(item1));
-
-        Assert.assertEquals(filter0, filter0);
-        Assert.assertEquals(filter0, filter0b);
-        Assert.assertFalse(filter0.equals(filter1a));
-        Assert.assertFalse(filter0.equals(other0));
-        Assert.assertFalse(filter0.equals(other1));
-
-        Assert.assertFalse(filter1a.equals(filter1b));
-        Assert.assertFalse(filter1a.equals(other1));
-
-        Assert.assertFalse(filter1a.equals(filter2a));
-        Assert.assertFalse(filter2a.equals(filter1a));
-
-        Assert.assertFalse(filter2a.equals(filter2b));
-        Assert.assertEquals(filter2b, filter2b2);
-
-        // hashCode()
-        Assert.assertEquals(filter0.hashCode(), filter0.hashCode());
-        Assert.assertEquals(filter0.hashCode(), filter0b.hashCode());
-        Assert.assertEquals(filter1a.hashCode(), filter1a.hashCode());
-        Assert.assertEquals(filter1a.hashCode(), filter1a2.hashCode());
-        Assert.assertEquals(filter2a.hashCode(), filter2a.hashCode());
-        Assert.assertEquals(filter2b.hashCode(), filter2b2.hashCode());
-    }
-
-    public void testOrEqualsHashCode() {
-        Filter filter0 = new Or();
-        Filter filter0b = new Or();
-        Filter filter1a = new Or(new SameItemFilter(item1));
-        Filter filter1a2 = new Or(new SameItemFilter(item1));
-        Filter filter1b = new Or(new SameItemFilter(item2));
-        Filter filter2a = new Or(new SameItemFilter(item1), new SameItemFilter(
-                item1));
-        Filter filter2b = new Or(new SameItemFilter(item1), new SameItemFilter(
-                item2));
-        Filter filter2b2 = new Or(new SameItemFilter(item1),
-                new SameItemFilter(item2));
-        Filter other0 = new And();
-        Filter other1 = new And(new SameItemFilter(item1));
-
-        Assert.assertEquals(filter0, filter0);
-        Assert.assertEquals(filter0, filter0b);
-        Assert.assertFalse(filter0.equals(filter1a));
-        Assert.assertFalse(filter0.equals(other0));
-        Assert.assertFalse(filter0.equals(other1));
-
-        Assert.assertFalse(filter1a.equals(filter1b));
-        Assert.assertFalse(filter1a.equals(other1));
-
-        Assert.assertFalse(filter1a.equals(filter2a));
-        Assert.assertFalse(filter2a.equals(filter1a));
-
-        Assert.assertFalse(filter2a.equals(filter2b));
-        Assert.assertEquals(filter2b, filter2b2);
-
-        // hashCode()
-        Assert.assertEquals(filter0.hashCode(), filter0.hashCode());
-        Assert.assertEquals(filter0.hashCode(), filter0b.hashCode());
-        Assert.assertEquals(filter1a.hashCode(), filter1a.hashCode());
-        Assert.assertEquals(filter1a.hashCode(), filter1a2.hashCode());
-        Assert.assertEquals(filter2a.hashCode(), filter2a.hashCode());
-        Assert.assertEquals(filter2b.hashCode(), filter2b2.hashCode());
-    }
-
-    public void testAndAppliesToProperty() {
-        Filter filter0 = new And();
-        Filter filter1a = new And(new SameItemFilter(item1, "a"));
-        Filter filter1b = new And(new SameItemFilter(item1, "b"));
-        Filter filter2aa = new And(new SameItemFilter(item1, "a"),
-                new SameItemFilter(item1, "a"));
-        Filter filter2ab = new And(new SameItemFilter(item1, "a"),
-                new SameItemFilter(item1, "b"));
-        Filter filter3abc = new And(new SameItemFilter(item1, "a"),
-                new SameItemFilter(item1, "b"), new SameItemFilter(item1, "c"));
-
-        // empty And does not filter out anything
-        Assert.assertFalse(filter0.appliesToProperty("a"));
-        Assert.assertFalse(filter0.appliesToProperty("d"));
-
-        Assert.assertTrue(filter1a.appliesToProperty("a"));
-        Assert.assertFalse(filter1a.appliesToProperty("b"));
-        Assert.assertFalse(filter1b.appliesToProperty("a"));
-        Assert.assertTrue(filter1b.appliesToProperty("b"));
-
-        Assert.assertTrue(filter2aa.appliesToProperty("a"));
-        Assert.assertFalse(filter2aa.appliesToProperty("b"));
-        Assert.assertTrue(filter2ab.appliesToProperty("a"));
-        Assert.assertTrue(filter2ab.appliesToProperty("b"));
-
-        Assert.assertTrue(filter3abc.appliesToProperty("a"));
-        Assert.assertTrue(filter3abc.appliesToProperty("b"));
-        Assert.assertTrue(filter3abc.appliesToProperty("c"));
-        Assert.assertFalse(filter3abc.appliesToProperty("d"));
-    }
-
-    public void testOrAppliesToProperty() {
-        Filter filter0 = new Or();
-        Filter filter1a = new Or(new SameItemFilter(item1, "a"));
-        Filter filter1b = new Or(new SameItemFilter(item1, "b"));
-        Filter filter2aa = new Or(new SameItemFilter(item1, "a"),
-                new SameItemFilter(item1, "a"));
-        Filter filter2ab = new Or(new SameItemFilter(item1, "a"),
-                new SameItemFilter(item1, "b"));
-        Filter filter3abc = new Or(new SameItemFilter(item1, "a"),
-                new SameItemFilter(item1, "b"), new SameItemFilter(item1, "c"));
-
-        // empty Or filters out everything
-        Assert.assertTrue(filter0.appliesToProperty("a"));
-        Assert.assertTrue(filter0.appliesToProperty("d"));
-
-        Assert.assertTrue(filter1a.appliesToProperty("a"));
-        Assert.assertFalse(filter1a.appliesToProperty("b"));
-        Assert.assertFalse(filter1b.appliesToProperty("a"));
-        Assert.assertTrue(filter1b.appliesToProperty("b"));
-
-        Assert.assertTrue(filter2aa.appliesToProperty("a"));
-        Assert.assertFalse(filter2aa.appliesToProperty("b"));
-        Assert.assertTrue(filter2ab.appliesToProperty("a"));
-        Assert.assertTrue(filter2ab.appliesToProperty("b"));
-
-        Assert.assertTrue(filter3abc.appliesToProperty("a"));
-        Assert.assertTrue(filter3abc.appliesToProperty("b"));
-        Assert.assertTrue(filter3abc.appliesToProperty("c"));
-        Assert.assertFalse(filter3abc.appliesToProperty("d"));
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/filter/CompareFilterTest.java b/tests/src/com/vaadin/tests/server/container/filter/CompareFilterTest.java
deleted file mode 100644
index d6e4ffe567..0000000000
--- a/tests/src/com/vaadin/tests/server/container/filter/CompareFilterTest.java
+++ /dev/null
@@ -1,260 +0,0 @@
-package com.vaadin.tests.server.container.filter;
-
-import java.util.Date;
-
-import junit.framework.Assert;
-
-import com.vaadin.data.Container.Filter;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.data.util.PropertysetItem;
-import com.vaadin.data.util.filter.Compare.Equal;
-import com.vaadin.data.util.filter.Compare.Greater;
-import com.vaadin.data.util.filter.Compare.GreaterOrEqual;
-import com.vaadin.data.util.filter.Compare.Less;
-import com.vaadin.data.util.filter.Compare.LessOrEqual;
-
-public class CompareFilterTest extends AbstractFilterTest {
-
-    protected Item itemNull;
-    protected Item itemEmpty;
-    protected Item itemA;
-    protected Item itemB;
-    protected Item itemC;
-
-    protected final Filter equalB = new Equal(PROPERTY1, "b");
-    protected final Filter greaterB = new Greater(PROPERTY1, "b");
-    protected final Filter lessB = new Less(PROPERTY1, "b");
-    protected final Filter greaterEqualB = new GreaterOrEqual(PROPERTY1, "b");
-    protected final Filter lessEqualB = new LessOrEqual(PROPERTY1, "b");
-
-    protected final Filter equalNull = new Equal(PROPERTY1, null);
-    protected final Filter greaterNull = new Greater(PROPERTY1, null);
-    protected final Filter lessNull = new Less(PROPERTY1, null);
-    protected final Filter greaterEqualNull = new GreaterOrEqual(PROPERTY1,
-            null);
-    protected final Filter lessEqualNull = new LessOrEqual(PROPERTY1, null);
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        itemNull = new PropertysetItem();
-        itemNull.addItemProperty(PROPERTY1, new ObjectProperty<String>(null,
-                String.class));
-        itemEmpty = new PropertysetItem();
-        itemEmpty.addItemProperty(PROPERTY1, new ObjectProperty<String>("",
-                String.class));
-        itemA = new PropertysetItem();
-        itemA.addItemProperty(PROPERTY1, new ObjectProperty<String>("a",
-                String.class));
-        itemB = new PropertysetItem();
-        itemB.addItemProperty(PROPERTY1, new ObjectProperty<String>("b",
-                String.class));
-        itemC = new PropertysetItem();
-        itemC.addItemProperty(PROPERTY1, new ObjectProperty<String>("c",
-                String.class));
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        itemNull = null;
-        itemEmpty = null;
-        itemA = null;
-        itemB = null;
-    }
-
-    public void testCompareString() {
-        Assert.assertFalse(equalB.passesFilter(null, itemEmpty));
-        Assert.assertFalse(equalB.passesFilter(null, itemA));
-        Assert.assertTrue(equalB.passesFilter(null, itemB));
-        Assert.assertFalse(equalB.passesFilter(null, itemC));
-
-        Assert.assertFalse(greaterB.passesFilter(null, itemEmpty));
-        Assert.assertFalse(greaterB.passesFilter(null, itemA));
-        Assert.assertFalse(greaterB.passesFilter(null, itemB));
-        Assert.assertTrue(greaterB.passesFilter(null, itemC));
-
-        Assert.assertTrue(lessB.passesFilter(null, itemEmpty));
-        Assert.assertTrue(lessB.passesFilter(null, itemA));
-        Assert.assertFalse(lessB.passesFilter(null, itemB));
-        Assert.assertFalse(lessB.passesFilter(null, itemC));
-
-        Assert.assertFalse(greaterEqualB.passesFilter(null, itemEmpty));
-        Assert.assertFalse(greaterEqualB.passesFilter(null, itemA));
-        Assert.assertTrue(greaterEqualB.passesFilter(null, itemB));
-        Assert.assertTrue(greaterEqualB.passesFilter(null, itemC));
-
-        Assert.assertTrue(lessEqualB.passesFilter(null, itemEmpty));
-        Assert.assertTrue(lessEqualB.passesFilter(null, itemA));
-        Assert.assertTrue(lessEqualB.passesFilter(null, itemB));
-        Assert.assertFalse(lessEqualB.passesFilter(null, itemC));
-    }
-
-    public void testCompareWithNull() {
-        // null comparisons: null is less than any other value
-        Assert.assertFalse(equalB.passesFilter(null, itemNull));
-        Assert.assertTrue(greaterB.passesFilter(null, itemNull));
-        Assert.assertFalse(lessB.passesFilter(null, itemNull));
-        Assert.assertTrue(greaterEqualB.passesFilter(null, itemNull));
-        Assert.assertFalse(lessEqualB.passesFilter(null, itemNull));
-
-        Assert.assertTrue(equalNull.passesFilter(null, itemNull));
-        Assert.assertFalse(greaterNull.passesFilter(null, itemNull));
-        Assert.assertFalse(lessNull.passesFilter(null, itemNull));
-        Assert.assertTrue(greaterEqualNull.passesFilter(null, itemNull));
-        Assert.assertTrue(lessEqualNull.passesFilter(null, itemNull));
-
-        Assert.assertFalse(equalNull.passesFilter(null, itemA));
-        Assert.assertFalse(greaterNull.passesFilter(null, itemA));
-        Assert.assertTrue(lessNull.passesFilter(null, itemA));
-        Assert.assertFalse(greaterEqualNull.passesFilter(null, itemA));
-        Assert.assertTrue(lessEqualNull.passesFilter(null, itemA));
-    }
-
-    public void testCompareInteger() {
-        int negative = -1;
-        int zero = 0;
-        int positive = 1;
-
-        Item itemNegative = new PropertysetItem();
-        itemNegative.addItemProperty(PROPERTY1, new ObjectProperty<Integer>(
-                negative, Integer.class));
-        Item itemZero = new PropertysetItem();
-        itemZero.addItemProperty(PROPERTY1, new ObjectProperty<Integer>(zero,
-                Integer.class));
-        Item itemPositive = new PropertysetItem();
-        itemPositive.addItemProperty(PROPERTY1, new ObjectProperty<Integer>(
-                positive, Integer.class));
-
-        Filter equalZero = new Equal(PROPERTY1, zero);
-        Assert.assertFalse(equalZero.passesFilter(null, itemNegative));
-        Assert.assertTrue(equalZero.passesFilter(null, itemZero));
-        Assert.assertFalse(equalZero.passesFilter(null, itemPositive));
-
-        Filter isPositive = new Greater(PROPERTY1, zero);
-        Assert.assertFalse(isPositive.passesFilter(null, itemNegative));
-        Assert.assertFalse(isPositive.passesFilter(null, itemZero));
-        Assert.assertTrue(isPositive.passesFilter(null, itemPositive));
-
-        Filter isNegative = new Less(PROPERTY1, zero);
-        Assert.assertTrue(isNegative.passesFilter(null, itemNegative));
-        Assert.assertFalse(isNegative.passesFilter(null, itemZero));
-        Assert.assertFalse(isNegative.passesFilter(null, itemPositive));
-
-        Filter isNonNegative = new GreaterOrEqual(PROPERTY1, zero);
-        Assert.assertFalse(isNonNegative.passesFilter(null, itemNegative));
-        Assert.assertTrue(isNonNegative.passesFilter(null, itemZero));
-        Assert.assertTrue(isNonNegative.passesFilter(null, itemPositive));
-
-        Filter isNonPositive = new LessOrEqual(PROPERTY1, zero);
-        Assert.assertTrue(isNonPositive.passesFilter(null, itemNegative));
-        Assert.assertTrue(isNonPositive.passesFilter(null, itemZero));
-        Assert.assertFalse(isNonPositive.passesFilter(null, itemPositive));
-    }
-
-    public void testCompareDate() {
-        Date now = new Date();
-        // new Date() is only accurate to the millisecond, so repeating it gives
-        // the same date
-        Date earlier = new Date(now.getTime() - 1);
-        Date later = new Date(now.getTime() + 1);
-
-        Item itemEarlier = new PropertysetItem();
-        itemEarlier.addItemProperty(PROPERTY1, new ObjectProperty<Date>(
-                earlier, Date.class));
-        Item itemNow = new PropertysetItem();
-        itemNow.addItemProperty(PROPERTY1, new ObjectProperty<Date>(now,
-                Date.class));
-        Item itemLater = new PropertysetItem();
-        itemLater.addItemProperty(PROPERTY1, new ObjectProperty<Date>(later,
-                Date.class));
-
-        Filter equalNow = new Equal(PROPERTY1, now);
-        Assert.assertFalse(equalNow.passesFilter(null, itemEarlier));
-        Assert.assertTrue(equalNow.passesFilter(null, itemNow));
-        Assert.assertFalse(equalNow.passesFilter(null, itemLater));
-
-        Filter after = new Greater(PROPERTY1, now);
-        Assert.assertFalse(after.passesFilter(null, itemEarlier));
-        Assert.assertFalse(after.passesFilter(null, itemNow));
-        Assert.assertTrue(after.passesFilter(null, itemLater));
-
-        Filter before = new Less(PROPERTY1, now);
-        Assert.assertTrue(before.passesFilter(null, itemEarlier));
-        Assert.assertFalse(before.passesFilter(null, itemNow));
-        Assert.assertFalse(before.passesFilter(null, itemLater));
-
-        Filter afterOrNow = new GreaterOrEqual(PROPERTY1, now);
-        Assert.assertFalse(afterOrNow.passesFilter(null, itemEarlier));
-        Assert.assertTrue(afterOrNow.passesFilter(null, itemNow));
-        Assert.assertTrue(afterOrNow.passesFilter(null, itemLater));
-
-        Filter beforeOrNow = new LessOrEqual(PROPERTY1, now);
-        Assert.assertTrue(beforeOrNow.passesFilter(null, itemEarlier));
-        Assert.assertTrue(beforeOrNow.passesFilter(null, itemNow));
-        Assert.assertFalse(beforeOrNow.passesFilter(null, itemLater));
-    }
-
-    public void testCompareAppliesToProperty() {
-        Filter filterA = new Equal("a", 1);
-        Filter filterB = new Equal("b", 1);
-
-        Assert.assertTrue(filterA.appliesToProperty("a"));
-        Assert.assertFalse(filterA.appliesToProperty("b"));
-        Assert.assertFalse(filterB.appliesToProperty("a"));
-        Assert.assertTrue(filterB.appliesToProperty("b"));
-    }
-
-    public void testCompareEqualsHashCode() {
-        // most checks with Equal filter, then only some with others
-        Filter equalNull2 = new Equal(PROPERTY1, null);
-        Filter equalNullProperty2 = new Equal(PROPERTY2, null);
-        Filter equalEmpty = new Equal(PROPERTY1, "");
-        Filter equalEmpty2 = new Equal(PROPERTY1, "");
-        Filter equalEmptyProperty2 = new Equal(PROPERTY2, "");
-        Filter equalA = new Equal(PROPERTY1, "a");
-        Filter equalB2 = new Equal(PROPERTY1, "b");
-        Filter equalBProperty2 = new Equal(PROPERTY2, "b");
-
-        Filter greaterEmpty = new Greater(PROPERTY1, "");
-
-        // equals()
-        Assert.assertEquals(equalNull, equalNull);
-        Assert.assertEquals(equalNull, equalNull2);
-        Assert.assertFalse(equalNull.equals(equalNullProperty2));
-        Assert.assertFalse(equalNull.equals(equalEmpty));
-        Assert.assertFalse(equalNull.equals(equalB));
-
-        Assert.assertEquals(equalEmpty, equalEmpty);
-        Assert.assertFalse(equalEmpty.equals(equalNull));
-        Assert.assertEquals(equalEmpty, equalEmpty2);
-        Assert.assertFalse(equalEmpty.equals(equalEmptyProperty2));
-        Assert.assertFalse(equalEmpty.equals(equalB));
-
-        Assert.assertEquals(equalB, equalB);
-        Assert.assertFalse(equalB.equals(equalNull));
-        Assert.assertFalse(equalB.equals(equalEmpty));
-        Assert.assertEquals(equalB, equalB2);
-        Assert.assertFalse(equalB.equals(equalBProperty2));
-        Assert.assertFalse(equalB.equals(equalA));
-
-        Assert.assertEquals(greaterB, greaterB);
-        Assert.assertFalse(greaterB.equals(lessB));
-        Assert.assertFalse(greaterB.equals(greaterEqualB));
-        Assert.assertFalse(greaterB.equals(lessEqualB));
-
-        Assert.assertFalse(greaterNull.equals(greaterEmpty));
-        Assert.assertFalse(greaterNull.equals(greaterB));
-        Assert.assertFalse(greaterEmpty.equals(greaterNull));
-        Assert.assertFalse(greaterEmpty.equals(greaterB));
-        Assert.assertFalse(greaterB.equals(greaterNull));
-        Assert.assertFalse(greaterB.equals(greaterEmpty));
-
-        // hashCode()
-        Assert.assertEquals(equalNull.hashCode(), equalNull2.hashCode());
-        Assert.assertEquals(equalEmpty.hashCode(), equalEmpty2.hashCode());
-        Assert.assertEquals(equalB.hashCode(), equalB2.hashCode());
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/filter/IsNullFilterTest.java b/tests/src/com/vaadin/tests/server/container/filter/IsNullFilterTest.java
deleted file mode 100644
index b5167592d2..0000000000
--- a/tests/src/com/vaadin/tests/server/container/filter/IsNullFilterTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.vaadin.tests.server.container.filter;
-
-import junit.framework.Assert;
-
-import com.vaadin.data.Container.Filter;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.data.util.PropertysetItem;
-import com.vaadin.data.util.filter.And;
-import com.vaadin.data.util.filter.IsNull;
-
-public class IsNullFilterTest extends AbstractFilterTest {
-
-    public void testIsNull() {
-        Item item1 = new PropertysetItem();
-        item1.addItemProperty("a", new ObjectProperty<String>(null,
-                String.class));
-        item1.addItemProperty("b",
-                new ObjectProperty<String>("b", String.class));
-        Item item2 = new PropertysetItem();
-        item2.addItemProperty("a",
-                new ObjectProperty<String>("a", String.class));
-        item2.addItemProperty("b", new ObjectProperty<String>(null,
-                String.class));
-
-        Filter filter1 = new IsNull("a");
-        Filter filter2 = new IsNull("b");
-
-        Assert.assertTrue(filter1.passesFilter(null, item1));
-        Assert.assertFalse(filter1.passesFilter(null, item2));
-        Assert.assertFalse(filter2.passesFilter(null, item1));
-        Assert.assertTrue(filter2.passesFilter(null, item2));
-    }
-
-    public void testIsNullAppliesToProperty() {
-        Filter filterA = new IsNull("a");
-        Filter filterB = new IsNull("b");
-
-        Assert.assertTrue(filterA.appliesToProperty("a"));
-        Assert.assertFalse(filterA.appliesToProperty("b"));
-        Assert.assertFalse(filterB.appliesToProperty("a"));
-        Assert.assertTrue(filterB.appliesToProperty("b"));
-    }
-
-    public void testIsNullEqualsHashCode() {
-        Filter filter1 = new IsNull("a");
-        Filter filter1b = new IsNull("a");
-        Filter filter2 = new IsNull("b");
-
-        // equals()
-        Assert.assertEquals(filter1, filter1b);
-        Assert.assertFalse(filter1.equals(filter2));
-        Assert.assertFalse(filter1.equals(new And()));
-
-        // hashCode()
-        Assert.assertEquals(filter1.hashCode(), filter1b.hashCode());
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/filter/NotFilterTest.java b/tests/src/com/vaadin/tests/server/container/filter/NotFilterTest.java
deleted file mode 100644
index 02488fe063..0000000000
--- a/tests/src/com/vaadin/tests/server/container/filter/NotFilterTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vaadin.tests.server.container.filter;
-
-import junit.framework.Assert;
-
-import com.vaadin.data.Container.Filter;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.BeanItem;
-import com.vaadin.data.util.filter.And;
-import com.vaadin.data.util.filter.Not;
-
-public class NotFilterTest extends AbstractFilterTest {
-
-    protected Item item1 = new BeanItem<Integer>(1);
-    protected Item item2 = new BeanItem<Integer>(2);
-
-    public void testNot() {
-        Filter origFilter = new SameItemFilter(item1);
-        Filter filter = new Not(origFilter);
-
-        Assert.assertTrue(origFilter.passesFilter(null, item1));
-        Assert.assertFalse(origFilter.passesFilter(null, item2));
-        Assert.assertFalse(filter.passesFilter(null, item1));
-        Assert.assertTrue(filter.passesFilter(null, item2));
-    }
-
-    public void testANotAppliesToProperty() {
-        Filter filterA = new Not(new SameItemFilter(item1, "a"));
-        Filter filterB = new Not(new SameItemFilter(item1, "b"));
-
-        Assert.assertTrue(filterA.appliesToProperty("a"));
-        Assert.assertFalse(filterA.appliesToProperty("b"));
-        Assert.assertFalse(filterB.appliesToProperty("a"));
-        Assert.assertTrue(filterB.appliesToProperty("b"));
-    }
-
-    public void testNotEqualsHashCode() {
-        Filter origFilter = new SameItemFilter(item1);
-        Filter filter1 = new Not(origFilter);
-        Filter filter1b = new Not(new SameItemFilter(item1));
-        Filter filter2 = new Not(new SameItemFilter(item2));
-
-        // equals()
-        Assert.assertEquals(filter1, filter1b);
-        Assert.assertFalse(filter1.equals(filter2));
-        Assert.assertFalse(filter1.equals(origFilter));
-        Assert.assertFalse(filter1.equals(new And()));
-
-        // hashCode()
-        Assert.assertEquals(filter1.hashCode(), filter1b.hashCode());
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/filter/SimpleStringFilterTest.java b/tests/src/com/vaadin/tests/server/container/filter/SimpleStringFilterTest.java
deleted file mode 100644
index dbc803be24..0000000000
--- a/tests/src/com/vaadin/tests/server/container/filter/SimpleStringFilterTest.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package com.vaadin.tests.server.container.filter;
-
-import junit.framework.Assert;
-
-import com.vaadin.data.util.filter.SimpleStringFilter;
-
-public class SimpleStringFilterTest extends AbstractFilterTest {
-
-    protected static TestItem<String, String> createTestItem() {
-        return new TestItem<String, String>("abcde", "TeSt");
-    }
-
-    protected TestItem<String, String> getTestItem() {
-        return createTestItem();
-    }
-
-    protected SimpleStringFilter f(Object propertyId, String filterString,
-            boolean ignoreCase, boolean onlyMatchPrefix) {
-        return new SimpleStringFilter(propertyId, filterString, ignoreCase,
-                onlyMatchPrefix);
-    }
-
-    protected boolean passes(Object propertyId, String filterString,
-            boolean ignoreCase, boolean onlyMatchPrefix) {
-        return f(propertyId, filterString, ignoreCase, onlyMatchPrefix)
-                .passesFilter(null, getTestItem());
-    }
-
-    public void testStartsWithCaseSensitive() {
-        Assert.assertTrue(passes(PROPERTY1, "ab", false, true));
-        Assert.assertTrue(passes(PROPERTY1, "", false, true));
-
-        Assert.assertFalse(passes(PROPERTY2, "ab", false, true));
-        Assert.assertFalse(passes(PROPERTY1, "AB", false, true));
-    }
-
-    public void testStartsWithCaseInsensitive() {
-        Assert.assertTrue(passes(PROPERTY1, "AB", true, true));
-        Assert.assertTrue(passes(PROPERTY2, "te", true, true));
-        Assert.assertFalse(passes(PROPERTY2, "AB", true, true));
-    }
-
-    public void testContainsCaseSensitive() {
-        Assert.assertTrue(passes(PROPERTY1, "ab", false, false));
-        Assert.assertTrue(passes(PROPERTY1, "abcde", false, false));
-        Assert.assertTrue(passes(PROPERTY1, "cd", false, false));
-        Assert.assertTrue(passes(PROPERTY1, "e", false, false));
-        Assert.assertTrue(passes(PROPERTY1, "", false, false));
-
-        Assert.assertFalse(passes(PROPERTY2, "ab", false, false));
-        Assert.assertFalse(passes(PROPERTY1, "es", false, false));
-    }
-
-    public void testContainsCaseInsensitive() {
-        Assert.assertTrue(passes(PROPERTY1, "AB", true, false));
-        Assert.assertTrue(passes(PROPERTY1, "aBcDe", true, false));
-        Assert.assertTrue(passes(PROPERTY1, "CD", true, false));
-        Assert.assertTrue(passes(PROPERTY1, "", true, false));
-
-        Assert.assertTrue(passes(PROPERTY2, "es", true, false));
-
-        Assert.assertFalse(passes(PROPERTY2, "ab", true, false));
-    }
-
-    public void testAppliesToProperty() {
-        SimpleStringFilter filter = f(PROPERTY1, "ab", false, true);
-        Assert.assertTrue(filter.appliesToProperty(PROPERTY1));
-        Assert.assertFalse(filter.appliesToProperty(PROPERTY2));
-        Assert.assertFalse(filter.appliesToProperty("other"));
-    }
-
-    public void testEqualsHashCode() {
-        SimpleStringFilter filter = f(PROPERTY1, "ab", false, true);
-
-        SimpleStringFilter f1 = f(PROPERTY2, "ab", false, true);
-        SimpleStringFilter f1b = f(PROPERTY2, "ab", false, true);
-        SimpleStringFilter f2 = f(PROPERTY1, "cd", false, true);
-        SimpleStringFilter f2b = f(PROPERTY1, "cd", false, true);
-        SimpleStringFilter f3 = f(PROPERTY1, "ab", true, true);
-        SimpleStringFilter f3b = f(PROPERTY1, "ab", true, true);
-        SimpleStringFilter f4 = f(PROPERTY1, "ab", false, false);
-        SimpleStringFilter f4b = f(PROPERTY1, "ab", false, false);
-
-        // equal but not same instance
-        Assert.assertEquals(f1, f1b);
-        Assert.assertEquals(f2, f2b);
-        Assert.assertEquals(f3, f3b);
-        Assert.assertEquals(f4, f4b);
-
-        // more than one property differ
-        Assert.assertFalse(f1.equals(f2));
-        Assert.assertFalse(f1.equals(f3));
-        Assert.assertFalse(f1.equals(f4));
-        Assert.assertFalse(f2.equals(f1));
-        Assert.assertFalse(f2.equals(f3));
-        Assert.assertFalse(f2.equals(f4));
-        Assert.assertFalse(f3.equals(f1));
-        Assert.assertFalse(f3.equals(f2));
-        Assert.assertFalse(f3.equals(f4));
-        Assert.assertFalse(f4.equals(f1));
-        Assert.assertFalse(f4.equals(f2));
-        Assert.assertFalse(f4.equals(f3));
-
-        // only one property differs
-        Assert.assertFalse(filter.equals(f1));
-        Assert.assertFalse(filter.equals(f2));
-        Assert.assertFalse(filter.equals(f3));
-        Assert.assertFalse(filter.equals(f4));
-
-        Assert.assertFalse(f1.equals(null));
-        Assert.assertFalse(f1.equals(new Object()));
-
-        Assert.assertEquals(f1.hashCode(), f1b.hashCode());
-        Assert.assertEquals(f2.hashCode(), f2b.hashCode());
-        Assert.assertEquals(f3.hashCode(), f3b.hashCode());
-        Assert.assertEquals(f4.hashCode(), f4b.hashCode());
-    }
-
-    public void testNonExistentProperty() {
-        Assert.assertFalse(passes("other1", "ab", false, true));
-    }
-
-    public void testNullValueForProperty() {
-        TestItem<String, String> item = createTestItem();
-        item.addItemProperty("other1", new NullProperty());
-
-        Assert.assertFalse(f("other1", "ab", false, true).passesFilter(null,
-                item));
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/AllTests.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/AllTests.java
deleted file mode 100644
index 5191fcc341..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/AllTests.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import org.junit.runners.Suite.SuiteClasses;
-
-import com.vaadin.data.util.sqlcontainer.query.generator.DefaultSQLGenerator;
-import com.vaadin.data.util.sqlcontainer.query.generator.MSSQLGenerator;
-import com.vaadin.data.util.sqlcontainer.query.generator.OracleGenerator;
-import com.vaadin.data.util.sqlcontainer.query.generator.SQLGenerator;
-import com.vaadin.tests.server.container.sqlcontainer.connection.J2EEConnectionPoolTest;
-import com.vaadin.tests.server.container.sqlcontainer.connection.SimpleJDBCConnectionPoolTest;
-import com.vaadin.tests.server.container.sqlcontainer.filters.BetweenTest;
-import com.vaadin.tests.server.container.sqlcontainer.filters.LikeTest;
-import com.vaadin.tests.server.container.sqlcontainer.generator.SQLGeneratorsTest;
-import com.vaadin.tests.server.container.sqlcontainer.query.FreeformQueryTest;
-import com.vaadin.tests.server.container.sqlcontainer.query.QueryBuilderTest;
-import com.vaadin.tests.server.container.sqlcontainer.query.TableQueryTest;
-
-@RunWith(Suite.class)
-@SuiteClasses({ SimpleJDBCConnectionPoolTest.class,
-        J2EEConnectionPoolTest.class, LikeTest.class, QueryBuilderTest.class,
-        FreeformQueryTest.class, RowIdTest.class, SQLContainerTest.class,
-        SQLContainerTableQueryTest.class, ColumnPropertyTest.class,
-        TableQueryTest.class, SQLGeneratorsTest.class, UtilTest.class,
-        TicketTests.class, BetweenTest.class, ReadOnlyRowIdTest.class })
-public class AllTests {
-    /* Set the DB used for testing here! */
-    public enum DB {
-        HSQLDB, MYSQL, POSTGRESQL, MSSQL, ORACLE;
-    }
-
-    /* 0 = HSQLDB, 1 = MYSQL, 2 = POSTGRESQL, 3 = MSSQL, 4 = ORACLE */
-    public static final DB db = DB.HSQLDB;
-
-    /* Auto-increment column offset (HSQLDB = 0, MYSQL = 1, POSTGRES = 1) */
-    public static int offset;
-    /* Garbage table creation query (=three queries for oracle) */
-    public static String createGarbage;
-    public static String createGarbageSecond;
-    public static String createGarbageThird;
-    /* DB Drivers, urls, usernames and passwords */
-    public static String dbDriver;
-    public static String dbURL;
-    public static String dbUser;
-    public static String dbPwd;
-    /* People -test table creation statement(s) */
-    public static String peopleFirst;
-    public static String peopleSecond;
-    public static String peopleThird;
-    /* Versioned -test table createion statement(s) */
-    public static String[] versionStatements;
-    /* SQL Generator used during the testing */
-    public static SQLGenerator sqlGen;
-
-    /* Set DB-specific settings based on selected DB */
-    static {
-        sqlGen = new DefaultSQLGenerator();
-        switch (db) {
-        case HSQLDB:
-            offset = 0;
-            createGarbage = "create table garbage (id integer generated always as identity, type varchar(32), PRIMARY KEY(id))";
-            dbDriver = "org.hsqldb.jdbc.JDBCDriver";
-            dbURL = "jdbc:hsqldb:mem:sqlcontainer";
-            dbUser = "SA";
-            dbPwd = "";
-            peopleFirst = "create table people (id integer generated always as identity, name varchar(32), AGE INTEGER)";
-            peopleSecond = "alter table people add primary key (id)";
-            versionStatements = new String[] {
-                    "create table versioned (id integer generated always as identity, text varchar(255), version tinyint default 0)",
-                    "alter table versioned add primary key (id)" };
-            break;
-        case MYSQL:
-            offset = 1;
-            createGarbage = "create table GARBAGE (ID integer auto_increment, type varchar(32), PRIMARY KEY(ID))";
-            dbDriver = "com.mysql.jdbc.Driver";
-            dbURL = "jdbc:mysql:///sqlcontainer";
-            dbUser = "sqlcontainer";
-            dbPwd = "sqlcontainer";
-            peopleFirst = "create table PEOPLE (ID integer auto_increment not null, NAME varchar(32), AGE INTEGER, primary key(ID))";
-            peopleSecond = null;
-            versionStatements = new String[] {
-                    "create table VERSIONED (ID integer auto_increment not null, TEXT varchar(255), VERSION tinyint default 0, primary key(ID))",
-                    "CREATE TRIGGER upd_version BEFORE UPDATE ON VERSIONED"
-                            + " FOR EACH ROW SET NEW.VERSION = OLD.VERSION+1" };
-            break;
-        case POSTGRESQL:
-            offset = 1;
-            createGarbage = "create table GARBAGE (\"ID\" serial PRIMARY KEY, \"TYPE\" varchar(32))";
-            dbDriver = "org.postgresql.Driver";
-            dbURL = "jdbc:postgresql://localhost:5432/test";
-            dbUser = "postgres";
-            dbPwd = "postgres";
-            peopleFirst = "create table PEOPLE (\"ID\" serial primary key, \"NAME\" VARCHAR(32), \"AGE\" INTEGER)";
-            peopleSecond = null;
-            versionStatements = new String[] {
-                    "create table VERSIONED (\"ID\" serial primary key, \"TEXT\" VARCHAR(255), \"VERSION\" INTEGER DEFAULT 0)",
-                    "CREATE OR REPLACE FUNCTION zz_row_version() RETURNS TRIGGER AS $$"
-                            + "BEGIN"
-                            + "   IF TG_OP = 'UPDATE'"
-                            + "       AND NEW.\"VERSION\" = old.\"VERSION\""
-                            + "       AND ROW(NEW.*) IS DISTINCT FROM ROW (old.*)"
-                            + "   THEN"
-                            + "       NEW.\"VERSION\" := NEW.\"VERSION\" + 1;"
-                            + "   END IF;" + "   RETURN NEW;" + "END;"
-                            + "$$ LANGUAGE plpgsql;",
-                    "CREATE TRIGGER \"mytable_modify_dt_tr\" BEFORE UPDATE"
-                            + "   ON VERSIONED FOR EACH ROW"
-                            + "   EXECUTE PROCEDURE \"public\".\"zz_row_version\"();" };
-            break;
-        case MSSQL:
-            offset = 1;
-            createGarbage = "create table GARBAGE (\"ID\" int identity(1,1) primary key, \"TYPE\" varchar(32))";
-            dbDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
-            dbURL = "jdbc:sqlserver://localhost:1433;databaseName=tempdb;";
-            dbUser = "sa";
-            dbPwd = "sa";
-            peopleFirst = "create table PEOPLE (\"ID\" int identity(1,1) primary key, \"NAME\" VARCHAR(32), \"AGE\" INTEGER)";
-            peopleSecond = null;
-            versionStatements = new String[] { "create table VERSIONED (\"ID\" int identity(1,1) primary key, \"TEXT\" VARCHAR(255), \"VERSION\" rowversion not null)" };
-            sqlGen = new MSSQLGenerator();
-            break;
-        case ORACLE:
-            offset = 1;
-            createGarbage = "create table GARBAGE (\"ID\" integer primary key, \"TYPE\" varchar2(32))";
-            createGarbageSecond = "create sequence garbage_seq start with 1 increment by 1 nomaxvalue";
-            createGarbageThird = "create trigger garbage_trigger before insert on GARBAGE for each row begin select garbage_seq.nextval into :new.ID from dual; end;";
-            dbDriver = "oracle.jdbc.OracleDriver";
-            dbURL = "jdbc:oracle:thin:test/test@localhost:1521:XE";
-            dbUser = "test";
-            dbPwd = "test";
-            peopleFirst = "create table PEOPLE (\"ID\" integer primary key, \"NAME\" VARCHAR2(32), \"AGE\" INTEGER)";
-            peopleSecond = "create sequence people_seq start with 1 increment by 1 nomaxvalue";
-            peopleThird = "create trigger people_trigger before insert on PEOPLE for each row begin select people_seq.nextval into :new.ID from dual; end;";
-            versionStatements = new String[] {
-                    "create table VERSIONED (\"ID\" integer primary key, \"TEXT\" VARCHAR(255), \"VERSION\" INTEGER DEFAULT 0)",
-                    "create sequence versioned_seq start with 1 increment by 1 nomaxvalue",
-                    "create trigger versioned_trigger before insert on VERSIONED for each row begin select versioned_seq.nextval into :new.ID from dual; end;",
-                    "create sequence versioned_version start with 1 increment by 1 nomaxvalue",
-                    "create trigger versioned_version_trigger before insert or update on VERSIONED for each row begin select versioned_version.nextval into :new.VERSION from dual; end;" };
-            sqlGen = new OracleGenerator();
-            break;
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/ColumnPropertyTest.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/ColumnPropertyTest.java
deleted file mode 100644
index 464c65d9ce..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/ColumnPropertyTest.java
+++ /dev/null
@@ -1,197 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer;
-
-import java.util.Arrays;
-
-import org.easymock.EasyMock;
-import org.junit.Assert;
-import org.junit.Test;
-
-import com.vaadin.data.Property.ReadOnlyException;
-import com.vaadin.data.util.sqlcontainer.ColumnProperty;
-import com.vaadin.data.util.sqlcontainer.RowId;
-import com.vaadin.data.util.sqlcontainer.RowItem;
-import com.vaadin.data.util.sqlcontainer.SQLContainer;
-
-public class ColumnPropertyTest {
-
-    @Test
-    public void constructor_legalParameters_shouldSucceed() {
-        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
-                "Ville", String.class);
-        Assert.assertNotNull(cp);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void constructor_missingPropertyId_shouldFail() {
-        new ColumnProperty(null, false, true, true, "Ville", String.class);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void constructor_missingType_shouldFail() {
-        new ColumnProperty("NAME", false, true, true, "Ville", null);
-    }
-
-    @Test
-    public void getValue_defaultValue_returnsVille() {
-        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
-                "Ville", String.class);
-        Assert.assertEquals("Ville", cp.getValue());
-    }
-
-    /*-
-     * TODO Removed test since currently the Vaadin test package structure
-     * does not allow testing protected methods. When it has been fixed
-     * then re-enable test.
-    @Test
-    public void setValue_readWriteNullable_returnsKalle() {
-        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
-                "Ville", String.class);
-        SQLContainer container = EasyMock.createMock(SQLContainer.class);
-        RowItem owner = new RowItem(container, new RowId(new Object[] { 1 }),
-                Arrays.asList(cp));
-        container.itemChangeNotification(owner);
-        EasyMock.replay(container);
-        cp.setValue("Kalle");
-        Assert.assertEquals("Kalle", cp.getValue());
-        EasyMock.verify(container);
-    }
-     */
-
-    @Test(expected = ReadOnlyException.class)
-    public void setValue_readOnlyNullable_shouldFail() {
-        ColumnProperty cp = new ColumnProperty("NAME", true, true, true,
-                "Ville", String.class);
-        SQLContainer container = EasyMock.createMock(SQLContainer.class);
-        new RowItem(container, new RowId(new Object[] { 1 }), Arrays.asList(cp));
-        EasyMock.replay(container);
-        cp.setValue("Kalle");
-        EasyMock.verify(container);
-    }
-
-    /*-
-     * TODO Removed test since currently the Vaadin test package structure
-     * does not allow testing protected methods. When it has been fixed
-     * then re-enable test.
-    @Test
-    public void setValue_readWriteNullable_nullShouldWork() {
-        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
-                "Ville", String.class);
-        SQLContainer container = EasyMock.createMock(SQLContainer.class);
-        RowItem owner = new RowItem(container, new RowId(new Object[] { 1 }),
-                Arrays.asList(cp));
-        container.itemChangeNotification(owner);
-        EasyMock.replay(container);
-        cp.setValue(null);
-        Assert.assertNull(cp.getValue());
-        EasyMock.verify(container);
-    }
-    
-
-    @Test(expected = NotNullableException.class)
-    public void setValue_readWriteNotNullable_nullShouldFail() {
-        ColumnProperty cp = new ColumnProperty("NAME", false, true, false,
-                "Ville", String.class);
-        SQLContainer container = EasyMock.createMock(SQLContainer.class);
-        RowItem owner = new RowItem(container, new RowId(new Object[] { 1 }),
-                Arrays.asList(cp));
-        container.itemChangeNotification(owner);
-        EasyMock.replay(container);
-        cp.setValue(null);
-        Assert.assertNotNull(cp.getValue());
-        EasyMock.verify(container);
-    }
-     */
-
-    @Test
-    public void getType_normal_returnsStringClass() {
-        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
-                "Ville", String.class);
-        Assert.assertSame(String.class, cp.getType());
-    }
-
-    @Test
-    public void isReadOnly_readWriteNullable_returnsTrue() {
-        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
-                "Ville", String.class);
-        Assert.assertFalse(cp.isReadOnly());
-    }
-
-    @Test
-    public void isReadOnly_readOnlyNullable_returnsTrue() {
-        ColumnProperty cp = new ColumnProperty("NAME", true, true, true,
-                "Ville", String.class);
-        Assert.assertTrue(cp.isReadOnly());
-    }
-
-    @Test
-    public void setReadOnly_readOnlyChangeAllowed_shouldSucceed() {
-        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
-                "Ville", String.class);
-        cp.setReadOnly(true);
-        Assert.assertTrue(cp.isReadOnly());
-    }
-
-    @Test
-    public void setReadOnly_readOnlyChangeDisallowed_shouldFail() {
-        ColumnProperty cp = new ColumnProperty("NAME", false, false, true,
-                "Ville", String.class);
-        cp.setReadOnly(true);
-        Assert.assertFalse(cp.isReadOnly());
-    }
-
-    @Test
-    public void getPropertyId_normal_returnsNAME() {
-        ColumnProperty cp = new ColumnProperty("NAME", false, false, true,
-                "Ville", String.class);
-        Assert.assertEquals("NAME", cp.getPropertyId());
-    }
-
-    /*-
-     * TODO Removed test since currently the Vaadin test package structure
-     * does not allow testing protected methods. When it has been fixed
-     * then re-enable test.
-    @Test
-    public void isModified_valueModified_returnsTrue() {
-        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
-                "Ville", String.class);
-        SQLContainer container = EasyMock.createMock(SQLContainer.class);
-        RowItem owner = new RowItem(container, new RowId(new Object[] { 1 }),
-                Arrays.asList(cp));
-        container.itemChangeNotification(owner);
-        EasyMock.replay(container);
-        cp.setValue("Kalle");
-        Assert.assertEquals("Kalle", cp.getValue());
-        Assert.assertTrue(cp.isModified());
-        EasyMock.verify(container);
-    }
-     */
-
-    @Test
-    public void isModified_valueNotModified_returnsFalse() {
-        ColumnProperty cp = new ColumnProperty("NAME", false, false, true,
-                "Ville", String.class);
-        Assert.assertFalse(cp.isModified());
-    }
-
-    @Test
-    public void setValue_nullOnNullable_shouldWork() {
-        ColumnProperty cp = new ColumnProperty("NAME", false, true, true,
-                "asdf", String.class);
-        SQLContainer container = EasyMock.createMock(SQLContainer.class);
-        new RowItem(container, new RowId(new Object[] { 1 }), Arrays.asList(cp));
-        cp.setValue(null);
-        Assert.assertNull(cp.getValue());
-    }
-
-    @Test
-    public void setValue_resetTonullOnNullable_shouldWork() {
-        ColumnProperty cp = new ColumnProperty("NAME", false, true, true, null,
-                String.class);
-        SQLContainer container = EasyMock.createMock(SQLContainer.class);
-        new RowItem(container, new RowId(new Object[] { 1 }), Arrays.asList(cp));
-        cp.setValue("asdf");
-        Assert.assertEquals("asdf", cp.getValue());
-        cp.setValue(null);
-        Assert.assertNull(cp.getValue());
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/DataGenerator.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/DataGenerator.java
deleted file mode 100644
index 49f08bc798..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/DataGenerator.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
-import com.vaadin.tests.server.container.sqlcontainer.AllTests.DB;
-
-public class DataGenerator {
-	
-	@Test
-	public void testDummy(){
-		// Added dummy test so JUnit will not complain about "No runnable methods".
-	}
-
-    public static void addPeopleToDatabase(JDBCConnectionPool connectionPool)
-            throws SQLException {
-        Connection conn = connectionPool.reserveConnection();
-        Statement statement = conn.createStatement();
-        try {
-            statement.execute("drop table PEOPLE");
-            if (AllTests.db == DB.ORACLE) {
-                statement.execute("drop sequence people_seq");
-            }
-        } catch (SQLException e) {
-            // Will fail if table doesn't exist, which is OK.
-            conn.rollback();
-        }
-        statement.execute(AllTests.peopleFirst);
-        if (AllTests.peopleSecond != null) {
-            statement.execute(AllTests.peopleSecond);
-        }
-        if (AllTests.db == DB.ORACLE) {
-            statement.execute(AllTests.peopleThird);
-        }
-        if (AllTests.db == DB.MSSQL) {
-            statement.executeUpdate("insert into people values('Ville', '23')");
-            statement.executeUpdate("insert into people values('Kalle', '7')");
-            statement.executeUpdate("insert into people values('Pelle', '18')");
-            statement.executeUpdate("insert into people values('Börje', '64')");
-        } else {
-            statement
-                    .executeUpdate("insert into people values(default, 'Ville', '23')");
-            statement
-                    .executeUpdate("insert into people values(default, 'Kalle', '7')");
-            statement
-                    .executeUpdate("insert into people values(default, 'Pelle', '18')");
-            statement
-                    .executeUpdate("insert into people values(default, 'Börje', '64')");
-        }
-        statement.close();
-        statement = conn.createStatement();
-        ResultSet rs = statement.executeQuery("select * from PEOPLE");
-        Assert.assertTrue(rs.next());
-        statement.close();
-        conn.commit();
-        connectionPool.releaseConnection(conn);
-    }
-
-    public static void addFiveThousandPeople(JDBCConnectionPool connectionPool)
-            throws SQLException {
-        Connection conn = connectionPool.reserveConnection();
-        Statement statement = conn.createStatement();
-        for (int i = 4; i < 5000; i++) {
-            if (AllTests.db == DB.MSSQL) {
-                statement.executeUpdate("insert into people values('Person "
-                        + i + "', '" + i % 99 + "')");
-            } else {
-                statement
-                        .executeUpdate("insert into people values(default, 'Person "
-                                + i + "', '" + i % 99 + "')");
-            }
-        }
-        statement.close();
-        conn.commit();
-        connectionPool.releaseConnection(conn);
-    }
-
-    public static void addVersionedData(JDBCConnectionPool connectionPool)
-            throws SQLException {
-        Connection conn = connectionPool.reserveConnection();
-        Statement statement = conn.createStatement();
-        try {
-            statement.execute("DROP TABLE VERSIONED");
-            if (AllTests.db == DB.ORACLE) {
-                statement.execute("drop sequence versioned_seq");
-                statement.execute("drop sequence versioned_version");
-            }
-        } catch (SQLException e) {
-            // Will fail if table doesn't exist, which is OK.
-            conn.rollback();
-        }
-        for (String stmtString : AllTests.versionStatements) {
-            statement.execute(stmtString);
-        }
-        if (AllTests.db == DB.MSSQL) {
-            statement
-                    .executeUpdate("insert into VERSIONED values('Junk', default)");
-        } else {
-            statement
-                    .executeUpdate("insert into VERSIONED values(default, 'Junk', default)");
-        }
-        statement.close();
-        statement = conn.createStatement();
-        ResultSet rs = statement.executeQuery("select * from VERSIONED");
-        Assert.assertTrue(rs.next());
-        statement.close();
-        conn.commit();
-        connectionPool.releaseConnection(conn);
-    }
-
-    public static void createGarbage(JDBCConnectionPool connectionPool)
-            throws SQLException {
-        Connection conn = connectionPool.reserveConnection();
-        Statement statement = conn.createStatement();
-        try {
-            statement.execute("drop table GARBAGE");
-            if (AllTests.db == DB.ORACLE) {
-                statement.execute("drop sequence garbage_seq");
-            }
-        } catch (SQLException e) {
-            // Will fail if table doesn't exist, which is OK.
-            conn.rollback();
-        }
-        statement.execute(AllTests.createGarbage);
-        if (AllTests.db == DB.ORACLE) {
-            statement.execute(AllTests.createGarbageSecond);
-            statement.execute(AllTests.createGarbageThird);
-        }
-        conn.commit();
-        connectionPool.releaseConnection(conn);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/FreeformQueryUtil.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/FreeformQueryUtil.java
deleted file mode 100644
index e85183be89..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/FreeformQueryUtil.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer;
-
-import java.util.List;
-
-import org.junit.Test;
-
-import com.vaadin.data.Container.Filter;
-import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
-import com.vaadin.data.util.sqlcontainer.query.generator.filter.QueryBuilder;
-import com.vaadin.tests.server.container.sqlcontainer.AllTests.DB;
-
-public class FreeformQueryUtil {
-
-	@Test
-	public void testDummy(){
-		// Added dummy test so JUnit will not complain about "No runnable methods".
-	}
-	
-    public static StatementHelper getQueryWithFilters(List<Filter> filters,
-            int offset, int limit) {
-        StatementHelper sh = new StatementHelper();
-        if (AllTests.db == DB.MSSQL) {
-            if (limit > 1) {
-                offset++;
-                limit--;
-            }
-            StringBuilder query = new StringBuilder();
-            query.append("SELECT * FROM (SELECT row_number() OVER (");
-            query.append("ORDER BY \"ID\" ASC");
-            query.append(") AS rownum, * FROM \"PEOPLE\"");
-
-            if (!filters.isEmpty()) {
-                query.append(QueryBuilder.getWhereStringForFilters(
-                        filters, sh));
-            }
-            query.append(") AS a WHERE a.rownum BETWEEN ").append(offset)
-                    .append(" AND ").append(Integer.toString(offset + limit));
-            sh.setQueryString(query.toString());
-            return sh;
-        } else if (AllTests.db == DB.ORACLE) {
-            if (limit > 1) {
-                offset++;
-                limit--;
-            }
-            StringBuilder query = new StringBuilder();
-            query.append("SELECT * FROM (SELECT x.*, ROWNUM AS "
-                    + "\"rownum\" FROM (SELECT * FROM \"PEOPLE\"");
-            if (!filters.isEmpty()) {
-                query.append(QueryBuilder.getWhereStringForFilters(
-                        filters, sh));
-            }
-            query.append(") x) WHERE \"rownum\" BETWEEN ? AND ?");
-            sh.addParameterValue(offset);
-            sh.addParameterValue(offset + limit);
-            sh.setQueryString(query.toString());
-            return sh;
-        } else {
-            StringBuilder query = new StringBuilder("SELECT * FROM people");
-            if (!filters.isEmpty()) {
-                query.append(QueryBuilder.getWhereStringForFilters(
-                        filters, sh));
-            }
-            if (limit != 0 || offset != 0) {
-                query.append(" LIMIT ? OFFSET ?");
-                sh.addParameterValue(limit);
-                sh.addParameterValue(offset);
-            }
-            sh.setQueryString(query.toString());
-            return sh;
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/ReadOnlyRowIdTest.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/ReadOnlyRowIdTest.java
deleted file mode 100644
index c395bc42bf..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/ReadOnlyRowIdTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer;
-
-import junit.framework.Assert;
-
-import org.junit.Test;
-
-import com.vaadin.data.util.sqlcontainer.ReadOnlyRowId;
-
-public class ReadOnlyRowIdTest {
-
-    @Test
-    public void getRowNum_shouldReturnRowNumGivenInConstructor() {
-        int rowNum = 1337;
-        ReadOnlyRowId rid = new ReadOnlyRowId(rowNum);
-        Assert.assertEquals(rowNum, rid.getRowNum());
-    }
-
-    @Test
-    public void hashCode_shouldBeEqualToHashCodeOfRowNum() {
-        int rowNum = 1337;
-        ReadOnlyRowId rid = new ReadOnlyRowId(rowNum);
-        Assert.assertEquals(Integer.valueOf(rowNum).hashCode(), rid.hashCode());
-    }
-
-    @Test
-    public void equals_compareWithNull_shouldBeFalse() {
-        ReadOnlyRowId rid = new ReadOnlyRowId(1337);
-        Assert.assertFalse(rid.equals(null));
-    }
-
-    @Test
-    public void equals_compareWithSameInstance_shouldBeTrue() {
-        ReadOnlyRowId rid = new ReadOnlyRowId(1337);
-        ReadOnlyRowId rid2 = rid;
-        Assert.assertTrue(rid.equals(rid2));
-    }
-
-    @Test
-    public void equals_compareWithOtherType_shouldBeFalse() {
-        ReadOnlyRowId rid = new ReadOnlyRowId(1337);
-        Assert.assertFalse(rid.equals(new Object()));
-    }
-
-    @Test
-    public void equals_compareWithOtherRowId_shouldBeFalse() {
-        ReadOnlyRowId rid = new ReadOnlyRowId(1337);
-        ReadOnlyRowId rid2 = new ReadOnlyRowId(42);
-        Assert.assertFalse(rid.equals(rid2));
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/RowIdTest.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/RowIdTest.java
deleted file mode 100644
index f243c43ec2..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/RowIdTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import com.vaadin.data.util.sqlcontainer.RowId;
-
-public class RowIdTest {
-
-    @Test
-    public void constructor_withArrayOfPrimaryKeyColumns_shouldSucceed() {
-        RowId id = new RowId(new Object[] { "id", "name" });
-        Assert.assertArrayEquals(new Object[] { "id", "name" }, id.getId());
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void constructor_withNullParameter_shouldFail() {
-        new RowId(null);
-    }
-
-    @Test
-    public void hashCode_samePrimaryKeys_sameResult() {
-        RowId id = new RowId(new Object[] { "id", "name" });
-        RowId id2 = new RowId(new Object[] { "id", "name" });
-        Assert.assertEquals(id.hashCode(), id2.hashCode());
-    }
-
-    @Test
-    public void hashCode_differentPrimaryKeys_differentResult() {
-        RowId id = new RowId(new Object[] { "id", "name" });
-        RowId id2 = new RowId(new Object[] { "id" });
-        Assert.assertFalse(id.hashCode() == id2.hashCode());
-    }
-
-    @Test
-    public void equals_samePrimaryKeys_returnsTrue() {
-        RowId id = new RowId(new Object[] { "id", "name" });
-        RowId id2 = new RowId(new Object[] { "id", "name" });
-        Assert.assertEquals(id, id2);
-    }
-
-    @Test
-    public void equals_differentPrimaryKeys_returnsFalse() {
-        RowId id = new RowId(new Object[] { "id", "name" });
-        RowId id2 = new RowId(new Object[] { "id" });
-        Assert.assertFalse(id.equals(id2.hashCode()));
-    }
-
-    @Test
-    public void equals_differentDataType_returnsFalse() {
-        RowId id = new RowId(new Object[] { "id", "name" });
-        Assert.assertFalse(id.equals("Tudiluu"));
-        Assert.assertFalse(id.equals(new Integer(1337)));
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/SQLContainerTableQueryTest.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/SQLContainerTableQueryTest.java
deleted file mode 100644
index 0451607e64..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/SQLContainerTableQueryTest.java
+++ /dev/null
@@ -1,1528 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer;
-
-import java.math.BigDecimal;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.easymock.EasyMock;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.vaadin.data.Container.ItemSetChangeEvent;
-import com.vaadin.data.Container.ItemSetChangeListener;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.filter.Like;
-import com.vaadin.data.util.sqlcontainer.RowId;
-import com.vaadin.data.util.sqlcontainer.SQLContainer;
-import com.vaadin.data.util.sqlcontainer.TemporaryRowId;
-import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
-import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
-import com.vaadin.data.util.sqlcontainer.query.OrderBy;
-import com.vaadin.data.util.sqlcontainer.query.TableQuery;
-import com.vaadin.tests.server.container.sqlcontainer.AllTests.DB;
-
-public class SQLContainerTableQueryTest {
-
-    private static final int offset = AllTests.offset;
-    private static final String createGarbage = AllTests.createGarbage;
-    private JDBCConnectionPool connectionPool;
-
-    @Before
-    public void setUp() throws SQLException {
-
-        try {
-            connectionPool = new SimpleJDBCConnectionPool(AllTests.dbDriver,
-                    AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 2, 2);
-        } catch (SQLException e) {
-            e.printStackTrace();
-            Assert.fail(e.getMessage());
-        }
-
-        DataGenerator.addPeopleToDatabase(connectionPool);
-    }
-
-    @After
-    public void tearDown() {
-        if (connectionPool != null) {
-            connectionPool.destroy();
-        }
-    }
-
-    @Test
-    public void constructor_withTableQuery_shouldSucceed() throws SQLException {
-        new SQLContainer(new TableQuery("people", connectionPool,
-                AllTests.sqlGen));
-    }
-
-    @Test
-    public void containsId_withTableQueryAndExistingId_returnsTrue()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Assert.assertTrue(container.containsId(new RowId(
-                new Object[] { 1 + offset })));
-    }
-
-    @Test
-    public void containsId_withTableQueryAndNonexistingId_returnsFalse()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Assert.assertFalse(container.containsId(new RowId(
-                new Object[] { 1337 + offset })));
-    }
-
-    @Test
-    public void getContainerProperty_tableExistingItemIdAndPropertyId_returnsProperty()
-            throws SQLException {
-        TableQuery t = new TableQuery("people", connectionPool, AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(t);
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(
-                    "Ville",
-                    container
-                            .getContainerProperty(
-                                    new RowId(new Object[] { new BigDecimal(
-                                            0 + offset) }), "NAME").getValue());
-        } else {
-            Assert.assertEquals(
-                    "Ville",
-                    container.getContainerProperty(
-                            new RowId(new Object[] { 0 + offset }), "NAME")
-                            .getValue());
-        }
-    }
-
-    @Test
-    public void getContainerProperty_tableExistingItemIdAndNonexistingPropertyId_returnsNull()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Assert.assertNull(container.getContainerProperty(new RowId(
-                new Object[] { 1 + offset }), "asdf"));
-    }
-
-    @Test
-    public void getContainerProperty_tableNonexistingItemId_returnsNull()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Assert.assertNull(container.getContainerProperty(new RowId(
-                new Object[] { 1337 + offset }), "NAME"));
-    }
-
-    @Test
-    public void getContainerPropertyIds_table_returnsIDAndNAME()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Collection<?> propertyIds = container.getContainerPropertyIds();
-        Assert.assertEquals(3, propertyIds.size());
-        Assert.assertArrayEquals(new String[] { "ID", "NAME", "AGE" },
-                propertyIds.toArray());
-    }
-
-    @Test
-    public void getItem_tableExistingItemId_returnsItem() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Item item;
-        if (AllTests.db == DB.ORACLE) {
-            item = container.getItem(new RowId(new Object[] { new BigDecimal(
-                    0 + offset) }));
-        } else {
-            item = container.getItem(new RowId(new Object[] { 0 + offset }));
-        }
-        Assert.assertNotNull(item);
-        Assert.assertEquals("Ville", item.getItemProperty("NAME").getValue());
-    }
-
-    @Test
-    public void getItem_commitedModifiedAndRefreshed() throws SQLException {
-        String OLD_VALUE = "SomeValue"; //$NON-NLS-1$
-        String NEW_VALUE = "OtherValue"; //$NON-NLS-1$
-
-        SQLContainer container = new SQLContainer(new TableQuery("people", //$NON-NLS-1$
-                connectionPool, AllTests.sqlGen));
-        Object itemID = container.addItem();
-        Item item = container.getItem(itemID);
-        item.getItemProperty("NAME").setValue(OLD_VALUE); //$NON-NLS-1$
-        container.commit();
-
-        itemID = container.getIdByIndex(container.size() - 1);
-        item = container.getItem(itemID);
-        Assert.assertEquals(OLD_VALUE, item.getItemProperty("NAME") //$NON-NLS-1$
-                .getValue());
-        item.getItemProperty("NAME").setValue(NEW_VALUE); //$NON-NLS-1$
-
-        // refresh the container which free's the caches
-        // and the modified cache keeps untouched which is a really powerful
-        // feature
-        container.refresh();
-
-        // access the item again will use the item from the modified cache.
-        item = container.getItem(itemID);
-        Assert.assertEquals(NEW_VALUE, item.getItemProperty("NAME") //$NON-NLS-1$
-                .getValue());
-    }
-
-    @Test
-    public void getItem_table5000RowsWithParameter1337_returnsItemWithId1337()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-
-        Item item;
-        if (AllTests.db == DB.ORACLE) {
-            item = container.getItem(new RowId(new Object[] { new BigDecimal(
-                    1337 + offset) }));
-            Assert.assertNotNull(item);
-            Assert.assertEquals(new BigDecimal(1337 + offset), item
-                    .getItemProperty("ID").getValue());
-        } else {
-            item = container.getItem(new RowId(new Object[] { 1337 + offset }));
-            Assert.assertNotNull(item);
-            Assert.assertEquals(1337 + offset, item.getItemProperty("ID")
-                    .getValue());
-        }
-        Assert.assertEquals("Person 1337", item.getItemProperty("NAME")
-                .getValue());
-    }
-
-    @Test
-    public void getItemIds_table_returnsItemIdsWithKeys0through3()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Collection<?> itemIds = container.getItemIds();
-        Assert.assertEquals(4, itemIds.size());
-        RowId zero = new RowId(new Object[] { 0 + offset });
-        RowId one = new RowId(new Object[] { 1 + offset });
-        RowId two = new RowId(new Object[] { 2 + offset });
-        RowId three = new RowId(new Object[] { 3 + offset });
-        if (AllTests.db == DB.ORACLE) {
-            String[] correct = new String[] { "1", "2", "3", "4" };
-            List<String> oracle = new ArrayList<String>();
-            for (Object o : itemIds) {
-                oracle.add(o.toString());
-            }
-            Assert.assertArrayEquals(correct, oracle.toArray());
-        } else {
-            Assert.assertArrayEquals(new Object[] { zero, one, two, three },
-                    itemIds.toArray());
-        }
-    }
-
-    @Test
-    public void getType_tableNAMEPropertyId_returnsString() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Assert.assertEquals(String.class, container.getType("NAME"));
-    }
-
-    @Test
-    public void getType_tableIDPropertyId_returnsInteger() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(BigDecimal.class, container.getType("ID"));
-        } else {
-            Assert.assertEquals(Integer.class, container.getType("ID"));
-        }
-    }
-
-    @Test
-    public void getType_tableNonexistingPropertyId_returnsNull()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Assert.assertNull(container.getType("asdf"));
-    }
-
-    @Test
-    public void size_table_returnsFour() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Assert.assertEquals(4, container.size());
-    }
-
-    @Test
-    public void size_tableOneAddedItem_returnsFive() throws SQLException {
-        Connection conn = connectionPool.reserveConnection();
-        Statement statement = conn.createStatement();
-        if (AllTests.db == DB.MSSQL) {
-            statement.executeUpdate("insert into people values('Bengt', 30)");
-        } else {
-            statement
-                    .executeUpdate("insert into people values(default, 'Bengt', 30)");
-        }
-        statement.close();
-        conn.commit();
-        connectionPool.releaseConnection(conn);
-
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Assert.assertEquals(5, container.size());
-    }
-
-    @Test
-    public void indexOfId_tableWithParameterThree_returnsThree()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(3, container.indexOfId(new RowId(
-                    new Object[] { new BigDecimal(3 + offset) })));
-        } else {
-            Assert.assertEquals(3,
-                    container.indexOfId(new RowId(new Object[] { 3 + offset })));
-        }
-    }
-
-    @Test
-    public void indexOfId_table5000RowsWithParameter1337_returns1337()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        TableQuery q = new TableQuery("people", connectionPool, AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(q);
-        if (AllTests.db == DB.ORACLE) {
-            container.getItem(new RowId(new Object[] { new BigDecimal(
-                    1337 + offset) }));
-            Assert.assertEquals(1337, container.indexOfId(new RowId(
-                    new Object[] { new BigDecimal(1337 + offset) })));
-        } else {
-            container.getItem(new RowId(new Object[] { 1337 + offset }));
-            Assert.assertEquals(1337, container.indexOfId(new RowId(
-                    new Object[] { 1337 + offset })));
-        }
-    }
-
-    @Test
-    public void getIdByIndex_table5000rowsIndex1337_returnsRowId1337()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object itemId = container.getIdByIndex(1337);
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(
-                    new RowId(new Object[] { 1337 + offset }).toString(),
-                    itemId.toString());
-        } else {
-            Assert.assertEquals(new RowId(new Object[] { 1337 + offset }),
-                    itemId);
-        }
-    }
-
-    @Test
-    public void getIdByIndex_tableWithPaging5000rowsIndex1337_returnsRowId1337()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        Object itemId = container.getIdByIndex(1337);
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(
-                    new RowId(new Object[] { 1337 + offset }).toString(),
-                    itemId.toString());
-        } else {
-            Assert.assertEquals(new RowId(new Object[] { 1337 + offset }),
-                    itemId);
-        }
-    }
-
-    @Test
-    public void nextItemId_tableCurrentItem1337_returnsItem1338()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object itemId = container.getIdByIndex(1337);
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(
-                    new RowId(new Object[] { 1338 + offset }).toString(),
-                    container.nextItemId(itemId).toString());
-        } else {
-            Assert.assertEquals(new RowId(new Object[] { 1338 + offset }),
-                    container.nextItemId(itemId));
-        }
-    }
-
-    @Test
-    public void prevItemId_tableCurrentItem1337_returns1336()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object itemId = container.getIdByIndex(1337);
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(
-                    new RowId(new Object[] { 1336 + offset }).toString(),
-                    container.prevItemId(itemId).toString());
-        } else {
-            Assert.assertEquals(new RowId(new Object[] { 1336 + offset }),
-                    container.prevItemId(itemId));
-        }
-    }
-
-    @Test
-    public void firstItemId_table_returnsItemId0() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(
-                    new RowId(new Object[] { 0 + offset }).toString(),
-                    container.firstItemId().toString());
-        } else {
-            Assert.assertEquals(new RowId(new Object[] { 0 + offset }),
-                    container.firstItemId());
-        }
-    }
-
-    @Test
-    public void lastItemId_table5000Rows_returnsItemId4999()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(
-                    new RowId(new Object[] { 4999 + offset }).toString(),
-                    container.lastItemId().toString());
-        } else {
-            Assert.assertEquals(new RowId(new Object[] { 4999 + offset }),
-                    container.lastItemId());
-        }
-    }
-
-    @Test
-    public void isFirstId_tableActualFirstId_returnsTrue() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertTrue(container.isFirstId(new RowId(
-                    new Object[] { new BigDecimal(0 + offset) })));
-        } else {
-            Assert.assertTrue(container.isFirstId(new RowId(
-                    new Object[] { 0 + offset })));
-        }
-    }
-
-    @Test
-    public void isFirstId_tableSecondId_returnsFalse() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertFalse(container.isFirstId(new RowId(
-                    new Object[] { new BigDecimal(1 + offset) })));
-        } else {
-            Assert.assertFalse(container.isFirstId(new RowId(
-                    new Object[] { 1 + offset })));
-        }
-    }
-
-    @Test
-    public void isLastId_tableSecondId_returnsFalse() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertFalse(container.isLastId(new RowId(
-                    new Object[] { new BigDecimal(1 + offset) })));
-        } else {
-            Assert.assertFalse(container.isLastId(new RowId(
-                    new Object[] { 1 + offset })));
-        }
-    }
-
-    @Test
-    public void isLastId_tableLastId_returnsTrue() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertTrue(container.isLastId(new RowId(
-                    new Object[] { new BigDecimal(3 + offset) })));
-        } else {
-            Assert.assertTrue(container.isLastId(new RowId(
-                    new Object[] { 3 + offset })));
-        }
-    }
-
-    @Test
-    public void isLastId_table5000RowsLastId_returnsTrue() throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertTrue(container.isLastId(new RowId(
-                    new Object[] { new BigDecimal(4999 + offset) })));
-        } else {
-            Assert.assertTrue(container.isLastId(new RowId(
-                    new Object[] { 4999 + offset })));
-        }
-    }
-
-    @Test
-    public void allIdsFound_table5000RowsLastId_shouldSucceed()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        for (int i = 0; i < 5000; i++) {
-            Assert.assertTrue(container.containsId(container.getIdByIndex(i)));
-        }
-    }
-
-    @Test
-    public void allIdsFound_table5000RowsLastId_autoCommit_shouldSucceed()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        container.setAutoCommit(true);
-        for (int i = 0; i < 5000; i++) {
-            Assert.assertTrue(container.containsId(container.getIdByIndex(i)));
-        }
-    }
-
-    @Test
-    public void refresh_table_sizeShouldUpdate() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Assert.assertEquals(4, container.size());
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        container.refresh();
-        Assert.assertEquals(5000, container.size());
-    }
-
-    @Test
-    public void refresh_tableWithoutCallingRefresh_sizeShouldNotUpdate()
-            throws SQLException {
-        // Yeah, this is a weird one. We're testing that the size doesn't update
-        // after adding lots of items unless we call refresh inbetween. This to
-        // make sure that the refresh method actually refreshes stuff and isn't
-        // a NOP.
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Assert.assertEquals(4, container.size());
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        Assert.assertEquals(4, container.size());
-    }
-
-    @Test
-    public void setAutoCommit_table_shouldSucceed() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        container.setAutoCommit(true);
-        Assert.assertTrue(container.isAutoCommit());
-        container.setAutoCommit(false);
-        Assert.assertFalse(container.isAutoCommit());
-    }
-
-    @Test
-    public void getPageLength_table_returnsDefault100() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Assert.assertEquals(100, container.getPageLength());
-    }
-
-    @Test
-    public void setPageLength_table_shouldSucceed() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        container.setPageLength(20);
-        Assert.assertEquals(20, container.getPageLength());
-        container.setPageLength(200);
-        Assert.assertEquals(200, container.getPageLength());
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void addContainerProperty_normal_isUnsupported() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        container.addContainerProperty("asdf", String.class, "");
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void removeContainerProperty_normal_isUnsupported()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        container.removeContainerProperty("asdf");
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void addItemObject_normal_isUnsupported() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        container.addItem("asdf");
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void addItemAfterObjectObject_normal_isUnsupported()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        container.addItemAfter("asdf", "foo");
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void addItemAtIntObject_normal_isUnsupported() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        container.addItemAt(2, "asdf");
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void addItemAtInt_normal_isUnsupported() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        container.addItemAt(2);
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void addItemAfterObject_normal_isUnsupported() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        container.addItemAfter("asdf");
-    }
-
-    @Test
-    public void addItem_tableAddOneNewItem_returnsItemId() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object itemId = container.addItem();
-        Assert.assertNotNull(itemId);
-    }
-
-    @Test
-    public void addItem_tableAddOneNewItem_autoCommit_returnsFinalItemId()
-            throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        container.setAutoCommit(true);
-        Object itemId = container.addItem();
-        Assert.assertNotNull(itemId);
-        Assert.assertTrue(itemId instanceof RowId);
-        Assert.assertFalse(itemId instanceof TemporaryRowId);
-    }
-
-    @Test
-    public void addItem_tableAddOneNewItem_autoCommit_sizeIsIncreased()
-            throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        container.setAutoCommit(true);
-        int originalSize = container.size();
-        container.addItem();
-        Assert.assertEquals(originalSize + 1, container.size());
-    }
-
-    @Test
-    public void addItem_tableAddOneNewItem_shouldChangeSize()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        int size = container.size();
-        container.addItem();
-        Assert.assertEquals(size + 1, container.size());
-    }
-
-    @Test
-    public void addItem_tableAddTwoNewItems_shouldChangeSize()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        int size = container.size();
-        Object id1 = container.addItem();
-        Object id2 = container.addItem();
-        Assert.assertEquals(size + 2, container.size());
-        Assert.assertNotSame(id1, id2);
-        Assert.assertFalse(id1.equals(id2));
-    }
-
-    @Test
-    public void nextItemId_tableNewlyAddedItem_returnsNewlyAdded()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object lastId = container.lastItemId();
-        Object id = container.addItem();
-        Assert.assertEquals(id, container.nextItemId(lastId));
-    }
-
-    @Test
-    public void lastItemId_tableNewlyAddedItem_returnsNewlyAdded()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object lastId = container.lastItemId();
-        Object id = container.addItem();
-        Assert.assertEquals(id, container.lastItemId());
-        Assert.assertNotSame(lastId, container.lastItemId());
-    }
-
-    @Test
-    public void indexOfId_tableNewlyAddedItem_returnsFour() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.addItem();
-        Assert.assertEquals(4, container.indexOfId(id));
-    }
-
-    @Test
-    public void getItem_tableNewlyAddedItem_returnsNewlyAdded()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.addItem();
-        Assert.assertNotNull(container.getItem(id));
-    }
-
-    @Test
-    public void getItemIds_tableNewlyAddedItem_containsNewlyAdded()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.addItem();
-        Assert.assertTrue(container.getItemIds().contains(id));
-    }
-
-    @Test
-    public void getContainerProperty_tableNewlyAddedItem_returnsPropertyOfNewlyAddedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.addItem();
-        Item item = container.getItem(id);
-        item.getItemProperty("NAME").setValue("asdf");
-        Assert.assertEquals("asdf", container.getContainerProperty(id, "NAME")
-                .getValue());
-    }
-
-    @Test
-    public void containsId_tableNewlyAddedItem_returnsTrue()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.addItem();
-        Assert.assertTrue(container.containsId(id));
-    }
-
-    @Test
-    public void prevItemId_tableTwoNewlyAddedItems_returnsFirstAddedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id1 = container.addItem();
-        Object id2 = container.addItem();
-        Assert.assertEquals(id1, container.prevItemId(id2));
-    }
-
-    @Test
-    public void firstItemId_tableEmptyResultSet_returnsFirstAddedItem()
-            throws SQLException {
-        DataGenerator.createGarbage(connectionPool);
-        SQLContainer container = new SQLContainer(new TableQuery("garbage",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.addItem();
-        Assert.assertSame(id, container.firstItemId());
-    }
-
-    @Test
-    public void isFirstId_tableEmptyResultSet_returnsFirstAddedItem()
-            throws SQLException {
-        DataGenerator.createGarbage(connectionPool);
-        SQLContainer container = new SQLContainer(new TableQuery("garbage",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.addItem();
-        Assert.assertTrue(container.isFirstId(id));
-    }
-
-    @Test
-    public void isLastId_tableOneItemAdded_returnsTrueForAddedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.addItem();
-        Assert.assertTrue(container.isLastId(id));
-    }
-
-    @Test
-    public void isLastId_tableTwoItemsAdded_returnsTrueForLastAddedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        container.addItem();
-        Object id2 = container.addItem();
-        Assert.assertTrue(container.isLastId(id2));
-    }
-
-    @Test
-    public void getIdByIndex_tableOneItemAddedLastIndexInContainer_returnsAddedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.addItem();
-        Assert.assertEquals(id, container.getIdByIndex(container.size() - 1));
-    }
-
-    @Test
-    public void removeItem_tableNoAddedItems_removesItemFromContainer()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        int size = container.size();
-        Object id = container.firstItemId();
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertNotSame(id, container.firstItemId());
-        Assert.assertEquals(size - 1, container.size());
-    }
-
-    @Test
-    public void containsId_tableRemovedItem_returnsFalse() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.firstItemId();
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertFalse(container.containsId(id));
-    }
-
-    @Test
-    public void removeItem_tableOneAddedItem_removesTheAddedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.addItem();
-        int size = container.size();
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertFalse(container.containsId(id));
-        Assert.assertEquals(size - 1, container.size());
-    }
-
-    @Test
-    public void getItem_tableItemRemoved_returnsNull() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.firstItemId();
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertNull(container.getItem(id));
-    }
-
-    @Test
-    public void getItem_tableAddedItemRemoved_returnsNull() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.addItem();
-        Assert.assertNotNull(container.getItem(id));
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertNull(container.getItem(id));
-    }
-
-    @Test
-    public void getItemIds_tableItemRemoved_shouldNotContainRemovedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.firstItemId();
-        Assert.assertTrue(container.getItemIds().contains(id));
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertFalse(container.getItemIds().contains(id));
-    }
-
-    @Test
-    public void getItemIds_tableAddedItemRemoved_shouldNotContainRemovedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.addItem();
-        Assert.assertTrue(container.getItemIds().contains(id));
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertFalse(container.getItemIds().contains(id));
-    }
-
-    @Test
-    public void containsId_tableItemRemoved_returnsFalse() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.firstItemId();
-        Assert.assertTrue(container.containsId(id));
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertFalse(container.containsId(id));
-    }
-
-    @Test
-    public void containsId_tableAddedItemRemoved_returnsFalse()
-            throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        Object id = container.addItem();
-        Assert.assertTrue(container.containsId(id));
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertFalse(container.containsId(id));
-    }
-
-    @Test
-    public void nextItemId_tableItemRemoved_skipsRemovedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object first = container.getIdByIndex(0);
-        Object second = container.getIdByIndex(1);
-        Object third = container.getIdByIndex(2);
-        Assert.assertTrue(container.removeItem(second));
-        Assert.assertEquals(third, container.nextItemId(first));
-    }
-
-    @Test
-    public void nextItemId_tableAddedItemRemoved_skipsRemovedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object first = container.lastItemId();
-        Object second = container.addItem();
-        Object third = container.addItem();
-        Assert.assertTrue(container.removeItem(second));
-        Assert.assertEquals(third, container.nextItemId(first));
-    }
-
-    @Test
-    public void prevItemId_tableItemRemoved_skipsRemovedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object first = container.getIdByIndex(0);
-        Object second = container.getIdByIndex(1);
-        Object third = container.getIdByIndex(2);
-        Assert.assertTrue(container.removeItem(second));
-        Assert.assertEquals(first, container.prevItemId(third));
-    }
-
-    @Test
-    public void prevItemId_tableAddedItemRemoved_skipsRemovedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object first = container.lastItemId();
-        Object second = container.addItem();
-        Object third = container.addItem();
-        Assert.assertTrue(container.removeItem(second));
-        Assert.assertEquals(first, container.prevItemId(third));
-    }
-
-    @Test
-    public void firstItemId_tableFirstItemRemoved_resultChanges()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object first = container.firstItemId();
-        Assert.assertTrue(container.removeItem(first));
-        Assert.assertNotSame(first, container.firstItemId());
-    }
-
-    @Test
-    public void firstItemId_tableNewlyAddedFirstItemRemoved_resultChanges()
-            throws SQLException {
-        DataGenerator.createGarbage(connectionPool);
-        SQLContainer container = new SQLContainer(new TableQuery("garbage",
-                connectionPool, AllTests.sqlGen));
-        Object first = container.addItem();
-        Object second = container.addItem();
-        Assert.assertSame(first, container.firstItemId());
-        Assert.assertTrue(container.removeItem(first));
-        Assert.assertSame(second, container.firstItemId());
-    }
-
-    @Test
-    public void lastItemId_tableLastItemRemoved_resultChanges()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object last = container.lastItemId();
-        Assert.assertTrue(container.removeItem(last));
-        Assert.assertNotSame(last, container.lastItemId());
-    }
-
-    @Test
-    public void lastItemId_tableAddedLastItemRemoved_resultChanges()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object last = container.addItem();
-        Assert.assertSame(last, container.lastItemId());
-        Assert.assertTrue(container.removeItem(last));
-        Assert.assertNotSame(last, container.lastItemId());
-    }
-
-    @Test
-    public void isFirstId_tableFirstItemRemoved_returnsFalse()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object first = container.firstItemId();
-        Assert.assertTrue(container.removeItem(first));
-        Assert.assertFalse(container.isFirstId(first));
-    }
-
-    @Test
-    public void isFirstId_tableAddedFirstItemRemoved_returnsFalse()
-            throws SQLException {
-        DataGenerator.createGarbage(connectionPool);
-        SQLContainer container = new SQLContainer(new TableQuery("garbage",
-                connectionPool, AllTests.sqlGen));
-        Object first = container.addItem();
-        container.addItem();
-        Assert.assertSame(first, container.firstItemId());
-        Assert.assertTrue(container.removeItem(first));
-        Assert.assertFalse(container.isFirstId(first));
-    }
-
-    @Test
-    public void isLastId_tableLastItemRemoved_returnsFalse()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object last = container.lastItemId();
-        Assert.assertTrue(container.removeItem(last));
-        Assert.assertFalse(container.isLastId(last));
-    }
-
-    @Test
-    public void isLastId_tableAddedLastItemRemoved_returnsFalse()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object last = container.addItem();
-        Assert.assertSame(last, container.lastItemId());
-        Assert.assertTrue(container.removeItem(last));
-        Assert.assertFalse(container.isLastId(last));
-    }
-
-    @Test
-    public void indexOfId_tableItemRemoved_returnsNegOne() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.getIdByIndex(2);
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertEquals(-1, container.indexOfId(id));
-    }
-
-    @Test
-    public void indexOfId_tableAddedItemRemoved_returnsNegOne()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.addItem();
-        Assert.assertTrue(container.indexOfId(id) != -1);
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertEquals(-1, container.indexOfId(id));
-    }
-
-    @Test
-    public void getIdByIndex_tableItemRemoved_resultChanges()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.getIdByIndex(2);
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertNotSame(id, container.getIdByIndex(2));
-    }
-
-    @Test
-    public void getIdByIndex_tableAddedItemRemoved_resultChanges()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object id = container.addItem();
-        container.addItem();
-        int index = container.indexOfId(id);
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertNotSame(id, container.getIdByIndex(index));
-    }
-
-    @Test
-    public void removeAllItems_table_shouldSucceed() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Assert.assertTrue(container.removeAllItems());
-        Assert.assertEquals(0, container.size());
-    }
-
-    @Test
-    public void removeAllItems_tableAddedItems_shouldSucceed()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        container.addItem();
-        container.addItem();
-        Assert.assertTrue(container.removeAllItems());
-        Assert.assertEquals(0, container.size());
-    }
-
-    @Test
-    public void commit_tableAddedItem_shouldBeWrittenToDB() throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        Object id = container.addItem();
-        container.getContainerProperty(id, "NAME").setValue("New Name");
-        Assert.assertTrue(id instanceof TemporaryRowId);
-        Assert.assertSame(id, container.lastItemId());
-        container.commit();
-        Assert.assertFalse(container.lastItemId() instanceof TemporaryRowId);
-        Assert.assertEquals("New Name",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-    }
-
-    @Test
-    public void commit_tableTwoAddedItems_shouldBeWrittenToDB()
-            throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        Object id = container.addItem();
-        Object id2 = container.addItem();
-        container.getContainerProperty(id, "NAME").setValue("Herbert");
-        container.getContainerProperty(id2, "NAME").setValue("Larry");
-        Assert.assertTrue(id2 instanceof TemporaryRowId);
-        Assert.assertSame(id2, container.lastItemId());
-        container.commit();
-        Object nextToLast = container.getIdByIndex(container.size() - 2);
-        Assert.assertFalse(nextToLast instanceof TemporaryRowId);
-        Assert.assertEquals("Herbert",
-                container.getContainerProperty(nextToLast, "NAME").getValue());
-        Assert.assertFalse(container.lastItemId() instanceof TemporaryRowId);
-        Assert.assertEquals("Larry",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-    }
-
-    @Test
-    public void commit_tableRemovedItem_shouldBeRemovedFromDB()
-            throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        Object last = container.lastItemId();
-        container.removeItem(last);
-        container.commit();
-        Assert.assertFalse(last.equals(container.lastItemId()));
-    }
-
-    @Test
-    public void commit_tableLastItemUpdated_shouldUpdateRowInDB()
-            throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        Object last = container.lastItemId();
-        container.getContainerProperty(last, "NAME").setValue("Donald");
-        container.commit();
-        Assert.assertEquals("Donald",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-    }
-
-    @Test
-    public void rollback_tableItemAdded_discardsAddedItem() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        int size = container.size();
-        Object id = container.addItem();
-        container.getContainerProperty(id, "NAME").setValue("foo");
-        Assert.assertEquals(size + 1, container.size());
-        container.rollback();
-        Assert.assertEquals(size, container.size());
-        Assert.assertFalse("foo".equals(container.getContainerProperty(
-                container.lastItemId(), "NAME").getValue()));
-    }
-
-    @Test
-    public void rollback_tableItemRemoved_restoresRemovedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        int size = container.size();
-        Object last = container.lastItemId();
-        container.removeItem(last);
-        Assert.assertEquals(size - 1, container.size());
-        container.rollback();
-        Assert.assertEquals(size, container.size());
-        Assert.assertEquals(last, container.lastItemId());
-    }
-
-    @Test
-    public void rollback_tableItemChanged_discardsChanges() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Object last = container.lastItemId();
-        container.getContainerProperty(last, "NAME").setValue("foo");
-        container.rollback();
-        Assert.assertFalse("foo".equals(container.getContainerProperty(
-                container.lastItemId(), "NAME").getValue()));
-    }
-
-    /*-
-     * TODO Removed test since currently the Vaadin test package structure
-     * does not allow testing protected methods. When it has been fixed
-     * then re-enable test.
-    @Test
-    public void itemChangeNotification_table_isModifiedReturnsTrue()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Assert.assertFalse(container.isModified());
-        RowItem last = (RowItem) container.getItem(container.lastItemId());
-        container.itemChangeNotification(last);
-        Assert.assertTrue(container.isModified());
-        Util.shakeBodyElement()
-    }
-    -*/
-
-    @Test
-    public void itemSetChangeListeners_table_shouldFire() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        ItemSetChangeListener listener = EasyMock
-                .createMock(ItemSetChangeListener.class);
-        listener.containerItemSetChange(EasyMock.isA(ItemSetChangeEvent.class));
-        EasyMock.replay(listener);
-
-        container.addListener(listener);
-        container.addItem();
-
-        EasyMock.verify(listener);
-    }
-
-    @Test
-    public void itemSetChangeListeners_tableItemRemoved_shouldFire()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        ItemSetChangeListener listener = EasyMock
-                .createMock(ItemSetChangeListener.class);
-        listener.containerItemSetChange(EasyMock.isA(ItemSetChangeEvent.class));
-        EasyMock.expectLastCall().anyTimes();
-        EasyMock.replay(listener);
-
-        container.addListener(listener);
-        container.removeItem(container.lastItemId());
-
-        EasyMock.verify(listener);
-    }
-
-    @Test
-    public void removeListener_table_shouldNotFire() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        ItemSetChangeListener listener = EasyMock
-                .createMock(ItemSetChangeListener.class);
-        EasyMock.replay(listener);
-
-        container.addListener(listener);
-        container.removeListener(listener);
-        container.addItem();
-
-        EasyMock.verify(listener);
-    }
-
-    @Test
-    public void isModified_tableRemovedItem_returnsTrue() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Assert.assertFalse(container.isModified());
-        container.removeItem(container.lastItemId());
-        Assert.assertTrue(container.isModified());
-    }
-
-    @Test
-    public void isModified_tableAddedItem_returnsTrue() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Assert.assertFalse(container.isModified());
-        container.addItem();
-        Assert.assertTrue(container.isModified());
-    }
-
-    @Test
-    public void isModified_tableChangedItem_returnsTrue() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Assert.assertFalse(container.isModified());
-        container.getContainerProperty(container.lastItemId(), "NAME")
-                .setValue("foo");
-        Assert.assertTrue(container.isModified());
-    }
-
-    @Test
-    public void getSortableContainerPropertyIds_table_returnsAllPropertyIds()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        Collection<?> sortableIds = container.getSortableContainerPropertyIds();
-        Assert.assertTrue(sortableIds.contains("ID"));
-        Assert.assertTrue(sortableIds.contains("NAME"));
-        Assert.assertTrue(sortableIds.contains("AGE"));
-        Assert.assertEquals(3, sortableIds.size());
-        if (AllTests.db == DB.MSSQL || AllTests.db == DB.ORACLE) {
-            Assert.assertFalse(sortableIds.contains("rownum"));
-        }
-    }
-
-    @Test
-    public void addOrderBy_table_shouldReorderResults() throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.firstItemId(), "NAME")
-                        .getValue());
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        container.addOrderBy(new OrderBy("NAME", true));
-        // Börje, Kalle, Pelle, Ville
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.firstItemId(), "NAME")
-                        .getValue());
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void addOrderBy_tableIllegalColumn_shouldFail() throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-        container.addOrderBy(new OrderBy("asdf", true));
-    }
-
-    @Test
-    public void sort_table_sortsByName() throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.firstItemId(), "NAME")
-                        .getValue());
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        container.sort(new Object[] { "NAME" }, new boolean[] { true });
-
-        // Börje, Kalle, Pelle, Ville
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.firstItemId(), "NAME")
-                        .getValue());
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-    }
-
-    @Test
-    public void addFilter_table_filtersResults() throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals(4, container.size());
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        container.addContainerFilter(new Like("NAME", "%lle"));
-        // Ville, Kalle, Pelle
-        Assert.assertEquals(3, container.size());
-        Assert.assertEquals("Pelle",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-    }
-
-    @Test
-    public void addContainerFilter_filtersResults() throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals(4, container.size());
-
-        container.addContainerFilter("NAME", "Vi", false, false);
-
-        // Ville
-        Assert.assertEquals(1, container.size());
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-    }
-
-    @Test
-    public void addContainerFilter_ignoreCase_filtersResults()
-            throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals(4, container.size());
-
-        container.addContainerFilter("NAME", "vi", true, false);
-
-        // Ville
-        Assert.assertEquals(1, container.size());
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-    }
-
-    @Test
-    public void removeAllContainerFilters_table_noFiltering()
-            throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals(4, container.size());
-
-        container.addContainerFilter("NAME", "Vi", false, false);
-
-        // Ville
-        Assert.assertEquals(1, container.size());
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        container.removeAllContainerFilters();
-
-        Assert.assertEquals(4, container.size());
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-    }
-
-    @Test
-    public void removeContainerFilters_table_noFiltering() throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals(4, container.size());
-
-        container.addContainerFilter("NAME", "Vi", false, false);
-
-        // Ville
-        Assert.assertEquals(1, container.size());
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        container.removeContainerFilters("NAME");
-
-        Assert.assertEquals(4, container.size());
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-    }
-
-    @Test
-    public void addFilter_tableBufferedItems_alsoFiltersBufferedItems()
-            throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals(4, container.size());
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        Object id1 = container.addItem();
-        container.getContainerProperty(id1, "NAME").setValue("Palle");
-        Object id2 = container.addItem();
-        container.getContainerProperty(id2, "NAME").setValue("Bengt");
-
-        container.addContainerFilter(new Like("NAME", "%lle"));
-
-        // Ville, Kalle, Pelle, Palle
-        Assert.assertEquals(4, container.size());
-        Assert.assertEquals(
-                "Ville",
-                container.getContainerProperty(container.getIdByIndex(0),
-                        "NAME").getValue());
-        Assert.assertEquals(
-                "Kalle",
-                container.getContainerProperty(container.getIdByIndex(1),
-                        "NAME").getValue());
-        Assert.assertEquals(
-                "Pelle",
-                container.getContainerProperty(container.getIdByIndex(2),
-                        "NAME").getValue());
-        Assert.assertEquals(
-                "Palle",
-                container.getContainerProperty(container.getIdByIndex(3),
-                        "NAME").getValue());
-
-        Assert.assertNull(container.getIdByIndex(4));
-        Assert.assertNull(container.nextItemId(container.getIdByIndex(3)));
-
-        Assert.assertFalse(container.containsId(id2));
-        Assert.assertFalse(container.getItemIds().contains(id2));
-
-        Assert.assertNull(container.getItem(id2));
-        Assert.assertEquals(-1, container.indexOfId(id2));
-
-        Assert.assertNotSame(id2, container.lastItemId());
-        Assert.assertSame(id1, container.lastItemId());
-    }
-
-    @Test
-    public void sort_tableBufferedItems_sortsBufferedItemsLastInOrderAdded()
-            throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.firstItemId(), "NAME")
-                        .getValue());
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        Object id1 = container.addItem();
-        container.getContainerProperty(id1, "NAME").setValue("Wilbert");
-        Object id2 = container.addItem();
-        container.getContainerProperty(id2, "NAME").setValue("Albert");
-
-        container.sort(new Object[] { "NAME" }, new boolean[] { true });
-
-        // Börje, Kalle, Pelle, Ville, Wilbert, Albert
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.firstItemId(), "NAME")
-                        .getValue());
-        Assert.assertEquals(
-                "Wilbert",
-                container.getContainerProperty(
-                        container.getIdByIndex(container.size() - 2), "NAME")
-                        .getValue());
-        Assert.assertEquals("Albert",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/SQLContainerTest.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/SQLContainerTest.java
deleted file mode 100644
index 095e4a2345..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/SQLContainerTest.java
+++ /dev/null
@@ -1,2400 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer;
-
-import java.math.BigDecimal;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
-import org.easymock.EasyMock;
-import org.easymock.IAnswer;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.vaadin.data.Container.Filter;
-import com.vaadin.data.Container.ItemSetChangeEvent;
-import com.vaadin.data.Container.ItemSetChangeListener;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.filter.Compare.Equal;
-import com.vaadin.data.util.filter.Like;
-import com.vaadin.data.util.sqlcontainer.RowId;
-import com.vaadin.data.util.sqlcontainer.RowItem;
-import com.vaadin.data.util.sqlcontainer.SQLContainer;
-import com.vaadin.data.util.sqlcontainer.TemporaryRowId;
-import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
-import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
-import com.vaadin.data.util.sqlcontainer.query.FreeformQuery;
-import com.vaadin.data.util.sqlcontainer.query.FreeformQueryDelegate;
-import com.vaadin.data.util.sqlcontainer.query.FreeformStatementDelegate;
-import com.vaadin.data.util.sqlcontainer.query.OrderBy;
-import com.vaadin.data.util.sqlcontainer.query.generator.MSSQLGenerator;
-import com.vaadin.data.util.sqlcontainer.query.generator.OracleGenerator;
-import com.vaadin.data.util.sqlcontainer.query.generator.SQLGenerator;
-import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
-import com.vaadin.data.util.sqlcontainer.query.generator.filter.QueryBuilder;
-import com.vaadin.tests.server.container.sqlcontainer.AllTests.DB;
-
-public class SQLContainerTest {
-    private static final int offset = AllTests.offset;
-    private JDBCConnectionPool connectionPool;
-
-    @Before
-    public void setUp() throws SQLException {
-
-        try {
-            connectionPool = new SimpleJDBCConnectionPool(AllTests.dbDriver,
-                    AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 2, 2);
-        } catch (SQLException e) {
-            e.printStackTrace();
-            Assert.fail(e.getMessage());
-        }
-
-        DataGenerator.addPeopleToDatabase(connectionPool);
-    }
-
-    @After
-    public void tearDown() {
-        if (connectionPool != null) {
-            connectionPool.destroy();
-        }
-    }
-
-    @Test
-    public void constructor_withFreeformQuery_shouldSucceed()
-            throws SQLException {
-        new SQLContainer(new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool));
-    }
-
-    @Test(expected = SQLException.class)
-    public void constructor_withIllegalFreeformQuery_shouldFail()
-            throws SQLException {
-        SQLContainer c = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM asdf", Arrays.asList("ID"), connectionPool));
-        c.getItem(c.firstItemId());
-    }
-
-    @Test
-    public void containsId_withFreeformQueryAndExistingId_returnsTrue()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Assert.assertTrue(container.containsId(new RowId(new Object[] { 1 })));
-    }
-
-    @Test
-    public void containsId_withFreeformQueryAndNonexistingId_returnsFalse()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Assert.assertFalse(container
-                .containsId(new RowId(new Object[] { 1337 })));
-    }
-
-    @Test
-    public void getContainerProperty_freeformExistingItemIdAndPropertyId_returnsProperty()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(
-                    "Ville",
-                    container
-                            .getContainerProperty(
-                                    new RowId(new Object[] { new BigDecimal(
-                                            0 + offset) }), "NAME").getValue());
-        } else {
-            Assert.assertEquals(
-                    "Ville",
-                    container.getContainerProperty(
-                            new RowId(new Object[] { 0 + offset }), "NAME")
-                            .getValue());
-        }
-    }
-
-    @Test
-    public void getContainerProperty_freeformExistingItemIdAndNonexistingPropertyId_returnsNull()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Assert.assertNull(container.getContainerProperty(new RowId(
-                new Object[] { 1 + offset }), "asdf"));
-    }
-
-    @Test
-    public void getContainerProperty_freeformNonexistingItemId_returnsNull()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Assert.assertNull(container.getContainerProperty(new RowId(
-                new Object[] { 1337 + offset }), "NAME"));
-    }
-
-    @Test
-    public void getContainerPropertyIds_freeform_returnsIDAndNAME()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Collection<?> propertyIds = container.getContainerPropertyIds();
-        Assert.assertEquals(3, propertyIds.size());
-        Assert.assertArrayEquals(new String[] { "ID", "NAME", "AGE" },
-                propertyIds.toArray());
-    }
-
-    @Test
-    public void getItem_freeformExistingItemId_returnsItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Item item;
-        if (AllTests.db == DB.ORACLE) {
-            item = container.getItem(new RowId(new Object[] { new BigDecimal(
-                    0 + offset) }));
-        } else {
-            item = container.getItem(new RowId(new Object[] { 0 + offset }));
-        }
-        Assert.assertNotNull(item);
-        Assert.assertEquals("Ville", item.getItemProperty("NAME").getValue());
-    }
-
-    @Test
-    public void getItem_freeform5000RowsWithParameter1337_returnsItemWithId1337()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Item item;
-        if (AllTests.db == DB.ORACLE) {
-            item = container.getItem(new RowId(new Object[] { new BigDecimal(
-                    1337 + offset) }));
-            Assert.assertNotNull(item);
-            Assert.assertEquals(new BigDecimal(1337 + offset), item
-                    .getItemProperty("ID").getValue());
-        } else {
-            item = container.getItem(new RowId(new Object[] { 1337 + offset }));
-            Assert.assertNotNull(item);
-            Assert.assertEquals(1337 + offset, item.getItemProperty("ID")
-                    .getValue());
-        }
-        Assert.assertEquals("Person 1337", item.getItemProperty("NAME")
-                .getValue());
-    }
-
-    @Test
-    public void getItemIds_freeform_returnsItemIdsWithKeys0through3()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Collection<?> itemIds = container.getItemIds();
-        Assert.assertEquals(4, itemIds.size());
-        RowId zero = new RowId(new Object[] { 0 + offset });
-        RowId one = new RowId(new Object[] { 1 + offset });
-        RowId two = new RowId(new Object[] { 2 + offset });
-        RowId three = new RowId(new Object[] { 3 + offset });
-        if (AllTests.db == DB.ORACLE) {
-            String[] correct = new String[] { "1", "2", "3", "4" };
-            List<String> oracle = new ArrayList<String>();
-            for (Object o : itemIds) {
-                oracle.add(o.toString());
-            }
-            Assert.assertArrayEquals(correct, oracle.toArray());
-        } else {
-            Assert.assertArrayEquals(new Object[] { zero, one, two, three },
-                    itemIds.toArray());
-        }
-    }
-
-    @Test
-    public void getType_freeformNAMEPropertyId_returnsString()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Assert.assertEquals(String.class, container.getType("NAME"));
-    }
-
-    @Test
-    public void getType_freeformIDPropertyId_returnsInteger()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(BigDecimal.class, container.getType("ID"));
-        } else {
-            Assert.assertEquals(Integer.class, container.getType("ID"));
-        }
-    }
-
-    @Test
-    public void getType_freeformNonexistingPropertyId_returnsNull()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Assert.assertNull(container.getType("asdf"));
-    }
-
-    @Test
-    public void size_freeform_returnsFour() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Assert.assertEquals(4, container.size());
-    }
-
-    @Test
-    public void size_freeformOneAddedItem_returnsFive() throws SQLException {
-        Connection conn = connectionPool.reserveConnection();
-        Statement statement = conn.createStatement();
-        if (AllTests.db == DB.MSSQL) {
-            statement.executeUpdate("insert into people values('Bengt', '42')");
-        } else {
-            statement
-                    .executeUpdate("insert into people values(default, 'Bengt', '42')");
-        }
-        statement.close();
-        conn.commit();
-        connectionPool.releaseConnection(conn);
-
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Assert.assertEquals(5, container.size());
-    }
-
-    @Test
-    public void indexOfId_freeformWithParameterThree_returnsThree()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(3, container.indexOfId(new RowId(
-                    new Object[] { new BigDecimal(3 + offset) })));
-        } else {
-            Assert.assertEquals(3,
-                    container.indexOfId(new RowId(new Object[] { 3 + offset })));
-        }
-    }
-
-    @Test
-    public void indexOfId_freeform5000RowsWithParameter1337_returns1337()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people ORDER BY \"ID\" ASC",
-                Arrays.asList("ID"), connectionPool));
-        if (AllTests.db == DB.ORACLE) {
-            container.getItem(new RowId(new Object[] { new BigDecimal(
-                    1337 + offset) }));
-            Assert.assertEquals(1337, container.indexOfId(new RowId(
-                    new Object[] { new BigDecimal(1337 + offset) })));
-        } else {
-            container.getItem(new RowId(new Object[] { 1337 + offset }));
-            Assert.assertEquals(1337, container.indexOfId(new RowId(
-                    new Object[] { 1337 + offset })));
-        }
-    }
-
-    @Test
-    public void getIdByIndex_freeform5000rowsIndex1337_returnsRowId1337()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people ORDER BY \"ID\" ASC",
-                Arrays.asList("ID"), connectionPool));
-        Object itemId = container.getIdByIndex(1337);
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(new RowId(new Object[] { new BigDecimal(
-                    1337 + offset) }), itemId);
-        } else {
-            Assert.assertEquals(new RowId(new Object[] { 1337 + offset }),
-                    itemId);
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void getIdByIndex_freeformWithPaging5000rowsIndex1337_returnsRowId1337()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.expect(
-                delegate.getQueryString(EasyMock.anyInt(), EasyMock.anyInt()))
-                .andAnswer(new IAnswer<String>() {
-                    public String answer() throws Throwable {
-                        Object[] args = EasyMock.getCurrentArguments();
-                        int offset = (Integer) (args[0]);
-                        int limit = (Integer) (args[1]);
-                        if (AllTests.db == DB.MSSQL) {
-                            int start = offset + 1;
-                            int end = offset + limit + 1;
-                            String q = "SELECT * FROM (SELECT row_number() OVER"
-                                    + " ( ORDER BY \"ID\" ASC) AS rownum, * FROM people)"
-                                    + " AS a WHERE a.rownum BETWEEN "
-                                    + start
-                                    + " AND " + end;
-                            return q;
-                        } else if (AllTests.db == DB.ORACLE) {
-                            int start = offset + 1;
-                            int end = offset + limit + 1;
-                            String q = "SELECT * FROM (SELECT x.*, ROWNUM AS r FROM"
-                                    + " (SELECT * FROM people ORDER BY \"ID\" ASC) x) "
-                                    + " WHERE r BETWEEN "
-                                    + start
-                                    + " AND "
-                                    + end;
-                            return q;
-                        } else {
-                            return "SELECT * FROM people LIMIT " + limit
-                                    + " OFFSET " + offset;
-                        }
-                    }
-                }).anyTimes();
-        delegate.setFilters(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setFilters(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        EasyMock.expect(delegate.getCountQuery())
-                .andThrow(new UnsupportedOperationException()).anyTimes();
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-        SQLContainer container = new SQLContainer(query);
-        Object itemId = container.getIdByIndex(1337);
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(
-                    new RowId(new Object[] { 1337 + offset }).toString(),
-                    itemId.toString());
-        } else {
-            Assert.assertEquals(new RowId(new Object[] { 1337 + offset }),
-                    itemId);
-        }
-    }
-
-    @Test
-    public void nextItemId_freeformCurrentItem1337_returnsItem1338()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people ORDER BY \"ID\" ASC",
-                Arrays.asList("ID"), connectionPool));
-        Object itemId = container.getIdByIndex(1337);
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(
-                    new RowId(new Object[] { 1338 + offset }).toString(),
-                    container.nextItemId(itemId).toString());
-        } else {
-            Assert.assertEquals(new RowId(new Object[] { 1338 + offset }),
-                    container.nextItemId(itemId));
-        }
-    }
-
-    @Test
-    public void prevItemId_freeformCurrentItem1337_returns1336()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people ORDER BY \"ID\" ASC",
-                Arrays.asList("ID"), connectionPool));
-        Object itemId = container.getIdByIndex(1337);
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(
-                    new RowId(new Object[] { 1336 + offset }).toString(),
-                    container.prevItemId(itemId).toString());
-        } else {
-            Assert.assertEquals(new RowId(new Object[] { 1336 + offset }),
-                    container.prevItemId(itemId));
-        }
-    }
-
-    @Test
-    public void firstItemId_freeform_returnsItemId0() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(
-                    new RowId(new Object[] { 0 + offset }).toString(),
-                    container.firstItemId().toString());
-        } else {
-            Assert.assertEquals(new RowId(new Object[] { 0 + offset }),
-                    container.firstItemId());
-        }
-    }
-
-    @Test
-    public void lastItemId_freeform5000Rows_returnsItemId4999()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people ORDER BY \"ID\" ASC",
-                Arrays.asList("ID"), connectionPool));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(
-                    new RowId(new Object[] { 4999 + offset }).toString(),
-                    container.lastItemId().toString());
-        } else {
-            Assert.assertEquals(new RowId(new Object[] { 4999 + offset }),
-                    container.lastItemId());
-        }
-    }
-
-    @Test
-    public void isFirstId_freeformActualFirstId_returnsTrue()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertTrue(container.isFirstId(new RowId(
-                    new Object[] { new BigDecimal(0 + offset) })));
-        } else {
-            Assert.assertTrue(container.isFirstId(new RowId(
-                    new Object[] { 0 + offset })));
-        }
-    }
-
-    @Test
-    public void isFirstId_freeformSecondId_returnsFalse() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertFalse(container.isFirstId(new RowId(
-                    new Object[] { new BigDecimal(1 + offset) })));
-        } else {
-            Assert.assertFalse(container.isFirstId(new RowId(
-                    new Object[] { 1 + offset })));
-        }
-    }
-
-    @Test
-    public void isLastId_freeformSecondId_returnsFalse() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertFalse(container.isLastId(new RowId(
-                    new Object[] { new BigDecimal(1 + offset) })));
-        } else {
-            Assert.assertFalse(container.isLastId(new RowId(
-                    new Object[] { 1 + offset })));
-        }
-    }
-
-    @Test
-    public void isLastId_freeformLastId_returnsTrue() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertTrue(container.isLastId(new RowId(
-                    new Object[] { new BigDecimal(3 + offset) })));
-        } else {
-            Assert.assertTrue(container.isLastId(new RowId(
-                    new Object[] { 3 + offset })));
-        }
-    }
-
-    @Test
-    public void isLastId_freeform5000RowsLastId_returnsTrue()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people ORDER BY \"ID\" ASC",
-                Arrays.asList("ID"), connectionPool));
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertTrue(container.isLastId(new RowId(
-                    new Object[] { new BigDecimal(4999 + offset) })));
-        } else {
-            Assert.assertTrue(container.isLastId(new RowId(
-                    new Object[] { 4999 + offset })));
-        }
-    }
-
-    @Test
-    public void refresh_freeform_sizeShouldUpdate() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Assert.assertEquals(4, container.size());
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        container.refresh();
-        Assert.assertEquals(5000, container.size());
-    }
-
-    @Test
-    public void refresh_freeformWithoutCallingRefresh_sizeShouldNotUpdate()
-            throws SQLException {
-        // Yeah, this is a weird one. We're testing that the size doesn't update
-        // after adding lots of items unless we call refresh inbetween. This to
-        // make sure that the refresh method actually refreshes stuff and isn't
-        // a NOP.
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Assert.assertEquals(4, container.size());
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        Assert.assertEquals(4, container.size());
-    }
-
-    @Test
-    public void setAutoCommit_freeform_shouldSucceed() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        container.setAutoCommit(true);
-        Assert.assertTrue(container.isAutoCommit());
-        container.setAutoCommit(false);
-        Assert.assertFalse(container.isAutoCommit());
-    }
-
-    @Test
-    public void getPageLength_freeform_returnsDefault100() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Assert.assertEquals(100, container.getPageLength());
-    }
-
-    @Test
-    public void setPageLength_freeform_shouldSucceed() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        container.setPageLength(20);
-        Assert.assertEquals(20, container.getPageLength());
-        container.setPageLength(200);
-        Assert.assertEquals(200, container.getPageLength());
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void addContainerProperty_normal_isUnsupported() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        container.addContainerProperty("asdf", String.class, "");
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void removeContainerProperty_normal_isUnsupported()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        container.removeContainerProperty("asdf");
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void addItemObject_normal_isUnsupported() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        container.addItem("asdf");
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void addItemAfterObjectObject_normal_isUnsupported()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        container.addItemAfter("asdf", "foo");
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void addItemAtIntObject_normal_isUnsupported() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        container.addItemAt(2, "asdf");
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void addItemAtInt_normal_isUnsupported() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        container.addItemAt(2);
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void addItemAfterObject_normal_isUnsupported() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        container.addItemAfter("asdf");
-    }
-
-    @Test
-    public void addItem_freeformAddOneNewItem_returnsItemId()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object itemId = container.addItem();
-        Assert.assertNotNull(itemId);
-    }
-
-    @Test
-    public void addItem_freeformAddOneNewItem_shouldChangeSize()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        int size = container.size();
-        container.addItem();
-        Assert.assertEquals(size + 1, container.size());
-    }
-
-    @Test
-    public void addItem_freeformAddTwoNewItems_shouldChangeSize()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        int size = container.size();
-        Object id1 = container.addItem();
-        Object id2 = container.addItem();
-        Assert.assertEquals(size + 2, container.size());
-        Assert.assertNotSame(id1, id2);
-        Assert.assertFalse(id1.equals(id2));
-    }
-
-    @Test
-    public void nextItemId_freeformNewlyAddedItem_returnsNewlyAdded()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object lastId = container.lastItemId();
-        Object id = container.addItem();
-        Assert.assertEquals(id, container.nextItemId(lastId));
-    }
-
-    @Test
-    public void lastItemId_freeformNewlyAddedItem_returnsNewlyAdded()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object lastId = container.lastItemId();
-        Object id = container.addItem();
-        Assert.assertEquals(id, container.lastItemId());
-        Assert.assertNotSame(lastId, container.lastItemId());
-    }
-
-    @Test
-    public void indexOfId_freeformNewlyAddedItem_returnsFour()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.addItem();
-        Assert.assertEquals(4, container.indexOfId(id));
-    }
-
-    @Test
-    public void getItem_freeformNewlyAddedItem_returnsNewlyAdded()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.addItem();
-        Assert.assertNotNull(container.getItem(id));
-    }
-
-    @Test
-    public void getItem_freeformNewlyAddedItemAndFiltered_returnsNull()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        container.addContainerFilter(new Equal("NAME", "asdf"));
-        Object id = container.addItem();
-        Assert.assertNull(container.getItem(id));
-    }
-
-    @Test
-    public void getItemUnfiltered_freeformNewlyAddedItemAndFiltered_returnsNewlyAdded()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        container.addContainerFilter(new Equal("NAME", "asdf"));
-        Object id = container.addItem();
-        Assert.assertNotNull(container.getItemUnfiltered(id));
-    }
-
-    @Test
-    public void getItemIds_freeformNewlyAddedItem_containsNewlyAdded()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.addItem();
-        Assert.assertTrue(container.getItemIds().contains(id));
-    }
-
-    @Test
-    public void getContainerProperty_freeformNewlyAddedItem_returnsPropertyOfNewlyAddedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.addItem();
-        Item item = container.getItem(id);
-        item.getItemProperty("NAME").setValue("asdf");
-        Assert.assertEquals("asdf", container.getContainerProperty(id, "NAME")
-                .getValue());
-    }
-
-    @Test
-    public void containsId_freeformNewlyAddedItem_returnsTrue()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.addItem();
-        Assert.assertTrue(container.containsId(id));
-    }
-
-    @Test
-    public void prevItemId_freeformTwoNewlyAddedItems_returnsFirstAddedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id1 = container.addItem();
-        Object id2 = container.addItem();
-        Assert.assertEquals(id1, container.prevItemId(id2));
-    }
-
-    @Test
-    public void firstItemId_freeformEmptyResultSet_returnsFirstAddedItem()
-            throws SQLException {
-        DataGenerator.createGarbage(connectionPool);
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM GARBAGE", Arrays.asList("ID"), connectionPool));
-        Object id = container.addItem();
-        Assert.assertSame(id, container.firstItemId());
-    }
-
-    @Test
-    public void isFirstId_freeformEmptyResultSet_returnsFirstAddedItem()
-            throws SQLException {
-        DataGenerator.createGarbage(connectionPool);
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM GARBAGE", Arrays.asList("ID"), connectionPool));
-        Object id = container.addItem();
-        Assert.assertTrue(container.isFirstId(id));
-    }
-
-    @Test
-    public void isLastId_freeformOneItemAdded_returnsTrueForAddedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.addItem();
-        Assert.assertTrue(container.isLastId(id));
-    }
-
-    @Test
-    public void isLastId_freeformTwoItemsAdded_returnsTrueForLastAddedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        container.addItem();
-        Object id2 = container.addItem();
-        Assert.assertTrue(container.isLastId(id2));
-    }
-
-    @Test
-    public void getIdByIndex_freeformOneItemAddedLastIndexInContainer_returnsAddedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.addItem();
-        Assert.assertEquals(id, container.getIdByIndex(container.size() - 1));
-    }
-
-    @Test
-    public void removeItem_freeformNoAddedItems_removesItemFromContainer()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        int size = container.size();
-        Object id = container.firstItemId();
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertNotSame(id, container.firstItemId());
-        Assert.assertEquals(size - 1, container.size());
-    }
-
-    @Test
-    public void containsId_freeformRemovedItem_returnsFalse()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.firstItemId();
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertFalse(container.containsId(id));
-    }
-
-    @Test
-    public void removeItem_freeformOneAddedItem_removesTheAddedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.addItem();
-        int size = container.size();
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertFalse(container.containsId(id));
-        Assert.assertEquals(size - 1, container.size());
-    }
-
-    @Test
-    public void getItem_freeformItemRemoved_returnsNull() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.firstItemId();
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertNull(container.getItem(id));
-    }
-
-    @Test
-    public void getItem_freeformAddedItemRemoved_returnsNull()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.addItem();
-        Assert.assertNotNull(container.getItem(id));
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertNull(container.getItem(id));
-    }
-
-    @Test
-    public void getItemIds_freeformItemRemoved_shouldNotContainRemovedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.firstItemId();
-        Assert.assertTrue(container.getItemIds().contains(id));
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertFalse(container.getItemIds().contains(id));
-    }
-
-    @Test
-    public void getItemIds_freeformAddedItemRemoved_shouldNotContainRemovedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.addItem();
-        Assert.assertTrue(container.getItemIds().contains(id));
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertFalse(container.getItemIds().contains(id));
-    }
-
-    @Test
-    public void containsId_freeformItemRemoved_returnsFalse()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.firstItemId();
-        Assert.assertTrue(container.containsId(id));
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertFalse(container.containsId(id));
-    }
-
-    @Test
-    public void containsId_freeformAddedItemRemoved_returnsFalse()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.addItem();
-        Assert.assertTrue(container.containsId(id));
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertFalse(container.containsId(id));
-    }
-
-    @Test
-    public void nextItemId_freeformItemRemoved_skipsRemovedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object first = container.getIdByIndex(0);
-        Object second = container.getIdByIndex(1);
-        Object third = container.getIdByIndex(2);
-        Assert.assertTrue(container.removeItem(second));
-        Assert.assertEquals(third, container.nextItemId(first));
-    }
-
-    @Test
-    public void nextItemId_freeformAddedItemRemoved_skipsRemovedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object first = container.lastItemId();
-        Object second = container.addItem();
-        Object third = container.addItem();
-        Assert.assertTrue(container.removeItem(second));
-        Assert.assertEquals(third, container.nextItemId(first));
-    }
-
-    @Test
-    public void prevItemId_freeformItemRemoved_skipsRemovedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object first = container.getIdByIndex(0);
-        Object second = container.getIdByIndex(1);
-        Object third = container.getIdByIndex(2);
-        Assert.assertTrue(container.removeItem(second));
-        Assert.assertEquals(first, container.prevItemId(third));
-    }
-
-    @Test
-    public void prevItemId_freeformAddedItemRemoved_skipsRemovedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object first = container.lastItemId();
-        Object second = container.addItem();
-        Object third = container.addItem();
-        Assert.assertTrue(container.removeItem(second));
-        Assert.assertEquals(first, container.prevItemId(third));
-    }
-
-    @Test
-    public void firstItemId_freeformFirstItemRemoved_resultChanges()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object first = container.firstItemId();
-        Assert.assertTrue(container.removeItem(first));
-        Assert.assertNotSame(first, container.firstItemId());
-    }
-
-    @Test
-    public void firstItemId_freeformNewlyAddedFirstItemRemoved_resultChanges()
-            throws SQLException {
-        DataGenerator.createGarbage(connectionPool);
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM GARBAGE", Arrays.asList("ID"), connectionPool));
-        Object first = container.addItem();
-        Object second = container.addItem();
-        Assert.assertSame(first, container.firstItemId());
-        Assert.assertTrue(container.removeItem(first));
-        Assert.assertSame(second, container.firstItemId());
-    }
-
-    @Test
-    public void lastItemId_freeformLastItemRemoved_resultChanges()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object last = container.lastItemId();
-        Assert.assertTrue(container.removeItem(last));
-        Assert.assertNotSame(last, container.lastItemId());
-    }
-
-    @Test
-    public void lastItemId_freeformAddedLastItemRemoved_resultChanges()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object last = container.addItem();
-        Assert.assertSame(last, container.lastItemId());
-        Assert.assertTrue(container.removeItem(last));
-        Assert.assertNotSame(last, container.lastItemId());
-    }
-
-    @Test
-    public void isFirstId_freeformFirstItemRemoved_returnsFalse()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object first = container.firstItemId();
-        Assert.assertTrue(container.removeItem(first));
-        Assert.assertFalse(container.isFirstId(first));
-    }
-
-    @Test
-    public void isFirstId_freeformAddedFirstItemRemoved_returnsFalse()
-            throws SQLException {
-        DataGenerator.createGarbage(connectionPool);
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM GARBAGE", Arrays.asList("ID"), connectionPool));
-        Object first = container.addItem();
-        container.addItem();
-        Assert.assertSame(first, container.firstItemId());
-        Assert.assertTrue(container.removeItem(first));
-        Assert.assertFalse(container.isFirstId(first));
-    }
-
-    @Test
-    public void isLastId_freeformLastItemRemoved_returnsFalse()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object last = container.lastItemId();
-        Assert.assertTrue(container.removeItem(last));
-        Assert.assertFalse(container.isLastId(last));
-    }
-
-    @Test
-    public void isLastId_freeformAddedLastItemRemoved_returnsFalse()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object last = container.addItem();
-        Assert.assertSame(last, container.lastItemId());
-        Assert.assertTrue(container.removeItem(last));
-        Assert.assertFalse(container.isLastId(last));
-    }
-
-    @Test
-    public void indexOfId_freeformItemRemoved_returnsNegOne()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.getIdByIndex(2);
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertEquals(-1, container.indexOfId(id));
-    }
-
-    @Test
-    public void indexOfId_freeformAddedItemRemoved_returnsNegOne()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.addItem();
-        Assert.assertTrue(container.indexOfId(id) != -1);
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertEquals(-1, container.indexOfId(id));
-    }
-
-    @Test
-    public void getIdByIndex_freeformItemRemoved_resultChanges()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.getIdByIndex(2);
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertNotSame(id, container.getIdByIndex(2));
-    }
-
-    @Test
-    public void getIdByIndex_freeformAddedItemRemoved_resultChanges()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object id = container.addItem();
-        container.addItem();
-        int index = container.indexOfId(id);
-        Assert.assertTrue(container.removeItem(id));
-        Assert.assertNotSame(id, container.getIdByIndex(index));
-    }
-
-    @Test
-    public void removeAllItems_freeform_shouldSucceed() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Assert.assertTrue(container.removeAllItems());
-        Assert.assertEquals(0, container.size());
-    }
-
-    @Test
-    public void removeAllItems_freeformAddedItems_shouldSucceed()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        container.addItem();
-        container.addItem();
-        Assert.assertTrue(container.removeAllItems());
-        Assert.assertEquals(0, container.size());
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void commit_freeformAddedItem_shouldBeWrittenToDB()
-            throws SQLException {
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.expect(
-                delegate.storeRow(EasyMock.isA(Connection.class),
-                        EasyMock.isA(RowItem.class)))
-                .andAnswer(new IAnswer<Integer>() {
-                    public Integer answer() throws Throwable {
-                        Connection conn = (Connection) EasyMock
-                                .getCurrentArguments()[0];
-                        RowItem item = (RowItem) EasyMock.getCurrentArguments()[1];
-                        Statement statement = conn.createStatement();
-                        if (AllTests.db == DB.MSSQL) {
-                            statement
-                                    .executeUpdate("insert into people values('"
-                                            + item.getItemProperty("NAME")
-                                                    .getValue()
-                                            + "', '"
-                                            + item.getItemProperty("AGE")
-                                                    .getValue() + "')");
-                        } else {
-                            statement
-                                    .executeUpdate("insert into people values(default, '"
-                                            + item.getItemProperty("NAME")
-                                                    .getValue()
-                                            + "', '"
-                                            + item.getItemProperty("AGE")
-                                                    .getValue() + "')");
-                        }
-                        statement.close();
-                        conn.commit();
-                        connectionPool.releaseConnection(conn);
-                        return 1;
-                    }
-                }).anyTimes();
-        EasyMock.expect(
-                delegate.getQueryString(EasyMock.anyInt(), EasyMock.anyInt()))
-                .andAnswer(new IAnswer<String>() {
-                    public String answer() throws Throwable {
-                        Object[] args = EasyMock.getCurrentArguments();
-                        int offset = (Integer) (args[0]);
-                        int limit = (Integer) (args[1]);
-                        if (AllTests.db == DB.MSSQL) {
-                            int start = offset + 1;
-                            int end = offset + limit + 1;
-                            String q = "SELECT * FROM (SELECT row_number() OVER"
-                                    + " ( ORDER BY \"ID\" ASC) AS rownum, * FROM people)"
-                                    + " AS a WHERE a.rownum BETWEEN "
-                                    + start
-                                    + " AND " + end;
-                            return q;
-                        } else if (AllTests.db == DB.ORACLE) {
-                            int start = offset + 1;
-                            int end = offset + limit + 1;
-                            String q = "SELECT * FROM (SELECT x.*, ROWNUM AS r FROM"
-                                    + " (SELECT * FROM people ORDER BY \"ID\" ASC) x) "
-                                    + " WHERE r BETWEEN "
-                                    + start
-                                    + " AND "
-                                    + end;
-                            return q;
-                        } else {
-                            return "SELECT * FROM people LIMIT " + limit
-                                    + " OFFSET " + offset;
-                        }
-                    }
-                }).anyTimes();
-        delegate.setFilters(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setFilters(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        EasyMock.expect(delegate.getCountQuery())
-                .andThrow(new UnsupportedOperationException()).anyTimes();
-
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        query.setDelegate(delegate);
-        EasyMock.replay(delegate);
-        SQLContainer container = new SQLContainer(query);
-        Object id = container.addItem();
-        container.getContainerProperty(id, "NAME").setValue("New Name");
-        container.getContainerProperty(id, "AGE").setValue(30);
-        Assert.assertTrue(id instanceof TemporaryRowId);
-        Assert.assertSame(id, container.lastItemId());
-        container.commit();
-        Assert.assertFalse(container.lastItemId() instanceof TemporaryRowId);
-        Assert.assertEquals("New Name",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-        EasyMock.verify(delegate);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void commit_freeformTwoAddedItems_shouldBeWrittenToDB()
-            throws SQLException {
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.expect(
-                delegate.storeRow(EasyMock.isA(Connection.class),
-                        EasyMock.isA(RowItem.class)))
-                .andAnswer(new IAnswer<Integer>() {
-                    public Integer answer() throws Throwable {
-                        Connection conn = (Connection) EasyMock
-                                .getCurrentArguments()[0];
-                        RowItem item = (RowItem) EasyMock.getCurrentArguments()[1];
-                        Statement statement = conn.createStatement();
-                        if (AllTests.db == DB.MSSQL) {
-                            statement
-                                    .executeUpdate("insert into people values('"
-                                            + item.getItemProperty("NAME")
-                                                    .getValue()
-                                            + "', '"
-                                            + item.getItemProperty("AGE")
-                                                    .getValue() + "')");
-                        } else {
-                            statement
-                                    .executeUpdate("insert into people values(default, '"
-                                            + item.getItemProperty("NAME")
-                                                    .getValue()
-                                            + "', '"
-                                            + item.getItemProperty("AGE")
-                                                    .getValue() + "')");
-                        }
-                        statement.close();
-                        conn.commit();
-                        connectionPool.releaseConnection(conn);
-                        return 1;
-                    }
-                }).anyTimes();
-        EasyMock.expect(
-                delegate.getQueryString(EasyMock.anyInt(), EasyMock.anyInt()))
-                .andAnswer(new IAnswer<String>() {
-                    public String answer() throws Throwable {
-                        Object[] args = EasyMock.getCurrentArguments();
-                        int offset = (Integer) (args[0]);
-                        int limit = (Integer) (args[1]);
-                        if (AllTests.db == DB.MSSQL) {
-                            int start = offset + 1;
-                            int end = offset + limit + 1;
-                            String q = "SELECT * FROM (SELECT row_number() OVER"
-                                    + " ( ORDER BY \"ID\" ASC) AS rownum, * FROM people)"
-                                    + " AS a WHERE a.rownum BETWEEN "
-                                    + start
-                                    + " AND " + end;
-                            return q;
-                        } else if (AllTests.db == DB.ORACLE) {
-                            int start = offset + 1;
-                            int end = offset + limit + 1;
-                            String q = "SELECT * FROM (SELECT x.*, ROWNUM AS r FROM"
-                                    + " (SELECT * FROM people ORDER BY \"ID\" ASC) x) "
-                                    + " WHERE r BETWEEN "
-                                    + start
-                                    + " AND "
-                                    + end;
-                            return q;
-                        } else {
-                            return "SELECT * FROM people LIMIT " + limit
-                                    + " OFFSET " + offset;
-                        }
-                    }
-                }).anyTimes();
-        delegate.setFilters(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setFilters(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        EasyMock.expect(delegate.getCountQuery())
-                .andThrow(new UnsupportedOperationException()).anyTimes();
-
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        query.setDelegate(delegate);
-        EasyMock.replay(delegate);
-        SQLContainer container = new SQLContainer(query);
-        Object id = container.addItem();
-        Object id2 = container.addItem();
-        container.getContainerProperty(id, "NAME").setValue("Herbert");
-        container.getContainerProperty(id, "AGE").setValue(30);
-        container.getContainerProperty(id2, "NAME").setValue("Larry");
-        container.getContainerProperty(id2, "AGE").setValue(50);
-        Assert.assertTrue(id2 instanceof TemporaryRowId);
-        Assert.assertSame(id2, container.lastItemId());
-        container.commit();
-        Object nextToLast = container.getIdByIndex(container.size() - 2);
-        Assert.assertFalse(nextToLast instanceof TemporaryRowId);
-        Assert.assertEquals("Herbert",
-                container.getContainerProperty(nextToLast, "NAME").getValue());
-        Assert.assertFalse(container.lastItemId() instanceof TemporaryRowId);
-        Assert.assertEquals("Larry",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-        EasyMock.verify(delegate);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void commit_freeformRemovedItem_shouldBeRemovedFromDB()
-            throws SQLException {
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.expect(
-                delegate.removeRow(EasyMock.isA(Connection.class),
-                        EasyMock.isA(RowItem.class)))
-                .andAnswer(new IAnswer<Boolean>() {
-                    public Boolean answer() throws Throwable {
-                        Connection conn = (Connection) EasyMock
-                                .getCurrentArguments()[0];
-                        RowItem item = (RowItem) EasyMock.getCurrentArguments()[1];
-                        Statement statement = conn.createStatement();
-                        statement
-                                .executeUpdate("DELETE FROM people WHERE \"ID\"="
-                                        + item.getItemProperty("ID"));
-                        statement.close();
-                        return true;
-                    }
-                }).anyTimes();
-        EasyMock.expect(
-                delegate.getQueryString(EasyMock.anyInt(), EasyMock.anyInt()))
-                .andAnswer(new IAnswer<String>() {
-                    public String answer() throws Throwable {
-                        Object[] args = EasyMock.getCurrentArguments();
-                        int offset = (Integer) (args[0]);
-                        int limit = (Integer) (args[1]);
-                        if (AllTests.db == DB.MSSQL) {
-                            int start = offset + 1;
-                            int end = offset + limit + 1;
-                            String q = "SELECT * FROM (SELECT row_number() OVER"
-                                    + " ( ORDER BY \"ID\" ASC) AS rownum, * FROM people)"
-                                    + " AS a WHERE a.rownum BETWEEN "
-                                    + start
-                                    + " AND " + end;
-                            return q;
-                        } else if (AllTests.db == DB.ORACLE) {
-                            int start = offset + 1;
-                            int end = offset + limit + 1;
-                            String q = "SELECT * FROM (SELECT x.*, ROWNUM AS r FROM"
-                                    + " (SELECT * FROM people ORDER BY \"ID\" ASC) x) "
-                                    + " WHERE r BETWEEN "
-                                    + start
-                                    + " AND "
-                                    + end;
-                            return q;
-                        } else {
-                            return "SELECT * FROM people LIMIT " + limit
-                                    + " OFFSET " + offset;
-                        }
-                    }
-                }).anyTimes();
-        delegate.setFilters(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setFilters(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        EasyMock.expect(delegate.getCountQuery())
-                .andThrow(new UnsupportedOperationException()).anyTimes();
-
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        query.setDelegate(delegate);
-        EasyMock.replay(delegate);
-        SQLContainer container = new SQLContainer(query);
-        Object last = container.lastItemId();
-        container.removeItem(last);
-        container.commit();
-        Assert.assertFalse(last.equals(container.lastItemId()));
-        EasyMock.verify(delegate);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void commit_freeformLastItemUpdated_shouldUpdateRowInDB()
-            throws SQLException {
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.expect(
-                delegate.storeRow(EasyMock.isA(Connection.class),
-                        EasyMock.isA(RowItem.class)))
-                .andAnswer(new IAnswer<Integer>() {
-                    public Integer answer() throws Throwable {
-                        Connection conn = (Connection) EasyMock
-                                .getCurrentArguments()[0];
-                        RowItem item = (RowItem) EasyMock.getCurrentArguments()[1];
-                        Statement statement = conn.createStatement();
-                        statement.executeUpdate("UPDATE people SET \"NAME\"='"
-                                + item.getItemProperty("NAME").getValue()
-                                + "' WHERE \"ID\"="
-                                + item.getItemProperty("ID").getValue());
-                        statement.close();
-                        conn.commit();
-                        connectionPool.releaseConnection(conn);
-                        return 1;
-                    }
-                }).anyTimes();
-        EasyMock.expect(
-                delegate.getQueryString(EasyMock.anyInt(), EasyMock.anyInt()))
-                .andAnswer(new IAnswer<String>() {
-                    public String answer() throws Throwable {
-                        Object[] args = EasyMock.getCurrentArguments();
-                        int offset = (Integer) (args[0]);
-                        int limit = (Integer) (args[1]);
-                        if (AllTests.db == DB.MSSQL) {
-                            int start = offset + 1;
-                            int end = offset + limit + 1;
-                            String q = "SELECT * FROM (SELECT row_number() OVER"
-                                    + " ( ORDER BY \"ID\" ASC) AS rownum, * FROM people)"
-                                    + " AS a WHERE a.rownum BETWEEN "
-                                    + start
-                                    + " AND " + end;
-                            return q;
-                        } else if (AllTests.db == DB.ORACLE) {
-                            int start = offset + 1;
-                            int end = offset + limit + 1;
-                            String q = "SELECT * FROM (SELECT x.*, ROWNUM AS r FROM"
-                                    + " (SELECT * FROM people ORDER BY \"ID\" ASC) x) "
-                                    + " WHERE r BETWEEN "
-                                    + start
-                                    + " AND "
-                                    + end;
-                            return q;
-                        } else {
-                            return "SELECT * FROM people LIMIT " + limit
-                                    + " OFFSET " + offset;
-                        }
-                    }
-                }).anyTimes();
-        delegate.setFilters(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setFilters(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        EasyMock.expect(delegate.getCountQuery())
-                .andThrow(new UnsupportedOperationException()).anyTimes();
-
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        query.setDelegate(delegate);
-        EasyMock.replay(delegate);
-        SQLContainer container = new SQLContainer(query);
-        Object last = container.lastItemId();
-        container.getContainerProperty(last, "NAME").setValue("Donald");
-        container.commit();
-        Assert.assertEquals("Donald",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-        EasyMock.verify(delegate);
-    }
-
-    @Test
-    public void rollback_freeformItemAdded_discardsAddedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        int size = container.size();
-        Object id = container.addItem();
-        container.getContainerProperty(id, "NAME").setValue("foo");
-        Assert.assertEquals(size + 1, container.size());
-        container.rollback();
-        Assert.assertEquals(size, container.size());
-        Assert.assertFalse("foo".equals(container.getContainerProperty(
-                container.lastItemId(), "NAME").getValue()));
-    }
-
-    @Test
-    public void rollback_freeformItemRemoved_restoresRemovedItem()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        int size = container.size();
-        Object last = container.lastItemId();
-        container.removeItem(last);
-        Assert.assertEquals(size - 1, container.size());
-        container.rollback();
-        Assert.assertEquals(size, container.size());
-        Assert.assertEquals(last, container.lastItemId());
-    }
-
-    @Test
-    public void rollback_freeformItemChanged_discardsChanges()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Object last = container.lastItemId();
-        container.getContainerProperty(last, "NAME").setValue("foo");
-        container.rollback();
-        Assert.assertFalse("foo".equals(container.getContainerProperty(
-                container.lastItemId(), "NAME").getValue()));
-    }
-
-    /*-
-     * TODO Removed test since currently the Vaadin test package structure
-     * does not allow testing protected methods. When it has been fixed
-     * then re-enable test.
-    @Test
-    public void itemChangeNotification_freeform_isModifiedReturnsTrue()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Assert.assertFalse(container.isModified());
-        RowItem last = (RowItem) container.getItem(container.lastItemId());
-        container.itemChangeNotification(last);
-        Assert.assertTrue(container.isModified());
-    }
-    */
-
-    @Test
-    public void itemSetChangeListeners_freeform_shouldFire()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        ItemSetChangeListener listener = EasyMock
-                .createMock(ItemSetChangeListener.class);
-        listener.containerItemSetChange(EasyMock.isA(ItemSetChangeEvent.class));
-        EasyMock.replay(listener);
-
-        container.addListener(listener);
-        container.addItem();
-
-        EasyMock.verify(listener);
-    }
-
-    @Test
-    public void itemSetChangeListeners_freeformItemRemoved_shouldFire()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        ItemSetChangeListener listener = EasyMock
-                .createMock(ItemSetChangeListener.class);
-        listener.containerItemSetChange(EasyMock.isA(ItemSetChangeEvent.class));
-        EasyMock.expectLastCall().anyTimes();
-        EasyMock.replay(listener);
-
-        container.addListener(listener);
-        container.removeItem(container.lastItemId());
-
-        EasyMock.verify(listener);
-    }
-
-    @Test
-    public void removeListener_freeform_shouldNotFire() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        ItemSetChangeListener listener = EasyMock
-                .createMock(ItemSetChangeListener.class);
-        EasyMock.replay(listener);
-
-        container.addListener(listener);
-        container.removeListener(listener);
-        container.addItem();
-
-        EasyMock.verify(listener);
-    }
-
-    @Test
-    public void isModified_freeformRemovedItem_returnsTrue()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Assert.assertFalse(container.isModified());
-        container.removeItem(container.lastItemId());
-        Assert.assertTrue(container.isModified());
-    }
-
-    @Test
-    public void isModified_freeformAddedItem_returnsTrue() throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Assert.assertFalse(container.isModified());
-        container.addItem();
-        Assert.assertTrue(container.isModified());
-    }
-
-    @Test
-    public void isModified_freeformChangedItem_returnsTrue()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Assert.assertFalse(container.isModified());
-        container.getContainerProperty(container.lastItemId(), "NAME")
-                .setValue("foo");
-        Assert.assertTrue(container.isModified());
-    }
-
-    @Test
-    public void getSortableContainerPropertyIds_freeform_returnsAllPropertyIds()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Collection<?> sortableIds = container.getSortableContainerPropertyIds();
-        Assert.assertTrue(sortableIds.contains("ID"));
-        Assert.assertTrue(sortableIds.contains("NAME"));
-        Assert.assertTrue(sortableIds.contains("AGE"));
-        Assert.assertEquals(3, sortableIds.size());
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void addOrderBy_freeform_shouldReorderResults() throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        final ArrayList<OrderBy> orderBys = new ArrayList<OrderBy>();
-        delegate.setFilters(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setFilters(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
-            public Object answer() throws Throwable {
-                List<OrderBy> orders = (List<OrderBy>) EasyMock
-                        .getCurrentArguments()[0];
-                orderBys.clear();
-                orderBys.addAll(orders);
-                return null;
-            }
-        }).anyTimes();
-        EasyMock.expect(
-                delegate.getQueryString(EasyMock.anyInt(), EasyMock.anyInt()))
-                .andAnswer(new IAnswer<String>() {
-                    public String answer() throws Throwable {
-                        Object[] args = EasyMock.getCurrentArguments();
-                        int offset = (Integer) (args[0]);
-                        int limit = (Integer) (args[1]);
-                        if (AllTests.db == DB.MSSQL) {
-                            SQLGenerator gen = new MSSQLGenerator();
-                            if (orderBys == null || orderBys.isEmpty()) {
-                                List<OrderBy> ob = new ArrayList<OrderBy>();
-                                ob.add(new OrderBy("ID", true));
-                                return gen.generateSelectQuery("people", null,
-                                        ob, offset, limit, null)
-                                        .getQueryString();
-                            } else {
-                                return gen.generateSelectQuery("people", null,
-                                        orderBys, offset, limit, null)
-                                        .getQueryString();
-                            }
-                        } else if (AllTests.db == DB.ORACLE) {
-                            SQLGenerator gen = new OracleGenerator();
-                            if (orderBys == null || orderBys.isEmpty()) {
-                                List<OrderBy> ob = new ArrayList<OrderBy>();
-                                ob.add(new OrderBy("ID", true));
-                                return gen.generateSelectQuery("people", null,
-                                        ob, offset, limit, null)
-                                        .getQueryString();
-                            } else {
-                                return gen.generateSelectQuery("people", null,
-                                        orderBys, offset, limit, null)
-                                        .getQueryString();
-                            }
-                        } else {
-                            StringBuffer query = new StringBuffer(
-                                    "SELECT * FROM people");
-                            if (!orderBys.isEmpty()) {
-                                query.append(" ORDER BY ");
-                                for (OrderBy orderBy : orderBys) {
-                                    query.append("\"" + orderBy.getColumn()
-                                            + "\"");
-                                    if (orderBy.isAscending()) {
-                                        query.append(" ASC");
-                                    } else {
-                                        query.append(" DESC");
-                                    }
-                                }
-                            }
-                            query.append(" LIMIT ").append(limit)
-                                    .append(" OFFSET ").append(offset);
-                            return query.toString();
-                        }
-                    }
-                }).anyTimes();
-        EasyMock.expect(delegate.getCountQuery())
-                .andThrow(new UnsupportedOperationException()).anyTimes();
-
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.firstItemId(), "NAME")
-                        .getValue());
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        container.addOrderBy(new OrderBy("NAME", true));
-        // Börje, Kalle, Pelle, Ville
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.firstItemId(), "NAME")
-                        .getValue());
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        EasyMock.verify(delegate);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void addOrderBy_freeformIllegalColumn_shouldFail()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        container.addOrderBy(new OrderBy("asdf", true));
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void sort_freeform_sortsByName() throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        final ArrayList<OrderBy> orderBys = new ArrayList<OrderBy>();
-        delegate.setFilters(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setFilters(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
-            public Object answer() throws Throwable {
-                List<OrderBy> orders = (List<OrderBy>) EasyMock
-                        .getCurrentArguments()[0];
-                orderBys.clear();
-                orderBys.addAll(orders);
-                return null;
-            }
-        }).anyTimes();
-        EasyMock.expect(
-                delegate.getQueryString(EasyMock.anyInt(), EasyMock.anyInt()))
-                .andAnswer(new IAnswer<String>() {
-                    public String answer() throws Throwable {
-                        Object[] args = EasyMock.getCurrentArguments();
-                        int offset = (Integer) (args[0]);
-                        int limit = (Integer) (args[1]);
-                        if (AllTests.db == DB.MSSQL) {
-                            SQLGenerator gen = new MSSQLGenerator();
-                            if (orderBys == null || orderBys.isEmpty()) {
-                                List<OrderBy> ob = new ArrayList<OrderBy>();
-                                ob.add(new OrderBy("ID", true));
-                                return gen.generateSelectQuery("people", null,
-                                        ob, offset, limit, null)
-                                        .getQueryString();
-                            } else {
-                                return gen.generateSelectQuery("people", null,
-                                        orderBys, offset, limit, null)
-                                        .getQueryString();
-                            }
-                        } else if (AllTests.db == DB.ORACLE) {
-                            SQLGenerator gen = new OracleGenerator();
-                            if (orderBys == null || orderBys.isEmpty()) {
-                                List<OrderBy> ob = new ArrayList<OrderBy>();
-                                ob.add(new OrderBy("ID", true));
-                                return gen.generateSelectQuery("people", null,
-                                        ob, offset, limit, null)
-                                        .getQueryString();
-                            } else {
-                                return gen.generateSelectQuery("people", null,
-                                        orderBys, offset, limit, null)
-                                        .getQueryString();
-                            }
-                        } else {
-                            StringBuffer query = new StringBuffer(
-                                    "SELECT * FROM people");
-                            if (!orderBys.isEmpty()) {
-                                query.append(" ORDER BY ");
-                                for (OrderBy orderBy : orderBys) {
-                                    query.append("\"" + orderBy.getColumn()
-                                            + "\"");
-                                    if (orderBy.isAscending()) {
-                                        query.append(" ASC");
-                                    } else {
-                                        query.append(" DESC");
-                                    }
-                                }
-                            }
-                            query.append(" LIMIT ").append(limit)
-                                    .append(" OFFSET ").append(offset);
-                            return query.toString();
-                        }
-                    }
-                }).anyTimes();
-        EasyMock.expect(delegate.getCountQuery())
-                .andThrow(new UnsupportedOperationException()).anyTimes();
-        EasyMock.replay(delegate);
-
-        query.setDelegate(delegate);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.firstItemId(), "NAME")
-                        .getValue());
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        container.sort(new Object[] { "NAME" }, new boolean[] { true });
-
-        // Börje, Kalle, Pelle, Ville
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.firstItemId(), "NAME")
-                        .getValue());
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        EasyMock.verify(delegate);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void addFilter_freeform_filtersResults() throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformStatementDelegate delegate = EasyMock
-                .createMock(FreeformStatementDelegate.class);
-        final ArrayList<Filter> filters = new ArrayList<Filter>();
-        delegate.setFilters(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setFilters(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
-            public Object answer() throws Throwable {
-                List<Filter> orders = (List<Filter>) EasyMock
-                        .getCurrentArguments()[0];
-                filters.clear();
-                filters.addAll(orders);
-                return null;
-            }
-        }).anyTimes();
-        EasyMock.expect(
-                delegate.getQueryStatement(EasyMock.anyInt(), EasyMock.anyInt()))
-                .andAnswer(new IAnswer<StatementHelper>() {
-                    public StatementHelper answer() throws Throwable {
-                        Object[] args = EasyMock.getCurrentArguments();
-                        int offset = (Integer) (args[0]);
-                        int limit = (Integer) (args[1]);
-                        return FreeformQueryUtil.getQueryWithFilters(filters,
-                                offset, limit);
-                    }
-                }).anyTimes();
-        EasyMock.expect(delegate.getCountStatement())
-                .andAnswer(new IAnswer<StatementHelper>() {
-                    @SuppressWarnings("deprecation")
-                    public StatementHelper answer() throws Throwable {
-                        StatementHelper sh = new StatementHelper();
-                        StringBuffer query = new StringBuffer(
-                                "SELECT COUNT(*) FROM people");
-                        if (!filters.isEmpty()) {
-                            query.append(QueryBuilder
-                                    .getWhereStringForFilters(filters, sh));
-                        }
-                        sh.setQueryString(query.toString());
-                        return sh;
-                    }
-                }).anyTimes();
-
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals(4, container.size());
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        container.addContainerFilter(new Like("NAME", "%lle"));
-        // Ville, Kalle, Pelle
-        Assert.assertEquals(3, container.size());
-        Assert.assertEquals("Pelle",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        EasyMock.verify(delegate);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void addContainerFilter_filtersResults() throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformStatementDelegate delegate = EasyMock
-                .createMock(FreeformStatementDelegate.class);
-        final ArrayList<Filter> filters = new ArrayList<Filter>();
-        delegate.setFilters(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setFilters(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
-            public Object answer() throws Throwable {
-                List<Filter> orders = (List<Filter>) EasyMock
-                        .getCurrentArguments()[0];
-                filters.clear();
-                filters.addAll(orders);
-                return null;
-            }
-        }).anyTimes();
-        EasyMock.expect(
-                delegate.getQueryStatement(EasyMock.anyInt(), EasyMock.anyInt()))
-                .andAnswer(new IAnswer<StatementHelper>() {
-                    public StatementHelper answer() throws Throwable {
-                        Object[] args = EasyMock.getCurrentArguments();
-                        int offset = (Integer) (args[0]);
-                        int limit = (Integer) (args[1]);
-                        return FreeformQueryUtil.getQueryWithFilters(filters,
-                                offset, limit);
-                    }
-                }).anyTimes();
-        EasyMock.expect(delegate.getCountStatement())
-                .andAnswer(new IAnswer<StatementHelper>() {
-                    @SuppressWarnings("deprecation")
-                    public StatementHelper answer() throws Throwable {
-                        StatementHelper sh = new StatementHelper();
-                        StringBuffer query = new StringBuffer(
-                                "SELECT COUNT(*) FROM people");
-                        if (!filters.isEmpty()) {
-                            query.append(QueryBuilder
-                                    .getWhereStringForFilters(filters, sh));
-                        }
-                        sh.setQueryString(query.toString());
-                        return sh;
-                    }
-                }).anyTimes();
-
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals(4, container.size());
-
-        container.addContainerFilter("NAME", "Vi", false, false);
-
-        // Ville
-        Assert.assertEquals(1, container.size());
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        EasyMock.verify(delegate);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void addContainerFilter_ignoreCase_filtersResults()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformStatementDelegate delegate = EasyMock
-                .createMock(FreeformStatementDelegate.class);
-        final ArrayList<Filter> filters = new ArrayList<Filter>();
-        delegate.setFilters(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setFilters(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
-            public Object answer() throws Throwable {
-                List<Filter> orders = (List<Filter>) EasyMock
-                        .getCurrentArguments()[0];
-                filters.clear();
-                filters.addAll(orders);
-                return null;
-            }
-        }).anyTimes();
-        EasyMock.expect(
-                delegate.getQueryStatement(EasyMock.anyInt(), EasyMock.anyInt()))
-                .andAnswer(new IAnswer<StatementHelper>() {
-                    public StatementHelper answer() throws Throwable {
-                        Object[] args = EasyMock.getCurrentArguments();
-                        int offset = (Integer) (args[0]);
-                        int limit = (Integer) (args[1]);
-                        return FreeformQueryUtil.getQueryWithFilters(filters,
-                                offset, limit);
-                    }
-                }).anyTimes();
-        EasyMock.expect(delegate.getCountStatement())
-                .andAnswer(new IAnswer<StatementHelper>() {
-                    public StatementHelper answer() throws Throwable {
-                        StatementHelper sh = new StatementHelper();
-                        StringBuffer query = new StringBuffer(
-                                "SELECT COUNT(*) FROM people");
-                        if (!filters.isEmpty()) {
-                            query.append(QueryBuilder
-                                    .getWhereStringForFilters(filters, sh));
-                        }
-                        sh.setQueryString(query.toString());
-                        return sh;
-                    }
-                }).anyTimes();
-
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals(4, container.size());
-
-        // FIXME LIKE %asdf% doesn't match a string that begins with asdf
-        container.addContainerFilter("NAME", "vi", true, true);
-
-        // Ville
-        Assert.assertEquals(1, container.size());
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        EasyMock.verify(delegate);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void removeAllContainerFilters_freeform_noFiltering()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformStatementDelegate delegate = EasyMock
-                .createMock(FreeformStatementDelegate.class);
-        final ArrayList<Filter> filters = new ArrayList<Filter>();
-        delegate.setFilters(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setFilters(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
-            public Object answer() throws Throwable {
-                List<Filter> orders = (List<Filter>) EasyMock
-                        .getCurrentArguments()[0];
-                filters.clear();
-                filters.addAll(orders);
-                return null;
-            }
-        }).anyTimes();
-        EasyMock.expect(
-                delegate.getQueryStatement(EasyMock.anyInt(), EasyMock.anyInt()))
-                .andAnswer(new IAnswer<StatementHelper>() {
-                    public StatementHelper answer() throws Throwable {
-                        Object[] args = EasyMock.getCurrentArguments();
-                        int offset = (Integer) (args[0]);
-                        int limit = (Integer) (args[1]);
-                        return FreeformQueryUtil.getQueryWithFilters(filters,
-                                offset, limit);
-                    }
-                }).anyTimes();
-        EasyMock.expect(delegate.getCountStatement())
-                .andAnswer(new IAnswer<StatementHelper>() {
-                    @SuppressWarnings("deprecation")
-                    public StatementHelper answer() throws Throwable {
-                        StatementHelper sh = new StatementHelper();
-                        StringBuffer query = new StringBuffer(
-                                "SELECT COUNT(*) FROM people");
-                        if (!filters.isEmpty()) {
-                            query.append(QueryBuilder
-                                    .getWhereStringForFilters(filters, sh));
-                        }
-                        sh.setQueryString(query.toString());
-                        return sh;
-                    }
-                }).anyTimes();
-
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals(4, container.size());
-
-        container.addContainerFilter("NAME", "Vi", false, false);
-
-        // Ville
-        Assert.assertEquals(1, container.size());
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        container.removeAllContainerFilters();
-
-        Assert.assertEquals(4, container.size());
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        EasyMock.verify(delegate);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void removeContainerFilters_freeform_noFiltering()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformStatementDelegate delegate = EasyMock
-                .createMock(FreeformStatementDelegate.class);
-        final ArrayList<Filter> filters = new ArrayList<Filter>();
-        delegate.setFilters(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setFilters(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
-            public Object answer() throws Throwable {
-                List<Filter> orders = (List<Filter>) EasyMock
-                        .getCurrentArguments()[0];
-                filters.clear();
-                filters.addAll(orders);
-                return null;
-            }
-        }).anyTimes();
-        EasyMock.expect(
-                delegate.getQueryStatement(EasyMock.anyInt(), EasyMock.anyInt()))
-                .andAnswer(new IAnswer<StatementHelper>() {
-                    public StatementHelper answer() throws Throwable {
-                        Object[] args = EasyMock.getCurrentArguments();
-                        int offset = (Integer) (args[0]);
-                        int limit = (Integer) (args[1]);
-                        return FreeformQueryUtil.getQueryWithFilters(filters,
-                                offset, limit);
-                    }
-                }).anyTimes();
-        EasyMock.expect(delegate.getCountStatement())
-                .andAnswer(new IAnswer<StatementHelper>() {
-                    @SuppressWarnings("deprecation")
-                    public StatementHelper answer() throws Throwable {
-                        StatementHelper sh = new StatementHelper();
-                        StringBuffer query = new StringBuffer(
-                                "SELECT COUNT(*) FROM people");
-                        if (!filters.isEmpty()) {
-                            query.append(QueryBuilder
-                                    .getWhereStringForFilters(filters, sh));
-                        }
-                        sh.setQueryString(query.toString());
-                        return sh;
-                    }
-                }).anyTimes();
-
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals(4, container.size());
-
-        container.addContainerFilter("NAME", "Vi", false, true);
-
-        // Ville
-        Assert.assertEquals(1, container.size());
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        container.removeContainerFilters("NAME");
-
-        Assert.assertEquals(4, container.size());
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        EasyMock.verify(delegate);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void addFilter_freeformBufferedItems_alsoFiltersBufferedItems()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformStatementDelegate delegate = EasyMock
-                .createMock(FreeformStatementDelegate.class);
-        final ArrayList<Filter> filters = new ArrayList<Filter>();
-        delegate.setFilters(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setFilters(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
-            public Object answer() throws Throwable {
-                List<Filter> orders = (List<Filter>) EasyMock
-                        .getCurrentArguments()[0];
-                filters.clear();
-                filters.addAll(orders);
-                return null;
-            }
-        }).anyTimes();
-        EasyMock.expect(
-                delegate.getQueryStatement(EasyMock.anyInt(), EasyMock.anyInt()))
-                .andAnswer(new IAnswer<StatementHelper>() {
-                    public StatementHelper answer() throws Throwable {
-                        Object[] args = EasyMock.getCurrentArguments();
-                        int offset = (Integer) (args[0]);
-                        int limit = (Integer) (args[1]);
-                        return FreeformQueryUtil.getQueryWithFilters(filters,
-                                offset, limit);
-                    }
-                }).anyTimes();
-        EasyMock.expect(delegate.getCountStatement())
-                .andAnswer(new IAnswer<StatementHelper>() {
-                    @SuppressWarnings("deprecation")
-                    public StatementHelper answer() throws Throwable {
-                        StatementHelper sh = new StatementHelper();
-                        StringBuffer query = new StringBuffer(
-                                "SELECT COUNT(*) FROM people");
-                        if (!filters.isEmpty()) {
-                            query.append(QueryBuilder
-                                    .getWhereStringForFilters(filters, sh));
-                        }
-                        sh.setQueryString(query.toString());
-                        return sh;
-                    }
-                }).anyTimes();
-
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals(4, container.size());
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        Object id1 = container.addItem();
-        container.getContainerProperty(id1, "NAME").setValue("Palle");
-        Object id2 = container.addItem();
-        container.getContainerProperty(id2, "NAME").setValue("Bengt");
-
-        container.addContainerFilter(new Like("NAME", "%lle"));
-
-        // Ville, Kalle, Pelle, Palle
-        Assert.assertEquals(4, container.size());
-        Assert.assertEquals(
-                "Ville",
-                container.getContainerProperty(container.getIdByIndex(0),
-                        "NAME").getValue());
-        Assert.assertEquals(
-                "Kalle",
-                container.getContainerProperty(container.getIdByIndex(1),
-                        "NAME").getValue());
-        Assert.assertEquals(
-                "Pelle",
-                container.getContainerProperty(container.getIdByIndex(2),
-                        "NAME").getValue());
-        Assert.assertEquals(
-                "Palle",
-                container.getContainerProperty(container.getIdByIndex(3),
-                        "NAME").getValue());
-
-        Assert.assertNull(container.getIdByIndex(4));
-        Assert.assertNull(container.nextItemId(container.getIdByIndex(3)));
-
-        Assert.assertFalse(container.containsId(id2));
-        Assert.assertFalse(container.getItemIds().contains(id2));
-
-        Assert.assertNull(container.getItem(id2));
-        Assert.assertEquals(-1, container.indexOfId(id2));
-
-        Assert.assertNotSame(id2, container.lastItemId());
-        Assert.assertSame(id1, container.lastItemId());
-
-        EasyMock.verify(delegate);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void sort_freeformBufferedItems_sortsBufferedItemsLastInOrderAdded()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        final ArrayList<OrderBy> orderBys = new ArrayList<OrderBy>();
-        delegate.setFilters(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setFilters(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
-            public Object answer() throws Throwable {
-                List<OrderBy> orders = (List<OrderBy>) EasyMock
-                        .getCurrentArguments()[0];
-                orderBys.clear();
-                orderBys.addAll(orders);
-                return null;
-            }
-        }).anyTimes();
-        EasyMock.expect(
-                delegate.getQueryString(EasyMock.anyInt(), EasyMock.anyInt()))
-                .andAnswer(new IAnswer<String>() {
-                    public String answer() throws Throwable {
-                        Object[] args = EasyMock.getCurrentArguments();
-                        int offset = (Integer) (args[0]);
-                        int limit = (Integer) (args[1]);
-                        if (AllTests.db == DB.MSSQL) {
-                            SQLGenerator gen = new MSSQLGenerator();
-                            if (orderBys == null || orderBys.isEmpty()) {
-                                List<OrderBy> ob = new ArrayList<OrderBy>();
-                                ob.add(new OrderBy("ID", true));
-                                return gen.generateSelectQuery("people", null,
-                                        ob, offset, limit, null)
-                                        .getQueryString();
-                            } else {
-                                return gen.generateSelectQuery("people", null,
-                                        orderBys, offset, limit, null)
-                                        .getQueryString();
-                            }
-                        } else if (AllTests.db == DB.ORACLE) {
-                            SQLGenerator gen = new OracleGenerator();
-                            if (orderBys == null || orderBys.isEmpty()) {
-                                List<OrderBy> ob = new ArrayList<OrderBy>();
-                                ob.add(new OrderBy("ID", true));
-                                return gen.generateSelectQuery("people", null,
-                                        ob, offset, limit, null)
-                                        .getQueryString();
-                            } else {
-                                return gen.generateSelectQuery("people", null,
-                                        orderBys, offset, limit, null)
-                                        .getQueryString();
-                            }
-                        } else {
-                            StringBuffer query = new StringBuffer(
-                                    "SELECT * FROM people");
-                            if (!orderBys.isEmpty()) {
-                                query.append(" ORDER BY ");
-                                for (OrderBy orderBy : orderBys) {
-                                    query.append("\"" + orderBy.getColumn()
-                                            + "\"");
-                                    if (orderBy.isAscending()) {
-                                        query.append(" ASC");
-                                    } else {
-                                        query.append(" DESC");
-                                    }
-                                }
-                            }
-                            query.append(" LIMIT ").append(limit)
-                                    .append(" OFFSET ").append(offset);
-                            return query.toString();
-                        }
-                    }
-                }).anyTimes();
-        EasyMock.expect(delegate.getCountQuery())
-                .andThrow(new UnsupportedOperationException()).anyTimes();
-        EasyMock.replay(delegate);
-
-        query.setDelegate(delegate);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals("Ville",
-                container.getContainerProperty(container.firstItemId(), "NAME")
-                        .getValue());
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        Object id1 = container.addItem();
-        container.getContainerProperty(id1, "NAME").setValue("Wilbert");
-        Object id2 = container.addItem();
-        container.getContainerProperty(id2, "NAME").setValue("Albert");
-
-        container.sort(new Object[] { "NAME" }, new boolean[] { true });
-
-        // Börje, Kalle, Pelle, Ville, Wilbert, Albert
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.firstItemId(), "NAME")
-                        .getValue());
-        Assert.assertEquals(
-                "Wilbert",
-                container.getContainerProperty(
-                        container.getIdByIndex(container.size() - 2), "NAME")
-                        .getValue());
-        Assert.assertEquals("Albert",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        EasyMock.verify(delegate);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/TicketTests.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/TicketTests.java
deleted file mode 100644
index 8c86bc8df1..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/TicketTests.java
+++ /dev/null
@@ -1,183 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer;
-
-import java.math.BigDecimal;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.easymock.EasyMock;
-import org.easymock.IAnswer;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.vaadin.data.Container.Filter;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.filter.Compare.Equal;
-import com.vaadin.data.util.sqlcontainer.SQLContainer;
-import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
-import com.vaadin.data.util.sqlcontainer.query.FreeformQuery;
-import com.vaadin.data.util.sqlcontainer.query.FreeformStatementDelegate;
-import com.vaadin.data.util.sqlcontainer.query.TableQuery;
-import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
-import com.vaadin.data.util.sqlcontainer.query.generator.filter.QueryBuilder;
-import com.vaadin.tests.server.container.sqlcontainer.AllTests.DB;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-public class TicketTests {
-
-    private SimpleJDBCConnectionPool connectionPool;
-
-    @Before
-    public void setUp() throws SQLException {
-        connectionPool = new SimpleJDBCConnectionPool(AllTests.dbDriver,
-                AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 2, 2);
-        DataGenerator.addPeopleToDatabase(connectionPool);
-    }
-
-    @Test
-    public void ticket5867_throwsIllegalState_transactionAlreadyActive()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new FreeformQuery(
-                "SELECT * FROM people", Arrays.asList("ID"), connectionPool));
-        Table table = new Table();
-        Window w = new Window();
-        w.addComponent(table);
-        table.setContainerDataSource(container);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void ticket6136_freeform_ageIs18() throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformStatementDelegate delegate = EasyMock
-                .createMock(FreeformStatementDelegate.class);
-        final ArrayList<Filter> filters = new ArrayList<Filter>();
-        delegate.setFilters(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setOrderBy(null);
-        EasyMock.expectLastCall().anyTimes();
-        delegate.setFilters(EasyMock.isA(List.class));
-        EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
-            public Object answer() throws Throwable {
-                List<Filter> orders = (List<Filter>) EasyMock
-                        .getCurrentArguments()[0];
-                filters.clear();
-                filters.addAll(orders);
-                return null;
-            }
-        }).anyTimes();
-        EasyMock.expect(
-                delegate.getQueryStatement(EasyMock.anyInt(), EasyMock.anyInt()))
-                .andAnswer(new IAnswer<StatementHelper>() {
-                    public StatementHelper answer() throws Throwable {
-                        Object[] args = EasyMock.getCurrentArguments();
-                        int offset = (Integer) (args[0]);
-                        int limit = (Integer) (args[1]);
-                        return FreeformQueryUtil.getQueryWithFilters(filters,
-                                offset, limit);
-                    }
-                }).anyTimes();
-        EasyMock.expect(delegate.getCountStatement())
-                .andAnswer(new IAnswer<StatementHelper>() {
-                    @SuppressWarnings("deprecation")
-                    public StatementHelper answer() throws Throwable {
-                        StatementHelper sh = new StatementHelper();
-                        StringBuffer query = new StringBuffer(
-                                "SELECT COUNT(*) FROM people");
-                        if (!filters.isEmpty()) {
-                            query.append(QueryBuilder.getWhereStringForFilters(
-                                    filters, sh));
-                        }
-                        sh.setQueryString(query.toString());
-                        return sh;
-                    }
-                }).anyTimes();
-
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals(4, container.size());
-        Assert.assertEquals("Börje",
-                container.getContainerProperty(container.lastItemId(), "NAME")
-                        .getValue());
-
-        container.addContainerFilter(new Equal("AGE", 18));
-        // Pelle
-        Assert.assertEquals(1, container.size());
-        Assert.assertEquals("Pelle",
-                container.getContainerProperty(container.firstItemId(), "NAME")
-                        .getValue());
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(new BigDecimal(18), container
-                    .getContainerProperty(container.firstItemId(), "AGE")
-                    .getValue());
-        } else {
-            Assert.assertEquals(
-                    18,
-                    container.getContainerProperty(container.firstItemId(),
-                            "AGE").getValue());
-        }
-
-        EasyMock.verify(delegate);
-    }
-
-    @Test
-    public void ticket6136_table_ageIs18() throws SQLException {
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-        // Ville, Kalle, Pelle, Börje
-        Assert.assertEquals(4, container.size());
-
-        container.addContainerFilter(new Equal("AGE", 18));
-
-        // Pelle
-        Assert.assertEquals(1, container.size());
-        Assert.assertEquals("Pelle",
-                container.getContainerProperty(container.firstItemId(), "NAME")
-                        .getValue());
-        if (AllTests.db == DB.ORACLE) {
-            Assert.assertEquals(new BigDecimal(18), container
-                    .getContainerProperty(container.firstItemId(), "AGE")
-                    .getValue());
-        } else {
-            Assert.assertEquals(
-                    18,
-                    container.getContainerProperty(container.firstItemId(),
-                            "AGE").getValue());
-        }
-    }
-
-    @Test
-    public void ticket7434_getItem_Modified_Changed_Unchanged()
-            throws SQLException {
-        SQLContainer container = new SQLContainer(new TableQuery("people",
-                connectionPool, AllTests.sqlGen));
-
-        Object id = container.firstItemId();
-        Item item = container.getItem(id);
-        String name = (String) item.getItemProperty("NAME").getValue();
-
-        // set a different name
-        item.getItemProperty("NAME").setValue("otherName");
-        Assert.assertEquals("otherName", item.getItemProperty("NAME")
-                .getValue());
-
-        // access the item and reset the name to its old value
-        Item item2 = container.getItem(id);
-        item2.getItemProperty("NAME").setValue(name);
-        Assert.assertEquals(name, item2.getItemProperty("NAME").getValue());
-
-        Item item3 = container.getItem(id);
-        String name3 = (String) item3.getItemProperty("NAME").getValue();
-
-        Assert.assertEquals(name, name3);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/UtilTest.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/UtilTest.java
deleted file mode 100644
index a8d4e48004..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/UtilTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer;
-
-import junit.framework.Assert;
-
-import org.junit.Test;
-
-import com.vaadin.data.util.sqlcontainer.SQLUtil;
-
-public class UtilTest {
-
-    @Test
-    public void escapeSQL_noQuotes_returnsSameString() {
-        Assert.assertEquals("asdf", SQLUtil.escapeSQL("asdf"));
-    }
-
-    @Test
-    public void escapeSQL_singleQuotes_returnsEscapedString() {
-        Assert.assertEquals("O''Brien", SQLUtil.escapeSQL("O'Brien"));
-    }
-
-    @Test
-    public void escapeSQL_severalQuotes_returnsEscapedString() {
-        Assert.assertEquals("asdf''ghjk''qwerty",
-        		SQLUtil.escapeSQL("asdf'ghjk'qwerty"));
-    }
-
-    @Test
-    public void escapeSQL_doubleQuotes_returnsEscapedString() {
-        Assert.assertEquals("asdf\\\"foo", SQLUtil.escapeSQL("asdf\"foo"));
-    }
-
-    @Test
-    public void escapeSQL_multipleDoubleQuotes_returnsEscapedString() {
-        Assert.assertEquals("asdf\\\"foo\\\"bar",
-        		SQLUtil.escapeSQL("asdf\"foo\"bar"));
-    }
-
-    @Test
-    public void escapeSQL_backslashes_returnsEscapedString() {
-        Assert.assertEquals("foo\\\\nbar\\\\r", SQLUtil.escapeSQL("foo\\nbar\\r"));
-    }
-
-    @Test
-    public void escapeSQL_x00_removesX00() {
-        Assert.assertEquals("foobar", SQLUtil.escapeSQL("foo\\x00bar"));
-    }
-
-    @Test
-    public void escapeSQL_x1a_removesX1a() {
-        Assert.assertEquals("foobar", SQLUtil.escapeSQL("foo\\x1abar"));
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/connection/J2EEConnectionPoolTest.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/connection/J2EEConnectionPoolTest.java
deleted file mode 100644
index fd0c5b9af7..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/connection/J2EEConnectionPoolTest.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer.connection;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-
-import javax.naming.Context;
-import javax.naming.NamingException;
-import javax.sql.DataSource;
-
-import junit.framework.Assert;
-
-import org.easymock.EasyMock;
-import org.junit.Test;
-
-import com.vaadin.data.util.sqlcontainer.connection.J2EEConnectionPool;
-
-public class J2EEConnectionPoolTest {
-
-    @Test
-    public void reserveConnection_dataSourceSpecified_shouldReturnValidConnection()
-            throws SQLException {
-        Connection connection = EasyMock.createMock(Connection.class);
-        connection.setAutoCommit(false);
-        EasyMock.expectLastCall();
-        DataSource ds = EasyMock.createMock(DataSource.class);
-        ds.getConnection();
-        EasyMock.expectLastCall().andReturn(connection);
-        EasyMock.replay(connection, ds);
-
-        J2EEConnectionPool pool = new J2EEConnectionPool(ds);
-        Connection c = pool.reserveConnection();
-        Assert.assertEquals(connection, c);
-        EasyMock.verify(connection, ds);
-    }
-
-    @Test
-    public void releaseConnection_shouldCloseConnection() throws SQLException {
-        Connection connection = EasyMock.createMock(Connection.class);
-        connection.setAutoCommit(false);
-        EasyMock.expectLastCall();
-        connection.close();
-        EasyMock.expectLastCall();
-        DataSource ds = EasyMock.createMock(DataSource.class);
-        ds.getConnection();
-        EasyMock.expectLastCall().andReturn(connection);
-        EasyMock.replay(connection, ds);
-
-        J2EEConnectionPool pool = new J2EEConnectionPool(ds);
-        Connection c = pool.reserveConnection();
-        Assert.assertEquals(connection, c);
-        pool.releaseConnection(c);
-        EasyMock.verify(connection, ds);
-    }
-
-    @Test
-    public void reserveConnection_dataSourceLookedUp_shouldReturnValidConnection()
-            throws SQLException, NamingException {
-        Connection connection = EasyMock.createMock(Connection.class);
-        connection.setAutoCommit(false);
-        EasyMock.expectLastCall();
-        connection.close();
-        EasyMock.expectLastCall();
-
-        DataSource ds = EasyMock.createMock(DataSource.class);
-        ds.getConnection();
-        EasyMock.expectLastCall().andReturn(connection);
-
-        System.setProperty(
-                "java.naming.factory.initial",
-                "com.vaadin.tests.server.container.sqlcontainer.connection.MockInitialContextFactory");
-        Context context = EasyMock.createMock(Context.class);
-        context.lookup("testDataSource");
-        EasyMock.expectLastCall().andReturn(ds);
-        MockInitialContextFactory.setMockContext(context);
-
-        EasyMock.replay(context, connection, ds);
-
-        J2EEConnectionPool pool = new J2EEConnectionPool("testDataSource");
-        Connection c = pool.reserveConnection();
-        Assert.assertEquals(connection, c);
-        pool.releaseConnection(c);
-        EasyMock.verify(context, connection, ds);
-    }
-
-    @Test(expected = SQLException.class)
-    public void reserveConnection_nonExistantDataSourceLookedUp_shouldFail()
-            throws SQLException, NamingException {
-        System.setProperty("java.naming.factory.initial",
-                "com.vaadin.addon.sqlcontainer.connection.MockInitialContextFactory");
-        Context context = EasyMock.createMock(Context.class);
-        context.lookup("foo");
-        EasyMock.expectLastCall().andThrow(new NamingException("fail"));
-        MockInitialContextFactory.setMockContext(context);
-
-        EasyMock.replay(context);
-
-        J2EEConnectionPool pool = new J2EEConnectionPool("foo");
-        pool.reserveConnection();
-        EasyMock.verify(context);
-    }
-
-    @Test
-    public void releaseConnection_null_shouldSucceed() throws SQLException {
-        DataSource ds = EasyMock.createMock(DataSource.class);
-        EasyMock.replay(ds);
-
-        J2EEConnectionPool pool = new J2EEConnectionPool(ds);
-        pool.releaseConnection(null);
-        EasyMock.verify(ds);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/connection/MockInitialContextFactory.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/connection/MockInitialContextFactory.java
deleted file mode 100644
index c16cfb746b..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/connection/MockInitialContextFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer.connection;
-
-import javax.naming.Context;
-import javax.naming.NamingException;
-import javax.naming.spi.InitialContextFactory;
-
-import org.junit.Test;
-
-/**
- * Provides a JNDI initial context factory for the MockContext.
- */
-public class MockInitialContextFactory implements InitialContextFactory {
-    private static Context mockCtx = null;
-    
-    @Test
-	public void testDummy(){
-		// Added dummy test so JUnit will not complain about "No runnable methods".
-	}
-
-    public static void setMockContext(Context ctx) {
-        mockCtx = ctx;
-    }
-
-    public Context getInitialContext(java.util.Hashtable<?, ?> environment)
-            throws NamingException {
-        if (mockCtx == null) {
-            throw new IllegalStateException("mock context was not set.");
-        }
-        return mockCtx;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/connection/SimpleJDBCConnectionPoolTest.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/connection/SimpleJDBCConnectionPoolTest.java
deleted file mode 100644
index c05b3cbf1b..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/connection/SimpleJDBCConnectionPoolTest.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer.connection;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-
-import junit.framework.Assert;
-
-import org.easymock.EasyMock;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
-import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
-import com.vaadin.tests.server.container.sqlcontainer.AllTests;
-
-public class SimpleJDBCConnectionPoolTest {
-    private JDBCConnectionPool connectionPool;
-
-    @Before
-    public void setUp() throws SQLException {
-        connectionPool = new SimpleJDBCConnectionPool(AllTests.dbDriver,
-                AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 2, 2);
-    }
-
-    @Test
-    public void reserveConnection_reserveNewConnection_returnsConnection()
-            throws SQLException {
-        Connection conn = connectionPool.reserveConnection();
-        Assert.assertNotNull(conn);
-    }
-
-    @Test
-    public void releaseConnection_releaseUnused_shouldNotThrowException()
-            throws SQLException {
-        Connection conn = connectionPool.reserveConnection();
-        connectionPool.releaseConnection(conn);
-        Assert.assertFalse(conn.isClosed());
-    }
-
-    @Test(expected = SQLException.class)
-    public void reserveConnection_noConnectionsLeft_shouldFail()
-            throws SQLException {
-        try {
-            connectionPool.reserveConnection();
-            connectionPool.reserveConnection();
-        } catch (SQLException e) {
-            e.printStackTrace();
-            Assert.fail("Exception before all connections used! "
-                    + e.getMessage());
-        }
-
-        connectionPool.reserveConnection();
-        Assert.fail("Reserving connection didn't fail even though no connections are available!");
-    }
-
-    @Test
-    public void reserveConnection_oneConnectionLeft_returnsConnection()
-            throws SQLException {
-        try {
-            connectionPool.reserveConnection();
-        } catch (SQLException e) {
-            e.printStackTrace();
-            Assert.fail("Exception before all connections used! "
-                    + e.getMessage());
-        }
-
-        Connection conn = connectionPool.reserveConnection();
-        Assert.assertNotNull(conn);
-    }
-
-    @Test
-    public void reserveConnection_oneConnectionJustReleased_returnsConnection()
-            throws SQLException {
-        Connection conn2 = null;
-        try {
-            connectionPool.reserveConnection();
-            conn2 = connectionPool.reserveConnection();
-        } catch (SQLException e) {
-            e.printStackTrace();
-            Assert.fail("Exception before all connections used! "
-                    + e.getMessage());
-        }
-
-        connectionPool.releaseConnection(conn2);
-
-        connectionPool.reserveConnection();
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void construct_allParametersNull_shouldFail() throws SQLException {
-        SimpleJDBCConnectionPool cp = new SimpleJDBCConnectionPool(null, null,
-                null, null);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void construct_onlyDriverNameGiven_shouldFail() throws SQLException {
-        SimpleJDBCConnectionPool cp = new SimpleJDBCConnectionPool(
-                AllTests.dbDriver, null, null, null);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void construct_onlyDriverNameAndUrlGiven_shouldFail()
-            throws SQLException {
-        SimpleJDBCConnectionPool cp = new SimpleJDBCConnectionPool(
-                AllTests.dbDriver, AllTests.dbURL, null, null);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void construct_onlyDriverNameAndUrlAndUserGiven_shouldFail()
-            throws SQLException {
-        SimpleJDBCConnectionPool cp = new SimpleJDBCConnectionPool(
-                AllTests.dbDriver, AllTests.dbURL, AllTests.dbUser, null);
-    }
-
-    @Test(expected = RuntimeException.class)
-    public void construct_nonExistingDriver_shouldFail() throws SQLException {
-        SimpleJDBCConnectionPool cp = new SimpleJDBCConnectionPool("foo",
-                AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd);
-    }
-
-    @Test
-    public void reserveConnection_newConnectionOpened_shouldSucceed()
-            throws SQLException {
-        connectionPool = new SimpleJDBCConnectionPool(AllTests.dbDriver,
-                AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 0, 2);
-        Connection c = connectionPool.reserveConnection();
-        Assert.assertNotNull(c);
-    }
-
-    @Test
-    public void releaseConnection_nullConnection_shouldDoNothing() {
-        connectionPool.releaseConnection(null);
-    }
-
-    @Test
-    public void releaseConnection_failingRollback_shouldCallClose()
-            throws SQLException {
-        Connection c = EasyMock.createMock(Connection.class);
-        c.getAutoCommit();
-        EasyMock.expectLastCall().andReturn(false);
-        c.rollback();
-        EasyMock.expectLastCall().andThrow(new SQLException("Rollback failed"));
-        c.close();
-        EasyMock.expectLastCall().atLeastOnce();
-        EasyMock.replay(c);
-        // make sure the connection pool is initialized
-        connectionPool.reserveConnection();
-        connectionPool.releaseConnection(c);
-        EasyMock.verify(c);
-    }
-
-    @Test
-    public void destroy_shouldCloseAllConnections() throws SQLException {
-        Connection c1 = connectionPool.reserveConnection();
-        Connection c2 = connectionPool.reserveConnection();
-        connectionPool.destroy();
-        Assert.assertTrue(c1.isClosed());
-        Assert.assertTrue(c2.isClosed());
-    }
-
-    @Test
-    public void destroy_shouldCloseAllConnections2() throws SQLException {
-        Connection c1 = connectionPool.reserveConnection();
-        Connection c2 = connectionPool.reserveConnection();
-        connectionPool.releaseConnection(c1);
-        connectionPool.releaseConnection(c2);
-        connectionPool.destroy();
-        Assert.assertTrue(c1.isClosed());
-        Assert.assertTrue(c2.isClosed());
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/filters/BetweenTest.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/filters/BetweenTest.java
deleted file mode 100644
index f86ca6dd00..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/filters/BetweenTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer.filters;
-
-import junit.framework.Assert;
-
-import org.easymock.EasyMock;
-import org.junit.Test;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.util.filter.Between;
-
-public class BetweenTest {
-
-    private Item itemWithPropertyValue(Object propertyId, Object value) {
-        Property property = EasyMock.createMock(Property.class);
-        property.getValue();
-        EasyMock.expectLastCall().andReturn(value).anyTimes();
-        EasyMock.replay(property);
-
-        Item item = EasyMock.createMock(Item.class);
-        item.getItemProperty(propertyId);
-        EasyMock.expectLastCall().andReturn(property).anyTimes();
-        EasyMock.replay(item);
-        return item;
-    }
-
-    @Test
-    public void passesFilter_valueIsInRange_shouldBeTrue() {
-        Item item = itemWithPropertyValue("foo", 15);
-        Between between = new Between("foo", 1, 30);
-        Assert.assertTrue(between.passesFilter("foo", item));
-    }
-
-    @Test
-    public void passesFilter_valueIsOutOfRange_shouldBeFalse() {
-        Item item = itemWithPropertyValue("foo", 15);
-        Between between = new Between("foo", 0, 2);
-        Assert.assertFalse(between.passesFilter("foo", item));
-    }
-
-    @Test
-    public void passesFilter_valueNotComparable_shouldBeFalse() {
-        Item item = itemWithPropertyValue("foo", new Object());
-        Between between = new Between("foo", 0, 2);
-        Assert.assertFalse(between.passesFilter("foo", item));
-    }
-
-    @Test
-    public void appliesToProperty_differentProperties_shoudlBeFalse() {
-        Between between = new Between("foo", 0, 2);
-        Assert.assertFalse(between.appliesToProperty("bar"));
-    }
-
-    @Test
-    public void appliesToProperty_sameProperties_shouldBeTrue() {
-        Between between = new Between("foo", 0, 2);
-        Assert.assertTrue(between.appliesToProperty("foo"));
-    }
-
-    @Test
-    public void hashCode_equalInstances_shouldBeEqual() {
-        Between b1 = new Between("foo", 0, 2);
-        Between b2 = new Between("foo", 0, 2);
-        Assert.assertEquals(b1.hashCode(), b2.hashCode());
-    }
-
-    @Test
-    public void equals_differentObjects_shouldBeFalse() {
-        Between b1 = new Between("foo", 0, 2);
-        Object obj = new Object();
-        Assert.assertFalse(b1.equals(obj));
-    }
-
-    @Test
-    public void equals_sameInstance_shouldBeTrue() {
-        Between b1 = new Between("foo", 0, 2);
-        Between b2 = b1;
-        Assert.assertTrue(b1.equals(b2));
-    }
-
-    @Test
-    public void equals_equalInstances_shouldBeTrue() {
-        Between b1 = new Between("foo", 0, 2);
-        Between b2 = new Between("foo", 0, 2);
-        Assert.assertTrue(b1.equals(b2));
-    }
-
-    @Test
-    public void equals_equalInstances2_shouldBeTrue() {
-        Between b1 = new Between(null, null, null);
-        Between b2 = new Between(null, null, null);
-        Assert.assertTrue(b1.equals(b2));
-    }
-
-    @Test
-    public void equals_secondValueDiffers_shouldBeFalse() {
-        Between b1 = new Between("foo", 0, 1);
-        Between b2 = new Between("foo", 0, 2);
-        Assert.assertFalse(b1.equals(b2));
-    }
-
-    @Test
-    public void equals_firstAndSecondValueDiffers_shouldBeFalse() {
-        Between b1 = new Between("foo", 0, null);
-        Between b2 = new Between("foo", 1, 2);
-        Assert.assertFalse(b1.equals(b2));
-    }
-
-    @Test
-    public void equals_propertyAndFirstAndSecondValueDiffers_shouldBeFalse() {
-        Between b1 = new Between("foo", null, 1);
-        Between b2 = new Between("bar", 1, 2);
-        Assert.assertFalse(b1.equals(b2));
-    }
-
-    @Test
-    public void equals_propertiesDiffer_shouldBeFalse() {
-        Between b1 = new Between(null, 0, 1);
-        Between b2 = new Between("bar", 0, 1);
-        Assert.assertFalse(b1.equals(b2));
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/filters/LikeTest.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/filters/LikeTest.java
deleted file mode 100644
index 07dd499331..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/filters/LikeTest.java
+++ /dev/null
@@ -1,229 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer.filters;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.data.util.PropertysetItem;
-import com.vaadin.data.util.filter.Like;
-
-public class LikeTest {
-
-    @Test
-    public void passesFilter_valueIsNotStringType_shouldFail() {
-        Like like = new Like("test", "%foo%");
-
-        Item item = new PropertysetItem();
-        item.addItemProperty("test", new ObjectProperty<Integer>(5));
-
-        Assert.assertFalse(like.passesFilter("id", item));
-    }
-
-    @Test
-    public void passesFilter_containsLikeQueryOnStringContainingValue_shouldSucceed() {
-        Like like = new Like("test", "%foo%");
-
-        Item item = new PropertysetItem();
-        item.addItemProperty("test", new ObjectProperty<String>("asdfooghij"));
-
-        Assert.assertTrue(like.passesFilter("id", item));
-    }
-
-    @Test
-    public void passesFilter_containsLikeQueryOnStringContainingValueCaseInsensitive_shouldSucceed() {
-        Like like = new Like("test", "%foo%");
-        like.setCaseSensitive(false);
-
-        Item item = new PropertysetItem();
-        item.addItemProperty("test", new ObjectProperty<String>("asdfOOghij"));
-
-        Assert.assertTrue(like.passesFilter("id", item));
-    }
-
-    @Test
-    public void passesFilter_containsLikeQueryOnStringContainingValueConstructedCaseInsensitive_shouldSucceed() {
-        Like like = new Like("test", "%foo%", false);
-
-        Item item = new PropertysetItem();
-        item.addItemProperty("test", new ObjectProperty<String>("asdfOOghij"));
-
-        Assert.assertTrue(like.passesFilter("id", item));
-    }
-
-    @Test
-    public void passesFilter_containsLikeQueryOnStringNotContainingValue_shouldFail() {
-        Like like = new Like("test", "%foo%");
-
-        Item item = new PropertysetItem();
-        item.addItemProperty("test", new ObjectProperty<String>("asdbarghij"));
-
-        Assert.assertFalse(like.passesFilter("id", item));
-    }
-
-    @Test
-    public void passesFilter_containsLikeQueryOnStringExactlyEqualToValue_shouldSucceed() {
-        Like like = new Like("test", "%foo%");
-
-        Item item = new PropertysetItem();
-        item.addItemProperty("test", new ObjectProperty<String>("foo"));
-
-        Assert.assertTrue(like.passesFilter("id", item));
-    }
-
-    @Test
-    public void passesFilter_containsLikeQueryOnStringEqualToValueMinusOneCharAtTheEnd_shouldFail() {
-        Like like = new Like("test", "%foo%");
-
-        Item item = new PropertysetItem();
-        item.addItemProperty("test", new ObjectProperty<String>("fo"));
-
-        Assert.assertFalse(like.passesFilter("id", item));
-    }
-
-    @Test
-    public void passesFilter_beginsWithLikeQueryOnStringBeginningWithValue_shouldSucceed() {
-        Like like = new Like("test", "foo%");
-
-        Item item = new PropertysetItem();
-        item.addItemProperty("test", new ObjectProperty<String>("foobar"));
-
-        Assert.assertTrue(like.passesFilter("id", item));
-    }
-
-    @Test
-    public void passesFilter_beginsWithLikeQueryOnStringNotBeginningWithValue_shouldFail() {
-        Like like = new Like("test", "foo%");
-
-        Item item = new PropertysetItem();
-        item.addItemProperty("test", new ObjectProperty<String>("barfoo"));
-
-        Assert.assertFalse(like.passesFilter("id", item));
-    }
-
-    @Test
-    public void passesFilter_endsWithLikeQueryOnStringEndingWithValue_shouldSucceed() {
-        Like like = new Like("test", "%foo");
-
-        Item item = new PropertysetItem();
-        item.addItemProperty("test", new ObjectProperty<String>("barfoo"));
-
-        Assert.assertTrue(like.passesFilter("id", item));
-    }
-
-    @Test
-    public void passesFilter_endsWithLikeQueryOnStringNotEndingWithValue_shouldFail() {
-        Like like = new Like("test", "%foo");
-
-        Item item = new PropertysetItem();
-        item.addItemProperty("test", new ObjectProperty<String>("foobar"));
-
-        Assert.assertFalse(like.passesFilter("id", item));
-    }
-
-    @Test
-    public void passesFilter_startsWithAndEndsWithOnMatchingValue_shouldSucceed() {
-        Like like = new Like("test", "foo%bar");
-
-        Item item = new PropertysetItem();
-        item.addItemProperty("test", new ObjectProperty<String>("fooASDFbar"));
-
-        Assert.assertTrue(like.passesFilter("id", item));
-    }
-
-    @Test
-    public void appliesToProperty_valueIsProperty_shouldBeTrue() {
-        Like like = new Like("test", "%foo");
-        Assert.assertTrue(like.appliesToProperty("test"));
-    }
-
-    @Test
-    public void appliesToProperty_valueIsNotProperty_shouldBeFalse() {
-        Like like = new Like("test", "%foo");
-        Assert.assertFalse(like.appliesToProperty("bar"));
-    }
-
-    @Test
-    public void equals_sameInstances_shouldBeTrue() {
-        Like like1 = new Like("test", "%foo");
-        Like like2 = like1;
-        Assert.assertTrue(like1.equals(like2));
-    }
-
-    @Test
-    public void equals_twoEqualInstances_shouldBeTrue() {
-        Like like1 = new Like("test", "foo");
-        Like like2 = new Like("test", "foo");
-        Assert.assertTrue(like1.equals(like2));
-    }
-
-    @Test
-    public void equals_differentValues_shouldBeFalse() {
-        Like like1 = new Like("test", "foo");
-        Like like2 = new Like("test", "bar");
-        Assert.assertFalse(like1.equals(like2));
-    }
-
-    @Test
-    public void equals_differentProperties_shouldBeFalse() {
-        Like like1 = new Like("foo", "test");
-        Like like2 = new Like("bar", "test");
-        Assert.assertFalse(like1.equals(like2));
-    }
-
-    @Test
-    public void equals_differentPropertiesAndValues_shouldBeFalse() {
-        Like like1 = new Like("foo", "bar");
-        Like like2 = new Like("baz", "zomg");
-        Assert.assertFalse(like1.equals(like2));
-    }
-
-    @Test
-    public void equals_differentClasses_shouldBeFalse() {
-        Like like1 = new Like("foo", "bar");
-        Object obj = new Object();
-        Assert.assertFalse(like1.equals(obj));
-    }
-
-    @Test
-    public void equals_bothHaveNullProperties_shouldBeTrue() {
-        Like like1 = new Like(null, "foo");
-        Like like2 = new Like(null, "foo");
-        Assert.assertTrue(like1.equals(like2));
-    }
-
-    @Test
-    public void equals_bothHaveNullValues_shouldBeTrue() {
-        Like like1 = new Like("foo", null);
-        Like like2 = new Like("foo", null);
-        Assert.assertTrue(like1.equals(like2));
-    }
-
-    @Test
-    public void equals_onePropertyIsNull_shouldBeFalse() {
-        Like like1 = new Like(null, "bar");
-        Like like2 = new Like("foo", "baz");
-        Assert.assertFalse(like1.equals(like2));
-    }
-
-    @Test
-    public void equals_oneValueIsNull_shouldBeFalse() {
-        Like like1 = new Like("foo", null);
-        Like like2 = new Like("baz", "bar");
-        Assert.assertFalse(like1.equals(like2));
-    }
-
-    @Test
-    public void hashCode_equalInstances_shouldBeEqual() {
-        Like like1 = new Like("test", "foo");
-        Like like2 = new Like("test", "foo");
-        Assert.assertEquals(like1.hashCode(), like2.hashCode());
-    }
-
-    @Test
-    public void hashCode_differentPropertiesAndValues_shouldNotEqual() {
-        Like like1 = new Like("foo", "bar");
-        Like like2 = new Like("baz", "zomg");
-        Assert.assertTrue(like1.hashCode() != like2.hashCode());
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/generator/SQLGeneratorsTest.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/generator/SQLGeneratorsTest.java
deleted file mode 100644
index 06873d4aff..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/generator/SQLGeneratorsTest.java
+++ /dev/null
@@ -1,241 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer.generator;
-
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.vaadin.data.Container.Filter;
-import com.vaadin.data.util.filter.Like;
-import com.vaadin.data.util.filter.Or;
-import com.vaadin.data.util.sqlcontainer.RowItem;
-import com.vaadin.data.util.sqlcontainer.SQLContainer;
-import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
-import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
-import com.vaadin.data.util.sqlcontainer.query.OrderBy;
-import com.vaadin.data.util.sqlcontainer.query.TableQuery;
-import com.vaadin.data.util.sqlcontainer.query.generator.DefaultSQLGenerator;
-import com.vaadin.data.util.sqlcontainer.query.generator.MSSQLGenerator;
-import com.vaadin.data.util.sqlcontainer.query.generator.OracleGenerator;
-import com.vaadin.data.util.sqlcontainer.query.generator.SQLGenerator;
-import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
-import com.vaadin.tests.server.container.sqlcontainer.AllTests;
-import com.vaadin.tests.server.container.sqlcontainer.DataGenerator;
-
-public class SQLGeneratorsTest {
-    private JDBCConnectionPool connectionPool;
-
-    @Before
-    public void setUp() throws SQLException {
-
-        try {
-            connectionPool = new SimpleJDBCConnectionPool(AllTests.dbDriver,
-                    AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 2, 2);
-        } catch (SQLException e) {
-            e.printStackTrace();
-            Assert.fail(e.getMessage());
-        }
-
-        DataGenerator.addPeopleToDatabase(connectionPool);
-    }
-
-    @After
-    public void tearDown() {
-        if (connectionPool != null) {
-            connectionPool.destroy();
-        }
-    }
-
-    @Test
-    public void generateSelectQuery_basicQuery_shouldSucceed() {
-        SQLGenerator sg = new DefaultSQLGenerator();
-        StatementHelper sh = sg.generateSelectQuery("TABLE", null, null, 0, 0,
-                null);
-        Assert.assertEquals(sh.getQueryString(), "SELECT * FROM TABLE");
-    }
-
-    @Test
-    public void generateSelectQuery_pagingAndColumnsSet_shouldSucceed() {
-        SQLGenerator sg = new DefaultSQLGenerator();
-        StatementHelper sh = sg.generateSelectQuery("TABLE", null, null, 4, 8,
-                "COL1, COL2, COL3");
-        Assert.assertEquals(sh.getQueryString(),
-                "SELECT COL1, COL2, COL3 FROM TABLE LIMIT 8 OFFSET 4");
-    }
-
-    /**
-     * Note: Only tests one kind of filter and ordering.
-     */
-    @Test
-    public void generateSelectQuery_filtersAndOrderingSet_shouldSucceed() {
-        SQLGenerator sg = new DefaultSQLGenerator();
-        List<com.vaadin.data.Container.Filter> f = new ArrayList<Filter>();
-        f.add(new Like("name", "%lle"));
-        List<OrderBy> ob = Arrays.asList(new OrderBy("name", true));
-        StatementHelper sh = sg.generateSelectQuery("TABLE", f, ob, 0, 0, null);
-        Assert.assertEquals(sh.getQueryString(),
-                "SELECT * FROM TABLE WHERE \"name\" LIKE ? ORDER BY \"name\" ASC");
-    }
-
-    @Test
-    public void generateSelectQuery_filtersAndOrderingSet_exclusiveFilteringMode_shouldSucceed() {
-        SQLGenerator sg = new DefaultSQLGenerator();
-        List<Filter> f = new ArrayList<Filter>();
-        f.add(new Or(new Like("name", "%lle"), new Like("name", "vi%")));
-        List<OrderBy> ob = Arrays.asList(new OrderBy("name", true));
-        StatementHelper sh = sg.generateSelectQuery("TABLE", f, ob, 0, 0, null);
-        // TODO
-        Assert.assertEquals(sh.getQueryString(),
-                "SELECT * FROM TABLE WHERE (\"name\" LIKE ? "
-                        + "OR \"name\" LIKE ?) ORDER BY \"name\" ASC");
-    }
-
-    @Test
-    public void generateDeleteQuery_basicQuery_shouldSucceed()
-            throws SQLException {
-        /*
-         * No need to run this for Oracle/MSSQL generators since the
-         * DefaultSQLGenerator method would be called anyway.
-         */
-        if (AllTests.sqlGen instanceof MSSQLGenerator
-                || AllTests.sqlGen instanceof OracleGenerator) {
-            return;
-        }
-        SQLGenerator sg = AllTests.sqlGen;
-        TableQuery query = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(query);
-
-        StatementHelper sh = sg.generateDeleteQuery(
-                "people",
-                query.getPrimaryKeyColumns(),
-                null,
-                (RowItem) container.getItem(container.getItemIds().iterator()
-                        .next()));
-        Assert.assertEquals("DELETE FROM people WHERE \"ID\" = ?",
-                sh.getQueryString());
-    }
-
-    @Test
-    public void generateUpdateQuery_basicQuery_shouldSucceed()
-            throws SQLException {
-        /*
-         * No need to run this for Oracle/MSSQL generators since the
-         * DefaultSQLGenerator method would be called anyway.
-         */
-        if (AllTests.sqlGen instanceof MSSQLGenerator
-                || AllTests.sqlGen instanceof OracleGenerator) {
-            return;
-        }
-        SQLGenerator sg = new DefaultSQLGenerator();
-        TableQuery query = new TableQuery("people", connectionPool);
-        SQLContainer container = new SQLContainer(query);
-
-        RowItem ri = (RowItem) container.getItem(container.getItemIds()
-                .iterator().next());
-        ri.getItemProperty("NAME").setValue("Viljami");
-
-        StatementHelper sh = sg.generateUpdateQuery("people", ri);
-        Assert.assertTrue("UPDATE people SET \"NAME\" = ?, \"AGE\" = ? WHERE \"ID\" = ?"
-                .equals(sh.getQueryString())
-                || "UPDATE people SET \"AGE\" = ?, \"NAME\" = ? WHERE \"ID\" = ?"
-                        .equals(sh.getQueryString()));
-    }
-
-    @Test
-    public void generateInsertQuery_basicQuery_shouldSucceed()
-            throws SQLException {
-        /*
-         * No need to run this for Oracle/MSSQL generators since the
-         * DefaultSQLGenerator method would be called anyway.
-         */
-        if (AllTests.sqlGen instanceof MSSQLGenerator
-                || AllTests.sqlGen instanceof OracleGenerator) {
-            return;
-        }
-        SQLGenerator sg = new DefaultSQLGenerator();
-        TableQuery query = new TableQuery("people", connectionPool);
-        SQLContainer container = new SQLContainer(query);
-
-        RowItem ri = (RowItem) container.getItem(container.addItem());
-        ri.getItemProperty("NAME").setValue("Viljami");
-
-        StatementHelper sh = sg.generateInsertQuery("people", ri);
-
-        Assert.assertTrue("INSERT INTO people (\"NAME\", \"AGE\") VALUES (?, ?)"
-                .equals(sh.getQueryString())
-                || "INSERT INTO people (\"AGE\", \"NAME\") VALUES (?, ?)"
-                        .equals(sh.getQueryString()));
-    }
-
-    @Test
-    public void generateComplexSelectQuery_forOracle_shouldSucceed()
-            throws SQLException {
-        SQLGenerator sg = new OracleGenerator();
-        List<Filter> f = new ArrayList<Filter>();
-        f.add(new Like("name", "%lle"));
-        List<OrderBy> ob = Arrays.asList(new OrderBy("name", true));
-        StatementHelper sh = sg.generateSelectQuery("TABLE", f, ob, 4, 8,
-                "NAME, ID");
-        Assert.assertEquals(
-                "SELECT * FROM (SELECT x.*, ROWNUM AS \"rownum\" FROM"
-                        + " (SELECT NAME, ID FROM TABLE WHERE \"name\" LIKE ?"
-                        + " ORDER BY \"name\" ASC) x) WHERE \"rownum\" BETWEEN 5 AND 12",
-                sh.getQueryString());
-    }
-
-    @Test
-    public void generateComplexSelectQuery_forMSSQL_shouldSucceed()
-            throws SQLException {
-        SQLGenerator sg = new MSSQLGenerator();
-        List<Filter> f = new ArrayList<Filter>();
-        f.add(new Like("name", "%lle"));
-        List<OrderBy> ob = Arrays.asList(new OrderBy("name", true));
-        StatementHelper sh = sg.generateSelectQuery("TABLE", f, ob, 4, 8,
-                "NAME, ID");
-        Assert.assertEquals(sh.getQueryString(),
-                "SELECT * FROM (SELECT row_number() OVER "
-                        + "( ORDER BY \"name\" ASC) AS rownum, NAME, ID "
-                        + "FROM TABLE WHERE \"name\" LIKE ?) "
-                        + "AS a WHERE a.rownum BETWEEN 5 AND 12");
-    }
-
-    @Test
-    public void generateComplexSelectQuery_forOracle_exclusiveFilteringMode_shouldSucceed()
-            throws SQLException {
-        SQLGenerator sg = new OracleGenerator();
-        List<Filter> f = new ArrayList<Filter>();
-        f.add(new Or(new Like("name", "%lle"), new Like("name", "vi%")));
-        List<OrderBy> ob = Arrays.asList(new OrderBy("name", true));
-        StatementHelper sh = sg.generateSelectQuery("TABLE", f, ob, 4, 8,
-                "NAME, ID");
-        Assert.assertEquals(
-                sh.getQueryString(),
-                "SELECT * FROM (SELECT x.*, ROWNUM AS \"rownum\" FROM"
-                        + " (SELECT NAME, ID FROM TABLE WHERE (\"name\" LIKE ?"
-                        + " OR \"name\" LIKE ?) "
-                        + "ORDER BY \"name\" ASC) x) WHERE \"rownum\" BETWEEN 5 AND 12");
-    }
-
-    @Test
-    public void generateComplexSelectQuery_forMSSQL_exclusiveFilteringMode_shouldSucceed()
-            throws SQLException {
-        SQLGenerator sg = new MSSQLGenerator();
-        List<Filter> f = new ArrayList<Filter>();
-        f.add(new Or(new Like("name", "%lle"), new Like("name", "vi%")));
-        List<OrderBy> ob = Arrays.asList(new OrderBy("name", true));
-        StatementHelper sh = sg.generateSelectQuery("TABLE", f, ob, 4, 8,
-                "NAME, ID");
-        Assert.assertEquals(sh.getQueryString(),
-                "SELECT * FROM (SELECT row_number() OVER "
-                        + "( ORDER BY \"name\" ASC) AS rownum, NAME, ID "
-                        + "FROM TABLE WHERE (\"name\" LIKE ? "
-                        + "OR \"name\" LIKE ?)) "
-                        + "AS a WHERE a.rownum BETWEEN 5 AND 12");
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/query/FreeformQueryTest.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/query/FreeformQueryTest.java
deleted file mode 100644
index cc213f764f..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/query/FreeformQueryTest.java
+++ /dev/null
@@ -1,897 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer.query;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.easymock.EasyMock;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.vaadin.data.Container.Filter;
-import com.vaadin.data.util.filter.Like;
-import com.vaadin.data.util.sqlcontainer.RowId;
-import com.vaadin.data.util.sqlcontainer.RowItem;
-import com.vaadin.data.util.sqlcontainer.SQLContainer;
-import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
-import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
-import com.vaadin.data.util.sqlcontainer.query.FreeformQuery;
-import com.vaadin.data.util.sqlcontainer.query.FreeformQueryDelegate;
-import com.vaadin.data.util.sqlcontainer.query.OrderBy;
-import com.vaadin.tests.server.container.sqlcontainer.AllTests;
-import com.vaadin.tests.server.container.sqlcontainer.AllTests.DB;
-import com.vaadin.tests.server.container.sqlcontainer.DataGenerator;
-
-public class FreeformQueryTest {
-
-    private static final int offset = AllTests.offset;
-    private JDBCConnectionPool connectionPool;
-
-    @Before
-    public void setUp() throws SQLException {
-
-        try {
-            connectionPool = new SimpleJDBCConnectionPool(AllTests.dbDriver,
-                    AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 2, 2);
-        } catch (SQLException e) {
-            e.printStackTrace();
-            Assert.fail(e.getMessage());
-        }
-
-        DataGenerator.addPeopleToDatabase(connectionPool);
-    }
-
-    @After
-    public void tearDown() {
-        if (connectionPool != null) {
-            connectionPool.destroy();
-        }
-    }
-
-    @Test
-    public void construction_legalParameters_shouldSucceed() {
-        FreeformQuery ffQuery = new FreeformQuery("SELECT * FROM foo",
-                Arrays.asList("ID"), connectionPool);
-        Assert.assertArrayEquals(new Object[] { "ID" }, ffQuery
-                .getPrimaryKeyColumns().toArray());
-
-        Assert.assertEquals("SELECT * FROM foo", ffQuery.getQueryString());
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void construction_emptyQueryString_shouldFail() {
-        new FreeformQuery("", Arrays.asList("ID"), connectionPool);
-    }
-
-    @Test
-    public void construction_nullPrimaryKeys_shouldSucceed() {
-        new FreeformQuery("SELECT * FROM foo", null, connectionPool);
-    }
-
-    @Test
-    public void construction_nullPrimaryKeys2_shouldSucceed() {
-        new FreeformQuery("SELECT * FROM foo", connectionPool);
-    }
-
-    @Test
-    public void construction_emptyPrimaryKeys_shouldSucceed() {
-        new FreeformQuery("SELECT * FROM foo", connectionPool);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void construction_emptyStringsInPrimaryKeys_shouldFail() {
-        new FreeformQuery("SELECT * FROM foo", Arrays.asList(""),
-                connectionPool);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void construction_nullConnectionPool_shouldFail() {
-        new FreeformQuery("SELECT * FROM foo", Arrays.asList("ID"), null);
-    }
-
-    @Test
-    public void getCount_simpleQuery_returnsFour() throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        Assert.assertEquals(4, query.getCount());
-    }
-
-    @Test(expected = SQLException.class)
-    public void getCount_illegalQuery_shouldThrowSQLException()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM asdf",
-                Arrays.asList("ID"), connectionPool);
-        query.getResults(0, 50);
-    }
-
-    @Test
-    public void getCount_simpleQueryTwoMorePeopleAdded_returnsSix()
-            throws SQLException {
-        // Add some people
-        Connection conn = connectionPool.reserveConnection();
-        Statement statement = conn.createStatement();
-        if (AllTests.db == DB.MSSQL) {
-            statement.executeUpdate("insert into people values('Bengt', 30)");
-            statement.executeUpdate("insert into people values('Ingvar', 50)");
-        } else {
-            statement
-                    .executeUpdate("insert into people values(default, 'Bengt', 30)");
-            statement
-                    .executeUpdate("insert into people values(default, 'Ingvar', 50)");
-        }
-        statement.close();
-        conn.commit();
-        connectionPool.releaseConnection(conn);
-
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-
-        Assert.assertEquals(6, query.getCount());
-    }
-
-    @Test
-    public void getCount_moreComplexQuery_returnsThree() throws SQLException {
-        FreeformQuery query = new FreeformQuery(
-                "SELECT * FROM people WHERE \"NAME\" LIKE '%lle'",
-                connectionPool, new String[] { "ID" });
-        Assert.assertEquals(3, query.getCount());
-    }
-
-    @Test
-    public void getCount_normalState_releasesConnection() throws SQLException {
-        FreeformQuery query = new FreeformQuery(
-                "SELECT * FROM people WHERE \"NAME\" LIKE '%lle'",
-                connectionPool, "ID");
-        query.getCount();
-        query.getCount();
-        Assert.assertNotNull(connectionPool.reserveConnection());
-    }
-
-    @Test
-    public void getCount_delegateRegistered_shouldUseDelegate()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.expect(delegate.getCountQuery()).andReturn(
-                "SELECT COUNT(*) FROM people WHERE \"NAME\" LIKE '%lle'");
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-        Assert.assertEquals(3, query.getCount());
-        EasyMock.verify(delegate);
-    }
-
-    @Test
-    public void getCount_delegateRegisteredZeroRows_returnsZero()
-            throws SQLException {
-        DataGenerator.createGarbage(connectionPool);
-        FreeformQuery query = new FreeformQuery("SELECT * FROM GARBAGE",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.expect(delegate.getCountQuery()).andReturn(
-                "SELECT COUNT(*) FROM GARBAGE");
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-        Assert.assertEquals(0, query.getCount());
-        EasyMock.verify(delegate);
-    }
-
-    @Test
-    public void getResults_simpleQuery_returnsFourRecords() throws SQLException {
-        FreeformQuery query = new FreeformQuery(
-                "SELECT \"ID\",\"NAME\" FROM people", Arrays.asList("ID"),
-                connectionPool);
-        query.beginTransaction();
-        ResultSet rs = query.getResults(0, 0);
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(0 + offset, rs.getInt(1));
-        Assert.assertEquals("Ville", rs.getString(2));
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(1 + offset, rs.getInt(1));
-        Assert.assertEquals("Kalle", rs.getString(2));
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(2 + offset, rs.getInt(1));
-        Assert.assertEquals("Pelle", rs.getString(2));
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(3 + offset, rs.getInt(1));
-        Assert.assertEquals("Börje", rs.getString(2));
-
-        Assert.assertFalse(rs.next());
-        query.commit();
-    }
-
-    @Test
-    public void getResults_moreComplexQuery_returnsThreeRecords()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery(
-                "SELECT * FROM people WHERE \"NAME\" LIKE '%lle'",
-                Arrays.asList("ID"), connectionPool);
-        query.beginTransaction();
-        ResultSet rs = query.getResults(0, 0);
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(0 + offset, rs.getInt(1));
-        Assert.assertEquals("Ville", rs.getString(2));
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(1 + offset, rs.getInt(1));
-        Assert.assertEquals("Kalle", rs.getString(2));
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(2 + offset, rs.getInt(1));
-        Assert.assertEquals("Pelle", rs.getString(2));
-
-        Assert.assertFalse(rs.next());
-        query.commit();
-    }
-
-    @Test
-    public void getResults_noDelegate5000Rows_returns5000rows()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        query.beginTransaction();
-        ResultSet rs = query.getResults(0, 0);
-        for (int i = 0; i < 5000; i++) {
-            Assert.assertTrue(rs.next());
-        }
-        Assert.assertFalse(rs.next());
-        query.commit();
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void setFilters_noDelegate_shouldFail() {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        ArrayList<Filter> filters = new ArrayList<Filter>();
-        filters.add(new Like("name", "%lle"));
-        query.setFilters(filters);
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void setOrderBy_noDelegate_shouldFail() {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        query.setOrderBy(Arrays.asList(new OrderBy("name", true)));
-    }
-
-    @Test(expected = IllegalStateException.class)
-    public void storeRow_noDelegateNoTransactionActive_shouldFail()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        query.storeRow(new RowItem(new SQLContainer(query), new RowId(
-                new Object[] { 1 }), null));
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void storeRow_noDelegate_shouldFail() throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        SQLContainer container = EasyMock.createNiceMock(SQLContainer.class);
-        EasyMock.replay(container);
-        query.beginTransaction();
-        query.storeRow(new RowItem(container, new RowId(new Object[] { 1 }),
-                null));
-        query.commit();
-        EasyMock.verify(container);
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void removeRow_noDelegate_shouldFail() throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        SQLContainer container = EasyMock.createNiceMock(SQLContainer.class);
-        EasyMock.replay(container);
-        query.beginTransaction();
-        query.removeRow(new RowItem(container, new RowId(new Object[] { 1 }),
-                null));
-        query.commit();
-        EasyMock.verify(container);
-    }
-
-    @Test
-    public void beginTransaction_readOnly_shouldSucceed() throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        query.beginTransaction();
-    }
-
-    @Test
-    public void commit_readOnly_shouldSucceed() throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        query.beginTransaction();
-        query.commit();
-    }
-
-    @Test
-    public void rollback_readOnly_shouldSucceed() throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        query.beginTransaction();
-        query.rollback();
-    }
-
-    @Test(expected = SQLException.class)
-    public void commit_noActiveTransaction_shouldFail() throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        query.commit();
-    }
-
-    @Test(expected = SQLException.class)
-    public void rollback_noActiveTransaction_shouldFail() throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        query.rollback();
-    }
-
-    @Test
-    public void containsRowWithKeys_simpleQueryWithExistingKeys_returnsTrue()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        Assert.assertTrue(query.containsRowWithKey(1));
-    }
-
-    @Test
-    public void containsRowWithKeys_simpleQueryWithNonexistingKeys_returnsTrue()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        Assert.assertFalse(query.containsRowWithKey(1337));
-    }
-
-    // (expected = SQLException.class)
-    @Test
-    public void containsRowWithKeys_simpleQueryWithInvalidKeys_shouldFail()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        Assert.assertFalse(query.containsRowWithKey(38796));
-    }
-
-    @Test
-    public void containsRowWithKeys_queryContainingWhereClauseAndExistingKeys_returnsTrue()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery(
-                "SELECT * FROM people WHERE \"NAME\" LIKE '%lle'",
-                Arrays.asList("ID"), connectionPool);
-        Assert.assertTrue(query.containsRowWithKey(1));
-    }
-
-    @Test
-    public void containsRowWithKeys_queryContainingLowercaseWhereClauseAndExistingKeys_returnsTrue()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery(
-                "select * from people where \"NAME\" like '%lle'",
-                Arrays.asList("ID"), connectionPool);
-        Assert.assertTrue(query.containsRowWithKey(1));
-    }
-
-    @Test
-    public void containsRowWithKeys_nullKeys_shouldFailAndReleaseConnections()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery(
-                "select * from people where \"NAME\" like '%lle'",
-                Arrays.asList("ID"), connectionPool);
-        try {
-            query.containsRowWithKey(new Object[] { null });
-        } catch (SQLException e) {
-            // We should now be able to reserve two connections
-            connectionPool.reserveConnection();
-            connectionPool.reserveConnection();
-        }
-    }
-
-    /*
-     * -------- Tests with a delegate ---------
-     */
-
-    @Test
-    public void setDelegate_noExistingDelegate_shouldRegisterNewDelegate() {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        query.setDelegate(delegate);
-        Assert.assertEquals(delegate, query.getDelegate());
-    }
-
-    @Test
-    public void getResults_hasDelegate_shouldCallDelegate() throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        if (AllTests.db == DB.MSSQL) {
-            EasyMock.expect(delegate.getQueryString(0, 2))
-                    .andReturn(
-                            "SELECT * FROM (SELECT row_number()"
-                                    + "OVER (ORDER BY id ASC) AS rownum, * FROM people)"
-                                    + " AS a WHERE a.rownum BETWEEN 0 AND 2");
-        } else if (AllTests.db == DB.ORACLE) {
-            EasyMock.expect(delegate.getQueryString(0, 2))
-                    .andReturn(
-                            "SELECT * FROM (SELECT  x.*, ROWNUM AS r FROM"
-                                    + " (SELECT * FROM people) x) WHERE r BETWEEN 1 AND 2");
-        } else {
-            EasyMock.expect(delegate.getQueryString(0, 2)).andReturn(
-                    "SELECT * FROM people LIMIT 2 OFFSET 0");
-        }
-        EasyMock.replay(delegate);
-
-        query.setDelegate(delegate);
-        query.beginTransaction();
-        query.getResults(0, 2);
-        EasyMock.verify(delegate);
-        query.commit();
-    }
-
-    @Test
-    public void getResults_delegateImplementsGetQueryString_shouldHonorOffsetAndPagelength()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        if (AllTests.db == DB.MSSQL) {
-            EasyMock.expect(delegate.getQueryString(0, 2))
-                    .andReturn(
-                            "SELECT * FROM (SELECT row_number()"
-                                    + "OVER (ORDER BY id ASC) AS rownum, * FROM people)"
-                                    + " AS a WHERE a.rownum BETWEEN 0 AND 2");
-        } else if (AllTests.db == DB.ORACLE) {
-            EasyMock.expect(delegate.getQueryString(0, 2))
-                    .andReturn(
-                            "SELECT * FROM (SELECT  x.*, ROWNUM AS r FROM"
-                                    + " (SELECT * FROM people) x) WHERE r BETWEEN 1 AND 2");
-        } else {
-            EasyMock.expect(delegate.getQueryString(0, 2)).andReturn(
-                    "SELECT * FROM people LIMIT 2 OFFSET 0");
-        }
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        query.beginTransaction();
-        ResultSet rs = query.getResults(0, 2);
-        int rsoffset = 0;
-        if (AllTests.db == DB.MSSQL) {
-            rsoffset++;
-        }
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(0 + offset, rs.getInt(1 + rsoffset));
-        Assert.assertEquals("Ville", rs.getString(2 + rsoffset));
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(1 + offset, rs.getInt(1 + rsoffset));
-        Assert.assertEquals("Kalle", rs.getString(2 + rsoffset));
-
-        Assert.assertFalse(rs.next());
-
-        EasyMock.verify(delegate);
-        query.commit();
-    }
-
-    @Test
-    public void getResults_delegateRegistered5000Rows_returns100rows()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        if (AllTests.db == DB.MSSQL) {
-            EasyMock.expect(delegate.getQueryString(200, 100))
-                    .andReturn(
-                            "SELECT * FROM (SELECT row_number()"
-                                    + "OVER (ORDER BY id ASC) AS rownum, * FROM people)"
-                                    + " AS a WHERE a.rownum BETWEEN 201 AND 300");
-        } else if (AllTests.db == DB.ORACLE) {
-            EasyMock.expect(delegate.getQueryString(200, 100))
-                    .andReturn(
-                            "SELECT * FROM (SELECT  x.*, ROWNUM AS r FROM"
-                                    + " (SELECT * FROM people ORDER BY ID ASC) x) WHERE r BETWEEN 201 AND 300");
-        } else {
-            EasyMock.expect(delegate.getQueryString(200, 100)).andReturn(
-                    "SELECT * FROM people LIMIT 100 OFFSET 200");
-        }
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        query.beginTransaction();
-        ResultSet rs = query.getResults(200, 100);
-        for (int i = 0; i < 100; i++) {
-            Assert.assertTrue(rs.next());
-            Assert.assertEquals(200 + i + offset, rs.getInt("ID"));
-        }
-        Assert.assertFalse(rs.next());
-        query.commit();
-    }
-
-    @Test
-    public void setFilters_delegateImplementsSetFilters_shouldPassFiltersToDelegate() {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        List<Filter> filters = new ArrayList<Filter>();
-        filters.add(new Like("name", "%lle"));
-        delegate.setFilters(filters);
-
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        query.setFilters(filters);
-
-        EasyMock.verify(delegate);
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void setFilters_delegateDoesNotImplementSetFilters_shouldFail() {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        List<Filter> filters = new ArrayList<Filter>();
-        filters.add(new Like("name", "%lle"));
-        delegate.setFilters(filters);
-        EasyMock.expectLastCall().andThrow(new UnsupportedOperationException());
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        query.setFilters(filters);
-
-        EasyMock.verify(delegate);
-    }
-
-    @Test
-    public void setOrderBy_delegateImplementsSetOrderBy_shouldPassArgumentsToDelegate() {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        List<OrderBy> orderBys = Arrays.asList(new OrderBy("name", false));
-        delegate.setOrderBy(orderBys);
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        query.setOrderBy(orderBys);
-
-        EasyMock.verify(delegate);
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void setOrderBy_delegateDoesNotImplementSetOrderBy_shouldFail() {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        List<OrderBy> orderBys = Arrays.asList(new OrderBy("name", false));
-        delegate.setOrderBy(orderBys);
-        EasyMock.expectLastCall().andThrow(new UnsupportedOperationException());
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        query.setOrderBy(orderBys);
-
-        EasyMock.verify(delegate);
-    }
-
-    @Test
-    public void setFilters_noDelegateAndNullParameter_shouldSucceed() {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        query.setFilters(null);
-    }
-
-    @Test
-    public void setOrderBy_noDelegateAndNullParameter_shouldSucceed() {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        query.setOrderBy(null);
-    }
-
-    @Test
-    public void storeRow_delegateImplementsStoreRow_shouldPassToDelegate()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.expect(
-                delegate.storeRow(EasyMock.isA(Connection.class),
-                        EasyMock.isA(RowItem.class))).andReturn(1);
-        SQLContainer container = EasyMock.createNiceMock(SQLContainer.class);
-        EasyMock.replay(delegate, container);
-        query.setDelegate(delegate);
-
-        query.beginTransaction();
-        RowItem row = new RowItem(container, new RowId(new Object[] { 1 }),
-                null);
-        query.storeRow(row);
-        query.commit();
-
-        EasyMock.verify(delegate, container);
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void storeRow_delegateDoesNotImplementStoreRow_shouldFail()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.expect(
-                delegate.storeRow(EasyMock.isA(Connection.class),
-                        EasyMock.isA(RowItem.class))).andThrow(
-                new UnsupportedOperationException());
-        SQLContainer container = EasyMock.createNiceMock(SQLContainer.class);
-        EasyMock.replay(delegate, container);
-        query.setDelegate(delegate);
-
-        query.beginTransaction();
-        RowItem row = new RowItem(container, new RowId(new Object[] { 1 }),
-                null);
-        query.storeRow(row);
-        query.commit();
-
-        EasyMock.verify(delegate, container);
-    }
-
-    @Test
-    public void removeRow_delegateImplementsRemoveRow_shouldPassToDelegate()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.expect(
-                delegate.removeRow(EasyMock.isA(Connection.class),
-                        EasyMock.isA(RowItem.class))).andReturn(true);
-        SQLContainer container = EasyMock.createNiceMock(SQLContainer.class);
-        EasyMock.replay(delegate, container);
-        query.setDelegate(delegate);
-
-        query.beginTransaction();
-        RowItem row = new RowItem(container, new RowId(new Object[] { 1 }),
-                null);
-        query.removeRow(row);
-        query.commit();
-
-        EasyMock.verify(delegate, container);
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void removeRow_delegateDoesNotImplementRemoveRow_shouldFail()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.expect(
-                delegate.removeRow(EasyMock.isA(Connection.class),
-                        EasyMock.isA(RowItem.class))).andThrow(
-                new UnsupportedOperationException());
-        SQLContainer container = EasyMock.createNiceMock(SQLContainer.class);
-        EasyMock.replay(delegate, container);
-        query.setDelegate(delegate);
-
-        query.beginTransaction();
-        RowItem row = new RowItem(container, new RowId(new Object[] { 1 }),
-                null);
-        query.removeRow(row);
-        query.commit();
-
-        EasyMock.verify(delegate, container);
-    }
-
-    @Test
-    public void beginTransaction_delegateRegistered_shouldSucceed()
-            throws UnsupportedOperationException, SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        query.beginTransaction();
-    }
-
-    @Test(expected = IllegalStateException.class)
-    public void beginTransaction_transactionAlreadyActive_shouldFail()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-
-        query.beginTransaction();
-        query.beginTransaction();
-    }
-
-    @Test(expected = SQLException.class)
-    public void commit_delegateRegisteredNoActiveTransaction_shouldFail()
-            throws UnsupportedOperationException, SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        query.commit();
-    }
-
-    @Test
-    public void commit_delegateRegisteredActiveTransaction_shouldSucceed()
-            throws UnsupportedOperationException, SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        query.beginTransaction();
-        query.commit();
-    }
-
-    @Test(expected = SQLException.class)
-    public void commit_delegateRegisteredActiveTransactionDoubleCommit_shouldFail()
-            throws UnsupportedOperationException, SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        query.beginTransaction();
-        query.commit();
-        query.commit();
-    }
-
-    @Test(expected = SQLException.class)
-    public void rollback_delegateRegisteredNoActiveTransaction_shouldFail()
-            throws UnsupportedOperationException, SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        query.rollback();
-    }
-
-    @Test
-    public void rollback_delegateRegisteredActiveTransaction_shouldSucceed()
-            throws UnsupportedOperationException, SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        query.beginTransaction();
-        query.rollback();
-    }
-
-    @Test(expected = SQLException.class)
-    public void rollback_delegateRegisteredActiveTransactionDoubleRollback_shouldFail()
-            throws UnsupportedOperationException, SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        query.beginTransaction();
-        query.rollback();
-        query.rollback();
-    }
-
-    @Test(expected = SQLException.class)
-    public void rollback_delegateRegisteredCommittedTransaction_shouldFail()
-            throws UnsupportedOperationException, SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        query.beginTransaction();
-        query.commit();
-        query.rollback();
-    }
-
-    @Test(expected = SQLException.class)
-    public void commit_delegateRegisteredRollbackedTransaction_shouldFail()
-            throws UnsupportedOperationException, SQLException {
-        FreeformQuery query = new FreeformQuery("SELECT * FROM people",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        query.beginTransaction();
-        query.rollback();
-        query.commit();
-    }
-
-    @Test(expected = SQLException.class)
-    public void containsRowWithKeys_delegateRegistered_shouldCallGetContainsRowQueryString()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery(
-                "SELECT * FROM people WHERE name LIKE '%lle'",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.expect(delegate.getContainsRowQueryString(1)).andReturn("");
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        query.containsRowWithKey(1);
-
-        EasyMock.verify(delegate);
-    }
-
-    @Test
-    public void containsRowWithKeys_delegateRegistered_shouldUseResultFromGetContainsRowQueryString()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery(
-                "SELECT * FROM people WHERE \"NAME\" LIKE '%lle'",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        // In order to test that this is the query that is actually used, we use
-        // a non-existing id in place of the existing one.
-        EasyMock.expect(delegate.getContainsRowQueryString(1))
-                .andReturn(
-                        "SELECT * FROM people WHERE \"NAME\" LIKE '%lle' AND \"ID\" = 1337");
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        // The id (key) used should be 1337 as above, for the call with key = 1
-        Assert.assertFalse(query.containsRowWithKey(1));
-
-        EasyMock.verify(delegate);
-    }
-
-    @Test
-    public void containsRowWithKeys_delegateRegisteredGetContainsRowQueryStringNotImplemented_shouldBuildQueryString()
-            throws SQLException {
-        FreeformQuery query = new FreeformQuery(
-                "SELECT * FROM people WHERE \"NAME\" LIKE '%lle'",
-                Arrays.asList("ID"), connectionPool);
-        FreeformQueryDelegate delegate = EasyMock
-                .createMock(FreeformQueryDelegate.class);
-        EasyMock.expect(delegate.getContainsRowQueryString(1)).andThrow(
-                new UnsupportedOperationException());
-        EasyMock.replay(delegate);
-        query.setDelegate(delegate);
-
-        Assert.assertTrue(query.containsRowWithKey(1));
-
-        EasyMock.verify(delegate);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/query/QueryBuilderTest.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/query/QueryBuilderTest.java
deleted file mode 100644
index 02130fab83..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/query/QueryBuilderTest.java
+++ /dev/null
@@ -1,311 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer.query;
-
-import java.util.ArrayList;
-
-import junit.framework.Assert;
-
-import org.easymock.EasyMock;
-import org.junit.Test;
-
-import com.vaadin.data.Container.Filter;
-import com.vaadin.data.util.filter.And;
-import com.vaadin.data.util.filter.Between;
-import com.vaadin.data.util.filter.Compare.Equal;
-import com.vaadin.data.util.filter.Compare.Greater;
-import com.vaadin.data.util.filter.Compare.GreaterOrEqual;
-import com.vaadin.data.util.filter.Compare.Less;
-import com.vaadin.data.util.filter.Compare.LessOrEqual;
-import com.vaadin.data.util.filter.IsNull;
-import com.vaadin.data.util.filter.Like;
-import com.vaadin.data.util.filter.Not;
-import com.vaadin.data.util.filter.Or;
-import com.vaadin.data.util.filter.SimpleStringFilter;
-import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
-import com.vaadin.data.util.sqlcontainer.query.generator.filter.QueryBuilder;
-import com.vaadin.data.util.sqlcontainer.query.generator.filter.StringDecorator;
-
-public class QueryBuilderTest {
-
-    private StatementHelper mockedStatementHelper(Object... values) {
-        StatementHelper sh = EasyMock.createMock(StatementHelper.class);
-        for (Object val : values) {
-            sh.addParameterValue(val);
-            EasyMock.expectLastCall();
-        }
-        EasyMock.replay(sh);
-        return sh;
-    }
-
-    // escape bad characters and wildcards
-
-    @Test
-    public void getWhereStringForFilter_equals() {
-        StatementHelper sh = mockedStatementHelper("Fido");
-        Equal f = new Equal("NAME", "Fido");
-        Assert.assertEquals("\"NAME\" = ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilter_greater() {
-        StatementHelper sh = mockedStatementHelper(18);
-        Greater f = new Greater("AGE", 18);
-        Assert.assertEquals("\"AGE\" > ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilter_less() {
-        StatementHelper sh = mockedStatementHelper(65);
-        Less f = new Less("AGE", 65);
-        Assert.assertEquals("\"AGE\" < ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilter_greaterOrEqual() {
-        StatementHelper sh = mockedStatementHelper(18);
-        GreaterOrEqual f = new GreaterOrEqual("AGE", 18);
-        Assert.assertEquals("\"AGE\" >= ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilter_lessOrEqual() {
-        StatementHelper sh = mockedStatementHelper(65);
-        LessOrEqual f = new LessOrEqual("AGE", 65);
-        Assert.assertEquals("\"AGE\" <= ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilter_simpleStringFilter() {
-        StatementHelper sh = mockedStatementHelper("Vi%");
-        SimpleStringFilter f = new SimpleStringFilter("NAME", "Vi", false, true);
-        Assert.assertEquals("\"NAME\" LIKE ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilter_simpleStringFilterMatchAnywhere() {
-        StatementHelper sh = mockedStatementHelper("%Vi%");
-        SimpleStringFilter f = new SimpleStringFilter("NAME", "Vi", false,
-                false);
-        Assert.assertEquals("\"NAME\" LIKE ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilter_simpleStringFilterMatchAnywhereIgnoreCase() {
-        StatementHelper sh = mockedStatementHelper("%VI%");
-        SimpleStringFilter f = new SimpleStringFilter("NAME", "Vi", true, false);
-        Assert.assertEquals("UPPER(\"NAME\") LIKE ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilter_startsWith() {
-        StatementHelper sh = mockedStatementHelper("Vi%");
-        Like f = new Like("NAME", "Vi%");
-        Assert.assertEquals("\"NAME\" LIKE ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilter_startsWithNumber() {
-        StatementHelper sh = mockedStatementHelper("1%");
-        Like f = new Like("AGE", "1%");
-        Assert.assertEquals("\"AGE\" LIKE ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilter_endsWith() {
-        StatementHelper sh = mockedStatementHelper("%lle");
-        Like f = new Like("NAME", "%lle");
-        Assert.assertEquals("\"NAME\" LIKE ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilter_contains() {
-        StatementHelper sh = mockedStatementHelper("%ill%");
-        Like f = new Like("NAME", "%ill%");
-        Assert.assertEquals("\"NAME\" LIKE ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilter_between() {
-        StatementHelper sh = mockedStatementHelper(18, 65);
-        Between f = new Between("AGE", 18, 65);
-        Assert.assertEquals("\"AGE\" BETWEEN ? AND ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilter_caseInsensitive_equals() {
-        StatementHelper sh = mockedStatementHelper("FIDO");
-        Like f = new Like("NAME", "Fido");
-        f.setCaseSensitive(false);
-        Assert.assertEquals("UPPER(\"NAME\") LIKE ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilter_caseInsensitive_startsWith() {
-        StatementHelper sh = mockedStatementHelper("VI%");
-        Like f = new Like("NAME", "Vi%");
-        f.setCaseSensitive(false);
-        Assert.assertEquals("UPPER(\"NAME\") LIKE ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilter_caseInsensitive_endsWith() {
-        StatementHelper sh = mockedStatementHelper("%LLE");
-        Like f = new Like("NAME", "%lle");
-        f.setCaseSensitive(false);
-        Assert.assertEquals("UPPER(\"NAME\") LIKE ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilter_caseInsensitive_contains() {
-        StatementHelper sh = mockedStatementHelper("%ILL%");
-        Like f = new Like("NAME", "%ill%");
-        f.setCaseSensitive(false);
-        Assert.assertEquals("UPPER(\"NAME\") LIKE ?",
-                QueryBuilder.getWhereStringForFilter(f, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilters_listOfFilters() {
-        StatementHelper sh = mockedStatementHelper("%lle", 18);
-        ArrayList<Filter> filters = new ArrayList<Filter>();
-        filters.add(new Like("NAME", "%lle"));
-        filters.add(new Greater("AGE", 18));
-        Assert.assertEquals(" WHERE \"NAME\" LIKE ? AND \"AGE\" > ?",
-                QueryBuilder.getWhereStringForFilters(filters, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilters_oneAndFilter() {
-        StatementHelper sh = mockedStatementHelper("%lle", 18);
-        ArrayList<Filter> filters = new ArrayList<Filter>();
-        filters.add(new And(new Like("NAME", "%lle"), new Greater("AGE", 18)));
-        Assert.assertEquals(" WHERE (\"NAME\" LIKE ? AND \"AGE\" > ?)",
-                QueryBuilder.getWhereStringForFilters(filters, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilters_oneOrFilter() {
-        StatementHelper sh = mockedStatementHelper("%lle", 18);
-        ArrayList<Filter> filters = new ArrayList<Filter>();
-        filters.add(new Or(new Like("NAME", "%lle"), new Greater("AGE", 18)));
-        Assert.assertEquals(" WHERE (\"NAME\" LIKE ? OR \"AGE\" > ?)",
-                QueryBuilder.getWhereStringForFilters(filters, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilters_complexCompoundFilters() {
-        StatementHelper sh = mockedStatementHelper("%lle", 18, 65, "Pelle");
-        ArrayList<Filter> filters = new ArrayList<Filter>();
-        filters.add(new Or(new And(new Like("NAME", "%lle"), new Or(new Less(
-                "AGE", 18), new Greater("AGE", 65))),
-                new Equal("NAME", "Pelle")));
-        Assert.assertEquals(
-                " WHERE ((\"NAME\" LIKE ? AND (\"AGE\" < ? OR \"AGE\" > ?)) OR \"NAME\" = ?)",
-                QueryBuilder.getWhereStringForFilters(filters, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilters_complexCompoundFiltersAndSingleFilter() {
-        StatementHelper sh = mockedStatementHelper("%lle", 18, 65, "Pelle",
-                "Virtanen");
-        ArrayList<Filter> filters = new ArrayList<Filter>();
-        filters.add(new Or(new And(new Like("NAME", "%lle"), new Or(new Less(
-                "AGE", 18), new Greater("AGE", 65))),
-                new Equal("NAME", "Pelle")));
-        filters.add(new Equal("LASTNAME", "Virtanen"));
-        Assert.assertEquals(
-                " WHERE ((\"NAME\" LIKE ? AND (\"AGE\" < ? OR \"AGE\" > ?)) OR \"NAME\" = ?) AND \"LASTNAME\" = ?",
-                QueryBuilder.getWhereStringForFilters(filters, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilters_emptyList_shouldReturnEmptyString() {
-        ArrayList<Filter> filters = new ArrayList<Filter>();
-        Assert.assertEquals("", QueryBuilder.getWhereStringForFilters(filters,
-                new StatementHelper()));
-    }
-
-    @Test
-    public void getWhereStringForFilters_NotFilter() {
-        StatementHelper sh = mockedStatementHelper(18);
-        ArrayList<Filter> filters = new ArrayList<Filter>();
-        filters.add(new Not(new Equal("AGE", 18)));
-        Assert.assertEquals(" WHERE NOT \"AGE\" = ?",
-                QueryBuilder.getWhereStringForFilters(filters, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilters_complexNegatedFilter() {
-        StatementHelper sh = mockedStatementHelper(65, 18);
-        ArrayList<Filter> filters = new ArrayList<Filter>();
-        filters.add(new Not(new Or(new Equal("AGE", 65), new Equal("AGE", 18))));
-        Assert.assertEquals(" WHERE NOT (\"AGE\" = ? OR \"AGE\" = ?)",
-                QueryBuilder.getWhereStringForFilters(filters, sh));
-        EasyMock.verify(sh);
-    }
-
-    @Test
-    public void getWhereStringForFilters_isNull() {
-        ArrayList<Filter> filters = new ArrayList<Filter>();
-        filters.add(new IsNull("NAME"));
-        Assert.assertEquals(" WHERE \"NAME\" IS NULL", QueryBuilder
-                .getWhereStringForFilters(filters, new StatementHelper()));
-    }
-
-    @Test
-    public void getWhereStringForFilters_isNotNull() {
-        ArrayList<Filter> filters = new ArrayList<Filter>();
-        filters.add(new Not(new IsNull("NAME")));
-        Assert.assertEquals(" WHERE \"NAME\" IS NOT NULL", QueryBuilder
-                .getWhereStringForFilters(filters, new StatementHelper()));
-    }
-
-    @Test
-    public void getWhereStringForFilters_customStringDecorator() {
-        QueryBuilder.setStringDecorator(new StringDecorator("[", "]"));
-        ArrayList<Filter> filters = new ArrayList<Filter>();
-        filters.add(new Not(new IsNull("NAME")));
-        Assert.assertEquals(" WHERE [NAME] IS NOT NULL", QueryBuilder
-                .getWhereStringForFilters(filters, new StatementHelper()));
-        // Reset the default string decorator
-        QueryBuilder.setStringDecorator(new StringDecorator("\"", "\""));
-    }
-}
diff --git a/tests/src/com/vaadin/tests/server/container/sqlcontainer/query/TableQueryTest.java b/tests/src/com/vaadin/tests/server/container/sqlcontainer/query/TableQueryTest.java
deleted file mode 100644
index d6f5ce1cbc..0000000000
--- a/tests/src/com/vaadin/tests/server/container/sqlcontainer/query/TableQueryTest.java
+++ /dev/null
@@ -1,663 +0,0 @@
-package com.vaadin.tests.server.container.sqlcontainer.query;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.vaadin.data.Container.Filter;
-import com.vaadin.data.util.filter.Compare.Equal;
-import com.vaadin.data.util.filter.Like;
-import com.vaadin.data.util.sqlcontainer.OptimisticLockException;
-import com.vaadin.data.util.sqlcontainer.RowItem;
-import com.vaadin.data.util.sqlcontainer.SQLContainer;
-import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
-import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
-import com.vaadin.data.util.sqlcontainer.query.OrderBy;
-import com.vaadin.data.util.sqlcontainer.query.TableQuery;
-import com.vaadin.data.util.sqlcontainer.query.generator.DefaultSQLGenerator;
-import com.vaadin.tests.server.container.sqlcontainer.AllTests;
-import com.vaadin.tests.server.container.sqlcontainer.AllTests.DB;
-import com.vaadin.tests.server.container.sqlcontainer.DataGenerator;
-
-public class TableQueryTest {
-    private static final int offset = AllTests.offset;
-    private JDBCConnectionPool connectionPool;
-
-    @Before
-    public void setUp() throws SQLException {
-
-        try {
-            connectionPool = new SimpleJDBCConnectionPool(AllTests.dbDriver,
-                    AllTests.dbURL, AllTests.dbUser, AllTests.dbPwd, 2, 2);
-        } catch (SQLException e) {
-            e.printStackTrace();
-            Assert.fail(e.getMessage());
-        }
-
-        DataGenerator.addPeopleToDatabase(connectionPool);
-    }
-
-    @After
-    public void tearDown() {
-        if (connectionPool != null) {
-            connectionPool.destroy();
-        }
-    }
-
-    /**********************************************************************
-     * TableQuery construction tests
-     **********************************************************************/
-    @Test
-    public void construction_legalParameters_shouldSucceed() {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                new DefaultSQLGenerator());
-        Assert.assertArrayEquals(new Object[] { "ID" }, tQuery
-                .getPrimaryKeyColumns().toArray());
-        boolean correctTableName = "people".equalsIgnoreCase(tQuery
-                .getTableName());
-        Assert.assertTrue(correctTableName);
-    }
-
-    @Test
-    public void construction_legalParameters_defaultGenerator_shouldSucceed() {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        Assert.assertArrayEquals(new Object[] { "ID" }, tQuery
-                .getPrimaryKeyColumns().toArray());
-        boolean correctTableName = "people".equalsIgnoreCase(tQuery
-                .getTableName());
-        Assert.assertTrue(correctTableName);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void construction_nonExistingTableName_shouldFail() {
-        new TableQuery("skgwaguhsd", connectionPool, new DefaultSQLGenerator());
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void construction_emptyTableName_shouldFail() {
-        new TableQuery("", connectionPool, new DefaultSQLGenerator());
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void construction_nullSqlGenerator_shouldFail() {
-        new TableQuery("people", connectionPool, null);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void construction_nullConnectionPool_shouldFail() {
-        new TableQuery("people", null, new DefaultSQLGenerator());
-    }
-
-    /**********************************************************************
-     * TableQuery row count tests
-     **********************************************************************/
-    @Test
-    public void getCount_simpleQuery_returnsFour() throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        Assert.assertEquals(4, tQuery.getCount());
-    }
-
-    @Test
-    public void getCount_simpleQueryTwoMorePeopleAdded_returnsSix()
-            throws SQLException {
-        // Add some people
-        Connection conn = connectionPool.reserveConnection();
-        Statement statement = conn.createStatement();
-        if (AllTests.db == DB.MSSQL) {
-            statement.executeUpdate("insert into people values('Bengt', 30)");
-            statement.executeUpdate("insert into people values('Ingvar', 50)");
-        } else {
-            statement
-                    .executeUpdate("insert into people values(default, 'Bengt', 30)");
-            statement
-                    .executeUpdate("insert into people values(default, 'Ingvar', 50)");
-        }
-        statement.close();
-        conn.commit();
-        connectionPool.releaseConnection(conn);
-
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-
-        Assert.assertEquals(6, tQuery.getCount());
-    }
-
-    @Test
-    public void getCount_normalState_releasesConnection() throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        tQuery.getCount();
-        tQuery.getCount();
-        Assert.assertNotNull(connectionPool.reserveConnection());
-    }
-
-    /**********************************************************************
-     * TableQuery get results tests
-     **********************************************************************/
-    @Test
-    public void getResults_simpleQuery_returnsFourRecords() throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        tQuery.beginTransaction();
-        ResultSet rs = tQuery.getResults(0, 0);
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(0 + offset, rs.getInt(1));
-        Assert.assertEquals("Ville", rs.getString(2));
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(1 + offset, rs.getInt(1));
-        Assert.assertEquals("Kalle", rs.getString(2));
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(2 + offset, rs.getInt(1));
-        Assert.assertEquals("Pelle", rs.getString(2));
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(3 + offset, rs.getInt(1));
-        Assert.assertEquals("Börje", rs.getString(2));
-
-        Assert.assertFalse(rs.next());
-        tQuery.commit();
-    }
-
-    @Test
-    public void getResults_noDelegate5000Rows_returns5000rows()
-            throws SQLException {
-        DataGenerator.addFiveThousandPeople(connectionPool);
-
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-
-        tQuery.beginTransaction();
-        ResultSet rs = tQuery.getResults(0, 0);
-        for (int i = 0; i < 5000; i++) {
-            Assert.assertTrue(rs.next());
-        }
-        Assert.assertFalse(rs.next());
-        tQuery.commit();
-    }
-
-    /**********************************************************************
-     * TableQuery transaction management tests
-     **********************************************************************/
-    @Test
-    public void beginTransaction_readOnly_shouldSucceed() throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        tQuery.beginTransaction();
-    }
-
-    @Test(expected = IllegalStateException.class)
-    public void beginTransaction_transactionAlreadyActive_shouldFail()
-            throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-
-        tQuery.beginTransaction();
-        tQuery.beginTransaction();
-    }
-
-    @Test
-    public void commit_readOnly_shouldSucceed() throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        tQuery.beginTransaction();
-        tQuery.commit();
-    }
-
-    @Test
-    public void rollback_readOnly_shouldSucceed() throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        tQuery.beginTransaction();
-        tQuery.rollback();
-    }
-
-    @Test(expected = SQLException.class)
-    public void commit_noActiveTransaction_shouldFail() throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        tQuery.commit();
-    }
-
-    @Test(expected = SQLException.class)
-    public void rollback_noActiveTransaction_shouldFail() throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        tQuery.rollback();
-    }
-
-    /**********************************************************************
-     * TableQuery row query with given keys tests
-     **********************************************************************/
-    @Test
-    public void containsRowWithKeys_existingKeys_returnsTrue()
-            throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        Assert.assertTrue(tQuery.containsRowWithKey(1));
-    }
-
-    @Test
-    public void containsRowWithKeys_nonexistingKeys_returnsTrue()
-            throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-
-        Assert.assertFalse(tQuery.containsRowWithKey(1337));
-    }
-
-    @Test
-    public void containsRowWithKeys_invalidKeys_shouldFail()
-            throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        boolean b = true;
-        try {
-            b = tQuery.containsRowWithKey("foo");
-        } catch (SQLException se) {
-            return;
-        }
-        Assert.assertFalse(b);
-    }
-
-    @Test
-    public void containsRowWithKeys_nullKeys_shouldFailAndReleaseConnections()
-            throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        try {
-            tQuery.containsRowWithKey(new Object[] { null });
-        } catch (SQLException e) {
-            // We should now be able to reserve two connections
-            connectionPool.reserveConnection();
-            connectionPool.reserveConnection();
-        }
-    }
-
-    /**********************************************************************
-     * TableQuery filtering and ordering tests
-     **********************************************************************/
-    @Test
-    public void setFilters_shouldReturnCorrectCount() throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        List<Filter> filters = new ArrayList<Filter>();
-        filters.add(new Like("NAME", "%lle"));
-        tQuery.setFilters(filters);
-        Assert.assertEquals(3, tQuery.getCount());
-    }
-
-    @Test
-    public void setOrderByNameAscending_shouldReturnCorrectOrder()
-            throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-
-        List<OrderBy> orderBys = Arrays.asList(new OrderBy("NAME", true));
-        tQuery.setOrderBy(orderBys);
-
-        tQuery.beginTransaction();
-        ResultSet rs;
-        rs = tQuery.getResults(0, 0);
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(3 + offset, rs.getInt(1));
-        Assert.assertEquals("Börje", rs.getString(2));
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(1 + offset, rs.getInt(1));
-        Assert.assertEquals("Kalle", rs.getString(2));
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(2 + offset, rs.getInt(1));
-        Assert.assertEquals("Pelle", rs.getString(2));
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(0 + offset, rs.getInt(1));
-        Assert.assertEquals("Ville", rs.getString(2));
-
-        Assert.assertFalse(rs.next());
-        tQuery.commit();
-    }
-
-    @Test
-    public void setOrderByNameDescending_shouldReturnCorrectOrder()
-            throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-
-        List<OrderBy> orderBys = Arrays.asList(new OrderBy("NAME", false));
-        tQuery.setOrderBy(orderBys);
-
-        tQuery.beginTransaction();
-        ResultSet rs;
-        rs = tQuery.getResults(0, 0);
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(0 + offset, rs.getInt(1));
-        Assert.assertEquals("Ville", rs.getString(2));
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(2 + offset, rs.getInt(1));
-        Assert.assertEquals("Pelle", rs.getString(2));
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(1 + offset, rs.getInt(1));
-        Assert.assertEquals("Kalle", rs.getString(2));
-
-        Assert.assertTrue(rs.next());
-        Assert.assertEquals(3 + offset, rs.getInt(1));
-        Assert.assertEquals("Börje", rs.getString(2));
-
-        Assert.assertFalse(rs.next());
-        tQuery.commit();
-    }
-
-    @Test
-    public void setFilters_nullParameter_shouldSucceed() {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        tQuery.setFilters(null);
-    }
-
-    @Test
-    public void setOrderBy_nullParameter_shouldSucceed() {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        tQuery.setOrderBy(null);
-    }
-
-    /**********************************************************************
-     * TableQuery row removal tests
-     **********************************************************************/
-    @Test
-    public void removeRowThroughContainer_legalRowItem_shouldSucceed()
-            throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(tQuery);
-        container.setAutoCommit(false);
-        Assert.assertTrue(container.removeItem(container.getItemIds()
-                .iterator().next()));
-
-        Assert.assertEquals(4, tQuery.getCount());
-        Assert.assertEquals(3, container.size());
-        container.commit();
-
-        Assert.assertEquals(3, tQuery.getCount());
-        Assert.assertEquals(3, container.size());
-    }
-
-    @Test
-    public void removeRowThroughContainer_nonexistingRowId_shouldFail()
-            throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-
-        SQLContainer container = new SQLContainer(tQuery);
-        container.setAutoCommit(true);
-        Assert.assertFalse(container.removeItem("foo"));
-    }
-
-    /**********************************************************************
-     * TableQuery row adding / modification tests
-     **********************************************************************/
-    @Test
-    public void insertRowThroughContainer_shouldSucceed() throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        tQuery.setVersionColumn("ID");
-
-        SQLContainer container = new SQLContainer(tQuery);
-        container.setAutoCommit(false);
-
-        Object item = container.addItem();
-        Assert.assertNotNull(item);
-
-        Assert.assertEquals(4, tQuery.getCount());
-        Assert.assertEquals(5, container.size());
-        container.commit();
-
-        Assert.assertEquals(5, tQuery.getCount());
-        Assert.assertEquals(5, container.size());
-    }
-
-    @Test
-    public void modifyRowThroughContainer_shouldSucceed() throws SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-
-        // In this test the primary key is used as a version column
-        tQuery.setVersionColumn("ID");
-        SQLContainer container = new SQLContainer(tQuery);
-        container.setAutoCommit(false);
-
-        /* Check that the container size is correct and there is no 'Viljami' */
-        Assert.assertEquals(4, container.size());
-        List<Filter> filters = new ArrayList<Filter>();
-        filters.add(new Equal("NAME", "Viljami"));
-        tQuery.setFilters(filters);
-        Assert.assertEquals(0, tQuery.getCount());
-        tQuery.setFilters(null);
-
-        /* Fetch first item, modify and commit */
-        Object item = container.getItem(container.getItemIds().iterator()
-                .next());
-        Assert.assertNotNull(item);
-
-        RowItem ri = (RowItem) item;
-        Assert.assertNotNull(ri.getItemProperty("NAME"));
-        ri.getItemProperty("NAME").setValue("Viljami");
-
-        container.commit();
-
-        // Check that the size is still correct and only 1 'Viljami' is found
-        Assert.assertEquals(4, tQuery.getCount());
-        Assert.assertEquals(4, container.size());
-        tQuery.setFilters(filters);
-        Assert.assertEquals(1, tQuery.getCount());
-    }
-
-    @Test
-    public void storeRow_noVersionColumn_shouldSucceed()
-            throws UnsupportedOperationException, SQLException {
-        TableQuery tQuery = new TableQuery("people", connectionPool,
-                AllTests.sqlGen);
-        SQLContainer container = new SQLContainer(tQuery);
-        Object id = container.addItem();
-        RowItem row = (RowItem) container.getItem(id);
-        row.getItemProperty("NAME").setValue("R2D2");
-        row.getItemProperty("AGE").setValue(123);
-        tQuery.beginTransaction();
-        tQuery.storeRow(row);
-        tQuery.commit();
-
-        Connection conn = connectionPool.reserveConnection();
-        PreparedStatement stmt = conn
-                .prepareStatement("SELECT * FROM PEOPLE WHERE \"NAME\" = ?");
-        stmt.setString(1, "R2D2");
-        ResultSet rs = stmt.executeQuery();
-        Assert.assertTrue(rs.next());
-        rs.close();
-        stmt.close();
-        connectionPool.releaseConnection(conn);
-    }
-
-    @Test
-    public void storeRow_versionSetAndEqualToDBValue_shouldSucceed()
-            throws SQLException {
-        DataGenerator.addVersionedData(connectionPool);
-
-        TableQuery tQuery = new TableQuery("versioned", connectionPool,
-                AllTests.sqlGen);
-        tQuery.setVersionColumn("VERSION");
-        SQLContainer container = new SQLContainer(tQuery);
-        RowItem row = (RowItem) container.getItem(container.firstItemId());
-        Assert.assertEquals("Junk", row.getItemProperty("TEXT").getValue());
-
-        row.getItemProperty("TEXT").setValue("asdf");
-        container.commit();
-
-        Connection conn = connectionPool.reserveConnection();
-        PreparedStatement stmt = conn
-                .prepareStatement("SELECT * FROM VERSIONED WHERE \"TEXT\" = ?");
-        stmt.setString(1, "asdf");
-        ResultSet rs = stmt.executeQuery();
-        Assert.assertTrue(rs.next());
-        rs.close();
-        stmt.close();
-        conn.commit();
-        connectionPool.releaseConnection(conn);
-    }
-
-    @Test(expected = OptimisticLockException.class)
-    public void storeRow_versionSetAndLessThanDBValue_shouldThrowException()
-            throws SQLException {
-        if (AllTests.db == DB.HSQLDB) {
-            throw new OptimisticLockException(
-                    "HSQLDB doesn't support row versioning for optimistic locking - don't run this test.",
-                    null);
-        }
-        DataGenerator.addVersionedData(connectionPool);
-
-        TableQuery tQuery = new TableQuery("versioned", connectionPool,
-                AllTests.sqlGen);
-        tQuery.setVersionColumn("VERSION");
-        SQLContainer container = new SQLContainer(tQuery);
-        RowItem row = (RowItem) container.getItem(container.firstItemId());
-        Assert.assertEquals("Junk", row.getItemProperty("TEXT").getValue());
-
-        row.getItemProperty("TEXT").setValue("asdf");
-
-        // Update the version using another connection.
-        Connection conn = connectionPool.reserveConnection();
-        PreparedStatement stmt = conn
-                .prepareStatement("UPDATE VERSIONED SET \"TEXT\" = ? WHERE \"ID\" = ?");
-        stmt.setString(1, "foo");
-        stmt.setObject(2, row.getItemProperty("ID").getValue());
-        stmt.executeUpdate();
-        stmt.close();
-        conn.commit();
-        connectionPool.releaseConnection(conn);
-
-        container.commit();
-    }
-
-    @Test
-    public void removeRow_versionSetAndEqualToDBValue_shouldSucceed()
-            throws SQLException {
-        DataGenerator.addVersionedData(connectionPool);
-
-        TableQuery tQuery = new TableQuery("versioned", connectionPool,
-                AllTests.sqlGen);
-        tQuery.setVersionColumn("VERSION");
-        SQLContainer container = new SQLContainer(tQuery);
-        RowItem row = (RowItem) container.getItem(container.firstItemId());
-        Assert.assertEquals("Junk", row.getItemProperty("TEXT").getValue());
-
-        container.removeItem(container.firstItemId());
-        container.commit();
-
-        Connection conn = connectionPool.reserveConnection();
-        PreparedStatement stmt = conn
-                .prepareStatement("SELECT * FROM VERSIONED WHERE \"TEXT\" = ?");
-        stmt.setString(1, "Junk");
-        ResultSet rs = stmt.executeQuery();
-        Assert.assertFalse(rs.next());
-        rs.close();
-        stmt.close();
-        conn.commit();
-        connectionPool.releaseConnection(conn);
-    }
-
-    @Test(expected = OptimisticLockException.class)
-    public void removeRow_versionSetAndLessThanDBValue_shouldThrowException()
-            throws SQLException {
-        if (AllTests.db == AllTests.DB.HSQLDB) {
-            // HSQLDB doesn't support versioning, so this is to make the test
-            // green.
-            throw new OptimisticLockException(null);
-        }
-        DataGenerator.addVersionedData(connectionPool);
-
-        TableQuery tQuery = new TableQuery("versioned", connectionPool,
-                AllTests.sqlGen);
-        tQuery.setVersionColumn("VERSION");
-        SQLContainer container = new SQLContainer(tQuery);
-        RowItem row = (RowItem) container.getItem(container.firstItemId());
-        Assert.assertEquals("Junk", row.getItemProperty("TEXT").getValue());
-
-        // Update the version using another connection.
-        Connection conn = connectionPool.reserveConnection();
-        PreparedStatement stmt = conn
-                .prepareStatement("UPDATE VERSIONED SET \"TEXT\" = ? WHERE \"ID\" = ?");
-        stmt.setString(1, "asdf");
-        stmt.setObject(2, row.getItemProperty("ID").getValue());
-        stmt.executeUpdate();
-        stmt.close();
-        conn.commit();
-        connectionPool.releaseConnection(conn);
-
-        container.removeItem(container.firstItemId());
-        container.commit();
-    }
-
-    @Test
-    public void removeRow_throwsOptimisticLockException_shouldStillWork()
-            throws SQLException {
-        if (AllTests.db == AllTests.DB.HSQLDB) {
-            // HSQLDB doesn't support versioning, so this is to make the test
-            // green.
-            return;
-        }
-        DataGenerator.addVersionedData(connectionPool);
-
-        TableQuery tQuery = new TableQuery("versioned", connectionPool,
-                AllTests.sqlGen);
-        tQuery.setVersionColumn("VERSION");
-        SQLContainer container = new SQLContainer(tQuery);
-        RowItem row = (RowItem) container.getItem(container.firstItemId());
-        Assert.assertEquals("Junk", row.getItemProperty("TEXT").getValue());
-
-        // Update the version using another connection.
-        Connection conn = connectionPool.reserveConnection();
-        PreparedStatement stmt = conn
-                .prepareStatement("UPDATE VERSIONED SET \"TEXT\" = ? WHERE \"ID\" = ?");
-        stmt.setString(1, "asdf");
-        stmt.setObject(2, row.getItemProperty("ID").getValue());
-        stmt.executeUpdate();
-        stmt.close();
-        conn.commit();
-        connectionPool.releaseConnection(conn);
-
-        Object itemToRemove = container.firstItemId();
-        try {
-            container.removeItem(itemToRemove);
-            container.commit();
-        } catch (OptimisticLockException e) {
-            // This is expected, refresh and try again.
-            container.rollback();
-            container.removeItem(itemToRemove);
-            container.commit();
-        }
-        Object id = container.addItem();
-        RowItem item = (RowItem) container.getItem(id);
-        item.getItemProperty("TEXT").setValue("foo");
-        container.commit();
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/themes/ButtonsTest.java b/tests/src/com/vaadin/tests/themes/ButtonsTest.java
deleted file mode 100644
index 9425cd9bd2..0000000000
--- a/tests/src/com/vaadin/tests/themes/ButtonsTest.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package com.vaadin.tests.themes;
-
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.terminal.UserError;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.NativeButton;
-import com.vaadin.ui.Window;
-
-@SuppressWarnings("serial")
-public class ButtonsTest extends com.vaadin.Application {
-
-    final Window main = new Window("Button states & themes");
-
-    CheckBox styleToggle;
-    CheckBox iconToggle;
-    CheckBox nativeToggle;
-    CheckBox themeToggle;
-    boolean largeIcons = false;
-    boolean nativeButtons = false;
-
-    final HorizontalLayout toggles = new HorizontalLayout();
-
-    @Override
-    public void init() {
-        setMainWindow(main);
-        setTheme("reindeer");
-
-        themeToggle = new CheckBox("Runo theme", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                if (getTheme() == "reindeer") {
-                    setTheme("runo");
-                } else {
-                    setTheme("reindeer");
-                }
-            }
-        });
-        themeToggle.setStyleName("small");
-        themeToggle.setImmediate(true);
-
-        styleToggle = new CheckBox("Black style", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                if (!main.getContent().getStyleName().contains("black")) {
-                    main.getContent().setStyleName("black");
-                } else {
-                    main.getContent().setStyleName("");
-                }
-            }
-        });
-        styleToggle.setImmediate(true);
-        styleToggle.setStyleName("small");
-
-        iconToggle = new CheckBox("64x icons", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                largeIcons = !largeIcons;
-                recreateAll();
-            }
-        });
-        iconToggle.setImmediate(true);
-        iconToggle.setStyleName("small");
-
-        nativeToggle = new CheckBox("Native buttons",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        nativeButtons = !nativeButtons;
-                        recreateAll();
-                    }
-                });
-        nativeToggle.setImmediate(true);
-        nativeToggle.setStyleName("small");
-
-        toggles.setSpacing(true);
-        toggles.addComponent(themeToggle);
-        toggles.addComponent(styleToggle);
-        toggles.addComponent(iconToggle);
-        toggles.addComponent(nativeToggle);
-        main.addComponent(toggles);
-
-        recreateAll();
-
-    }
-
-    private void recreateAll() {
-        main.removeAllComponents();
-        main.addComponent(toggles);
-
-        main.addComponent(buildButtons(false, false, false, false));
-        main.addComponent(buildButtons(false, false, true, false));
-        main.addComponent(buildButtons(false, true, false, false));
-        main.addComponent(buildButtons(false, true, true, false));
-        main.addComponent(buildButtons(true, false, false, false));
-        main.addComponent(buildButtons(true, false, true, false));
-        main.addComponent(buildButtons(true, true, false, false));
-        main.addComponent(buildButtons(true, true, true, false));
-
-        main.addComponent(buildButtons(false, false, false, true));
-        main.addComponent(buildButtons(false, false, true, true));
-        main.addComponent(buildButtons(false, true, false, true));
-        main.addComponent(buildButtons(false, true, true, true));
-        main.addComponent(buildButtons(true, false, false, true));
-        main.addComponent(buildButtons(true, false, true, true));
-        main.addComponent(buildButtons(true, true, false, true));
-        main.addComponent(buildButtons(true, true, true, true));
-
-        final Button b = new Button("Tabindex");
-        b.setTabIndex(1);
-        main.addComponent(b);
-
-        Button c = new Button("toggle enabled", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                b.setEnabled(!b.isEnabled());
-            }
-        });
-        main.addComponent(c);
-    }
-
-    private Layout buildButtons(boolean disabled, boolean icon, boolean error,
-            boolean sized) {
-
-        String[] buttonStyles = new String[] { "Normal", "Primary", "Small",
-                "Link" };
-
-        HorizontalLayout hl = new HorizontalLayout();
-        hl.setSpacing(true);
-        hl.setMargin(true);
-
-        for (int i = 0; i < buttonStyles.length; i++) {
-            Button b;
-            if (nativeButtons) {
-                b = new NativeButton(buttonStyles[i] + " style");
-            } else {
-                b = new Button(buttonStyles[i] + " style");
-            }
-            b.setStyleName(buttonStyles[i].toLowerCase());
-            if (icon) {
-                b.setIcon(new ThemeResource("../runo/icons/"
-                        + (largeIcons ? "64" : "16") + "/document.png"));
-            }
-            if (error) {
-                b.setComponentError(new UserError("Error"));
-            }
-            if (disabled) {
-                b.setEnabled(false);
-            }
-            if (sized) {
-                b.setWidth("250px");
-                b.setCaption(b.getCaption() + " (250px)");
-            }
-            hl.addComponent(b);
-        }
-
-        return hl;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1225.java b/tests/src/com/vaadin/tests/tickets/Ticket1225.java
deleted file mode 100644
index 0596fd4d49..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1225.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.tests.TestForTablesInitialColumnWidthLogicRendering;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.VerticalSplitPanel;
-import com.vaadin.ui.Window;
-
-/**
- * With IE7 extra scrollbars appear in content area all though content fits
- * properly. Scrollbars will disappear if "shaking" content a bit, like
- * selecting tests in area.
- */
-public class Ticket1225 extends Application {
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window(
-                "Test app to break layout fuction in IE7");
-        setMainWindow(mainWin);
-
-        VerticalSplitPanel sp = new VerticalSplitPanel();
-
-        sp.setFirstComponent(new Label("First"));
-
-        VerticalLayout el = new VerticalLayout();
-
-        sp.setSecondComponent(el);
-        el.setMargin(true);
-        el.setSizeFull();
-
-        el.addComponent(new Label("Top"));
-
-        Table testTable = TestForTablesInitialColumnWidthLogicRendering
-                .getTestTable(5, 50);
-        testTable.setSizeFull();
-
-        TabSheet ts = new TabSheet();
-        ts.setSizeFull();
-
-        Label red = new Label(
-                "<div style='background:red;width:100%;height:100%;'>??</div>",
-                Label.CONTENT_XHTML);
-        // red.setCaption("cap");
-        // red.setSizeFull();
-
-        // el.addComponent(testTable);
-        // el.setExpandRatio(testTable,1);
-
-        el.addComponent(ts);
-        el.setExpandRatio(ts, 1);
-        ts.addComponent(red);
-        ts.getTab(red).setCaption("REd tab");
-
-        Label l = new Label("<div style='background:blue;'>sdf</div>",
-                Label.CONTENT_XHTML);
-        el.addComponent(l);
-        el.setComponentAlignment(l, Alignment.MIDDLE_RIGHT);
-
-        mainWin.setContent(sp);
-
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1230.java b/tests/src/com/vaadin/tests/tickets/Ticket1230.java
deleted file mode 100644
index fd859459c0..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1230.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Item;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.Window;
-
-public class Ticket1230 extends Application {
-
-    private static final Object PROPERTY_ID = new Object();
-    private static final Object NULL_ITEM_ID = new Object();
-    private Select selectWithoutNullItem;
-    private Select selectWithNullItem;
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getName());
-        setMainWindow(w);
-
-        GridLayout layout = new GridLayout(5, 5);
-        w.setContent(layout);
-
-        layout.setSpacing(true);
-
-        {
-            selectWithoutNullItem = createSelect();
-
-            layout.addComponent(selectWithoutNullItem);
-            Button b = new Button("Select NULL_PROPERTY", new ClickListener() {
-
-                public void buttonClick(ClickEvent event) {
-                    selectWithoutNullItem.select(NULL_ITEM_ID);
-                    printState();
-
-                }
-            });
-            layout.addComponent(b);
-            b = new Button("Select 1", new ClickListener() {
-
-                public void buttonClick(ClickEvent event) {
-                    selectWithoutNullItem.select("1");
-                    printState();
-
-                }
-            });
-            layout.addComponent(b);
-            b = new Button("Select 2", new ClickListener() {
-
-                public void buttonClick(ClickEvent event) {
-                    selectWithoutNullItem.select("2");
-                    printState();
-
-                }
-            });
-            layout.addComponent(b);
-
-            b = new Button("Select null", new ClickListener() {
-
-                public void buttonClick(ClickEvent event) {
-                    selectWithoutNullItem.select(null);
-                    printState();
-
-                }
-            });
-            layout.addComponent(b);
-        }
-
-        {
-            selectWithNullItem = createSelect();
-            Item nullItem = selectWithNullItem.addItem(NULL_ITEM_ID);
-            nullItem.getItemProperty(PROPERTY_ID).setValue("NULL");
-            selectWithNullItem.setNullSelectionItemId(NULL_ITEM_ID);
-
-            layout.addComponent(selectWithNullItem);
-            selectWithNullItem.setCaption("Select with null item id");
-            Button b = new Button("Select NULL_PROPERTY", new ClickListener() {
-
-                public void buttonClick(ClickEvent event) {
-                    selectWithNullItem.select(NULL_ITEM_ID);
-                    printState();
-
-                }
-            });
-            layout.addComponent(b);
-
-            b = new Button("Select 1", new ClickListener() {
-
-                public void buttonClick(ClickEvent event) {
-                    selectWithNullItem.select("1");
-                    printState();
-
-                }
-            });
-            layout.addComponent(b);
-            b = new Button("Select 2", new ClickListener() {
-
-                public void buttonClick(ClickEvent event) {
-                    selectWithNullItem.select("2");
-                    printState();
-                }
-            });
-            layout.addComponent(b);
-
-            b = new Button("Select null", new ClickListener() {
-
-                public void buttonClick(ClickEvent event) {
-                    selectWithNullItem.select(null);
-                    printState();
-                }
-            });
-            layout.addComponent(b);
-
-        }
-
-        w.addComponent(new Button("print select values",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        printState();
-                    }
-                }));
-    }
-
-    @SuppressWarnings("deprecation")
-    private Select createSelect() {
-        Select select = new Select();
-        select.setMultiSelect(false);
-        select.addContainerProperty(PROPERTY_ID, String.class, "");
-        select.setItemCaptionPropertyId(PROPERTY_ID);
-
-        Item item1 = select.addItem("1");
-        item1.getItemProperty(PROPERTY_ID).setValue("1");
-        Item item2 = select.addItem("2");
-        item2.getItemProperty(PROPERTY_ID).setValue("2");
-
-        select.setNullSelectionAllowed(true);
-
-        return select;
-    }
-
-    void printState() {
-        System.out.println(" Select without null item "
-                + selectWithoutNullItem.getValue());
-        System.out.println(" Select with null item "
-                + selectWithNullItem.getValue());
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket124.java b/tests/src/com/vaadin/tests/tickets/Ticket124.java
deleted file mode 100644
index 985d8bccac..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket124.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket124 extends Application {
-
-    private TextField tf;
-    private GridLayout gl;
-
-    @Override
-    public void init() {
-        Window w = new Window("#124: Insert & remove row for GridLayout");
-        setMainWindow(w);
-        setTheme("tests-tickets");
-        // gl = new GridLayout(4, 4);
-        gl = new GridLayout(2, 2);
-
-        tf = new TextField("Row nr");
-        Button insert = new Button("Insert row", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                insertRow();
-
-            }
-        });
-        Button delete = new Button("Delete row", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                deleteRow();
-
-            }
-        });
-
-        // gl.addComponent(new Label("0-0"), 0, 0);
-        // gl.addComponent(new Label("0-1"), 1, 0);
-        gl.addComponent(new Label("1-0"), 1, 0);
-        gl.addComponent(new Label("1-1"), 1, 1);
-        gl.addComponent(new Label("0,0-1,0"), 0, 0, 1, 0);
-        gl.addComponent(new Label("2,0-3,0"), 2, 0, 3, 0);
-        Label l = new Label("Large cell 0,1-2,2<br/>yadayada<br/>lorem ipsum");
-        l.setContentMode(Label.CONTENT_XHTML);
-        gl.addComponent(l, 0, 1, 2, 2);
-        gl.addComponent(new Label("3-1"), 3, 1);
-        gl.addComponent(new Label("3,2-3,3"), 3, 2, 3, 3);
-        gl.addComponent(tf, 0, 3);
-        gl.addComponent(insert, 1, 3);
-        gl.addComponent(delete, 2, 3);
-
-        gl.setStyleName("border");
-        w.addComponent(gl);
-    }
-
-    protected void deleteRow() {
-        int pos = Integer.parseInt(tf.getValue().toString());
-        gl.removeRow(pos);
-
-    }
-
-    protected void clearRow() {
-        int pos = Integer.parseInt(tf.getValue().toString());
-        for (int col = 0; col < gl.getColumns(); col++) {
-            try {
-                gl.removeComponent(col, pos);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-    }
-
-    protected void insertRow() {
-        int pos = Integer.parseInt(tf.getValue().toString());
-        gl.insertRow(pos);
-        try {
-            TextField t = new TextField("", "Newly added row");
-            t.setWidth("100%");
-            gl.addComponent(t, 0, pos, 3, pos);
-        } catch (Exception e) {
-            // TODO: handle exception
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1245.java b/tests/src/com/vaadin/tests/tickets/Ticket1245.java
deleted file mode 100644
index e83ac6aded..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1245.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.ui.AbstractSelect;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.themes.Reindeer;
-
-public class Ticket1245 extends com.vaadin.Application {
-
-    TextField f = new TextField();
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        main.addComponent(new TreeExample());
-    }
-}
-
-class TreeExample extends CustomComponent {
-
-    // Id for the caption property
-    private static final Object CAPTION_PROPERTY = "caption";
-
-    private static final String desc = "non-first tree in non-sized orderedlayout seems to be the problem";
-
-    Tree tree;
-
-    public TreeExample() {
-        final VerticalLayout main = new VerticalLayout();
-        setCompositionRoot(main);
-
-        // Panel w/ Tree
-        main.setStyleName(Reindeer.PANEL_LIGHT);
-        main.setWidth("200px");
-        // // Description, this is needed. Works in first slot
-        main.addComponent(new Label(desc));
-
-        // setting either width or height fixes the issue
-        // p.setWidth(500);
-        // p.setHeight(800);
-
-        // Tree with a few items
-        tree = new Tree();
-        tree.setImmediate(true);
-        // we'll use a property for caption instead of the item id ("value"),
-        // so that multiple items can have the same caption
-        tree.addContainerProperty(CAPTION_PROPERTY, String.class, "");
-        tree.setItemCaptionMode(AbstractSelect.ITEM_CAPTION_MODE_PROPERTY);
-        tree.setItemCaptionPropertyId(CAPTION_PROPERTY);
-        for (int i = 1; i <= 3; i++) {
-            final Object id = addCaptionedItem("Section " + i, null);
-            tree.expandItem(id);
-            addCaptionedItem("Team A", id);
-            addCaptionedItem("Team B", id);
-        }
-        main.addComponent(tree);
-    }
-
-    /**
-     * Helper to add an item with specified caption and (optional) parent.
-     * 
-     * @param caption
-     *            The item caption
-     * @param parent
-     *            The (optional) parent item id
-     * @return the created item's id
-     */
-    private Object addCaptionedItem(String caption, Object parent) {
-        // add item, let tree decide id
-        final Object id = tree.addItem();
-        // get the created item
-        final Item item = tree.getItem(id);
-        // set our "caption" property
-        final Property p = item.getItemProperty(CAPTION_PROPERTY);
-        p.setValue(caption);
-        if (parent != null) {
-            tree.setChildrenAllowed(parent, true);
-            tree.setParent(id, parent);
-            tree.setChildrenAllowed(id, false);
-        }
-        return id;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1362Login.java b/tests/src/com/vaadin/tests/tickets/Ticket1362Login.java
deleted file mode 100644
index d8fdefbd38..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1362Login.java
+++ /dev/null
@@ -1,275 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.io.ByteArrayInputStream;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Map;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.ApplicationResource;
-import com.vaadin.terminal.DownloadStream;
-import com.vaadin.terminal.ParameterHandler;
-import com.vaadin.terminal.URIHandler;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Window.Notification;
-
-/**
- * Proof of concept how to create a decent login screen that works with browsers
- * PW managers. (Browsers don't autofill generated login forms)
- * 
- * TODO generalize js to work inside iframes (if a Vaadin application is inside
- * iframe)
- * 
- * TODO extract login form to a external template.
- * 
- * TODO theme
- * 
- * TODO refine docs, make LoginBox a standard Vaadin component
- * 
- * TODO article
- * 
- */
-public class Ticket1362Login extends Application {
-
-    public class LoginBox extends CustomComponent {
-
-        Embedded iframe = new Embedded();
-
-        ApplicationResource loginPage = new ApplicationResource() {
-
-            private byte[] loginHTML = (""
-                    + "<html>"
-                    + "<head><script type='text/javascript'>"
-                    + "var setTarget = function() {document.getElementById('loginf').action = top.location;};"
-                    + "</script></head>"
-                    + "<body onload='setTarget();'>"
-                    + "Iframe generated by LoginBox. PW managers can autofill form. Form handled by LoginBox "
-                    + "that will fire LoginEvents. Will post into another iframe, from where the script "
-                    + "will find Vaadin client that will be force synced. <form id='loginf' target='logintarget'>"
-                    + "Username : <input type='text' name='username'>"
-                    + "Password : <input type='password' name='password'>"
-                    + "<input type='submit' value='login'>" + "</form>"
-                    + "<iframe name='logintarget'></iframe>" + "</body>"
-                    + "</html>").getBytes();
-
-            public Application getApplication() {
-                return LoginBox.this.getApplication();
-            }
-
-            public int getBufferSize() {
-                return loginHTML.length;
-            }
-
-            public long getCacheTime() {
-                return 0;
-            }
-
-            public String getFilename() {
-                return "login.html";
-            }
-
-            public DownloadStream getStream() {
-                return new DownloadStream(new ByteArrayInputStream(loginHTML),
-                        getMIMEType(), getFilename());
-            }
-
-            public String getMIMEType() {
-                return "text/html";
-            }
-        };
-
-        private ParameterHandler paramHandler = new ParameterHandler() {
-
-            public void handleParameters(Map<String, String[]> parameters) {
-                if (parameters.containsKey("username")) {
-                    getWindow().addURIHandler(uriHandler);
-
-                    HashMap<String, String> params = new HashMap<String, String>();
-                    // expecting single params
-                    for (Iterator<String> it = parameters.keySet().iterator(); it
-                            .hasNext();) {
-                        String key = it.next();
-                        String value = (parameters.get(key))[0];
-                        params.put(key, value);
-                    }
-                    LoginEvent event = new LoginEvent(params);
-                    for (Iterator<LoginListener> iterator = listeners
-                            .iterator(); iterator.hasNext();) {
-                        LoginListener listener = iterator.next();
-                        listener.onLogin(event);
-                    }
-                }
-            }
-        };
-
-        private URIHandler uriHandler = new URIHandler() {
-            public DownloadStream handleURI(URL context, String relativeUri) {
-                if (window != null) {
-                    window.removeURIHandler(this);
-                }
-                return new DownloadStream(
-                        new ByteArrayInputStream(
-                                "<html><body>Login form handeled.<script type='text/javascript'>top.vaadin.forceSync();</script></body></html>"
-                                        .getBytes()), "text/html",
-                        "loginSuccesfull.html");
-            }
-        };
-
-        private LinkedList<LoginListener> listeners = new LinkedList<LoginListener>();
-
-        private Window window;
-
-        LoginBox() {
-            iframe.setType(Embedded.TYPE_BROWSER);
-            iframe.setSizeFull();
-            setCompositionRoot(iframe);
-        }
-
-        @Override
-        public void attach() {
-            super.attach();
-            getApplication().addResource(loginPage);
-            getWindow().addParameterHandler(paramHandler);
-            iframe.setSource(loginPage);
-        }
-
-        @Override
-        public void detach() {
-            getApplication().removeResource(loginPage);
-            getWindow().removeParameterHandler(paramHandler);
-            // store window temporary to properly remove uri handler once
-            // response is handled. (May happen if login handler removes login
-            // box
-            window = getWindow();
-            super.detach();
-        }
-
-        /**
-         * This event is sent when login form is submitted.
-         */
-        public class LoginEvent {
-
-            private Map<String, String> params;
-
-            private LoginEvent(Map<String, String> params) {
-                this.params = params;
-            }
-
-            /**
-             * Returns form value by field name.
-             * 
-             * @param name
-             * @return value in given field
-             */
-            public String getLoginParameter(String name) {
-                if (params.containsKey(name)) {
-                    return params.get(name);
-                } else {
-                    return null;
-                }
-            }
-        }
-
-        /**
-         * Adds LoginListener to handle login logic
-         * 
-         * @param listener
-         */
-        public void addLoginListener(LoginListener listener) {
-            listeners.add(listener);
-        }
-
-        /**
-         * Removes LoginListener
-         * 
-         * @param listener
-         */
-        public void removeLoginListener(LoginListener listener) {
-            listeners.remove(listener);
-        }
-
-    }
-
-    /**
-     * Login listener is a class capable to listen LoginEvents sent from
-     * LoginBox
-     */
-    public interface LoginListener {
-        /**
-         * This method is fired on each login form post.
-         * 
-         * @param event
-         */
-        public void onLogin(LoginBox.LoginEvent event);
-    }
-
-    final static String GUEST = "guest";
-
-    LoginBox loginBox = new LoginBox();
-
-    Label currentUser = new Label(GUEST);
-
-    private Panel mainPanel;
-
-    private VerticalLayout el;
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window(
-                "Test app with password manager savvy login functionality");
-
-        el = new VerticalLayout();
-
-        currentUser.setCaption("Currennt user");
-        el.addComponent(currentUser);
-
-        el.addComponent(loginBox);
-        el.setExpandRatio(loginBox, 1);
-
-        mainWin.setContent(el);
-
-        setMainWindow(mainWin);
-
-        mainPanel = new Panel("Test app");
-        mainPanel.setSizeFull();
-        mainPanel.addComponent(new Label("User is logged in"));
-        mainPanel.addComponent(new Button("Logout", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                Ticket1362Login.this.close();
-            }
-        }));
-
-        loginBox.addLoginListener(new LoginListener() {
-            public void onLogin(LoginBox.LoginEvent event) {
-                String pw = event.getLoginParameter("password");
-                String username = event.getLoginParameter("username");
-                if (pw.equals("1234")) {
-                    setUser(username);
-                    currentUser.setValue(username);
-                    currentUser.getWindow().showNotification(
-                            "Logged in user: " + username);
-                    getMainWindow().getContent().replaceComponent(loginBox,
-                            mainPanel);
-                    el.setExpandRatio(mainPanel, 1);
-                } else {
-                    getMainWindow().showNotification(
-                            "Wrong password. Hint, try '1234' ",
-                            Notification.TYPE_WARNING_MESSAGE);
-                }
-            }
-        });
-
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1365.java b/tests/src/com/vaadin/tests/tickets/Ticket1365.java
deleted file mode 100644
index be549ebf8c..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1365.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.event.Action;
-import com.vaadin.event.Action.Handler;
-import com.vaadin.event.ShortcutAction;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket1365 extends com.vaadin.Application implements Handler {
-
-    TextField f = new TextField();
-
-    Label status = new Label("ENTER and CTRL-S fires shortcut action.");
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        main.addComponent(f);
-        main.addComponent(status);
-        main.addActionHandler(this);
-        f.focus();
-
-    }
-
-    final static private Action[] actions = new Action[] {
-            new ShortcutAction("Enter", ShortcutAction.KeyCode.ENTER,
-                    new int[] {}),
-            new ShortcutAction("CTRL-S", ShortcutAction.KeyCode.S,
-                    new int[] { ShortcutAction.ModifierKey.CTRL }), };
-
-    public Action[] getActions(Object target, Object sender) {
-        return actions;
-    }
-
-    public void handleAction(Action action, Object sender, Object target) {
-        status.setValue("Pressed " + action.getCaption()
-                + " to fire shortcut. Texfield value: " + f.getValue());
-        f.focus();
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1368.java b/tests/src/com/vaadin/tests/tickets/Ticket1368.java
deleted file mode 100644
index 9df316fdcb..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1368.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.tests.TestForTablesInitialColumnWidthLogicRendering;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-/**
- */
-public class Ticket1368 extends Application {
-
-    private Table t;
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window("Test app to #1368");
-        setMainWindow(mainWin);
-
-        t = TestForTablesInitialColumnWidthLogicRendering.getTestTable(3, 5);
-
-        mainWin.addComponent(t);
-
-        ComboBox addColumn = new ComboBox();
-        addColumn.setImmediate(true);
-        addColumn.setNewItemsAllowed(true);
-        addColumn.setNewItemHandler(new ComboBox.NewItemHandler() {
-            public void addNewItem(String newItemCaption) {
-                t.addContainerProperty(newItemCaption, String.class, "-");
-            }
-        });
-        mainWin.addComponent(addColumn);
-
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1397.java b/tests/src/com/vaadin/tests/tickets/Ticket1397.java
deleted file mode 100644
index 282df33d89..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1397.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.Date;
-
-import com.vaadin.Application;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.InlineDateField;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.PopupView;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket1397 extends Application {
-
-    Window main;
-
-    @Override
-    public void init() {
-        setTheme("runo");
-        main = new Window("PopupView test");
-        setMainWindow(main);
-        Panel panel = new Panel("PopupTest");
-
-        // First test component
-        final ObjectProperty<String> prop = new ObjectProperty<String>(
-                "fooTextField");
-
-        PopupView.Content content = new PopupView.Content() {
-            public String getMinimizedValueAsHTML() {
-                return prop.toString();
-            }
-
-            public Component getPopupComponent() {
-                return new TextField("Edit foo", prop);
-            }
-        };
-
-        PopupView pe = new PopupView(content);
-        pe.setDescription("Click to edit");
-        panel.addComponent(pe);
-
-        // Second test component
-        PopupView pe2 = new PopupView("fooLabel", new Label("Foooooooooo..."));
-        pe2.setDescription("Click to view");
-        panel.addComponent(pe2);
-
-        // Third test component
-        final ObjectProperty<StringBuffer> prop2 = new ObjectProperty<StringBuffer>(
-                new StringBuffer("Text for button"));
-
-        class myButton extends Button {
-            public myButton() {
-                super("Reverse the property");
-                this.addListener(new Button.ClickListener() {
-                    public void buttonClick(Button.ClickEvent event) {
-                        StringBuffer getContents = prop2.getValue();
-                        getContents.reverse();
-
-                    }
-                });
-            }
-        }
-
-        final Panel panel2 = new Panel("Editor with a button");
-        panel2.addComponent(new myButton());
-        PopupView.Content content2 = new PopupView.Content() {
-            public String getMinimizedValueAsHTML() {
-                return prop2.toString();
-            }
-
-            public Component getPopupComponent() {
-                return panel2;
-            }
-        };
-
-        PopupView p3 = new PopupView(content2);
-        panel.addComponent(p3);
-
-        // Fourth test component
-        final Panel panel3 = new Panel("Editor popup for a property");
-        TextField tf2 = new TextField("TextField for editing a property");
-        final ObjectProperty<String> op = new ObjectProperty<String>(
-                "This is property text.");
-        tf2.setPropertyDataSource(op);
-        panel3.addComponent(tf2);
-        PopupView.Content content3 = new PopupView.Content() {
-
-            public String getMinimizedValueAsHTML() {
-                return op.toString();
-            }
-
-            public Component getPopupComponent() {
-                return panel3;
-            }
-
-        };
-        PopupView p4 = new PopupView(content3);
-        panel.addComponent(p4);
-
-        // Fifth test component
-        Table table = new Table("Table for testing purposes");
-        for (int i = 0; i < 5; i++) {
-            table.addContainerProperty("" + (i + 1), String.class, "");
-        }
-        table.addContainerProperty("" + 6, PopupView.class, null);
-        table.addContainerProperty("" + 7, PopupView.class, null);
-        table.setPageLength(20);
-        for (int i = 0; i < 1000; i++) {
-
-            final InlineDateField df = new InlineDateField("", new Date());
-            PopupView pp = new PopupView(new PopupView.Content() {
-                public String getMinimizedValueAsHTML() {
-                    return df.toString();
-                }
-
-                public Component getPopupComponent() {
-                    return df;
-                }
-            });
-            final int lineNum = i;
-            PopupView pp2 = new PopupView(new PopupView.Content() {
-
-                TextField tf = new TextField("Editor for line " + lineNum,
-
-                "Try to edit the contents for this textfield on line "
-                        + lineNum
-                        + " and see how the overview-version changes.");
-
-                public String getMinimizedValueAsHTML() {
-                    return "" + tf.toString().length() + " characters of info";
-                }
-
-                public Component getPopupComponent() {
-                    return tf;
-                }
-
-            });
-            table.addItem(new Object[] { "1 " + i, "2 " + i, "3 " + i,
-                    "4 " + i, "5 " + i, pp, pp2 }, new Integer(i));
-        }
-
-        main.addComponent(table);
-        main.addComponent(panel);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1435.java b/tests/src/com/vaadin/tests/tickets/Ticket1435.java
deleted file mode 100644
index b961c0d6b1..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1435.java
+++ /dev/null
@@ -1,230 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1435 extends Application {
-
-    private static final boolean useWorkaround = true;
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window("ButtonPanel containing a table test");
-        setMainWindow(mainWin);
-        ((AbstractOrderedLayout) mainWin.getContent()).setSpacing(true);
-
-        ButtonPanel dataCardView1 = buildButtonPanel("My Tickets");
-        ButtonPanel dataCardView2 = buildButtonPanel("My Tickets 2");
-
-        mainWin.addComponent(dataCardView1);
-        mainWin.addComponent(dataCardView2);
-
-    }
-
-    /**
-     * A ButtonPanel is a Panel, which has context specific Buttons in its
-     * header.
-     * 
-     * ButtonPanel also provides buttons for controlling its visibility
-     * (collapse/expand).
-     */
-    public class ButtonPanel extends CustomComponent {
-
-        VerticalLayout root = new VerticalLayout();
-
-        // In header are the panel's title and the control buttons.
-        // Panel title is expanded by default.
-        HorizontalLayout header = new HorizontalLayout();
-
-        // This is where the actual data is put.
-        Panel container = new Panel();
-
-        // Last known height before the panel was collapsed
-        private float lastHeight = -1;
-        private int lastHeightUnit = -1;
-
-        public ButtonPanel(String labelString) {
-            setCompositionRoot(root);
-            root.setSizeFull();
-
-            root.setStyleName("toolbarpanel");
-            header.setStyleName("toolbar");
-
-            initHeader(labelString);
-
-            initContainer();
-        }
-
-        private void initHeader(String labelString) {
-            root.addComponent(header);
-            header.setWidth("100%");
-            header.setHeight("26px");
-            Label label = new Label(labelString);
-            label.setStyleName("caption");
-            header.addComponent(label);
-
-            final Layout buttonContainer;
-            if (useWorkaround) {
-                buttonContainer = header;
-
-            } else {
-                buttonContainer = new HorizontalLayout();
-                header.addComponent(buttonContainer);
-
-            }
-
-            Button edit = new Button("Edit");
-            edit.setStyleName("link");
-            buttonContainer.addComponent(edit);
-
-            Button copy = new Button("Copy");
-            copy.setStyleName("link");
-            buttonContainer.addComponent(copy);
-
-            Button move = new Button("Move");
-            move.setStyleName("link");
-            buttonContainer.addComponent(move);
-
-            Button delete = new Button("Delete");
-            delete.setStyleName("link");
-            buttonContainer.addComponent(delete);
-
-            Button bind = new Button("Bind");
-            bind.setStyleName("link");
-            buttonContainer.addComponent(bind);
-
-            Button options = new Button("Options...");
-            options.setStyleName("link");
-            buttonContainer.addComponent(options);
-
-            final Button expand = new Button("Expand");
-
-            final Button collapse = new Button("Collapse");
-            buttonContainer.addComponent(collapse);
-
-            collapse.setStyleName("collapse");
-            collapse.addListener(new Button.ClickListener() {
-                public void buttonClick(Button.ClickEvent event) {
-                    if (useWorkaround) {
-                        container.setVisible(false);
-                        lastHeight = root.getHeight();
-                        lastHeightUnit = root.getHeightUnits();
-                        root.setHeight("26px");
-                        buttonContainer.replaceComponent(collapse, expand);
-                    } else {
-                        boolean visible = container.isVisible();
-                        container.setVisible(!visible);
-                        if (visible) {
-                            lastHeight = root.getHeight();
-                            lastHeightUnit = root.getHeightUnits();
-                            root.setHeight("26px");
-                        } else {
-                            root.setHeight(lastHeight, lastHeightUnit);
-                        }
-                        event.getButton().setCaption(
-                                visible ? "Expand" : "Collapse");
-                    }
-                }
-            });
-
-            if (useWorkaround) {
-                expand.addListener(new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        container.setVisible(true);
-                        root.setHeight(lastHeight, lastHeightUnit);
-                        buttonContainer.replaceComponent(expand, collapse);
-                    }
-                });
-            }
-
-        }
-
-        private void initContainer() {
-            container.setStyleName("custompanel");
-            container.setSizeFull();
-            ((Layout) container.getContent()).setMargin(false);
-            container.getContent().setSizeFull();
-            root.addComponent(container);
-            root.setExpandRatio(container, 1);
-        }
-
-        public void setHeight(int height, int unit) {
-            root.setHeight(height, unit);
-            lastHeight = height;
-            lastHeightUnit = unit;
-            container.setHeight("100%");
-        }
-
-        @Override
-        public void setHeight(String height) {
-            root.setHeight(height);
-            lastHeight = root.getHeight();
-            lastHeightUnit = root.getHeightUnits();
-            container.setHeight("100%");
-        }
-
-        @Override
-        public void setWidth(String width) {
-            root.setWidth(width);
-        }
-
-        public void setWidth(int width, int unit) {
-            root.setWidth(width, unit);
-        }
-
-        @Override
-        public void setSizeFull() {
-            setWidth("100%");
-            setHeight("100%");
-        }
-
-        public void setPanelComponent(Component component) {
-            container.removeAllComponents();
-            container.addComponent(component);
-        }
-    }
-
-    public ButtonPanel buildButtonPanel(String caption) {
-        ButtonPanel panel = new ButtonPanel(caption);
-
-        panel.setHeight("250px");
-        panel.setWidth("500px");
-
-        Table table = new Table();
-
-        table.setSizeFull();
-
-        table.addContainerProperty("checkbox", CheckBox.class, new CheckBox());
-        table.setColumnWidth("checkbox", 30);
-        table.setColumnHeader("checkbox", "");
-
-        table.addContainerProperty("Tickets", String.class, null);
-        table.setColumnWidth("Tickets", 150);
-
-        table.addContainerProperty("Deadline", String.class, null);
-
-        for (int i = 0; i < 10; i++) {
-            String name = "Name " + i;
-            table.addItem(new Object[] { new CheckBox(), name,
-                    "02-22-2007 13:37" }, new Integer(i));
-        }
-
-        panel.setPanelComponent(table);
-
-        return panel;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1444.java b/tests/src/com/vaadin/tests/tickets/Ticket1444.java
deleted file mode 100644
index 003b50240b..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1444.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1444 extends Application {
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window(
-                "Test app to break layout fuction in IE7");
-        setMainWindow(mainWin);
-
-        VerticalLayout ol = new VerticalLayout();
-        ol.setHeight("250px");
-        ol.setWidth("500px");
-
-        Label red = new Label(
-                "<div style='background:red;width:100%;height:100%;'>??</div>",
-                Label.CONTENT_XHTML);
-        red.setSizeFull();
-
-        ol.addComponent(red);
-        mainWin.addComponent(ol);
-
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1465ModalNotification.java b/tests/src/com/vaadin/tests/tickets/Ticket1465ModalNotification.java
deleted file mode 100644
index ff716aefc1..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1465ModalNotification.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket1465ModalNotification extends Application {
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window("ButtonPanel containing a table test");
-        setMainWindow(mainWin);
-
-        final Window modal = new Window("Modal window");
-        modal.setModal(true);
-
-        Button b = new Button("click to show notification",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        modal.showNotification(
-                                "Try clicking the button in main window!",
-                                Window.Notification.TYPE_ERROR_MESSAGE);
-
-                    }
-                });
-        modal.addComponent(b);
-
-        b = new Button("click to warning notification",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        modal.showNotification(
-                                "Try clicking the button in main window!",
-                                Window.Notification.TYPE_WARNING_MESSAGE);
-                    }
-                });
-        modal.addComponent(b);
-
-        b = new Button("click to Humanized notification",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        modal.showNotification(
-                                "Try clicking the button in main window!",
-                                Window.Notification.TYPE_HUMANIZED_MESSAGE);
-                    }
-                });
-        modal.addComponent(b);
-
-        b = new Button("click to test modality!", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                mainWin.addComponent(new Label("clicked"));
-
-            }
-        });
-
-        modal.addComponent(b);
-
-        mainWin.addWindow(modal);
-
-        b = new Button("click to test modality!", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                mainWin.addComponent(new Label("clicked"));
-
-            }
-        });
-
-        mainWin.addComponent(b);
-
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1506.java b/tests/src/com/vaadin/tests/tickets/Ticket1506.java
deleted file mode 100644
index 4788d27aad..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1506.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Panel;
-
-public class Ticket1506 extends CustomComponent {
-
-    Panel p;
-
-    public Ticket1506() {
-        p = new Ticket1506_Panel();
-        setCompositionRoot(p);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1506_Panel.java b/tests/src/com/vaadin/tests/tickets/Ticket1506_Panel.java
deleted file mode 100644
index 37690612ed..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1506_Panel.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Select;
-
-/**
- * @author Efecte R&D
- * @version $Revision$, $Date$
- */
-public class Ticket1506_Panel extends Panel {
-
-    public Ticket1506_Panel() {
-        ObjectProperty<String> property1 = new ObjectProperty<String>(null,
-                String.class);
-        addComponent(initSelect(new Ticket1506_TestContainer(), "Test select",
-                property1));
-        addComponent(initButton(property1));
-        addComponent(initSelect(new Ticket1506_TestContainer2(),
-                "Test select 2", new ObjectProperty<String>(null, String.class)));
-    }
-
-    private Component initButton(final ObjectProperty<?> property) {
-        Button button = new Button("Clear select");
-        button.addListener(new Button.ClickListener() {
-            public void buttonClick(Button.ClickEvent event) {
-                property.setValue(null);
-            }
-        });
-        return button;
-    }
-
-    private Component initSelect(Container containerDataSource, String caption,
-            ObjectProperty<?> property) {
-        Select select = new Select(caption);
-        select.setFilteringMode(Select.FILTERINGMODE_CONTAINS);
-        select.setImmediate(true);
-        select.setNullSelectionAllowed(false);
-        select.setItemCaptionPropertyId(Ticket1506_TestContainer.PROPERTY_2_ID);
-
-        select.setContainerDataSource(containerDataSource);
-        select.setPropertyDataSource(property);
-        return select;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1506_TestContainer.java b/tests/src/com/vaadin/tests/tickets/Ticket1506_TestContainer.java
deleted file mode 100644
index b8b6cfe5dd..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1506_TestContainer.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.data.util.PropertysetItem;
-
-/**
- * @author Efecte R&D
- * @version $Revision$, $Date$
- */
-public class Ticket1506_TestContainer implements Container {
-    private Map<String, PropertysetItem> items = new HashMap<String, PropertysetItem>();
-    public static final String ITEM_1_ID = "1";
-    public static final String ITEM_2_ID = "2";
-    public static final String PROPERTY_1_ID = "property 1";
-    public static final String PROPERTY_2_ID = "property 2";
-
-    private void loadItems() {
-        final PropertysetItem item1 = new PropertysetItem();
-        item1.addItemProperty(PROPERTY_1_ID, new ObjectProperty<String>(
-                "value 1", String.class));
-        item1.addItemProperty(PROPERTY_2_ID, new ObjectProperty<String>(
-                "name 1", String.class));
-        items.put(ITEM_1_ID, item1);
-
-        final PropertysetItem item2 = new PropertysetItem();
-        item2.addItemProperty(PROPERTY_1_ID, new ObjectProperty<String>(
-                "value 2", String.class));
-        item2.addItemProperty(PROPERTY_2_ID, new ObjectProperty<String>(
-                "name 2", String.class));
-        items.put(ITEM_2_ID, item2);
-    }
-
-    public Item getItem(Object itemId) {
-        if (items.isEmpty()) {
-            loadItems();
-        }
-        return items.get(itemId);
-    }
-
-    public Collection<String> getContainerPropertyIds() {
-        if (items.isEmpty()) {
-            loadItems();
-        }
-        ArrayList<String> a = new ArrayList<String>();
-        a.add(PROPERTY_1_ID);
-        a.add(PROPERTY_2_ID);
-        return a;
-    }
-
-    public Collection<String> getItemIds() {
-        if (items.isEmpty()) {
-            loadItems();
-        }
-        ArrayList<String> a = new ArrayList<String>();
-        a.add(ITEM_1_ID);
-        a.add(ITEM_2_ID);
-        return a;
-    }
-
-    public Property getContainerProperty(Object itemId, Object propertyId) {
-        if (items.isEmpty()) {
-            loadItems();
-        }
-        Item item = items.get(itemId);
-        if (item != null) {
-            return item.getItemProperty(propertyId);
-        }
-        return null;
-    }
-
-    public Class<String> getType(Object propertyId) {
-        if (items.isEmpty()) {
-            loadItems();
-        }
-        return String.class;
-    }
-
-    public int size() {
-        if (items.isEmpty()) {
-            loadItems();
-        }
-        return items.size();
-    }
-
-    public boolean containsId(Object itemId) {
-        if (items.isEmpty()) {
-            loadItems();
-        }
-        return items.containsKey(itemId);
-    }
-
-    public Item addItem(Object itemId) throws UnsupportedOperationException {
-        throw new UnsupportedOperationException("Not implemented");
-    }
-
-    public Object addItem() throws UnsupportedOperationException {
-        throw new UnsupportedOperationException("Not implemented");
-    }
-
-    public boolean removeItem(Object itemId)
-            throws UnsupportedOperationException {
-        throw new UnsupportedOperationException("Not implemented");
-    }
-
-    public boolean addContainerProperty(Object propertyId, Class<?> type,
-            Object defaultValue) throws UnsupportedOperationException {
-        throw new UnsupportedOperationException("Not implemented");
-    }
-
-    public boolean removeContainerProperty(Object propertyId)
-            throws UnsupportedOperationException {
-        throw new UnsupportedOperationException("Not implemented");
-    }
-
-    public boolean removeAllItems() throws UnsupportedOperationException {
-        throw new UnsupportedOperationException("Not implemented");
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1506_TestContainer2.java b/tests/src/com/vaadin/tests/tickets/Ticket1506_TestContainer2.java
deleted file mode 100644
index c39454027a..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1506_TestContainer2.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.data.util.PropertysetItem;
-
-/**
- * @author Efecte R&D
- * @version $Revision$, $Date$
- */
-public class Ticket1506_TestContainer2 implements Container {
-    private Map<String, PropertysetItem> items = new HashMap<String, PropertysetItem>();
-    public static final String ITEM_1_ID = "1";
-    public static final String ITEM_2_ID = "2";
-    public static final String PROPERTY_1_ID = "property 1";
-    public static final String PROPERTY_2_ID = "property 2";
-
-    private void loadItems() {
-        for (int i = 1; i < 15; i++) {
-            final PropertysetItem item = new PropertysetItem();
-            item.addItemProperty(PROPERTY_1_ID, new ObjectProperty<String>(
-                    "value " + i, String.class));
-            item.addItemProperty(PROPERTY_2_ID, new ObjectProperty<String>(
-                    "name " + i, String.class));
-            items.put(String.valueOf(i), item);
-        }
-    }
-
-    public Item getItem(Object itemId) {
-        if (items.isEmpty()) {
-            loadItems();
-        }
-        return items.get(itemId);
-    }
-
-    public Collection<String> getContainerPropertyIds() {
-        if (items.isEmpty()) {
-            loadItems();
-        }
-        ArrayList<String> a = new ArrayList<String>();
-        a.add(PROPERTY_1_ID);
-        a.add(PROPERTY_2_ID);
-        return a;
-    }
-
-    public Collection<String> getItemIds() {
-        if (items.isEmpty()) {
-            loadItems();
-        }
-        return items.keySet();
-    }
-
-    public Property getContainerProperty(Object itemId, Object propertyId) {
-        if (items.isEmpty()) {
-            loadItems();
-        }
-        Item item = items.get(itemId);
-        if (item != null) {
-            return item.getItemProperty(propertyId);
-        }
-        return null;
-    }
-
-    public Class<String> getType(Object propertyId) {
-        if (items.isEmpty()) {
-            loadItems();
-        }
-        return String.class;
-    }
-
-    public int size() {
-        if (items.isEmpty()) {
-            loadItems();
-        }
-        return items.size();
-    }
-
-    public boolean containsId(Object itemId) {
-        if (items.isEmpty()) {
-            loadItems();
-        }
-        return items.containsKey(itemId);
-    }
-
-    public Item addItem(Object itemId) throws UnsupportedOperationException {
-        throw new UnsupportedOperationException("Not implemented");
-    }
-
-    public Object addItem() throws UnsupportedOperationException {
-        throw new UnsupportedOperationException("Not implemented");
-    }
-
-    public boolean removeItem(Object itemId)
-            throws UnsupportedOperationException {
-        throw new UnsupportedOperationException("Not implemented");
-    }
-
-    public boolean addContainerProperty(Object propertyId, Class<?> type,
-            Object defaultValue) throws UnsupportedOperationException {
-        throw new UnsupportedOperationException("Not implemented");
-    }
-
-    public boolean removeContainerProperty(Object propertyId)
-            throws UnsupportedOperationException {
-        throw new UnsupportedOperationException("Not implemented");
-    }
-
-    public boolean removeAllItems() throws UnsupportedOperationException {
-        throw new UnsupportedOperationException("Not implemented");
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1519.java b/tests/src/com/vaadin/tests/tickets/Ticket1519.java
deleted file mode 100644
index ff6d340372..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1519.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.CustomLayout;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Window;
-
-public class Ticket1519 extends Application {
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window("Test app to #1519");
-        setMainWindow(mainWin);
-
-        mainWin.setTheme("tests-tickets");
-        TabSheet ts = new TabSheet();
-
-        ts.addTab(new CustomLayout("Ticket1519_News"), "News", null);
-        ts.addTab(new CustomLayout("Ticket1519_Support"), "Support", null);
-
-        mainWin.addComponent(ts);
-
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1572.java b/tests/src/com/vaadin/tests/tickets/Ticket1572.java
deleted file mode 100644
index a928e0f69c..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1572.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Window;
-
-public class Ticket1572 extends com.vaadin.Application {
-
-    private Label state;
-    private GridLayout gl;
-    private Label spacingstate;
-
-    @Override
-    public void init() {
-
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        Panel p = new Panel("Test wrapper for gridlayout margin/spacing");
-
-        p.setContent(new HorizontalLayout());
-
-        gl = new GridLayout(3, 3);
-        gl.setMargin(true);
-        for (int i = 0; i < 3 * 3; i++) {
-            gl.addComponent(new Button("test"));
-        }
-        p.addComponent(gl);
-        p.addComponent(new Label("| next component"));
-
-        Button b = new Button("next margin state");
-        b.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                nextMarginState();
-            }
-
-        });
-
-        state = new Label();
-        state.setCaption("Current margin state:");
-        main.addComponent(state);
-        main.addComponent(b);
-
-        Button b2 = new Button("next spacing state");
-        b2.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                nextSpacingState();
-            }
-
-        });
-
-        spacingstate = new Label();
-        spacingstate.setCaption("Current Spacing State:");
-        main.addComponent(spacingstate);
-        main.addComponent(b2);
-
-        main.addComponent(p);
-
-        nextMarginState();
-        nextSpacingState();
-
-    }
-
-    private int stateCounter = -1;
-
-    private void nextMarginState() {
-        stateCounter++;
-        switch (stateCounter) {
-        case 0:
-            gl.setMargin(false);
-            state.setValue("Margin off");
-            break;
-        case 1:
-            gl.setMargin(true);
-            state.setValue("Margin on");
-            break;
-        case 2:
-            gl.setMargin(true, false, false, false);
-            state.setValue("Margin top");
-            break;
-        case 3:
-            gl.setMargin(false, true, false, false);
-            state.setValue("Margin right");
-            break;
-        case 4:
-            gl.setMargin(false, false, true, false);
-            state.setValue("Margin bottom");
-            break;
-        case 5:
-            gl.setMargin(false, false, false, true);
-            state.setValue("Margin left");
-            break;
-        default:
-            stateCounter = -1;
-            nextMarginState();
-            break;
-        }
-    }
-
-    private boolean spacing = true;
-
-    private void nextSpacingState() {
-        spacing = !spacing;
-        if (spacing) {
-            gl.setSpacing(true);
-            spacingstate.setValue("Spacing on");
-        } else {
-            gl.setSpacing(false);
-            spacingstate.setValue("Spacing off");
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1581.java b/tests/src/com/vaadin/tests/tickets/Ticket1581.java
deleted file mode 100644
index 6780b3c9de..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1581.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.Date;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.ProgressIndicator;
-import com.vaadin.ui.Window;
-
-public class Ticket1581 extends com.vaadin.Application {
-
-    private Label time;
-    private ProgressIndicator poller;
-    private Thread thread;
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        main.addComponent(new Label("Test the second issue in ticket #1581"));
-
-        time = new Label();
-        poller = new ProgressIndicator();
-        poller.setPollingInterval(200);
-        main.addComponent(time);
-        main.addComponent(poller);
-
-        thread = new Thread() {
-
-            @Override
-            public void run() {
-                super.run();
-                while (true) {
-                    time.setValue(new Date());
-                    try {
-                        sleep(200);
-                    } catch (InterruptedException e) {
-                        // TODO Auto-generated catch block
-                        e.printStackTrace();
-                    }
-                }
-            }
-
-        };
-
-        thread.start();
-
-        final Button stop = new Button("Stop updating", new ClickListener() {
-            boolean active = true;
-
-            public void buttonClick(ClickEvent event) {
-
-                if (active) {
-                    main.removeComponent(poller);
-                    event.getButton().setCaption("Resume");
-                } else {
-                    main.addComponent(poller);
-                    event.getButton().setCaption("Stop updating");
-                }
-                active = !active;
-            }
-        });
-
-        main.addComponent(stop);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1589.java b/tests/src/com/vaadin/tests/tickets/Ticket1589.java
deleted file mode 100644
index 5a2bf0c793..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1589.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.util.Date;
-
-import javax.imageio.ImageIO;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.DownloadStream;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.terminal.URIHandler;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.Window;
-
-public class Ticket1589 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-
-        MyDynamicResource res = new MyDynamicResource();
-
-        w.addURIHandler(res);
-
-        w.addComponent(new Link(
-                "Test (without Content-Disposition, should suggest generatedFile.png when saving, browser default for actual disposition)",
-                new ExternalResource("myresource")));
-
-        w.addComponent(new Link(
-                "Test (with Content-Disposition, should popup download dialog that suggests  filename downloadedPNG.png)",
-                new ExternalResource("myresource_download")));
-    }
-}
-
-class MyDynamicResource implements URIHandler {
-    String textToDisplay = (new Date()).toString();
-
-    /**
-     * Provides the dynamic resource if the URI matches the resource URI. The
-     * matching URI is "/myresource" under the application URI context.
-     * 
-     * Returns null if the URI does not match. Otherwise returns a download
-     * stream that contains the response from the server.
-     */
-    public DownloadStream handleURI(URL context, String relativeUri) {
-        // Catch the given URI that identifies the resource, otherwise let other
-        // URI handlers or the Application to handle the response.
-        if (!relativeUri.startsWith("myresource")) {
-            return null;
-        }
-
-        // Create an image and draw some background on it.
-        BufferedImage image = new BufferedImage(200, 200,
-                BufferedImage.TYPE_INT_RGB);
-        Graphics drawable = image.getGraphics();
-        drawable.setColor(Color.lightGray);
-        drawable.fillRect(0, 0, 200, 200);
-        drawable.setColor(Color.yellow);
-        drawable.fillOval(25, 25, 150, 150);
-        drawable.setColor(Color.blue);
-        drawable.drawRect(0, 0, 199, 199);
-
-        // Use the parameter to create dynamic content.
-        drawable.setColor(Color.black);
-        drawable.drawString("Time: " + textToDisplay, 75, 100);
-
-        try {
-            // Write the image to a buffer.
-            ByteArrayOutputStream imagebuffer = new ByteArrayOutputStream();
-            ImageIO.write(image, "png", imagebuffer);
-
-            // Return a stream from the buffer.
-            ByteArrayInputStream istream = new ByteArrayInputStream(
-                    imagebuffer.toByteArray());
-            DownloadStream downloadStream = new DownloadStream(istream,
-                    "image/png", "generatedFile.png");
-
-            if (relativeUri.startsWith("myresource_download")) {
-                downloadStream.setParameter("Content-Disposition",
-                        "attachment; filename=\"downloadedPNG.png\"");
-            }
-            return downloadStream;
-        } catch (IOException e) {
-            return null;
-        }
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1598.java b/tests/src/com/vaadin/tests/tickets/Ticket1598.java
deleted file mode 100644
index 20f1d4d985..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1598.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.ui.MenuBar;
-import com.vaadin.ui.MenuBar.Command;
-import com.vaadin.ui.MenuBar.MenuItem;
-import com.vaadin.ui.Window;
-
-public class Ticket1598 extends Application {
-
-    Window main = new Window("MenuBar test");
-
-    final MenuBar menuBar = new MenuBar();
-
-    @Override
-    public void init() {
-        setMainWindow(main);
-        setTheme("runo");
-
-        List<MenuItem> itemList = new ArrayList<MenuItem>();
-        // Populate the menu bar
-        for (int i = 0; i < 6; i++) {
-            itemList.add(menuBar.addItem(new String("Menu " + i), null, null));
-        }
-
-        MenuItem first = itemList.get(0);
-
-        for (int i = 0; i < 5; i++) {
-            first.addItem(new String("Submenu item" + i), null, new Command() {
-
-                public void menuSelected(MenuItem selected) {
-                    main.showNotification("Action " + selected.getText());
-                }
-            });
-        }
-
-        MenuItem firstSubItem1 = first.getChildren().get(1);
-
-        for (int i = 0; i < 3; i++) {
-            firstSubItem1.addItem(new String("Subsubmenu item" + i), null,
-                    new Command() {
-
-                        public void menuSelected(MenuItem selected) {
-                            main.showNotification("Action "
-                                    + selected.getText());
-                        }
-                    });
-        }
-        MenuItem firstSubItem2 = first.getChildren().get(3);
-
-        for (int i = 0; i < 3; i++) {
-            firstSubItem2.addItem(new String("Subsubmenu item" + i), null,
-                    new Command() {
-
-                        public void menuSelected(MenuItem selected) {
-                            main.showNotification("Action "
-                                    + selected.getText());
-                        }
-                    });
-        }
-
-        MenuItem second = menuBar.getItems().get(1);
-
-        for (int i = 0; i < 5; i++) {
-            second.addItem(new String("Second submenu item" + i), null,
-                    new Command() {
-
-                        public void menuSelected(MenuItem selected) {
-                            main.showNotification("Action "
-                                    + selected.getText());
-                        }
-                    });
-        }
-
-        MenuItem third = menuBar.getItems().get(2);
-        third.setIcon(new ThemeResource("icons/16/document.png"));
-
-        for (int i = 2; i <= 3; i++) {
-            (menuBar.getItems().get(i)).setCommand(new Command() {
-
-                public void menuSelected(MenuItem selectedItem) {
-                    main.showNotification("Action " + selectedItem.getText());
-                }
-            });
-        }
-
-        final MenuItem fourth = menuBar.getItems().get(3);
-        fourth.setText("Add new item");
-
-        fourth.setCommand(new Command() {
-            public void menuSelected(MenuItem selected) {
-                menuBar.addItem("Newborn", null, null);
-            }
-        });
-
-        final MenuItem fifth = menuBar.getItems().get(4);
-        for (int i = 0; i < 5; i++) {
-            fifth.addItem("Another subitem " + i, null);
-        }
-
-        final MenuItem last = menuBar.getItems().get(menuBar.getSize() - 1);
-        last.setText("Remove me!");
-
-        // A command for removing the selected menuitem
-        Command removeCommand = new Command() {
-
-            public void menuSelected(MenuItem selected) {
-                MenuItem parent = selected.getParent();
-                if (parent != null) {
-                    parent.removeChild(selected);
-                } else {
-                    menuBar.removeItem(selected);
-                }
-            }
-        };
-
-        last.setCommand(removeCommand);
-
-        main.addComponent(menuBar);
-
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket161.java b/tests/src/com/vaadin/tests/tickets/Ticket161.java
deleted file mode 100644
index b2998c687d..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket161.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Container;
-import com.vaadin.tests.TestForTablesInitialColumnWidthLogicRendering;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-/**
- */
-public class Ticket161 extends Application {
-
-    private Table t;
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window("Test app to #1368");
-        setMainWindow(mainWin);
-
-        t = TestForTablesInitialColumnWidthLogicRendering.getTestTable(3, 100);
-        t.setCurrentPageFirstItemIndex(50);
-
-        mainWin.addComponent(t);
-
-        Button b = new Button("Truncate to 20 rows");
-        b.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-
-                Container containerDataSource = t.getContainerDataSource();
-                Object[] itemIds = containerDataSource.getItemIds().toArray();
-                @SuppressWarnings("unused")
-                int c = 0;
-                for (int i = 0; i < itemIds.length; i++) {
-                    if (i > 19) {
-                        containerDataSource.removeItem(itemIds[i]);
-                    }
-                }
-            }
-        });
-
-        mainWin.addComponent(b);
-
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1632.java b/tests/src/com/vaadin/tests/tickets/Ticket1632.java
deleted file mode 100644
index e156752450..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1632.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Item;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-/**
- */
-public class Ticket1632 extends Application {
-
-    private Table t;
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window("Test app");
-        setMainWindow(mainWin);
-
-        t = new Table();
-
-        t.addContainerProperty("col1", String.class, "");
-        t.addContainerProperty("col2", String.class, "");
-        t.addContainerProperty("col3", String.class, "");
-
-        t.addItem(new Object[] { "jep", "foo", "bar" }, "1");
-        t.addItem(new Object[] { "jep", "foo", "bar" }, "2");
-        t.addItem(new Object[] { "jep", "foo", "bar" }, "3");
-
-        t.setVisibleColumns(new Object[] { "col1", "col2" });
-
-        t.addItem(new Object[] { "foo", "bar" }, "4");
-
-        // workaround to add item with all values
-        Item i = t.addItem("5");
-        i.getItemProperty("col1").setValue("jep");
-        i.getItemProperty("col2").setValue("foo");
-        i.getItemProperty("col3").setValue("bar");
-
-        mainWin.addComponent(t);
-
-        Button b = new Button("Toggle col3");
-        b.addListener(new Button.ClickListener() {
-            boolean visible = false;
-
-            public void buttonClick(ClickEvent event) {
-                visible = !visible;
-                if (visible) {
-                    t.setVisibleColumns(new Object[] { "col1", "col2", "col3" });
-
-                } else {
-                    t.setVisibleColumns(new Object[] { "col1", "col2" });
-
-                }
-
-            }
-        });
-
-        mainWin.addComponent(b);
-
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1659.java b/tests/src/com/vaadin/tests/tickets/Ticket1659.java
deleted file mode 100644
index 8bba5a103e..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1659.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Window;
-
-public class Ticket1659 extends Application {
-
-    @Override
-    public void init() {
-        final Window mainWin = new Window();
-        setMainWindow(mainWin);
-        mainWin.addComponent(new Button(
-                "Change URI using Application.getURL()",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        mainWin.open(new ExternalResource(getURL() + "#"
-                                + System.currentTimeMillis()));
-                    }
-                }));
-        mainWin.addComponent(new Button("Change URI uring Window.getURL()",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        mainWin.open(new ExternalResource(mainWin.getURL()
-                                + "#" + System.currentTimeMillis()));
-                    }
-                }));
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1663.java b/tests/src/com/vaadin/tests/tickets/Ticket1663.java
deleted file mode 100644
index e7b98a4c99..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1663.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.terminal.SystemError;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket1663 extends com.vaadin.Application {
-
-    @Override
-    public void init() {
-
-        Window main = new Window("#1663");
-        setMainWindow(main);
-
-        TextField tf = new TextField("First name");
-        tf.setDescription("The first name is used for the administration user interfaces only.");
-        tf.setComponentError(new SystemError(
-                "You must enter only one first name."));
-
-        main.addComponent(tf);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1673.java b/tests/src/com/vaadin/tests/tickets/Ticket1673.java
deleted file mode 100644
index 845e49daed..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1673.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Window;
-
-public class Ticket1673 extends com.vaadin.Application {
-
-    @Override
-    public void init() {
-
-        final Window main = new Window("#1673");
-        setMainWindow(main);
-
-        main.addComponent(new Button("close", this, "close"));
-
-    }
-
-    public static Application.SystemMessages getSystemMessages() {
-        Application.CustomizedSystemMessages msgs = new Application.CustomizedSystemMessages();
-
-        msgs.setSessionExpiredURL("http://www.vaadin.com/");
-        msgs.setSessionExpiredCaption("Foo");
-        msgs.setSessionExpiredMessage("Bar");
-
-        return msgs;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1710.java b/tests/src/com/vaadin/tests/tickets/Ticket1710.java
deleted file mode 100644
index 404301dfa5..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1710.java
+++ /dev/null
@@ -1,411 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.Iterator;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.MethodProperty;
-import com.vaadin.terminal.SystemError;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Layout.AlignmentHandler;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1710 extends com.vaadin.Application {
-
-    @Override
-    public void init() {
-
-        setTheme("tests-tickets");
-
-        VerticalLayout lo = new VerticalLayout();
-        setMainWindow(new Window("#1710", lo));
-        lo.setMargin(true);
-        lo.setSpacing(true);
-        lo.setWidth("100%");
-
-        // Hiding controls
-        HorizontalLayout hidingControls = new HorizontalLayout();
-        lo.addComponent(hidingControls);
-
-        // OrderedLayout
-        final VerticalLayout orderedLayout = new VerticalLayout();
-        LayoutTestingPanel oltp = new LayoutTestingPanel("OrderedLayout",
-                orderedLayout);
-        CheckBox cb = new CheckBox("OrderedLayout",
-                new MethodProperty<Boolean>(oltp, "visible"));
-        cb.setImmediate(true);
-        hidingControls.addComponent(cb);
-        lo.addComponent(oltp);
-        orderedLayout.setSpacing(false);
-        addFields(orderedLayout);
-
-        // GridLayout
-        GridLayout grid = new GridLayout(1, 1);
-        Panel g1tp = new LayoutTestingPanel("Gridlayout with 1 column", grid);
-        cb = new CheckBox("GridLayout (1col)", new MethodProperty<Boolean>(
-                g1tp, "visible"));
-        cb.setImmediate(true);
-        hidingControls.addComponent(cb);
-        g1tp.setVisible(false);
-        lo.addComponent(g1tp);
-        grid.setSpacing(true);
-        addFields(grid);
-        GridLayout grid2 = new GridLayout(2, 1);
-        Panel g2tp = new LayoutTestingPanel("Gridlayout with 2 columns", grid2);
-        cb = new CheckBox("GridLayout (2cols)", new MethodProperty<Boolean>(
-                g2tp, "visible"));
-        cb.setImmediate(true);
-        hidingControls.addComponent(cb);
-        g2tp.setVisible(false);
-        lo.addComponent(g2tp);
-        grid2.setSpacing(true);
-        addFields(grid2);
-
-        // ExpandLayout
-        VerticalLayout el = new VerticalLayout();
-        Panel elp = new LayoutTestingPanel(
-                "ExpandLayout width first component expanded", el);
-        cb = new CheckBox("ExpandLayout (vertical)",
-                new MethodProperty<Boolean>(elp, "visible"));
-        cb.setImmediate(true);
-        hidingControls.addComponent(cb);
-        elp.setVisible(false);
-        el.setHeight("700px");
-        addFields(el);
-        Component firstComponent = el.getComponentIterator().next();
-        firstComponent.setSizeFull();
-        el.setExpandRatio(firstComponent, 1);
-        lo.addComponent(elp);
-        HorizontalLayout elh = new HorizontalLayout();
-        Panel elhp = new LayoutTestingPanel(
-                "ExpandLayout width first component expanded; horizontal", elh);
-        cb = new CheckBox("ExpandLayout (horizontal)",
-                new MethodProperty<Boolean>(elhp, "visible"));
-        cb.setImmediate(true);
-        hidingControls.addComponent(cb);
-        elhp.setVisible(false);
-        elhp.setScrollable(true);
-        elh.setWidth("2000px");
-        elh.setHeight("100px");
-        addFields(elh);
-        Component firstComponentElh = elh.getComponentIterator().next();
-        firstComponentElh.setSizeFull();
-        elh.setExpandRatio(firstComponentElh, 1);
-        lo.addComponent(elhp);
-
-        // CustomLayout
-        VerticalLayout cl = new VerticalLayout();
-        Panel clp = new LayoutTestingPanel("CustomLayout", cl);
-        cb = new CheckBox("CustomLayout", new MethodProperty<Boolean>(clp,
-                "visible"));
-        cb.setImmediate(true);
-        hidingControls.addComponent(cb);
-        clp.setVisible(false);
-        lo.addComponent(clp);
-        cl.addComponent(new Label("<<< Add customlayout testcase here >>>"));
-
-        // Form
-        Panel formPanel = new Panel("Form");
-        cb = new CheckBox("Form", new MethodProperty<Boolean>(formPanel,
-                "visible"));
-        cb.setImmediate(true);
-        hidingControls.addComponent(cb);
-        formPanel.setVisible(false);
-        formPanel.addComponent(getFormPanelExample());
-        lo.addComponent(formPanel);
-
-        for (Iterator<Component> i = hidingControls.getComponentIterator(); i
-                .hasNext();) {
-            ((AbstractComponent) i.next()).setImmediate(true);
-        }
-
-    }
-
-    private Form getFormPanelExample() {
-        Form f = new Form();
-        f.setCaption("Test form");
-        Button fb1 = new Button("Test button");
-        fb1.setComponentError(new SystemError("Test error"));
-        f.addField("fb1", fb1);
-        CheckBox fb2 = new CheckBox("Test button", true);
-        fb2.setComponentError(new SystemError("Test error"));
-        f.addField("fb2", fb2);
-        TextField ft1 = new TextField("With caption");
-        ft1.setComponentError(new SystemError("Error"));
-        f.addField("ft1", ft1);
-        TextField ft2 = new TextField();
-        ft2.setComponentError(new SystemError("Error"));
-        ft2.setValue("Without caption");
-        f.addField("ft2", ft2);
-        TextField ft3 = new TextField("With caption and required");
-        ft3.setComponentError(new SystemError("Error"));
-        ft3.setRequired(true);
-        f.addField("ft3", ft3);
-        return f;
-    }
-
-    private void addFields(ComponentContainer lo) {
-        Button button = new Button("Test button");
-        button.setComponentError(new SystemError("Test error"));
-        lo.addComponent(button);
-
-        CheckBox b2 = new CheckBox("Test button");
-        b2.setComponentError(new SystemError("Test error"));
-        lo.addComponent(b2);
-
-        TextField t1 = new TextField("With caption");
-        t1.setComponentError(new SystemError("Error"));
-        lo.addComponent(t1);
-
-        TextField t2 = new TextField("With caption and required");
-        t2.setComponentError(new SystemError("Error"));
-        t2.setRequired(true);
-        lo.addComponent(t2);
-
-        TextField t3 = new TextField();
-        t3.setValue("Without caption");
-        t3.setComponentError(new SystemError("Error"));
-        lo.addComponent(t3);
-
-        lo.addComponent(new TextField("Textfield with no error in it"));
-
-        TextField tt1 = new TextField("100% wide Textfield with no error in it");
-        tt1.setWidth("100%");
-        lo.addComponent(tt1);
-
-        TextField tt2 = new TextField();
-        tt2.setWidth("100%");
-        tt2.setValue("100% wide Textfield with no error in it and no caption");
-        lo.addComponent(tt2);
-
-        TextField t4 = new TextField();
-        t4.setValue("Without caption, With required");
-        t4.setComponentError(new SystemError("Error"));
-        t4.setRequired(true);
-        lo.addComponent(t4);
-
-        TextField t5 = new TextField();
-        t5.setValue("Without caption,  WIDE");
-        t5.setComponentError(new SystemError("Error"));
-        t5.setWidth("100%");
-        lo.addComponent(t5);
-
-        TextField t6 = new TextField();
-        t6.setValue("Without caption, With required, WIDE");
-        t6.setComponentError(new SystemError("Error"));
-        t6.setRequired(true);
-        t6.setWidth("100%");
-        lo.addComponent(t6);
-
-        TextField t7 = new TextField();
-        t7.setValue("With icon and required and icon");
-        t7.setComponentError(new SystemError("Error"));
-        t7.setRequired(true);
-        t7.setIcon(new ThemeResource("../runo/icons/16/ok.png"));
-        lo.addComponent(t7);
-
-        DateField d1 = new DateField(
-                "Datefield with caption and icon, next one without caption");
-        d1.setComponentError(new SystemError("Error"));
-        d1.setRequired(true);
-        d1.setIcon(new ThemeResource("../runo/icons/16/ok.png"));
-        lo.addComponent(d1);
-
-        DateField d2 = new DateField();
-        d2.setComponentError(new SystemError("Error"));
-        d2.setRequired(true);
-        lo.addComponent(d2);
-    }
-
-    public class LayoutTestingPanel extends Panel {
-
-        Layout testedLayout;
-
-        HorizontalLayout controls = new HorizontalLayout();
-        CheckBox marginLeft = new CheckBox("m-left", false);
-        CheckBox marginRight = new CheckBox("m-right", false);
-        CheckBox marginTop = new CheckBox("m-top", false);
-        CheckBox marginBottom = new CheckBox("m-bottom", false);
-        CheckBox spacing = new CheckBox("spacing", false);
-        VerticalLayout testPanelLayout = new VerticalLayout();
-
-        LayoutTestingPanel(String caption, Layout layout) {
-            super(caption);
-            VerticalLayout internalLayout = new VerticalLayout();
-            internalLayout.setWidth("100%");
-            setContent(internalLayout);
-            testedLayout = layout;
-            testPanelLayout.setWidth("100%");
-            Panel controlWrapper = new Panel();
-            controlWrapper.addComponent(controls);
-            controlWrapper.setWidth("100%");
-            controlWrapper.setScrollable(true);
-            controlWrapper.setStyleName("controls");
-            internalLayout.addComponent(controlWrapper);
-            Panel testPanel = new Panel(testPanelLayout);
-            testPanel.setStyleName("testarea");
-            testPanelLayout.addComponent(testedLayout);
-            internalLayout.addComponent(testPanel);
-            internalLayout.setMargin(true);
-            internalLayout.setSpacing(true);
-            controls.setSpacing(true);
-            controls.setMargin(false);
-            controls.addComponent(new Label("width"));
-            controls.addComponent(new TextField(new MethodProperty<Float>(
-                    testedLayout, "width")));
-            controls.addComponent(new CheckBox("%",
-                    new MethodProperty<Boolean>(this, "widthPercents")));
-            controls.addComponent(new Label("height"));
-            controls.addComponent(new TextField(new MethodProperty<Float>(
-                    testedLayout, "height")));
-            controls.addComponent(new CheckBox("%",
-                    new MethodProperty<Boolean>(this, "heightPercents")));
-            controls.addComponent(marginLeft);
-            controls.addComponent(marginRight);
-            controls.addComponent(marginTop);
-            controls.addComponent(marginBottom);
-            if (testedLayout instanceof Layout.SpacingHandler) {
-                controls.addComponent(spacing);
-            }
-
-            Property.ValueChangeListener marginSpacingListener = new Property.ValueChangeListener() {
-                public void valueChange(ValueChangeEvent event) {
-                    updateMarginsAndSpacing();
-                }
-            };
-
-            marginBottom.addListener(marginSpacingListener);
-            marginTop.addListener(marginSpacingListener);
-            marginLeft.addListener(marginSpacingListener);
-            marginRight.addListener(marginSpacingListener);
-            spacing.addListener(marginSpacingListener);
-            updateMarginsAndSpacing();
-
-            addAlignmentControls();
-
-            testedLayout.setStyleName("tested-layout");
-            setStyleName("layout-testing-panel");
-
-            for (Iterator<Component> i = controls.getComponentIterator(); i
-                    .hasNext();) {
-                ((AbstractComponent) i.next()).setImmediate(true);
-            }
-        }
-
-        @SuppressWarnings("deprecation")
-        private void addAlignmentControls() {
-            if (!(testedLayout instanceof Layout.AlignmentHandler)) {
-                return;
-            }
-            @SuppressWarnings("unused")
-            final Layout.AlignmentHandler ah = (AlignmentHandler) testedLayout;
-
-            final NativeSelect vAlign = new NativeSelect();
-            final NativeSelect hAlign = new NativeSelect();
-            controls.addComponent(new Label("component alignment"));
-            controls.addComponent(hAlign);
-            controls.addComponent(vAlign);
-            hAlign.setNullSelectionAllowed(false);
-            vAlign.setNullSelectionAllowed(false);
-
-            vAlign.addItem(new Integer(Layout.AlignmentHandler.ALIGNMENT_TOP));
-            vAlign.setItemCaption(new Integer(
-                    Layout.AlignmentHandler.ALIGNMENT_TOP), "top");
-            vAlign.addItem(new Integer(
-                    Layout.AlignmentHandler.ALIGNMENT_VERTICAL_CENTER));
-            vAlign.setItemCaption(new Integer(
-                    Layout.AlignmentHandler.ALIGNMENT_VERTICAL_CENTER),
-                    "center");
-            vAlign.addItem(new Integer(Layout.AlignmentHandler.ALIGNMENT_BOTTOM));
-            vAlign.setItemCaption(new Integer(
-                    Layout.AlignmentHandler.ALIGNMENT_BOTTOM), "bottom");
-
-            hAlign.addItem(new Integer(Layout.AlignmentHandler.ALIGNMENT_LEFT));
-            hAlign.setItemCaption(new Integer(
-                    Layout.AlignmentHandler.ALIGNMENT_LEFT), "left");
-            hAlign.addItem(new Integer(
-                    Layout.AlignmentHandler.ALIGNMENT_HORIZONTAL_CENTER));
-            hAlign.setItemCaption(new Integer(
-                    Layout.AlignmentHandler.ALIGNMENT_HORIZONTAL_CENTER),
-                    "center");
-            hAlign.addItem(new Integer(Layout.AlignmentHandler.ALIGNMENT_RIGHT));
-            hAlign.setItemCaption(new Integer(
-                    Layout.AlignmentHandler.ALIGNMENT_RIGHT), "right");
-
-            Property.ValueChangeListener alignmentChangeListener = new Property.ValueChangeListener() {
-                public void valueChange(ValueChangeEvent event) {
-                    updateAlignments(((Integer) hAlign.getValue()).intValue(),
-                            ((Integer) vAlign.getValue()).intValue());
-                }
-
-            };
-
-            hAlign.setValue(new Integer(Layout.AlignmentHandler.ALIGNMENT_LEFT));
-            vAlign.addListener(alignmentChangeListener);
-            hAlign.addListener(alignmentChangeListener);
-            vAlign.setValue(new Integer(Layout.AlignmentHandler.ALIGNMENT_TOP));
-
-            controls.addComponent(new Label("layout alignment"));
-            final NativeSelect lAlign = new NativeSelect();
-            controls.addComponent(lAlign);
-            lAlign.setNullSelectionAllowed(false);
-            lAlign.addItem(new Integer(Layout.AlignmentHandler.ALIGNMENT_LEFT));
-            lAlign.setItemCaption(new Integer(
-                    Layout.AlignmentHandler.ALIGNMENT_LEFT), "left");
-            lAlign.addItem(new Integer(
-                    Layout.AlignmentHandler.ALIGNMENT_HORIZONTAL_CENTER));
-            lAlign.setItemCaption(new Integer(
-                    Layout.AlignmentHandler.ALIGNMENT_HORIZONTAL_CENTER),
-                    "center");
-            lAlign.addItem(new Integer(Layout.AlignmentHandler.ALIGNMENT_RIGHT));
-            lAlign.setItemCaption(new Integer(
-                    Layout.AlignmentHandler.ALIGNMENT_RIGHT), "right");
-
-            lAlign.addListener(new Property.ValueChangeListener() {
-                public void valueChange(ValueChangeEvent event) {
-                    testPanelLayout.setComponentAlignment(testedLayout,
-                            ((Integer) lAlign.getValue()).intValue(),
-                            VerticalLayout.ALIGNMENT_TOP);
-                }
-            });
-        }
-
-        @SuppressWarnings("deprecation")
-        private void updateAlignments(int h, int v) {
-            for (Iterator<Component> i = testedLayout.getComponentIterator(); i
-                    .hasNext();) {
-                ((Layout.AlignmentHandler) testedLayout).setComponentAlignment(
-                        i.next(), h, v);
-            }
-        }
-
-        private void updateMarginsAndSpacing() {
-            testedLayout.setMargin(
-                    ((Boolean) marginTop.getValue()).booleanValue(),
-                    ((Boolean) marginRight.getValue()).booleanValue(),
-                    ((Boolean) marginBottom.getValue()).booleanValue(),
-                    ((Boolean) marginLeft.getValue()).booleanValue());
-            if (testedLayout instanceof Layout.SpacingHandler) {
-                ((Layout.SpacingHandler) testedLayout)
-                        .setSpacing(((Boolean) spacing.getValue())
-                                .booleanValue());
-            }
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1737.java b/tests/src/com/vaadin/tests/tickets/Ticket1737.java
deleted file mode 100644
index f45fe88889..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1737.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.ClassResource;
-import com.vaadin.terminal.DownloadStream;
-import com.vaadin.terminal.Resource;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1737 extends Application {
-
-    Resource slowRes = new ClassResource(Ticket1737.class, "m-bullet-blue.gif",
-            this) {
-        @Override
-        public DownloadStream getStream() {
-            try {
-                Thread.sleep(4000);
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-            }
-            return super.getStream();
-        }
-    };
-
-    @Override
-    public void init() {
-
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        VerticalLayout el = new VerticalLayout();
-        main.setContent(el);
-
-        Panel p = new Panel("Test panel");
-        p.setSizeFull();
-
-        p.addComponent(new Label(
-                "Second component is embedded with a slow resource "
-                        + "and thus should break layout if Embedded cannot"
-                        + " request re-layout after load."));
-
-        Embedded em = new Embedded("TestEmbedded", slowRes);
-
-        el.addComponent(p);
-        el.addComponent(em);
-
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1767.java b/tests/src/com/vaadin/tests/tickets/Ticket1767.java
deleted file mode 100644
index a65a601175..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1767.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Window;
-
-public class Ticket1767 extends com.vaadin.Application {
-
-    @Override
-    public void init() {
-
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        ComboBox cb = new ComboBox(" '<' item is not seen in populist?");
-        cb.addItem("Te<strong>st</strong> < jep >");
-        cb.addItem("<");
-        cb.addItem(">");
-
-        cb.addItem("< dsf");
-        cb.addItem("> sdf");
-
-        cb.addItem("dsfs <");
-        cb.addItem("sdfsd >");
-
-        main.addComponent(cb);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1772.java b/tests/src/com/vaadin/tests/tickets/Ticket1772.java
deleted file mode 100644
index 68e00e7f94..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1772.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket1772 extends com.vaadin.Application {
-
-    @Override
-    public void init() {
-
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        Button b = new Button("Add content");
-        main.addComponent(b);
-
-        final GridLayout gridLayout = new GridLayout(2, 2);
-        main.addComponent(gridLayout);
-
-        b.addListener(new Button.ClickListener() {
-            int counter = 0;
-
-            public void buttonClick(ClickEvent event) {
-
-                gridLayout
-                        .addComponent(new TextField("Content " + (++counter)));
-
-            }
-        });
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1775.java b/tests/src/com/vaadin/tests/tickets/Ticket1775.java
deleted file mode 100644
index f37737e929..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1775.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CustomLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket1775 extends com.vaadin.Application {
-
-    @Override
-    public void init() {
-
-        final Window main = new Window("#1775");
-        setMainWindow(main);
-        main.setTheme("tests-tickets");
-        String layoutName = "Ticket1775";
-        final CustomLayout layout = new CustomLayout(layoutName);
-
-        main.addComponent(layout);
-
-        Button button2 = new Button("Populate content");
-        main.addComponent(button2);
-
-        final Button button = new Button("Change content");
-        main.addComponent(button);
-
-        button2.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                Label mainComponent = new Label("Main");
-                Label header = new Label("Header");
-                final Label anotherComponent = new Label("another");
-                layout.addComponent(mainComponent, "body");
-                layout.addComponent(header, "loginUser");
-                button.addListener(new Button.ClickListener() {
-                    public void buttonClick(Button.ClickEvent event) {
-                        layout.addComponent(anotherComponent, "body");
-                        layout.removeComponent("loginUser");
-                    }
-                });
-
-            }
-        });
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1804.java b/tests/src/com/vaadin/tests/tickets/Ticket1804.java
deleted file mode 100644
index 265f3041e9..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1804.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-
-import com.vaadin.data.Validator;
-import com.vaadin.data.util.MethodProperty;
-import com.vaadin.terminal.SystemError;
-import com.vaadin.ui.AbstractField;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.Window;
-
-public class Ticket1804 extends com.vaadin.Application {
-
-    LinkedList<Select> listOfAllFields = new LinkedList<Select>();
-
-    @Override
-    public void init() {
-
-        final Window main = new Window("#1804");
-        setMainWindow(main);
-
-        com.vaadin.ui.Select s;
-
-        s = new Select("Select with null selection allowed; required=true");
-        s.setNullSelectionAllowed(true);
-        s.setRequired(true);
-        listOfAllFields.add(s);
-
-        s = new Select("Select with null selection NOT allowed; required=true");
-        s.setNullSelectionAllowed(false);
-        s.setRequired(true);
-        listOfAllFields.add(s);
-
-        s = new Select("Testcase from the ticket #1804");
-        s.setNullSelectionAllowed(false);
-        s.setPropertyDataSource(new MethodProperty<String>(new TestPojo(), "id"));
-        s.addValidator(new EmptyStringValidator(
-                "Selection required for test-field"));
-        s.setRequired(true);
-        listOfAllFields.add(s);
-
-        s = new Select("Testcase from the ticket #1804, but without validator");
-        s.setNullSelectionAllowed(false);
-        s.setPropertyDataSource(new MethodProperty<String>(new TestPojo(), "id"));
-        s.setRequired(true);
-        listOfAllFields.add(s);
-
-        s = new Select(
-                "Testcase from the ticket #1804, but with required=false");
-        s.setNullSelectionAllowed(false);
-        s.setPropertyDataSource(new MethodProperty<String>(new TestPojo(), "id"));
-        s.addValidator(new EmptyStringValidator(
-                "Selection required for test-field"));
-        listOfAllFields.add(s);
-
-        s = new Select(
-                "Testcase from the ticket #1804, but without validator and with required=false");
-        s.setNullSelectionAllowed(false);
-        s.setPropertyDataSource(new MethodProperty<String>(new TestPojo(), "id"));
-        listOfAllFields.add(s);
-
-        s = new Select(
-                "Required=true, custom error message, null selection not allowed");
-        s.setRequired(true);
-        s.setNullSelectionAllowed(false);
-        s.setPropertyDataSource(new MethodProperty<String>(new TestPojo(), "id"));
-        s.setValue(null);
-        s.setComponentError(new SystemError("Test error message"));
-        listOfAllFields.add(s);
-
-        for (Iterator<Select> i = listOfAllFields.iterator(); i.hasNext();) {
-            s = i.next();
-            main.addComponent(s);
-            s.addItem("foo");
-            s.addItem("");
-            s.addItem("bar");
-            if (s.isNullSelectionAllowed()) {
-                s.addItem("<null>");
-                s.setNullSelectionItemId("<null>");
-            }
-            s.setImmediate(true);
-        }
-
-        Button checkValidity = new Button("Check validity of the fields");
-        main.addComponent(checkValidity);
-        checkValidity.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                StringBuffer msg = new StringBuffer();
-                for (Iterator<Select> i = listOfAllFields.iterator(); i
-                        .hasNext();) {
-                    AbstractField af = i.next();
-                    msg.append("<h1>" + af.getCaption() + "</h1>\n");
-                    msg.append("Value=" + af.getValue() + "<br/>\n");
-                    if (af.isValid()) {
-                        msg.append("VALID\n<hr/>");
-                    } else {
-                        msg.append("INVALID<br/><i>" + af.getErrorMessage()
-                                + "</i><hr/>");
-                    }
-                }
-                Window w = new Window("Status of the fields");
-                w.setModal(true);
-                w.setScrollable(true);
-                w.setHeight("80%");
-                w.addComponent(new Label(msg.toString(), Label.CONTENT_XHTML));
-                main.addWindow(w);
-            }
-        });
-    }
-
-    public class TestPojo {
-        String id = "";
-
-        public String getId() {
-            return id;
-        }
-
-        public void setId(String id) {
-            this.id = id;
-        }
-
-    }
-
-    /** Throws an exception when the string is empty or null. */
-    class EmptyStringValidator implements Validator {
-
-        String msg;
-
-        EmptyStringValidator(String msg) {
-            this.msg = msg;
-        }
-
-        public boolean isValid(Object value) {
-            return !(value == null || value.toString().length() == 0);
-        }
-
-        public void validate(Object value) throws InvalidValueException {
-            if (!isValid(value)) {
-                throw new InvalidValueException(msg);
-            }
-        }
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1805.java b/tests/src/com/vaadin/tests/tickets/Ticket1805.java
deleted file mode 100644
index ad7a61d81f..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1805.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket1805 extends com.vaadin.Application {
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-        ((Layout) main.getContent()).setMargin(false);
-
-        Label description = new Label(
-                "GridLayout with 100% (no height), is wanted to "
-                        + "share all available width with columns "
-                        + "relatively to their natural width. And it "
-                        + "should still work with margins and spacings");
-        main.addComponent(description);
-
-        final GridLayout grid = new GridLayout(4, 1);
-
-        final TextField size = new TextField("Grid width in css unit");
-        size.addListener(new ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                String width = size.getValue().toString();
-                if (width == null || width.equals("")) {
-                    grid.setSizeUndefined();
-                } else {
-                    grid.setWidth(width);
-                }
-            }
-        });
-        main.addComponent(size);
-        main.addComponent(new Button("set size"));
-
-        grid.setMargin(true);
-        grid.setSpacing(true);
-
-        grid.addComponent(new Label("WIDE"));
-        grid.addComponent(new Label("_I_"));
-        grid.addComponent(new Label("VEEEEEEEEEEERY_WIDE"));
-        Label label = new Label("|");
-        grid.addComponent(label);
-        grid.setComponentAlignment(label, Alignment.TOP_RIGHT);
-        main.addComponent(grid);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1806.java b/tests/src/com/vaadin/tests/tickets/Ticket1806.java
deleted file mode 100644
index f3406a9155..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1806.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket1806 extends com.vaadin.Application {
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        final ObjectProperty<String> prop = new ObjectProperty<String>("");
-        final TextField tf1 = new TextField(
-                "Buffered TextField bound to ObjectProperty");
-        tf1.setWriteThrough(false);
-        tf1.setReadThrough(false);
-        tf1.setPropertyDataSource(prop);
-        main.addComponent(tf1);
-        main.addComponent(new Button(
-                "This button does nothing (but flushes queued variable changes)"));
-        main.addComponent(new Button("Commit the field to property",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        tf1.commit();
-                    }
-                }));
-        main.addComponent(new Button("Show property value",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        main.showNotification("'" + prop.getValue() + "'");
-                    }
-                }));
-        main.addComponent(new Button("Show field value",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        main.showNotification("'" + tf1.getValue() + "'");
-                    }
-                }));
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1811.java b/tests/src/com/vaadin/tests/tickets/Ticket1811.java
deleted file mode 100644
index 8f373de6bf..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1811.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-
-import com.vaadin.data.Validator;
-import com.vaadin.data.validator.StringLengthValidator;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket1811 extends com.vaadin.Application {
-
-    LinkedList<TextField> listOfAllFields = new LinkedList<TextField>();
-
-    @Override
-    public void init() {
-
-        final Window main = new Window("#1811");
-        setMainWindow(main);
-
-        Validator strLenValidator = new StringLengthValidator(
-                "String must be at least 3 chars long and non-null", 3, -1,
-                false);
-
-        TextField tf1 = new TextField(
-                "Text field with default settings (required=false)");
-        listOfAllFields.add(tf1);
-
-        TextField tf2 = new TextField("Text field with required=true");
-        tf2.setRequired(true);
-        listOfAllFields.add(tf2);
-
-        TextField tf3 = new TextField(
-                "Text field with required=true and strlen >= 3");
-        tf3.setRequired(true);
-        tf3.addValidator(strLenValidator);
-        listOfAllFields.add(tf3);
-
-        TextField tf4 = new TextField(
-                "Text field with required=false (default) and strlen >= 3");
-        tf4.addValidator(strLenValidator);
-        listOfAllFields.add(tf4);
-
-        for (Iterator<TextField> i = listOfAllFields.iterator(); i.hasNext();) {
-            TextField tf = i.next();
-            main.addComponent(tf);
-            tf.setImmediate(true);
-        }
-
-        Button checkValidity = new Button("Check validity of the fields");
-        main.addComponent(checkValidity);
-        checkValidity.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                StringBuffer msg = new StringBuffer();
-                for (Iterator<TextField> i = listOfAllFields.iterator(); i
-                        .hasNext();) {
-                    TextField tf = i.next();
-                    msg.append("<h1>" + tf.getCaption() + "</h1>\n");
-                    if (tf.isValid()) {
-                        msg.append("VALID\n<hr/>");
-                    } else {
-                        msg.append("INVALID<br/><i>" + tf.getErrorMessage()
-                                + "</i><hr/>");
-                    }
-                }
-                Window w = new Window("Status of the fields");
-                w.setModal(true);
-                w.addComponent(new Label(msg.toString(), Label.CONTENT_XHTML));
-                main.addWindow(w);
-            }
-        });
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1819.java b/tests/src/com/vaadin/tests/tickets/Ticket1819.java
deleted file mode 100644
index 6f06055fc4..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1819.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-
-import com.vaadin.ui.AbstractField;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.Window;
-
-public class Ticket1819 extends com.vaadin.Application {
-
-    LinkedList<Select> listOfAllFields = new LinkedList<Select>();
-
-    @Override
-    public void init() {
-
-        final Window main = new Window("#1819");
-        setMainWindow(main);
-
-        com.vaadin.ui.Select s;
-
-        s = new Select("Select with null selection allowed");
-        s.setNullSelectionAllowed(true);
-        listOfAllFields.add(s);
-
-        s = new Select("Select with null selection NOT allowed");
-        s.setNullSelectionAllowed(false);
-        listOfAllFields.add(s);
-
-        for (Iterator<Select> i = listOfAllFields.iterator(); i.hasNext();) {
-            s = i.next();
-            main.addComponent(s);
-            s.addItem("-null-");
-            s.addItem("");
-            s.addItem("foo");
-            s.addItem("bar");
-            s.setNullSelectionItemId("-null-");
-            s.setImmediate(true);
-        }
-
-        Button checkValidity = new Button("Check validity of the fields");
-        main.addComponent(checkValidity);
-        checkValidity.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                StringBuffer msg = new StringBuffer();
-                for (Iterator<Select> i = listOfAllFields.iterator(); i
-                        .hasNext();) {
-                    AbstractField af = i.next();
-                    msg.append("<h1>" + af.getCaption() + "</h1>\n");
-                    msg.append("Value=" + af.getValue() + "<br/>\n");
-                }
-                Window w = new Window("Status of the fields");
-                w.setModal(true);
-                w.addComponent(new Label(msg.toString(), Label.CONTENT_XHTML));
-                main.addWindow(w);
-            }
-        });
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1834PanelScrolling.java b/tests/src/com/vaadin/tests/tickets/Ticket1834PanelScrolling.java
deleted file mode 100644
index 7c9104e750..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1834PanelScrolling.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Window;
-
-public class Ticket1834PanelScrolling extends com.vaadin.Application {
-
-    private static final int ROWS = 50;
-
-    private Label state = new Label("State");
-
-    private Panel p;
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        HorizontalLayout currentState = new HorizontalLayout();
-
-        currentState.addComponent(state);
-        Button b = new Button("update");
-        currentState.addComponent(b);
-        b.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                state.setValue("ScrollTop: " + p.getScrollTop()
-                        + " ScrollLeft: " + p.getScrollLeft());
-            }
-        });
-        main.addComponent(currentState);
-
-        b = new Button("ScrollBy 50px");
-        b.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                p.setScrollLeft(p.getScrollLeft() + 50);
-                p.setScrollTop(p.getScrollTop() + 50);
-                state.setValue("ScrollTop: " + p.getScrollTop()
-                        + " ScrollLeft: " + p.getScrollLeft());
-            }
-        });
-
-        main.addComponent(b);
-
-        b = new Button("Add row");
-        b.addListener(new ClickListener() {
-            int i = 0;
-
-            public void buttonClick(ClickEvent event) {
-                p.addComponent(new Label("new Row" + ++i));
-            }
-        });
-
-        main.addComponent(b);
-
-        b = new Button("Repaint Panel");
-        b.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                p.requestRepaint();
-            }
-        });
-
-        main.addComponent(b);
-
-        p = new Panel("TestPanel");
-        p.setScrollable(true);
-
-        for (int i = 0; i < ROWS; i++) {
-            p.addComponent(new Label(
-                    "Label"
-                            + i
-                            + "................................................................................................................."));
-        }
-
-        p.setHeight("300px");
-        p.setWidth("250px");
-
-        p.setScrollTop(100);
-        p.setScrollLeft(100);
-
-        main.addComponent(p);
-
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1857.java b/tests/src/com/vaadin/tests/tickets/Ticket1857.java
deleted file mode 100644
index f82467b519..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1857.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.event.Action;
-import com.vaadin.event.Action.Handler;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1857 extends Application implements Handler {
-
-    @Override
-    public void init() {
-
-        setTheme("tests-tickets");
-
-        VerticalLayout el = new VerticalLayout();
-        Window main = new Window("Testcase for #1857", el);
-        setMainWindow(main);
-        el.setMargin(true);
-        el.setSpacing(true);
-
-        final Table t = new Table();
-        el.addComponent(t);
-        el.setExpandRatio(t, 1);
-        t.setSizeFull();
-        addContentsToTable(t);
-        t.setStyleName("foo");
-
-        HorizontalLayout footer = new HorizontalLayout();
-        el.addComponent(footer);
-        footer.setSpacing(true);
-
-        final CheckBox actionHandlerEnabler = new CheckBox("Action handlers",
-                false);
-        footer.addComponent(actionHandlerEnabler);
-        actionHandlerEnabler.setImmediate(true);
-        actionHandlerEnabler.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                if (((Boolean) actionHandlerEnabler.getValue()).booleanValue()) {
-                    t.addActionHandler(Ticket1857.this);
-                } else {
-                    t.removeActionHandler(Ticket1857.this);
-                }
-            }
-        });
-
-        final CheckBox cellStylesEnabler = new CheckBox("Cell styles", false);
-        footer.addComponent(cellStylesEnabler);
-        cellStylesEnabler.setImmediate(true);
-        cellStylesEnabler.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                if (((Boolean) cellStylesEnabler.getValue()).booleanValue()) {
-                    t.setCellStyleGenerator(new Table.CellStyleGenerator() {
-                        public String getStyle(Object itemId, Object propertyId) {
-                            Object cell = t.getContainerProperty(itemId,
-                                    propertyId).getValue();
-                            if (!(cell instanceof Integer)) {
-                                return null;
-                            }
-                            int age = ((Integer) cell).intValue();
-                            return age > 65 ? "old" : (age < 18 ? "young"
-                                    : null);
-                        }
-                    });
-                } else {
-                    t.setCellStyleGenerator(null);
-                }
-            }
-        });
-        cellStylesEnabler.setValue(Boolean.TRUE);
-
-    }
-
-    private void addContentsToTable(Table t) {
-
-        t.addContainerProperty("First name", String.class, "");
-        t.addContainerProperty("Last name", String.class, "");
-        t.addContainerProperty("Age", Integer.class, "");
-
-        String firstNames[] = { "Quentin", "Marc", "Peter", "David", "Mary",
-                "Jani", "Jane", "Brita" };
-        String lastNames[] = { "Heiskanen", "Bjorn", "Torwalds", "Autere",
-                "Smith", "Lindström" };
-
-        for (int i = 0; i < 1000; i++) {
-            t.addItem(new Object[] {
-                    firstNames[((int) (Math.random() * firstNames.length))],
-                    lastNames[((int) (Math.random() * lastNames.length))],
-                    new Integer((int) (Math.random() * 100) + 10) },
-                    new Integer(i));
-        }
-    }
-
-    private final Action removeAction = new Action("Remove");
-
-    public Action[] getActions(Object target, Object sender) {
-        return new Action[] { removeAction };
-    }
-
-    public void handleAction(Action action, Object sender, Object target) {
-        getMainWindow().showNotification("Removing row number:" + target);
-        ((Table) sender).removeItem(target);
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1868.java b/tests/src/com/vaadin/tests/tickets/Ticket1868.java
deleted file mode 100644
index edf9c1207d..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1868.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Window;
-
-public class Ticket1868 extends com.vaadin.Application {
-
-    @Override
-    public void init() {
-
-        setMainWindow(new Window("#1868"));
-
-        Panel p = new Panel(
-                "This is a really long caption for the panel, too long in fact!");
-        p.setWidth("300px");
-        p.setHeight("300px");
-
-        getMainWindow().addComponent(p);
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1869.java b/tests/src/com/vaadin/tests/tickets/Ticket1869.java
deleted file mode 100644
index 953217f907..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1869.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1869 extends com.vaadin.Application {
-
-    @Override
-    public void init() {
-
-        GridLayout lo = new GridLayout(2, 1);
-        setMainWindow(new Window("#1869", lo));
-        lo.setMargin(true);
-        lo.setSpacing(true);
-
-        VerticalLayout el = new VerticalLayout();
-        Panel elp = new Panel(
-                "Vertical ExpandLayout /w first component expanded", el);
-        el.setHeight("1000px");
-        for (int i = 0; i < 3; i++) {
-            Button b = new Button("x");
-            el.addComponent(b);
-            if (i == 0) {
-                b.setSizeFull();
-                el.setExpandRatio(b, 1);
-            }
-        }
-        lo.addComponent(elp);
-        elp.setWidth("300px");
-        elp.setHeight("300px");
-        elp.setScrollable(true);
-
-        HorizontalLayout elh = new HorizontalLayout();
-        Panel elph = new Panel(
-                "Horizontal ExpandLayout /w first component expanded", elh);
-        elh.setWidth("1000px");
-        for (int i = 0; i < 3; i++) {
-            Button b = new Button("x");
-            elh.addComponent(b);
-            if (i == 0) {
-                b.setSizeFull();
-                elh.setExpandRatio(b, 1);
-            }
-        }
-        lo.addComponent(elph);
-        elph.setWidth("300px");
-        elph.setHeight("300px");
-        elph.setScrollable(true);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1878.java b/tests/src/com/vaadin/tests/tickets/Ticket1878.java
deleted file mode 100644
index 0bb631aab5..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1878.java
+++ /dev/null
@@ -1,384 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.Date;
-import java.util.Iterator;
-import java.util.Random;
-
-import com.vaadin.Application;
-import com.vaadin.data.util.BeanItem;
-import com.vaadin.data.validator.StringLengthValidator;
-import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.terminal.UserError;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.FormLayout;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Layout.AlignmentHandler;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1878 extends Application {
-
-    private Layout orderedLayout;
-    private Layout gridLayout;
-    private Layout formLayout;
-    private GridLayout mainLayout;
-    private Button switchToGridButton;
-    private Button switchToOrderedButton;
-    private Button switchToFormsButton;
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-
-        mainLayout = new GridLayout(1, 2);
-        w.setContent(mainLayout);
-        orderedLayout = createOL();
-        gridLayout = createGL();
-        formLayout = createForms();
-
-        switchToGridButton = new Button("Switch to GridLayout",
-                new ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        changeLayout(switchToGridButton, gridLayout);
-                    }
-
-                });
-        switchToOrderedButton = new Button("Switch to OrderedLayout",
-                new ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        changeLayout(switchToOrderedButton, orderedLayout);
-                    }
-
-                });
-        switchToOrderedButton.setEnabled(false);
-
-        switchToFormsButton = new Button("Switch to Form", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                changeLayout(switchToFormsButton, formLayout);
-            }
-
-        });
-
-        HorizontalLayout buttonLayout = new HorizontalLayout();
-        buttonLayout.addComponent(switchToOrderedButton);
-        buttonLayout.addComponent(switchToGridButton);
-        buttonLayout.addComponent(switchToFormsButton);
-
-        mainLayout.addComponent(buttonLayout);
-        mainLayout.addComponent(orderedLayout);
-        // w.setContent(orderedLayout);
-    }
-
-    private static Layout createOL() {
-        GridLayout layout = new GridLayout(1, 5);
-
-        GridLayout l1 = new GridLayout(1, 3);
-        createLayout(l1, new HorizontalLayout(), "1000px", "150px", "100%",
-                null, true);
-        createLayout(l1, new HorizontalLayout(), "1000px", "150px", "50px",
-                null, false);
-        GridLayout l2 = new GridLayout(6, 1);
-        createLayout(l2, new VerticalLayout(), "200px", "500px", true);
-        createLayout(l2, new VerticalLayout(), "200px", "500px", "100%", null,
-                true);
-        createLayout(l2, new VerticalLayout(), "150px", "500px", true);
-        createLayout(l2, new VerticalLayout(), "150px", "500px", "100%", null,
-                true);
-        createLayout(l2, new VerticalLayout(), "100px", "500px", true);
-        createLayout(l2, new VerticalLayout(), "100px", "500px", "100%", null,
-                true);
-        layout.addComponent(l1);
-        layout.addComponent(l2);
-
-        return layout;
-    }
-
-    private static Layout createGL() {
-        GridLayout layout = new GridLayout(1, 5);
-
-        GridLayout l1 = new GridLayout(1, 3);
-        createLayout(l1, new GridLayout(8, 1), "1000px", "150px", "100%", null,
-                true);
-        createLayout(l1, new GridLayout(8, 1), "1000px", "150px", "50px", null,
-                false);
-        GridLayout l2 = new GridLayout(6, 1);
-        createLayout(l2, new GridLayout(1, 8), "200px", "500px", true);
-        createLayout(l2, new GridLayout(1, 8), "200px", "500px", "100%", null,
-                true);
-        createLayout(l2, new GridLayout(1, 8), "150px", "500px", true);
-        createLayout(l2, new GridLayout(1, 8), "150px", "500px", "100%", null,
-                true);
-        createLayout(l2, new GridLayout(1, 8), "100px", "500px", true);
-        createLayout(l2, new GridLayout(1, 8), "100px", "500px", "100%", null,
-                true);
-        layout.addComponent(l1);
-        layout.addComponent(l2);
-
-        return layout;
-    }
-
-    public class FormObject {
-        private String stringValue = "abc";
-        private int intValue = 1;
-        private long longValue = 2L;
-        private Date dateValue = new Date(34587034750L);
-
-        public String getStringValue() {
-            return stringValue;
-        }
-
-        public void setStringValue(String stringValue) {
-            this.stringValue = stringValue;
-        }
-
-        public int getIntValue() {
-            return intValue;
-        }
-
-        public void setIntValue(int intValue) {
-            this.intValue = intValue;
-        }
-
-        public long getLongValue() {
-            return longValue;
-        }
-
-        public void setLongValue(long longValue) {
-            this.longValue = longValue;
-        }
-
-        public Date getDateValue() {
-            return dateValue;
-        }
-
-        public void setDateValue(Date dateValue) {
-            this.dateValue = dateValue;
-        }
-
-    }
-
-    private Layout createForms() {
-        GridLayout layout = new GridLayout(1, 5);
-        Form form;
-
-        Random r = new Random();
-        GridLayout l1 = new GridLayout(1, 3);
-        form = createForm(l1, "200px", "500px");
-        BeanItem<FormObject> item = new BeanItem<FormObject>(new FormObject());
-        form.setItemDataSource(item);
-        for (Iterator<?> i = item.getItemPropertyIds().iterator(); i.hasNext();) {
-            Object property = i.next();
-            Field f = form.getField(property);
-
-            f.setRequired(r.nextBoolean());
-            if (r.nextBoolean()) {
-                f.setIcon(new ThemeResource("icons/16/document-add.png"));
-            }
-            if (r.nextBoolean()) {
-                f.setCaption(null);
-            }
-
-            f.addValidator(new StringLengthValidator("Error", 10, 8, false));
-        }
-        // createLayout(l1, new
-        // ExpandLayout(ExpandLayout.ORIENTATION_HORIZONTAL),
-        // "1000px", "150px", "50px", null, false);
-
-        // GridLayout l2 = new GridLayout(6, 1);
-        // createLayout(l2, new ExpandLayout(ExpandLayout.ORIENTATION_VERTICAL),
-        // "200px", "500px", true);
-        // createLayout(l2, new ExpandLayout(ExpandLayout.ORIENTATION_VERTICAL),
-        // "200px", "500px", "100%", null, true);
-        // createLayout(l2, new ExpandLayout(ExpandLayout.ORIENTATION_VERTICAL),
-        // "150px", "500px", true);
-        // createLayout(l2, new ExpandLayout(ExpandLayout.ORIENTATION_VERTICAL),
-        // "150px", "500px", "100%", null, true);
-        // createLayout(l2, new ExpandLayout(ExpandLayout.ORIENTATION_VERTICAL),
-        // "100px", "500px", true);
-        // createLayout(l2, new ExpandLayout(ExpandLayout.ORIENTATION_VERTICAL),
-        // "100px", "500px", "100%", null, true);
-        layout.addComponent(l1);
-        // layout.addComponent(l2);
-
-        return layout;
-    }
-
-    private Form createForm(GridLayout parentLayout, String w, String h) {
-        FormLayout formLayout = new FormLayout();
-        Form form = new Form(formLayout);
-
-        Panel p = new Panel("Form " + w + "x" + h);
-
-        p.setWidth(w);
-        p.setHeight(h);
-
-        p.getContent().setSizeFull();
-
-        parentLayout.addComponent(p);
-        p.addComponent(form);
-        formLayout.setSizeFull();
-
-        return form;
-    }
-
-    protected void changeLayout(Button b, Layout newLayout) {
-        switchToOrderedButton.setEnabled(true);
-        switchToGridButton.setEnabled(true);
-        switchToFormsButton.setEnabled(true);
-
-        b.setEnabled(false);
-        Iterator<Component> i = mainLayout.getComponentIterator();
-        i.next();
-        Layout l = (Layout) i.next();
-
-        mainLayout.replaceComponent(l, newLayout);
-    }
-
-    private static void createLayout(GridLayout parentLayout, Layout newLayout,
-            String w, String h, boolean align) {
-        createLayout(parentLayout, newLayout, w, h, null, null, align);
-    }
-
-    private static void createLayout(GridLayout parentLayout, Layout newLayout,
-            String w, String h, String componentWidth, String componentHeight,
-            boolean align) {
-        String dirText = "V";
-        String type;
-        if (newLayout instanceof VerticalLayout) {
-            type = "OL";
-        } else if (newLayout instanceof HorizontalLayout) {
-            dirText = "H";
-            type = "OL";
-        } else {
-            if (((GridLayout) newLayout).getColumns() != 1) {
-                dirText = "H";
-            }
-            type = "GL";
-        }
-        String alignText = align ? "-A" : "";
-        String cWidth = componentWidth == null ? "" : " - " + componentWidth;
-        Panel p = new Panel(type + "/" + dirText + alignText + " " + w + "x"
-                + h + cWidth, newLayout);
-
-        p.setWidth(w);
-        p.setHeight(h);
-
-        newLayout.setSizeFull();
-
-        String captions[] = new String[] { "TextField with caption", null };
-        Resource icons[] = new Resource[] {
-                new ThemeResource("icons/16/document-delete.png"), null };
-        boolean required[] = new boolean[] { true, false };
-        TextField fields[][] = new TextField[captions.length][icons.length];
-        for (int caption = 0; caption < captions.length; caption++) {
-            for (int icon = 0; icon < icons.length; icon++) {
-                for (int req = 0; req < required.length; req++) {
-                    TextField tf = createTextFieldWithError(captions[caption],
-                            icons[icon], required[req]);
-
-                    fields[caption][icon] = tf;
-                    if (componentWidth != null) {
-                        tf.setWidth(componentWidth);
-                        tf.setValue(tf.getValue() + " w:" + componentWidth);
-                    }
-
-                    if (componentHeight != null) {
-                        tf.setHeight(componentWidth);
-                        tf.setValue(tf.getValue() + " h:" + componentHeight);
-                    }
-
-                    p.addComponent(tf);
-
-                    if (align) {
-                        ((AlignmentHandler) newLayout).setComponentAlignment(
-                                tf, Alignment.BOTTOM_RIGHT);
-                    }
-                }
-            }
-        }
-
-        parentLayout.addComponent(p);
-
-    }
-
-    // private static void createGridLayout(GridLayout parentLayout, int dir,
-    // String w, String h) {
-    // createGridLayout(parentLayout, dir, w, h, null, null);
-    // }
-
-    // private static void createGridLayout(GridLayout parentLayout, int dir,
-    // String w, String h, String componentWidth, String componentHeight) {
-    // GridLayout gl;
-    // if (dir == OrderedLayout.ORIENTATION_HORIZONTAL) {
-    // gl = new GridLayout(8, 1);
-    // } else {
-    // gl = new GridLayout(1, 8);
-    // }
-    //
-    // String dirText = (dir == OrderedLayout.ORIENTATION_HORIZONTAL ? "H"
-    // : "V");
-    // String cWidth = componentWidth == null ? "" : " - " + componentWidth;
-    // Panel p = new Panel("GL/" + dirText + " " + w + "x" + h + cWidth, gl);
-    //
-    // p.setWidth(w);
-    // p.setHeight(h);
-    //
-    // gl.setSizeFull();
-    //
-    // String captions[] = new String[] { "TextField with caption", null };
-    // Resource icons[] = new Resource[] {
-    // new ThemeResource("icons/16/document-delete.png"), null };
-    // boolean required[] = new boolean[] { true, false };
-    // TextField fields[][] = new TextField[captions.length][icons.length];
-    // for (int caption = 0; caption < captions.length; caption++) {
-    // for (int icon = 0; icon < icons.length; icon++) {
-    // for (int req = 0; req < required.length; req++) {
-    // TextField tf = createTextFieldWithError(captions[caption],
-    // icons[icon], required[req]);
-    //
-    // fields[caption][icon] = tf;
-    // if (componentWidth != null) {
-    // tf.setWidth(componentWidth);
-    // }
-    //
-    // if (componentHeight != null) {
-    // tf.setHeight(componentWidth);
-    // }
-    //
-    // p.addComponent(tf);
-    // gl.setComponentAlignment(tf, OrderedLayout.ALIGNMENT_LEFT,
-    // OrderedLayout.ALIGNMENT_BOTTOM);
-    // }
-    // }
-    // }
-    //
-    // parentLayout.addComponent(p);
-    //
-    // }
-
-    private static TextField createTextFieldWithError(String caption,
-            Resource icon, boolean required) {
-        TextField tf = new TextField();
-        tf.setCaption(caption);
-        tf.setIcon(icon);
-        tf.setRequired(required);
-        tf.setComponentError(new UserError("Test error message"));
-        return tf;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1900.java b/tests/src/com/vaadin/tests/tickets/Ticket1900.java
deleted file mode 100644
index 2047b4698c..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1900.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Validator;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket1900 extends Application {
-
-    TextField f[] = new TextField[5];
-    Window main = new Window("#1900 test");
-
-    @Override
-    public void init() {
-
-        setMainWindow(main);
-
-        for (int i = 0; i < 5; i++) {
-            final int j = i;
-            f[i] = new TextField("Testcase " + i);
-            f[i].setImmediate(true);
-            f[i].setRequired(true);
-            main.addComponent(f[i]);
-            f[i].addListener(new Property.ValueChangeListener() {
-                public void valueChange(ValueChangeEvent event) {
-                    main.showNotification("Validity test", "Testcase " + j
-                            + " is " + (f[j].isValid() ? "valid" : "invalid"));
-                }
-            });
-            f[i].addValidator(new ContainsValidator("1"));
-            f[i].addValidator(new ContainsValidator("2"));
-
-        }
-
-        f[0].setDescription("Field is empty, requiredError(null): *");
-
-        f[1].setDescription("Field is empty, requiredError(\"foo\"): * (popup shows the validation error)");
-        f[1].setRequiredError("The field must not be empty");
-
-        f[2].setDescription("Field is non-empty, validators do not give validation error: *");
-        f[2].setValue("valid 12");
-
-        f[3].setDescription("Field is non-empty, requiredError(null), validators "
-                + "give validation error: * ! (popup shows the validation error)");
-        f[3].setValue("invalid");
-
-        f[4].setDescription("Field is non-empty, requiredError(\"foo\"), validators "
-                + "give validation error: * ! (popup shows the validation error)");
-        f[4].setValue("invalid");
-        f[4].setRequiredError("The field must not be empty");
-
-    }
-
-    class ContainsValidator implements Validator {
-        private final String c;
-
-        public ContainsValidator(String c) {
-            this.c = c;
-        }
-
-        public boolean isValid(Object value) {
-            return value != null && value.toString().contains(c);
-        }
-
-        public void validate(Object value) throws InvalidValueException {
-            if (!isValid(value)) {
-                throw new InvalidValueException("Value does not contain " + c);
-            }
-
-        }
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1904.java b/tests/src/com/vaadin/tests/tickets/Ticket1904.java
deleted file mode 100644
index 1d79158333..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1904.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1904 extends Application {
-
-    @Override
-    public void init() {
-        setMainWindow(new Window("#1904"));
-        setTheme("tests-tickets");
-
-        addOL("defaults", null, false);
-        addOL("l5,r10,t20,b40,vs20,hs40", "ticket1904", false);
-        addOL("l5,r10,t20,b40,vs20,hs40", "ticket1904", true);
-    }
-
-    private void addOL(String descr, String style, boolean horizontal) {
-        AbstractOrderedLayout ol;
-        if (horizontal) {
-            ol = new HorizontalLayout();
-        } else {
-            ol = new VerticalLayout();
-        }
-        ol.setMargin(true);
-        ol.setSpacing(true);
-        if (style != null) {
-            ol.setStyleName(style);
-        }
-        ol.addComponent(new Label(descr));
-        for (int i = 0; i < 3; i++) {
-            Button b = new Button("Row " + (i + 1));
-            if (!horizontal) {
-                b.setWidth("500px");
-            }
-            ol.addComponent(b);
-        }
-        getMainWindow().addComponent(ol);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1916.java b/tests/src/com/vaadin/tests/tickets/Ticket1916.java
deleted file mode 100644
index d340bf144a..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1916.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.UserError;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket1916 extends Application {
-
-    @Override
-    public void init() {
-
-        HorizontalLayout test = new HorizontalLayout();
-        test.setSizeFull();
-
-        TextField tf = new TextField();
-        tf.setComponentError(new UserError("Error message"));
-
-        test.addComponent(tf);
-        test.setComponentAlignment(tf, Alignment.MIDDLE_CENTER);
-
-        Window w = new Window("Test #1916", test);
-        setMainWindow(w);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1919.java b/tests/src/com/vaadin/tests/tickets/Ticket1919.java
deleted file mode 100644
index 1e578cd8f5..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1919.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Window;
-
-public class Ticket1919 extends com.vaadin.Application {
-
-    private GridLayout lo;
-    private boolean on = true;
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        main.setTheme("tests-tickets");
-
-        lo = new GridLayout(2, 2);
-        lo.setSizeFull();
-        lo.setMargin(true);
-        lo.setSpacing(true);
-
-        lo.addComponent(getTestComponent());
-        lo.addComponent(getTestComponent());
-        lo.addComponent(getTestComponent());
-        lo.addComponent(getTestComponent());
-
-        main.setContent(lo);
-
-    }
-
-    public void toggleStyleName() {
-        if (on) {
-            lo.setStyleName("test");
-        } else {
-            lo.setStyleName("");
-        }
-        on = !on;
-    }
-
-    private Component getTestComponent() {
-        Panel p = new Panel();
-        p.setSizeFull();
-
-        Button b = new Button("toggle Values", this, "toggleStyleName");
-        p.addComponent(b);
-        return p;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1921.java b/tests/src/com/vaadin/tests/tickets/Ticket1921.java
deleted file mode 100644
index 71c45c34ce..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1921.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.Map;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.ParameterHandler;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1921 extends Application implements ParameterHandler {
-
-    int state = -1;
-    int round = 1;
-    Button button;
-    VerticalLayout outer, inner;
-
-    @Override
-    public void init() {
-
-        outer = new VerticalLayout();
-        setMainWindow(new Window("#1921", outer));
-        setTheme("tests-tickets");
-        inner = new VerticalLayout();
-        outer.addComponent(inner);
-        button = new Button("foo", this, "newState");
-        inner.addComponent(button);
-
-        outer.setStyleName("red");
-        inner.setStyleName("blue");
-
-        newState();
-
-        getMainWindow().addParameterHandler(this);
-    }
-
-    public void newState() {
-
-        if (state >= 6) {
-            state = 0;
-            round++;
-        } else {
-            state++;
-        }
-
-        button.setCaption("state " + round + "." + state);
-
-        switch (state) {
-
-        case 0:
-            outer.setMargin(true);
-            inner.setMargin(true);
-            inner.setSizeFull();
-            outer.setSizeFull();
-            button.setSizeFull();
-            break;
-
-        case 1:
-            button.setSizeUndefined();
-            break;
-
-        case 2:
-            inner.setMargin(false);
-            break;
-
-        case 3:
-            outer.setMargin(false);
-            break;
-
-        case 4:
-            inner.setMargin(true);
-            break;
-
-        case 5:
-            inner.addComponent(new Label("Added at " + button.getCaption()));
-            break;
-
-        case 6:
-            outer.addComponent(new Label("Added at " + button.getCaption()));
-            break;
-
-        }
-    }
-
-    public void handleParameters(Map<String, String[]> parameters) {
-        String[] s = parameters.get("state");
-        if (s == null || s.length != 1) {
-            return;
-        }
-        String v[] = s[0].split("\\.");
-        if (v == null || v.length != 2) {
-            return;
-        }
-        try {
-            int rr = Integer.parseInt(v[0]);
-            int rs = Integer.parseInt(v[1]);
-            if (rr < round || (rr == round && rs < state)) {
-                getMainWindow().showNotification(
-                        "Already past requested " + s[0]);
-                return;
-            }
-            while (round < rr || state < rs) {
-                newState();
-            }
-        } catch (NumberFormatException ignored) {
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1923.java b/tests/src/com/vaadin/tests/tickets/Ticket1923.java
deleted file mode 100644
index 9fc0ecc586..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1923.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1923 extends com.vaadin.Application {
-
-    private static final int ROWS = 50;
-
-    private Panel p;
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        p = new Panel("TestPanel 250x300");
-        // p.getLayout().setWidth("100%");
-        p.setScrollable(true);
-        // p.setContent(new GridLayout(1, 100));
-        for (int i = 0; i < ROWS; i++) {
-            p.addComponent(new Label(
-                    "Label"
-                            + i
-                            + " 5067w09adsfasdjfahlsdfjhalfjhaldjfhalsjdfhlajdhflajhdfljahdslfjahldsjfhaljdfhaljfdhlajsdhflajshdflkajhsdlfkjahsldfkjahsldfhalskjfdhlksjfdh857idifhaljsdfhlajsdhflajhdflajhdfljahldfjhaljdfhalsjdfhalkjdhflkajhdfljahsdlfjahlsdjfhaldjfhaljfdhlajdhflajshdfljahsdlfjhalsjdfhalskjhfdlhusfglksuhdflgjshflgjhslfghslfjghsljfglsjhfglsjhfgljshfgljshflgjhslfghsljfgsljdfglsdjhfglsjhflgkjshfldjgh"));
-        }
-        // main.getLayout().setSizeFull();
-
-        p.setHeight("300px");
-        p.setWidth("250px");
-        // p.setWidth("50%");
-
-        p.setScrollTop(100);
-        p.setScrollLeft(100);
-
-        main.addComponent(p);
-
-        VerticalLayout ol = new VerticalLayout();
-        p = new Panel("a");
-        p.addComponent(new Label("Longer than caption"));
-        ol.addComponent(p);
-
-        main.addComponent(ol);
-
-        ol = new VerticalLayout();
-        p = new Panel("captionasdfjahsdjfh this should be clipped god damn it");
-        // p.getLayout().setSizeFull();
-        p.setWidth("50px");
-        p.setHeight("100px");
-        p.addComponent(new Label(
-                "aasdfaasdfja dslkfj lakfdj lakjdf lkaj dflkaj ldfkj alsdfj laksdj flkajs dflkj sdfsadfasdfasd"));
-        ol.addComponent(p);
-
-        main.addComponent(ol);
-
-        ol = new VerticalLayout();
-        p = new Panel("300x-1");
-        // p.getLayout().setSizeFull();
-        p.setWidth("300px");
-        p.addComponent(new Label("Short"));
-        p.addComponent(new Label("Short"));
-        p.addComponent(new Label("Short"));
-        p.addComponent(new Label("Short"));
-        p.addComponent(new Label("Short"));
-        p.addComponent(new Label("Short"));
-        p.addComponent(new Label("Short"));
-        p.addComponent(new Label("Short"));
-        p.addComponent(new Label("Short"));
-        p.addComponent(new Label("Short"));
-        p.addComponent(new Label("Short"));
-        p.addComponent(new Label("Short"));
-        p.addComponent(new Label("Short"));
-        ol.addComponent(p);
-
-        main.addComponent(ol);
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1924ThemeChanging.java b/tests/src/com/vaadin/tests/tickets/Ticket1924ThemeChanging.java
deleted file mode 100644
index 981fd9cd5c..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1924ThemeChanging.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Window;
-
-public class Ticket1924ThemeChanging extends com.vaadin.Application {
-
-    private Label l = new Label("Background should be red with test theme");
-
-    @SuppressWarnings("unused")
-    private Panel p;
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        l.setStyleName("red");
-        main.addComponent(l);
-
-        Button b = new Button("Toggle tests-tickets theme");
-        b.addListener(new ClickListener() {
-            boolean flag = false;
-
-            public void buttonClick(ClickEvent event) {
-                if (flag == !flag) {
-                    main.setTheme("tests-tickets");
-                } else {
-                    main.setTheme(null);
-                }
-            }
-        });
-
-        main.addComponent(b);
-
-        b = new Button("Modify caption (should not reload page)");
-        b.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                main.setCaption(main.getCaption() + ".");
-            }
-        });
-
-        main.addComponent(b);
-
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1925.java b/tests/src/com/vaadin/tests/tickets/Ticket1925.java
deleted file mode 100644
index 83e5e1cfd4..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1925.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Window;
-
-public class Ticket1925 extends Application {
-
-    @Override
-    public void init() {
-        Window mainWindow = new Window("Test åäö");
-        setMainWindow(mainWindow);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1939.java b/tests/src/com/vaadin/tests/tickets/Ticket1939.java
deleted file mode 100644
index 2970335d83..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1939.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1939 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getName());
-        setMainWindow(w);
-
-        final VerticalLayout l = new VerticalLayout();
-        l.setWidth("400px");
-        l.setHeight("100px");
-        l.addComponent(new TextField("This one works fine"));
-        TextField t = new TextField();
-        t.setRequired(true);
-        t.setValue("This one bugs");
-        l.addComponent(t);
-        w.addComponent(l);
-
-        w.addComponent(new Button("show me the bug",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        l.setWidth(null);
-                    }
-                }));
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1940.java b/tests/src/com/vaadin/tests/tickets/Ticket1940.java
deleted file mode 100644
index a3264ecba4..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1940.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1940 extends Application {
-
-    @Override
-    public void init() {
-        final Window w = new Window(getClass().getName());
-        setMainWindow(w);
-
-        final VerticalLayout l = new VerticalLayout();
-        l.setWidth("200px");
-        l.setHeight(null);
-        TextField t = new TextField();
-        l.addComponent(t);
-        t.setRequired(true);
-        w.addComponent(l);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1953.java b/tests/src/com/vaadin/tests/tickets/Ticket1953.java
deleted file mode 100644
index 43e7f10220..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1953.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket1953 extends Application {
-    public static final String cellStyle = "test-cell";
-    public static final String colHeadStyle = "test-col-head";
-    public static final String headingStyle = "test-heading";
-    public static final String spacerStyle = "test-spacer";
-    public static final String pageButtonStyle = "test-page-change";
-
-    @Override
-    public void init() {
-
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        main.setTheme("tests-tickets");
-        GridLayout gl = new GridLayout(5, 5);
-
-        gl.setStyleName("borders");
-
-        gl.addComponent(new Label("0,0"), 0, 0);
-        gl.addComponent(new Label("0,1"), 0, 1);
-        gl.addComponent(new Label("0,2"), 0, 2);
-        gl.addComponent(new Label("0,3"), 0, 3);
-        gl.addComponent(new Label("0,4"), 0, 4);
-        gl.addComponent(new Label("1,0"), 1, 0);
-        gl.addComponent(new Label("2,0"), 2, 0);
-        gl.addComponent(new Label("3,0"), 3, 0);
-        gl.addComponent(new Label("4,0"), 4, 0);
-
-        gl.addComponent(new Label("1,4"), 1, 4);
-        gl.addComponent(new Label("2,4"), 2, 4);
-        gl.addComponent(new Label("3,4"), 3, 4);
-        gl.addComponent(new Label("4,4"), 4, 4);
-
-        gl.addComponent(new Label("1-1 -> 2-2"), 1, 1, 2, 2);
-        gl.addComponent(new Label("3,1"), 3, 1);
-        gl.addComponent(new Label("3,2"), 3, 2);
-        gl.addComponent(new Label("3,3"), 3, 3);
-
-        main.addComponent(gl);
-
-        // create grid
-        GridLayout grid = new GridLayout(7, 7);
-
-        grid.setStyleName("borders");
-
-        // add upper row
-        Button up = new Button("UP");
-
-        up.setStyleName(pageButtonStyle);
-        grid.addComponent(up, 0, 0);
-
-        Label space = new Label();
-        space.setStyleName(spacerStyle);
-        grid.addComponent(space, 1, 0);
-
-        Button single = null;
-        String headingStyle = "foo";
-        for (int i = 1; i < grid.getColumns() - 2; i++) {
-            single = new Button(Integer.toString(i));
-            single.setStyleName(headingStyle);
-            grid.addComponent(single, i + 1, 0);
-        }
-
-        space = new Label();
-        space.setStyleName(spacerStyle);
-        grid.addComponent(space, grid.getColumns() - 1, 0);
-
-        // middle rows
-        char rowChar = 'A';
-        for (int i = 1; i < grid.getRows() - 1; i++) {
-            space = new Label(Character.toString(rowChar++));
-            space.setStyleName(colHeadStyle);
-            grid.addComponent(space, 0, i);
-
-            space = new Label();
-            space.setStyleName(spacerStyle);
-            grid.addComponent(space, 1, i);
-
-            space = new Label();
-            space.setStyleName(spacerStyle);
-            grid.addComponent(space, grid.getColumns() - 1, i);
-        }
-
-        // bottom row
-        Button dn = new Button("DOWN");
-        dn.setStyleName(pageButtonStyle);
-        grid.addComponent(dn, 0, grid.getRows() - 1);
-
-        space = new Label();
-        space.setStyleName(spacerStyle);
-        grid.addComponent(space, 1, grid.getRows() - 1);
-
-        for (int i = 1; i < grid.getColumns() - 2; i++) {
-            single = new Button(Integer.toString(i));
-            single.setStyleName(headingStyle);
-            grid.addComponent(single, i + 1, grid.getRows() - 1);
-        }
-
-        space = new Label();
-        space.setStyleName(spacerStyle);
-        grid.addComponent(space, grid.getColumns() - 1, grid.getRows() - 1);
-
-        main.addComponent(grid);
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1966.java b/tests/src/com/vaadin/tests/tickets/Ticket1966.java
deleted file mode 100644
index 5f1f152f3f..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1966.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Layout.AlignmentHandler;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1966 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        w.setContent(new GridLayout(2, 2));
-        // w.getLayout().setSizeFull();
-        createUI((Layout) w.getContent());
-    }
-
-    private void createUI(Layout layout) {
-        orderedLayout(layout);
-        gridLayout(layout);
-    }
-
-    private void gridLayout(Layout layout) {
-        Panel p = new Panel("GridLayout");
-        layout.addComponent(p);
-
-        GridLayout gl = new GridLayout(1, 4);
-        gl.setCaption("Horizontal");
-        Button b;
-
-        b = new Button("Wide button");
-        b.setWidth("500px");
-        gl.addComponent(b);
-
-        addButtons(gl);
-
-        p.addComponent(gl);
-
-        /* VERTICAL */
-
-        gl = new GridLayout(4, 1);
-        gl.setCaption("Vertical");
-
-        addButtons(gl);
-
-        b = new Button("High button");
-        b.setHeight("200px");
-        gl.addComponent(b);
-
-        p.addComponent(gl);
-
-    }
-
-    private void orderedLayout(Layout layout) {
-        Panel p = new Panel("OrderedLayout");
-        layout.addComponent(p);
-
-        AbstractOrderedLayout ol = new VerticalLayout();
-        ol.setCaption("Horizontal");
-        // ol.setWidth("100%");
-
-        Button b;
-
-        b = new Button("Wide button");
-        b.setWidth("500px");
-        ol.addComponent(b);
-
-        addButtons(ol);
-        p.addComponent(ol);
-
-        /* VERTICAL */
-
-        ol = new HorizontalLayout();
-        ol.setCaption("Vertical");
-
-        addButtons(ol);
-        b = new Button("High button");
-        b.setHeight("200px");
-        ol.addComponent(b);
-
-        p.addComponent(ol);
-
-    }
-
-    private void addButtons(Layout ol) {
-        ol.addComponent(getButton(ol, Alignment.TOP_LEFT));
-        ol.addComponent(getButton(ol, Alignment.MIDDLE_CENTER));
-        ol.addComponent(getButton(ol, Alignment.BOTTOM_RIGHT));
-
-    }
-
-    private Button getButton(Layout l, Alignment align) {
-        Button b = new Button("Narrow Button - "
-                + align.getHorizontalAlignment() + " - "
-                + align.getVerticalAlignment());
-        b.setWidth("100px");
-        ((AlignmentHandler) l).setComponentAlignment(b, align);
-
-        return b;
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1966_2.java b/tests/src/com/vaadin/tests/tickets/Ticket1966_2.java
deleted file mode 100644
index 65fe2cc2ff..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1966_2.java
+++ /dev/null
@@ -1,168 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Layout.AlignmentHandler;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1966_2 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getName());
-        setMainWindow(w);
-        w.setContent(new GridLayout(2, 2));
-
-        // Panel p = new Panel("test");
-        // p.setWidth(500);
-        // p.setHeight(500);
-        // p.setContent(new GridLayout(1, 2));
-        // p.getLayout().setSizeFull();
-        //
-        // p.addComponent(new Button("asjkdfhakshdf"));
-        // p.addComponent(new Button("öalijgto8aq5"));
-
-        // GridLayout gl = new GridLayout(4, 1);
-        // // gl.setCaption("Vertical");
-        // gl.setWidth("100%");
-        // gl.setHeight(500);
-
-        // addButtons(gl);
-        // gl.addComponent(new Label("abc"));
-        // p.addComponent(gl);
-
-        // w.getLayout().addComponent(p);
-        createUI((Layout) w.getContent());
-    }
-
-    private void createUI(Layout layout) {
-        orderedLayout(layout);
-        gridLayout(layout);
-        expandLayout(layout);
-    }
-
-    private void gridLayout(Layout layout) {
-        Panel p = new Panel("GridLayout");
-        p.setWidth("500px");
-        p.setHeight("500px");
-        p.getContent().setSizeFull();
-        layout.addComponent(p);
-
-        GridLayout gl = new GridLayout(1, 4);
-        gl.setCaption("Horizontal");
-        gl.setWidth("100%");
-
-        // Button b;
-
-        // b = new Button("Wide button");
-        // b.setWidth("500");
-        // gl.addComponent(b);
-
-        addButtons(gl);
-
-        p.addComponent(gl);
-
-        /* VERTICAL */
-
-        gl = new GridLayout(4, 1);
-        // gl.setCaption("Vertical");
-        gl.setHeight("100%");
-        addButtons(gl);
-
-        // Button b = new Button("High button");
-        // b.setHeight(200);
-        // gl.addComponent(b);
-
-        p.addComponent(gl);
-
-    }
-
-    private void orderedLayout(Layout layout) {
-        Panel p = new Panel("OrderedLayout");
-        p.setWidth("500px");
-        p.setHeight("500px");
-        p.getContent().setWidth("100%");
-        layout.addComponent(p);
-
-        AbstractOrderedLayout ol = new VerticalLayout();
-        // ol.setCaption("Horizontal");
-        ol.setWidth("100%");
-        addButtons(ol);
-        p.addComponent(ol);
-
-        /* VERTICAL */
-
-        ol = new HorizontalLayout();
-        // ol.setCaption("Vertical");
-        ol.setHeight("200px");
-        addButtons(ol);
-        // Button b = new Button("High button");
-        // b.setHeight(200);
-        // ol.addComponent(b);
-        p.addComponent(ol);
-
-    }
-
-    private void expandLayout(Layout layout) {
-        Panel p = new Panel("ExpandLayout");
-        layout.addComponent(p);
-        p.getContent().setWidth("500");
-        p.getContent().setHeight("400");
-
-        AbstractOrderedLayout el = new VerticalLayout();
-        // el.setCaption("Horizontal");
-        // el.setSizeUndefined();
-        // el.setWidth("100%");
-        // ol.setWidth("100%");
-        Button b;
-
-        b = new Button("Wide button");
-        b.setWidth("100%");
-        // b.setHeight(200);
-        // el.setExpandRatio(b,1);
-        // el.addComponent(b);
-
-        addButtons(el);
-        p.addComponent(el);
-
-        /* VERTICAL */
-
-        el = new HorizontalLayout();
-        // el.setHeight(400);
-        // el.setWidth("100%");
-        // el.setCaption("Vertical");
-
-        addButtons(el);
-        // b = new Button("High button");
-        // el.setExpandRatio(b,1);
-        // b.setHeight(100);
-        // el.addComponent(b);
-
-        p.addComponent(el);
-
-    }
-
-    private void addButtons(Layout ol) {
-        ol.addComponent(getButton(ol, Alignment.TOP_LEFT));
-        ol.addComponent(getButton(ol, Alignment.MIDDLE_CENTER));
-        ol.addComponent(getButton(ol, Alignment.BOTTOM_RIGHT));
-
-    }
-
-    private Button getButton(Layout l, Alignment align) {
-        Button b = new Button(align.getHorizontalAlignment() + " - "
-                + align.getVerticalAlignment());
-        // b.setWidth("100");
-        ((AlignmentHandler) l).setComponentAlignment(b, align);
-
-        return b;
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1966_3.java b/tests/src/com/vaadin/tests/tickets/Ticket1966_3.java
deleted file mode 100644
index e4f99b9023..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1966_3.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.terminal.UserError;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1966_3 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        GridLayout layout = new GridLayout(10, 10);
-        w.setContent(layout);
-        createUI(layout);
-    }
-
-    private void createUI(GridLayout layout) {
-        VerticalLayout ol = new VerticalLayout();
-        Panel p = new Panel(ol);
-        p.setWidth("300px");
-        p.setHeight("300px");
-        p.getContent().setSizeFull();
-
-        TextField tf = new TextField("Long caption, longer than 100 pixels");
-        tf.setWidth("100px");
-
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.TOP_RIGHT);
-
-        tf = new TextField("Short caption");
-        tf.setWidth("100px");
-
-        tf.setComponentError(new UserError("error message"));
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.TOP_RIGHT);
-
-        tf = new TextField("Short caption");
-        tf.setComponentError(new UserError("error message"));
-        tf.setIcon(new ThemeResource("icons/16/calendar.png"));
-        tf.setWidth("100px");
-
-        tf.setComponentError(new UserError("error message"));
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.TOP_RIGHT);
-
-        tf = new TextField();
-        tf.setValue("No caption");
-        tf.setWidth("100px");
-
-        ol.addComponent(tf);
-        ol.setComponentAlignment(tf, Alignment.TOP_RIGHT);
-
-        layout.addComponent(p);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1969.java b/tests/src/com/vaadin/tests/tickets/Ticket1969.java
deleted file mode 100644
index 26c1c69470..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1969.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.terminal.UserError;
-import com.vaadin.tests.TestForTablesInitialColumnWidthLogicRendering;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1969 extends com.vaadin.Application {
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        main.getContent().setSizeFull();
-
-        TabSheet ts = new TabSheet();
-        ts.setSizeFull();
-
-        final Table t = TestForTablesInitialColumnWidthLogicRendering
-                .getTestTable(7, 2000);
-        t.setSizeFull();
-        ts.addTab(t, "Table, scrollins should not flash", null);
-
-        final Label testContent = new Label(
-                "TabSheet by default uses caption, icon, errors etc. from Components. ");
-
-        testContent.setCaption("Introduction to test");
-
-        ts.addTab(testContent);
-
-        final VerticalLayout actions = new VerticalLayout();
-
-        actions.setCaption("Test actions");
-
-        ts.addTab(actions);
-
-        Button b;
-
-        b = new Button(
-                "change introduction caption (should add * to tab name)",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        testContent.setCaption(testContent.getCaption() + "*");
-                    }
-                });
-        actions.addComponent(b);
-
-        b = new Button("change tab caption (should add * to tab name)",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        actions.setCaption(actions.getCaption() + "*");
-                    }
-                });
-
-        actions.addComponent(b);
-
-        final UserError e = new UserError("Test error");
-
-        b = new Button("Toggle error", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                if (testContent.getComponentError() == null) {
-                    testContent.setComponentError(e);
-                } else {
-                    testContent.setComponentError(null);
-                }
-            }
-        });
-        actions.addComponent(b);
-
-        b = new Button("Change table caption", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                t.setCaption(t.getCaption() + "*");
-            }
-        });
-        actions.addComponent(b);
-
-        b = new Button("Toggle Table error", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                if (t.getComponentError() == null) {
-                    t.setComponentError(e);
-                } else {
-                    t.setComponentError(null);
-                }
-            }
-        });
-
-        actions.addComponent(b);
-
-        for (int i = 0; i < 20; i++) {
-            Label l = new Label("Test Content");
-            l.setCaption("Extra tab " + i);
-            ts.addComponent(l);
-        }
-
-        main.addComponent(ts);
-
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1970.java b/tests/src/com/vaadin/tests/tickets/Ticket1970.java
deleted file mode 100644
index 1442c9ea5b..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1970.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.Iterator;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Window.CloseEvent;
-
-public class Ticket1970 extends Application {
-
-    @Override
-    public void init() {
-        setMainWindow(createWindow());
-    }
-
-    @Override
-    public Window getWindow(String name) {
-
-        // If we already have the requested window, use it
-        Window w = super.getWindow(name);
-        if (w == null) {
-
-            // If no window found, create it
-            w = createExtraWindow(name);
-        }
-        return w;
-    }
-
-    private Window createExtraWindow(String name) {
-        final Window w = new Window("Extra window: " + name);
-        w.setName(name);
-        addWindow(w);
-        w.addComponent(new Label(
-                "This window has been created on fly for name: " + name));
-        w.addComponent(new Button("Show open windows",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        String openWindows = "";
-                        for (Iterator<Window> i = getWindows().iterator(); i
-                                .hasNext();) {
-                            Window t = i.next();
-                            openWindows += (openWindows.length() > 0 ? "," : "")
-                                    + t.getName();
-                        }
-                        w.showNotification(openWindows);
-                    }
-                }));
-        w.addListener(new Window.CloseListener() {
-            public void windowClose(CloseEvent e) {
-                removeWindow(w);
-            }
-        });
-
-        return w;
-    }
-
-    private Window createWindow() {
-        final Window w = new Window();
-        w.addComponent(new Button("Show the name of the application",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        w.showNotification("Name of this window = "
-                                + w.getName());
-                    }
-                }));
-        w.addComponent(new Label("<a href='" + getURL().toExternalForm() + "'>"
-                + getURL().toExternalForm() + "</a>", Label.CONTENT_XHTML));
-        w.addComponent(new Label(
-                "<h2>How to reproduce</h2>Open the above link in another browser"
-                        + " window and then press the Show-button on this window.",
-                Label.CONTENT_XHTML));
-
-        return w;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1972.java b/tests/src/com/vaadin/tests/tickets/Ticket1972.java
deleted file mode 100644
index 86d5b0f11d..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1972.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket1972 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getName());
-        setMainWindow(w);
-        setTheme("tests-ticket");
-        GridLayout layout = new GridLayout(3, 3);
-        layout.setStyleName("borders");
-        layout.addComponent(new Label("1-1"));
-        layout.space();
-        layout.space();
-        layout.addComponent(new Label("2-1"));
-        layout.space();
-        layout.space();
-        layout.addComponent(new Label("3-1"));
-        layout.space();
-        layout.addComponent(new Label("3-3"));
-
-        w.setContent(layout);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1973.java b/tests/src/com/vaadin/tests/tickets/Ticket1973.java
deleted file mode 100644
index c756ca12c3..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1973.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1973 extends com.vaadin.Application {
-
-    Window main = new Window();
-    Table table = new Table();
-
-    @Override
-    public void init() {
-        setMainWindow(main);
-
-        final IndexedContainer container1 = new IndexedContainer();
-        container1.addContainerProperty("layout", Component.class, null);
-
-        final IndexedContainer container2 = new IndexedContainer();
-        container2.addContainerProperty("layout", Component.class, null);
-
-        fill(container1, 100, "Testi 1 :");
-        fill(container2, 100, "Testi 2 :");
-
-        table.setContainerDataSource(container1);
-
-        Button refreshTable = new Button("Change table container");
-        refreshTable.addListener(new Button.ClickListener() {
-            public void buttonClick(Button.ClickEvent e) {
-                table.setContainerDataSource(container2);
-                table.setContainerDataSource(container1);
-            }
-        });
-
-        main.addComponent(table);
-        main.addComponent(refreshTable);
-    }
-
-    public void fill(IndexedContainer container, int size, String prefix) {
-        for (int i = 0; i < size; i++) {
-            Item item = container.addItem(new Integer(i));
-            VerticalLayout layout = new VerticalLayout();
-            layout.addComponent(new Button(prefix + i));
-            item.getItemProperty("layout").setValue(layout);
-        }
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1973_2.java b/tests/src/com/vaadin/tests/tickets/Ticket1973_2.java
deleted file mode 100644
index 5cffdbd5db..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1973_2.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1973_2 extends Application {
-    Window main = new Window();
-    Table table = new Table();
-
-    @Override
-    public void init() {
-        setMainWindow(main);
-
-        final IndexedContainer container1 = new IndexedContainer();
-        container1.addContainerProperty("text", String.class, null);
-        container1.addContainerProperty("layout", Component.class, null);
-
-        final IndexedContainer container2 = new IndexedContainer();
-        container2.addContainerProperty("text", String.class, null);
-        container2.addContainerProperty("layout", Component.class, null);
-
-        fill(container1, 100);
-
-        table.setContainerDataSource(container1);
-
-        Button refreshTable = new Button("Change table container");
-        refreshTable.addListener(new Button.ClickListener() {
-            public void buttonClick(Button.ClickEvent e) {
-                table.setContainerDataSource(container2);
-                table.setContainerDataSource(container1);
-            }
-        });
-
-        main.addComponent(table);
-        main.addComponent(refreshTable);
-    }
-
-    public void fill(IndexedContainer container, int size) {
-        for (int i = 0; i < size; i++) {
-            int randInt = i;
-            Item item = container.addItem(new Integer(i));
-            VerticalLayout layout = new VerticalLayout();
-            layout.setDebugId("lo" + i);
-            layout.addComponent(new Button("Test " + randInt));
-            item.getItemProperty("layout").setValue(layout);
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1975.java b/tests/src/com/vaadin/tests/tickets/Ticket1975.java
deleted file mode 100644
index d162606ba7..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1975.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.gwt.server.WebApplicationContext;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CustomLayout;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket1975 extends Application {
-
-    private CustomLayout cl1;
-    private CustomLayout cl2;
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getName());
-        setMainWindow(w);
-        setTheme("tests-tickets");
-        GridLayout layout = new GridLayout(1, 10);
-        w.setContent(layout);
-        createUI(layout);
-    }
-
-    private void createUI(GridLayout layout) {
-        String s = "<b>Blah</b><input type=\"text\" value='Lorem\" ipsum'/>";
-        try {
-            cl1 = new CustomLayout(new ByteArrayInputStream(s.getBytes()));
-            layout.addComponent(cl1);
-            WebApplicationContext wc = ((WebApplicationContext) getContext());
-
-            layout.addComponent(new Button("Disable/Enable",
-                    new ClickListener() {
-
-                        public void buttonClick(ClickEvent event) {
-                            boolean e = cl1.isEnabled();
-
-                            cl1.setEnabled(!e);
-                            cl2.setEnabled(!e);
-                        }
-
-                    }));
-            File f = new File(wc.getBaseDirectory().getAbsoluteFile()
-                    + "/VAADIN/themes/" + getTheme()
-                    + "/layouts/Ticket1975.html");
-
-            cl2 = new CustomLayout(new FileInputStream(f));
-            layout.addComponent(cl2);
-
-        } catch (Exception e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1982.java b/tests/src/com/vaadin/tests/tickets/Ticket1982.java
deleted file mode 100644
index 53e5630353..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1982.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket1982 extends Application {
-
-    private List<TitleBar> components = new ArrayList<TitleBar>();
-
-    @Override
-    public void init() {
-        Window main = new Window();
-        setMainWindow(main);
-
-        GridLayout gl = new GridLayout(2, 2);
-        gl.setSizeFull();
-        main.setContent(gl);
-        gl.setMargin(true);
-
-        TitleBar t1 = new TitleBar("Title 1", gl);
-        TitleBar t2 = new TitleBar("Title 2", gl);
-        TitleBar t3 = new TitleBar("Title 3", gl);
-        TitleBar t4 = new TitleBar("Title 4", gl);
-        components.add(t1);
-        components.add(t2);
-        components.add(t3);
-        components.add(t4);
-
-        restoreComponents(gl);
-
-    }
-
-    private void restoreComponents(GridLayout gl) {
-        gl.removeAllComponents();
-        gl.addComponent(components.get(0));
-        gl.addComponent(components.get(1));
-        gl.addComponent(components.get(2));
-        gl.addComponent(components.get(3));
-    }
-
-    private class TitleBar extends HorizontalLayout {
-
-        private Button max = new Button("Max");
-        private Button min = new Button("Min");
-        private GridLayout layout;
-
-        public TitleBar(String title, GridLayout layout) {
-            super();
-            this.layout = layout;
-            addComponent(new Label(title));
-            addComponent(max);
-            addComponent(min);
-            min.setVisible(false);
-
-            max.addListener(new ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    min.setVisible(true);
-                    max.setVisible(false);
-                    TitleBar.this.layout.removeAllComponents();
-                    TitleBar.this.layout
-                            .addComponent(TitleBar.this, 0, 0, 1, 1);
-                }
-            });
-            min.addListener(new ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    min.setVisible(false);
-                    max.setVisible(true);
-                    restoreComponents(TitleBar.this.layout);
-                }
-            });
-        }
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1983.java b/tests/src/com/vaadin/tests/tickets/Ticket1983.java
deleted file mode 100644
index fbab5c5244..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1983.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-/**
- * Test class for ticket 1983
- */
-public class Ticket1983 extends Application {
-
-    @Override
-    public void init() {
-        Window main = new Window("Test for ticket 1983");
-        main.setContent(new TestLayout());
-        setMainWindow(main);
-    }
-
-    private static class TestLayout extends HorizontalSplitPanel {
-        boolean isLong = true;
-        final Table table = new MyTable();
-        final String propId = "col";
-        final String propId2 = "col2";
-
-        public TestLayout() {
-
-            setSplitPosition(200, Sizeable.UNITS_PIXELS);
-            setMargin(false);
-            setLocked(true);
-
-            final HorizontalSplitPanel leftSide = initLeftSide();
-            setFirstComponent(leftSide);
-
-            final Layout rightSide = new VerticalLayout();
-            rightSide.setHeight("100%");
-            setSecondComponent(rightSide);
-        }
-
-        private HorizontalSplitPanel initLeftSide() {
-            final HorizontalSplitPanel leftSide = new HorizontalSplitPanel();
-            leftSide.setHeight("100%");
-
-            final IndexedContainer dataSource = new IndexedContainer();
-            dataSource.addContainerProperty(propId, String.class, null);
-            dataSource.addContainerProperty(propId2, String.class, null);
-            final Object itemId = dataSource.addItem();
-            dataSource
-                    .getItem(itemId)
-                    .getItemProperty(propId)
-                    .setValue(
-                            "Very long value that makes a scrollbar appear for sure");
-            dataSource
-                    .getItem(itemId)
-                    .getItemProperty(propId2)
-                    .setValue(
-                            "Very long value that makes a scrollbar appear for sure");
-
-            for (int i = 0; i < 150; i++) {
-                Object id = dataSource.addItem();
-                dataSource
-                        .getItem(id)
-                        .getItemProperty(propId)
-                        .setValue(
-                                (i == 100 ? "Very long value that makes a scrollbar appear for sure"
-                                        : "Short"));
-                dataSource.getItem(id).getItemProperty(propId2)
-                        .setValue("Short");
-            }
-
-            table.setSizeFull();
-            table.setContainerDataSource(dataSource);
-            table.setVisibleColumns(new Object[] { propId });
-
-            leftSide.setSecondComponent(table);
-
-            Button button = new Button("Change col value to short");
-            button.addListener(new Button.ClickListener() {
-                public void buttonClick(Button.ClickEvent event) {
-                    // Change the column value to a short one --> Should remove
-                    // the scrollbar
-                    if (isLong) {
-                        dataSource.getItem(itemId).getItemProperty(propId)
-                                .setValue("Short value");
-                        dataSource.getItem(itemId).getItemProperty(propId2)
-                                .setValue("Short value");
-                        isLong = false;
-                    } else {
-                        dataSource
-                                .getItem(itemId)
-                                .getItemProperty(propId)
-                                .setValue(
-                                        "Very long value that makes a scrollbar appear for sure");
-                        dataSource
-                                .getItem(itemId)
-                                .getItemProperty(propId2)
-                                .setValue(
-                                        "Very long value that makes a scrollbar appear for sure");
-                        isLong = true;
-                    }
-                    // Works the same way with or without repaint request
-                    table.requestRepaint();
-                }
-            });
-
-            VerticalLayout ol = new VerticalLayout();
-            ol.addComponent(button);
-            leftSide.setFirstComponent(ol);
-
-            button = new CheckBox("Two col");
-            button.addListener(new Button.ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    Button b = event.getButton();
-                    if (((Boolean) b.getValue()).booleanValue()) {
-                        table.setVisibleColumns(new Object[] { propId, propId2 });
-                    } else {
-                        table.setVisibleColumns(new Object[] { propId });
-                    }
-
-                }
-
-            });
-            ol.addComponent(button);
-
-            return leftSide;
-        }
-    }
-
-    static class MyTable extends Table {
-        MyTable() {
-            alwaysRecalculateColumnWidths = true;
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1986.java b/tests/src/com/vaadin/tests/tickets/Ticket1986.java
deleted file mode 100644
index f2a173bcb0..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1986.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.ListSelect;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.OptionGroup;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.TwinColSelect;
-import com.vaadin.ui.Window;
-
-public class Ticket1986 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getName());
-        setMainWindow(w);
-
-        int index = 1;
-
-        GridLayout layout = new GridLayout(2, 2);
-        TextField f1 = new TextField("1");
-        f1.setTabIndex(index++);
-        TextField f2 = new TextField("2");
-        f2.setTabIndex(index++);
-
-        DateField f3 = new DateField("3");
-        f3.setTabIndex(index++);
-        ComboBox cb = new ComboBox("4");
-        cb.setTabIndex(index++);
-
-        ListSelect lss = new ListSelect("5");
-        lss.addItem("foo");
-        lss.addItem("Bar");
-        lss.setTabIndex(index++);
-
-        NativeSelect ns = new NativeSelect("6");
-        ns.addItem("foo");
-        ns.addItem("bar");
-        ns.setTabIndex(index++);
-
-        OptionGroup og = new OptionGroup("7");
-        og.addItem("foo");
-        og.addItem("bar");
-        og.setTabIndex(index++);
-
-        OptionGroup ogm = new OptionGroup("7");
-        ogm.setMultiSelect(true);
-        ogm.addItem("foo");
-        ogm.addItem("bar");
-        ogm.setTabIndex(index++);
-
-        TwinColSelect ts = new TwinColSelect("8");
-        ts.addItem("Foo");
-        ts.addItem("Bar");
-        ts.setTabIndex(index++);
-
-        Button b = new Button("9");
-        b.setTabIndex(index++);
-
-        layout.addComponent(b);
-        layout.addComponent(ts);
-        layout.addComponent(ogm);
-        layout.addComponent(og);
-        layout.addComponent(ns);
-        layout.addComponent(lss);
-        layout.addComponent(cb);
-        layout.addComponent(f3);
-        layout.addComponent(f2);
-        layout.addComponent(f1);
-
-        w.setContent(layout);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1991.java b/tests/src/com/vaadin/tests/tickets/Ticket1991.java
deleted file mode 100644
index 430c54ec92..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1991.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-public class Ticket1991 extends com.vaadin.Application {
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        Table t = new Table("Test table");
-
-        t.addContainerProperty(" ", CheckBox.class, "");
-        t.addContainerProperty("Col1", String.class, "");
-        t.addContainerProperty("Col2", String.class, "");
-
-        t.setPageLength(5);
-
-        t.addItem(new Object[] { new CheckBox(), "Foo", "Bar" }, "1");
-        t.addItem(new Object[] { new CheckBox(), "Foo", "Bar" }, "2");
-
-        main.addComponent(t);
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket1995.java b/tests/src/com/vaadin/tests/tickets/Ticket1995.java
deleted file mode 100644
index c681cb5bd0..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket1995.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Container;
-import com.vaadin.data.Container.Filterable;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.filter.SimpleStringFilter;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-public class Ticket1995 extends Application {
-
-    private static final Object PROPERTY_1 = "Test";
-    private Table table;
-
-    @Override
-    public void init() {
-        final Window mainWin = new Window(getClass().getName());
-        setMainWindow(mainWin);
-
-        table = new Table();
-        table.addContainerProperty(PROPERTY_1, String.class, "");
-        table.setPageLength(4);
-
-        Item item = table.addItem("1");
-        item.getItemProperty(PROPERTY_1).setValue("Row 1");
-        item = table.addItem("2");
-        item.getItemProperty(PROPERTY_1).setValue("Row 2");
-
-        Filterable filterable = (Container.Filterable) table
-                .getContainerDataSource();
-        filterable.addContainerFilter(new SimpleStringFilter(PROPERTY_1, "Row",
-                true, false));
-
-        table.setColumnHeader(PROPERTY_1, "Test (filter: Row)");
-
-        mainWin.addComponent(table);
-        mainWin.addComponent(new Button("Add item",
-                new com.vaadin.ui.Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        addItem();
-                    }
-                }));
-    }
-
-    protected void addItem() {
-        Filterable filterable = (Container.Filterable) table
-                .getContainerDataSource();
-
-        Item i = table.addItem("abc");
-        String res = "";
-        if (i == null) {
-            res = "FAILED";
-        } else {
-            res = "OK!";
-        }
-
-        getMainWindow().showNotification("Tried to add item 'abc', " + res);
-
-        filterable.addContainerFilter(new SimpleStringFilter(PROPERTY_1, "Row",
-                true, false));
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket20.java b/tests/src/com/vaadin/tests/tickets/Ticket20.java
deleted file mode 100644
index 55fee95de3..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket20.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Validator;
-import com.vaadin.data.util.MethodProperty;
-import com.vaadin.data.validator.CompositeValidator;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket20 extends Application {
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window("Test app for #20");
-        setMainWindow(mainWin);
-
-        final TextField tx = new TextField("Integer");
-        mainWin.addComponent(tx);
-        tx.setImmediate(true);
-        CompositeValidator v = new CompositeValidator();
-        v.addValidator(new Validator() {
-
-            public boolean isValid(Object value) {
-                try {
-                    Integer.parseInt("" + value);
-                    return true;
-                } catch (NumberFormatException e) {
-                    return false;
-                }
-            }
-
-            public void validate(Object value) throws InvalidValueException {
-                if (!isValid(value)) {
-                    throw new InvalidValueException(value + " is not a number");
-                }
-            }
-        });
-        v.addValidator(new Validator() {
-
-            public boolean isValid(Object value) {
-                try {
-                    int i = Integer.parseInt("" + value);
-                    if (i < 0) {
-                        return false;
-                    }
-                    return true;
-                } catch (NumberFormatException e) {
-                    return false;
-                }
-            }
-
-            public void validate(Object value) throws InvalidValueException {
-                if (!isValid(value)) {
-                    throw new InvalidValueException(value
-                            + " is not a non-negative number");
-                }
-            }
-        });
-        CompositeValidator v2 = new CompositeValidator(
-                CompositeValidator.MODE_OR, null);
-        v2.addValidator(v);
-        v2.addValidator(new Validator() {
-
-            public boolean isValid(Object value) {
-                return "".equals("" + value);
-            }
-
-            public void validate(Object value) throws InvalidValueException {
-                if (!isValid(value)) {
-                    throw new InvalidValueException("Value is not empty string");
-                }
-            }
-        });
-        tx.addValidator(v2);
-
-        final String[] visibleProps = { "required", "invalidAllowed",
-                "readOnly", "readThrough", "invalidCommitted",
-                "validationVisible" };
-        for (int i = 0; i < visibleProps.length; i++) {
-            CheckBox b = new CheckBox(visibleProps[i],
-                    new MethodProperty<Boolean>(tx, visibleProps[i]));
-            b.setImmediate(true);
-            mainWin.addComponent(b);
-        }
-
-        mainWin.addComponent(new Button("Validate integer",
-                new Button.ClickListener() {
-                    public void buttonClick(
-                            com.vaadin.ui.Button.ClickEvent event) {
-                        mainWin.showNotification("The field is "
-                                + (tx.isValid() ? "" : "not ") + "valid");
-                    };
-                }));
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2001.java b/tests/src/com/vaadin/tests/tickets/Ticket2001.java
deleted file mode 100644
index 4796451dc0..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2001.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2001 extends Application {
-
-    @Override
-    public void init() {
-        final Window w = new Window(getClass().getName());
-        setMainWindow(w);
-
-        final VerticalLayout l = new VerticalLayout();
-        l.addComponent(new Label("row 1"));
-        l.addComponent(new Label("row 2"));
-        w.addComponent(l);
-
-        final CheckBox b = new CheckBox("fixed width: 30px", false);
-        b.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                if (b.booleanValue()) {
-                    l.setWidth("30px");
-                } else {
-                    l.setWidth(null);
-                }
-            }
-        });
-        b.setImmediate(true);
-        w.addComponent(b);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2002.java b/tests/src/com/vaadin/tests/tickets/Ticket2002.java
deleted file mode 100644
index 4e07230f46..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2002.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.util.MethodProperty;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket2002 extends Application {
-    private Long long1 = new Long(1L);
-    private Long long2 = new Long(2L);
-
-    public Long getLong1() {
-        return long1;
-    }
-
-    public void setLong1(Long long1) {
-        this.long1 = long1;
-    }
-
-    public Long getLong2() {
-        return long2;
-    }
-
-    public void setLong2(Long long2) {
-        this.long2 = long2;
-    }
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getName());
-        setMainWindow(w);
-
-        GridLayout layout = new GridLayout(2, 2);
-        layout.setSpacing(true);
-
-        TextField f1 = new TextField("Non-immediate/Long text field",
-                new MethodProperty<Long>(this, "long1"));
-        f1.setImmediate(false);
-        f1.setNullSettingAllowed(true);
-        TextField f2 = new TextField("Immediate/Long text field",
-                new MethodProperty<Long>(this, "long2"));
-        f2.setImmediate(true);
-        f2.setNullSettingAllowed(true);
-
-        layout.addComponent(f1);
-        layout.addComponent(f2);
-
-        w.setContent(layout);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2007.java b/tests/src/com/vaadin/tests/tickets/Ticket2007.java
deleted file mode 100644
index 84dafb41f3..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2007.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Window;
-
-public class Ticket2007 extends Application {
-
-    int childs = 0;
-
-    @Override
-    public void init() {
-
-        final Window main = new Window("Main window for #2007");
-        setMainWindow(main);
-        main.addComponent(new Button("Open another (non-main) window",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        Window c = new Window("Non-main browser window "
-                                + (++childs));
-                        addWindow(c);
-                        main.open(new ExternalResource(c.getURL()), "_new");
-                    }
-                }));
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2009.java b/tests/src/com/vaadin/tests/tickets/Ticket2009.java
deleted file mode 100644
index f726ff10de..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2009.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.data.Container;
-import com.vaadin.event.ItemClickEvent;
-import com.vaadin.tests.TestForTablesInitialColumnWidthLogicRendering;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2009 extends com.vaadin.Application {
-
-    TextField f = new TextField();
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        HorizontalLayout ol = new HorizontalLayout();
-        main.setContent(ol);
-        ol.setSizeFull();
-
-        Panel p = new Panel("Tree test");
-        p.setSizeFull();
-
-        Tree t = new Tree();
-
-        t.addItem("Foo");
-        t.addItem("Bar");
-
-        final VerticalLayout events = new VerticalLayout();
-
-        t.addListener(new ItemClickEvent.ItemClickListener() {
-            public void itemClick(ItemClickEvent event) {
-                events.addComponent(new Label(new Label("Click:"
-                        + (event.isDoubleClick() ? "double" : "single")
-                        + " button:" + event.getButton() + " propertyId:"
-                        + event.getPropertyId() + " itemID:"
-                        + event.getItemId() + " item:" + event.getItem())));
-
-            }
-        });
-
-        main.addComponent(p);
-        p.addComponent(t);
-        p.addComponent(events);
-
-        Panel p2 = new Panel("Table test (try dbl click also)");
-        p2.setSizeFull();
-
-        final VerticalLayout events2 = new VerticalLayout();
-        Table table = TestForTablesInitialColumnWidthLogicRendering
-                .getTestTable(5, 100);
-        table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-        table.addListener(new ItemClickEvent.ItemClickListener() {
-            public void itemClick(ItemClickEvent event) {
-                events2.addComponent(new Label("Click:"
-                        + (event.isDoubleClick() ? "double" : "single")
-                        + " button:" + event.getButton() + " propertyId:"
-                        + event.getPropertyId() + " itemID:"
-                        + event.getItemId() + " item:" + event.getItem()));
-                if (event.isDoubleClick()) {
-                    new PropertyEditor(event);
-                }
-
-            }
-        });
-        p2.addComponent(table);
-        p2.addComponent(events2);
-
-        main.addComponent(p2);
-
-    }
-
-    class PropertyEditor extends Window {
-
-        private static final int W = 300;
-        private static final int H = 150;
-
-        private Container c;
-        private Object itemid;
-        private Object propertyid;
-
-        TextField editor = new TextField();
-        Button done = new Button("Done");
-
-        PropertyEditor(ItemClickEvent event) {
-            c = (Container) event.getSource();
-
-            propertyid = event.getPropertyId();
-            itemid = event.getItemId();
-
-            setCaption("Editing " + itemid + " : " + propertyid);
-
-            editor.setPropertyDataSource(c.getContainerProperty(itemid,
-                    propertyid));
-            addComponent(editor);
-            addComponent(done);
-
-            setWidth(W + "px");
-            setHeight(H + "px");
-
-            setPositionX(event.getClientX() - W / 2);
-            setPositionY(event.getClientY() - H / 2);
-
-            getMainWindow().addWindow(this);
-
-            done.addListener(new Button.ClickListener() {
-                public void buttonClick(ClickEvent event) {
-                    getMainWindow().removeWindow(PropertyEditor.this);
-                }
-            });
-
-        }
-
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2011.java b/tests/src/com/vaadin/tests/tickets/Ticket2011.java
deleted file mode 100644
index e28ee9b4e2..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2011.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.Window;
-
-public class Ticket2011 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getName());
-        setMainWindow(w);
-        // setTheme("tests-ticket");
-        GridLayout layout = new GridLayout(10, 10);
-        w.setContent(layout);
-        createUI(layout);
-    }
-
-    private void createUI(GridLayout layout) {
-        Select s = new Select("Select");
-        s.addItem("Item 1");
-        s.addItem("Item 2");
-        layout.addComponent(s);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2014.java b/tests/src/com/vaadin/tests/tickets/Ticket2014.java
deleted file mode 100644
index b005eefd03..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2014.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.UUID;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Window;
-
-public class Ticket2014 extends Application {
-
-    private HorizontalLayout innerLayout1;
-    private Button b1;
-    private Panel panel;
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getName());
-        setMainWindow(w);
-        // setTheme("tests-ticket");
-        GridLayout layout = new GridLayout(10, 10);
-        w.setContent(layout);
-        createUI(layout);
-    }
-
-    private void createUI(GridLayout layout) {
-        createPanel(layout);
-
-        layout.addComponent(new Button("Change class name",
-                new ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        b1.setStyleName(UUID.randomUUID().toString());
-                    }
-
-                }));
-
-    }
-
-    private void createPanel(GridLayout layout) {
-        panel = new Panel("panel caption");
-        layout.addComponent(panel);
-
-        innerLayout1 = new HorizontalLayout();
-        innerLayout1.setSpacing(true);
-        panel.addComponent(innerLayout1);
-
-        b1 = new Button("Button inside orderedLayout", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                System.out.println("Clicked " + event.getButton().getCaption());
-            }
-
-        });
-
-        innerLayout1.addComponent(b1);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2021.java b/tests/src/com/vaadin/tests/tickets/Ticket2021.java
deleted file mode 100644
index 69858a57d6..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2021.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TextArea;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2021 extends Application {
-
-    private TextArea tf1, tf2, tf3;
-
-    private String contents = "This TextField SHOULD FILL the panel and NOT CAUSE any scrollbars to appear in the Panel. Scrollbars SHOULD appear in the TextField AND the whole scrollbars (includinc arrow down) SHOULD be visible.\n\n"
-            + ""
-            + "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent quis justo. Vivamus nec mi eu libero convallis auctor. Mauris et arcu. Nunc luctus justo. Aenean convallis, odio in vehicula scelerisque, est magna condimentum pede, a aliquam elit eros vitae diam. Phasellus porttitor convallis tellus. Nullam elementum, ligula nec viverra malesuada, risus tortor bibendum dui, eget hendrerit sem enim at massa. Nam eu pede sed nulla congue fermentum. Vestibulum malesuada libero non nunc. Proin rutrum. Fusce erat pede, volutpat vitae, aliquam ut, sagittis vel, augue. Fusce dui pede, convallis nec, accumsan tincidunt, consectetuer ac, purus. Nulla facilisi. Ut nisi. Sed orci risus, lacinia eu, sodales molestie, gravida quis, neque. Vestibulum pharetra ornare elit. Nulla porttitor molestie mauris. Morbi fringilla tellus sed risus. Curabitur varius massa."
-            + "Nulla nisi. Sed blandit, ante vitae sagittis volutpat, arcu mauris vehicula risus, vitae posuere felis lectus sit amet purus. Donec nec magna et leo eleifend scelerisque. Suspendisse condimentum pharetra ligula. Curabitur lorem. Pellentesque a augue sit amet enim fermentum placerat. Phasellus ante risus, molestie at, iaculis at, pellentesque non, tellus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus non urna eget risus tempus imperdiet. Integer est diam, sagittis sit amet, posuere sit amet, bibendum sed, lacus. Aenean adipiscing cursus ipsum. Quisque at elit. Vestibulum vitae nunc. Praesent placerat metus viverra lorem. Cras nec elit congue nisi faucibus feugiat. Nam eget mi. Vestibulum condimentum. Nunc nisl ante, cursus in, dictum ac, lobortis rutrum, mi. Nulla eu nisi. In ultricies vehicula magna."
-            + "Nunc eros dui, elementum at, ullamcorper eget, varius at, velit. Ut dictum. Cras ullamcorper ante vel tortor. Quisque viverra mauris vulputate quam. Nulla dui. Suspendisse non eros at ipsum faucibus hendrerit. Morbi dignissim pharetra tortor. Etiam malesuada. Mauris lacinia elementum erat. Duis mollis placerat metus. Nunc risus felis, cursus ac, cursus vel, convallis vel, metus. Ut vehicula nibh et nulla. Vivamus id pede. Quisque egestas arcu a ligula. Maecenas vehicula. Quisque sed ligula quis tellus tempus rutrum. Curabitur vel augue sed orci egestas pharetra. Duis pharetra.";
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        w.setContent(new GridLayout(2, 2));
-        setMainWindow(w);
-
-        Panel p = new Panel();
-        p.setCaption("ExpandLayout");
-        p.setWidth("500px");
-        p.setHeight("500px");
-        p.setContent(new VerticalLayout());
-        p.getContent().setSizeFull();
-
-        w.getContent().addComponent(p);
-
-        tf1 = new TextArea();
-        tf1.setRows(5);
-        tf1.setSizeFull();
-        tf1.setValue(contents);
-        tf1.setCaption("TextField caption");
-        p.getContent().addComponent(tf1);
-
-        /*
-         * 
-         * OrderedLayout
-         */
-
-        Panel p2 = new Panel();
-        p2.setCaption("OrderedLayout");
-        p2.setWidth("500px");
-        p2.setHeight("500px");
-        p2.setContent(new VerticalLayout());
-        p2.getContent().setSizeFull();
-
-        w.getContent().addComponent(p2);
-
-        tf2 = new TextArea();
-        tf2.setRows(5);
-        tf2.setSizeFull();
-        tf2.setValue(contents);
-        tf2.setCaption("TextField caption");
-        p2.getContent().addComponent(tf2);
-
-        /*
-         * 
-         * GridLayout
-         */
-
-        Panel p3 = new Panel();
-        p3.setCaption("GridLayout");
-        p3.setWidth("500px");
-        p3.setHeight("500px");
-        // p3.setContent(new GridLayout());
-        p3.getContent().setSizeFull();
-        ((Layout) p3.getContent()).setMargin(false);
-
-        GridLayout gl = new GridLayout();
-        gl.setSizeFull();
-        gl.setMargin(false);
-        p3.getContent().addComponent(gl);
-        w.getContent().addComponent(p3);
-
-        tf3 = new TextArea();
-        tf3.setRows(5);
-        tf3.setSizeFull();
-        tf3.setValue(contents);
-        tf3.setCaption("TextField caption");
-        // p3.getContent().addComponent(tf3);
-        gl.addComponent(tf3);
-
-        // Panel pp = new Panel();
-        // pp.setCaption("OrderedLayout");
-        // pp.setWidth("500px");
-        // pp.setHeight("500px");
-        // pp.getContent().setSizeFull();
-        // orderedLayout = new VerticalLayout();
-        // pp.getContent().addComponent(orderedLayout);
-        // w.getContent().addComponent(pp);
-        // createUI(orderedLayout);
-    }
-
-    @SuppressWarnings("unused")
-    private void createUI(Layout layout) {
-        Label l = new Label("Label");
-        Button b = new Button("Enable/disable caption and watch button move",
-                new ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        System.out.println("Enable/disable caption");
-                        for (AbstractComponent l : new AbstractComponent[] {
-                                tf1, tf2, tf3 }) {
-                            // AbstractComponent l = tf2;
-                            // Layout l = (Layout) event.getButton().getData();
-                            if (l.getCaption() == null) {
-                                l.setCaption("Expand layout caption");
-                            } else {
-                                l.setCaption(null);
-                            }
-                        }
-                    }
-
-                });
-        b.setData(layout);
-        Label l2 = new Label("This should always be visible");
-
-        layout.addComponent(l);
-        layout.addComponent(b);
-        layout.addComponent(l2);
-
-        if (layout instanceof AbstractOrderedLayout) {
-            ((AbstractOrderedLayout) layout).setExpandRatio(l, 1);
-
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2022.java b/tests/src/com/vaadin/tests/tickets/Ticket2022.java
deleted file mode 100644
index 17df2a2700..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2022.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.CustomLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2022 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        setTheme("tests-tickets");
-        CustomLayout l;
-
-        // WebApplicationContext wac = ((WebApplicationContext) getContext());
-        // File f = new File(wac.getBaseDirectory().getAbsoluteFile()
-        // + "/VAADIN/themes/" + getTheme() + "/layouts/Ticket2022.html");
-
-        l = new CustomLayout("Ticket2022");
-        // try {
-        // l = new CustomLayout(new FileInputStream(f));
-        w.setContent(l);
-        // } catch (FileNotFoundException e) {
-        // // TODO Auto-generated catch block
-        // e.printStackTrace();
-        // } catch (IOException e) {
-        // // TODO Auto-generated catch block
-        // e.printStackTrace();
-        // }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2023.java b/tests/src/com/vaadin/tests/tickets/Ticket2023.java
deleted file mode 100644
index ac80ef602b..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2023.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2023 extends com.vaadin.Application implements
-        Button.ClickListener {
-
-    AbstractComponent c = new Button();
-
-    @Override
-    public void init() {
-        Window main = new Window();
-        setMainWindow(main);
-
-        String[] sizes = { "20", "100", "1", "0", "-1", "", "z" };
-        String[] units = { "%", "px", "em", "ex", "in", "cm", "mm", "pt", "pc",
-                "", "p", "zyx" };
-
-        GridLayout gl = new GridLayout(units.length, sizes.length);
-        main.addComponent(gl);
-        for (int i = 0; i < sizes.length; i++) {
-            for (int j = 0; j < units.length; j++) {
-                String s = sizes[i] + units[j];
-                gl.addComponent(new Button(s, this));
-            }
-        }
-
-        gl.addComponent(new Button("null", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                c.setWidth(null);
-                c.setHeight(null);
-
-            }
-
-        }));
-
-        main.addComponent(c);
-
-    }
-
-    public void buttonClick(ClickEvent event) {
-        c.setWidth(event.getButton().getCaption());
-        c.setHeight(event.getButton().getCaption());
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2024.java b/tests/src/com/vaadin/tests/tickets/Ticket2024.java
deleted file mode 100644
index 5f0b432790..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2024.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2024 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        GridLayout layout = new GridLayout(2, 2);
-        layout.setHeight("100%");
-        layout.setWidth("700");
-        w.getContent().setSizeFull();
-        w.getContent().setHeight("2000");
-        w.getContent().addComponent(layout);
-
-        layout.addComponent(new Label(
-                "This should NOT get stuck when scrolling down"));
-        layout.addComponent(new TextField("This should not get stuck either..."));
-
-        VerticalLayout ol = new VerticalLayout();
-        ol.setHeight("1000");
-        ol.setWidth("200");
-        w.getContent().addComponent(ol);
-        ol.addComponent(new Label("Just a label to enable the scrollbar"));
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2026.java b/tests/src/com/vaadin/tests/tickets/Ticket2026.java
deleted file mode 100644
index be329eb5b5..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2026.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket2026 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-
-        GridLayout layout = new GridLayout(2, 2);
-        layout.setSpacing(true);
-
-        @SuppressWarnings("unused")
-        int nr = 5;
-        TextField tf;
-        tf = new TextField("TextField (tabIndex 1)");
-        tf.setTabIndex(1);
-        tf.focus();
-        layout.addComponent(tf);
-        layout.addComponent(new TextField("TextField without tab index"));
-        layout.addComponent(new TextField("TextField without tab index"));
-        layout.addComponent(new TextField("TextField without tab index"));
-        layout.addComponent(new TextField("TextField without tab index"));
-        tf = new TextField("TextField (tabIndex 2)");
-        tf.setTabIndex(2);
-        layout.addComponent(tf);
-
-        w.setContent(layout);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2029.java b/tests/src/com/vaadin/tests/tickets/Ticket2029.java
deleted file mode 100644
index cabbab2c32..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2029.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.Random;
-
-import com.vaadin.Application;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.terminal.UserError;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TextArea;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2029 extends Application {
-
-    int COMPONENTS;
-    int DIM1, DIM2;
-    Random r = new Random();
-
-    @Override
-    public void init() {
-        COMPONENTS = 5;
-        DIM1 = 504;
-        DIM2 = 100;
-
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        Panel p = createPanel();
-        w.getContent().addComponent(p);
-        // w.getLayout().addComponent(createGLPanel());
-        w.getContent().addComponent(createPanelV());
-    }
-
-    private Panel createPanel() {
-        Panel p = new Panel(DIM1 + "x" + DIM2 + " OrderedLayout");
-        p.setWidth(DIM1 + "px");
-        p.setHeight(DIM2 + "px");
-
-        HorizontalLayout layout = new HorizontalLayout();
-        p.setContent(layout);
-        p.getContent().setSizeFull();
-
-        for (int i = 0; i < COMPONENTS; i++) {
-            TextField tf = new TextField();
-            if (r.nextBoolean()) {
-                tf.setCaption("Caption");
-            }
-            if (r.nextBoolean()) {
-                tf.setRequired(true);
-            }
-            if (r.nextBoolean()) {
-                tf.setComponentError(new UserError("Error"));
-            }
-            tf.setWidth("100%");
-            layout.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
-            p.addComponent(tf);
-
-        }
-
-        return p;
-    }
-
-    @SuppressWarnings("unused")
-    private Panel createGLPanel() {
-        Panel p = new Panel("" + DIM1 + "x" + DIM2 + " GridLayout");
-        p.setWidth("" + DIM1 + "px");
-        p.setHeight("" + DIM2 + "px");
-
-        GridLayout layout = new GridLayout(COMPONENTS, 1);
-        p.setContent(layout);
-        p.getContent().setSizeFull();
-
-        for (int i = 0; i < COMPONENTS; i++) {
-            TextField tf = new TextField();
-            tf.setImmediate(true);
-            tf.addListener(new ValueChangeListener() {
-
-                public void valueChange(ValueChangeEvent event) {
-                    Component c = ((Component) event.getProperty());
-                    c.setCaption("askfdj");
-
-                }
-            });
-            if (r.nextBoolean()) {
-                tf.setCaption("Caption");
-            }
-            if (r.nextBoolean()) {
-                tf.setRequired(true);
-            }
-            if (r.nextBoolean()) {
-                tf.setComponentError(new UserError("Error"));
-            }
-            tf.setWidth("100%");
-            layout.setComponentAlignment(tf, Alignment.MIDDLE_LEFT);
-            p.addComponent(tf);
-
-        }
-
-        return p;
-    }
-
-    private Panel createPanelV() {
-        Panel p = new Panel("" + DIM1 + "x" + DIM2 + " OrderedLayout");
-        p.setWidth("" + DIM2 + "px");
-        p.setHeight("" + DIM1 + "px");
-
-        VerticalLayout layout = new VerticalLayout();
-        p.setContent(layout);
-        p.getContent().setSizeFull();
-
-        for (int i = 0; i < COMPONENTS; i++) {
-            TextArea tf = new TextArea();
-            if (r.nextBoolean()) {
-                tf.setCaption("Caption");
-            }
-            if (r.nextBoolean()) {
-                tf.setRequired(true);
-            }
-            if (r.nextBoolean()) {
-                tf.setComponentError(new UserError("Error"));
-            }
-
-            tf.setRows(2);
-            tf.setSizeFull();
-
-            layout.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
-            p.addComponent(tf);
-
-        }
-
-        return p;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2037.java b/tests/src/com/vaadin/tests/tickets/Ticket2037.java
deleted file mode 100644
index 652983c423..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2037.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2037 extends com.vaadin.Application {
-
-    @Override
-    public void init() {
-        Window main = new Window();
-        setMainWindow(main);
-
-        main.addComponent(new Label(
-                "Use debug dialog and trac number of registered paintables. It should not grow on subsequant b clicks."));
-
-        final Layout lo = new VerticalLayout();
-
-        Button b = new Button("b");
-
-        main.addComponent(b);
-        main.addComponent(lo);
-        b.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-
-                repopupate(lo);
-
-            }
-        });
-
-    }
-
-    int counter = 0;
-
-    protected void repopupate(Layout lo) {
-        lo.removeAllComponents();
-
-        for (int i = 0; i < 20; i++) {
-            lo.addComponent(new Label("tc" + (counter++)));
-        }
-
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2038.java b/tests/src/com/vaadin/tests/tickets/Ticket2038.java
deleted file mode 100644
index 85a5a4b701..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2038.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Window.Notification;
-
-public class Ticket2038 extends Application {
-
-    @Override
-    public void init() {
-        final Window w = new Window("Testing for #2038");
-        setMainWindow(w);
-
-        final TextField tf = new TextField(
-                "Test-field, enter someting and click outside the field to activate");
-        tf.setRequired(true);
-        tf.setImmediate(true);
-        tf.addListener(new Property.ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                w.showNotification("TextField is " + (tf.isValid() ? "" : "in")
-                        + "valid, with error: " + tf.getErrorMessage(),
-                        Notification.TYPE_WARNING_MESSAGE);
-            }
-        });
-        w.addComponent(tf);
-
-        final CheckBox b = new CheckBox(
-                "Field should use error message. (!) should be shown when invalid.",
-                false);
-        w.addComponent(b);
-        b.setImmediate(true);
-        b.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                tf.setRequiredError(b.booleanValue() ? "Field must not be empty"
-                        : null);
-            }
-        });
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2040.java b/tests/src/com/vaadin/tests/tickets/Ticket2040.java
deleted file mode 100644
index f1775da039..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2040.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.ui.Accordion;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.TextArea;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket2040 extends com.vaadin.Application {
-
-    TextField f = new TextField();
-
-    @Override
-    public void init() {
-        Window main = new Window();
-        setMainWindow(main);
-
-        main.getContent().setSizeFull();
-        ((Layout) main.getContent()).setMargin(true);
-
-        setTheme("tests-tickets");
-
-        Accordion ts;
-
-        ts = new Accordion();
-        ts.setSizeFull();
-        ts.setWidth("300px");
-
-        TextArea l = new TextArea("DSFS");
-        l.setRows(2);
-        l.setStyleName("red");
-        l.setSizeFull();
-        ts.addTab(l, "100% h component", null);
-
-        Label testContent = new Label(
-                "TabSheet by default uses caption, icon, errors etc. from Components. ");
-
-        testContent.setCaption("Introduction to test");
-
-        ts.addTab(testContent);
-
-        // main.addComponent(ts);
-
-        ts = new Accordion();
-        ts.setSizeFull();
-        ts.setHeight("200px");
-        ts.setWidth("300px");
-
-        l = new TextArea("DSFS");
-        l.setRows(2);
-        l.setStyleName("red");
-        l.setSizeFull();
-        ts.addTab(l, "200px h component", null);
-
-        testContent = new Label(
-                "TabSheet by default uses caption, icon, errors etc. from Components. ");
-
-        testContent.setCaption("Introduction to test");
-
-        ts.addTab(testContent);
-
-        main.addComponent(ts);
-
-        ts = new Accordion();
-        ts.setSizeFull();
-        ts.setHeight("50%");
-        ts.setWidth("300px");
-
-        l = new TextArea("DSFS");
-        l.setRows(2);
-        l.setStyleName("red");
-        l.setSizeFull();
-        ts.addTab(l, "50% h component", null);
-
-        testContent = new Label(
-                "TabSheet by default uses caption, icon, errors etc. from Components. ");
-
-        testContent.setCaption("Introduction to test");
-
-        ts.addTab(testContent);
-
-        // main.addComponent(ts);
-
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2042.java b/tests/src/com/vaadin/tests/tickets/Ticket2042.java
deleted file mode 100644
index 2dfe4a1cb5..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2042.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Window.Notification;
-
-public class Ticket2042 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        GridLayout layout = new GridLayout(1, 2);
-        layout.setHeight("2000px");
-        w.setContent(layout);
-        createUI(layout);
-    }
-
-    private void createUI(GridLayout layout) {
-        layout.addComponent(new Label("abc"));
-        layout.addComponent(new Button("B", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                Notification n = new Notification("Test");
-                getMainWindow().showNotification(n);
-            }
-
-        }));
-
-        layout.addComponent(new Label("abc"));
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2043.java b/tests/src/com/vaadin/tests/tickets/Ticket2043.java
deleted file mode 100644
index faea096744..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2043.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.Window;
-
-public class Ticket2043 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        GridLayout layout = new GridLayout(10, 10);
-        w.setContent(layout);
-        createUI(layout);
-    }
-
-    private void createUI(GridLayout layout) {
-        Link l = new Link("Vaadin home (new 200x200 window, no decor, icon)",
-                new ExternalResource("http://www.vaadin.com"), "_blank", 200,
-                200, Link.TARGET_BORDER_NONE);
-
-        layout.addComponent(l);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2048.java b/tests/src/com/vaadin/tests/tickets/Ticket2048.java
deleted file mode 100644
index 65b5f73b53..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2048.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2048 extends Application {
-
-    private Embedded embedded;
-    private Panel p;
-    private VerticalLayout orderedLayout;
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        // splitPanel = new SplitPanel(SplitPanel.ORIENTATION_HORIZONTAL);
-        // getMainWindow().setContent(splitPanel);
-
-        // GridLayout layout = new GridLayout(10, 10);
-        // w.setContent(layout);
-        // gridLayout = new GridLayout(1, 1);
-        orderedLayout = new VerticalLayout();
-
-        getMainWindow().setContent(orderedLayout);
-        // getMainWindow().setContent(new GridLayout(1, 1));
-        getMainWindow().setSizeFull();
-        getMainWindow().getContent().setSizeFull();
-
-        createUI(orderedLayout);
-        // createUI(gridLayout);
-
-    }
-
-    private void createUI(Layout layout) {
-        // Button sw = new Button("Switch", new ClickListener() {
-        //
-        // public void buttonClick(ClickEvent event) {
-        // Layout l = getMainWindow().getLayout();
-        // if (l == orderedLayout) {
-        // getMainWindow().setContent(gridLayout);
-        // } else {
-        // getMainWindow().setContent(orderedLayout);
-        // }
-        //
-        // }
-        // });
-        // layout.addComponent(sw);
-
-        Layout ol = new GridLayout(1, 2);
-        p = new Panel("Panel", ol);
-        p.setSizeFull();
-        Label l = new Label("Spacer");
-        l.setHeight("400px");
-        p.addComponent(l);
-
-        embedded = new Embedded(null, new ThemeResource(
-                "icons/64/folder-add.png"));
-        layout.addComponent(embedded);
-        Button b = new Button(
-                "Replace image with new embedded component (flashes)",
-                new ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        Embedded newEmbedded = new Embedded(null,
-                                new ThemeResource("icons/64/folder-add.png"));
-                        getMainWindow().getContent().replaceComponent(embedded,
-                                newEmbedded);
-                        embedded = newEmbedded;
-
-                    }
-
-                });
-        p.addComponent(b);
-
-        b = new Button("Change image source (is fine)", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                String img = "folder-add";
-                if (((ThemeResource) embedded.getSource()).getResourceId()
-                        .contains("folder-add")) {
-                    img = "folder-delete";
-                }
-                embedded.setSource(new ThemeResource("icons/64/" + img + ".png"));
-
-            }
-
-        });
-
-        p.addComponent(b);
-        layout.addComponent(p);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2051.java b/tests/src/com/vaadin/tests/tickets/Ticket2051.java
deleted file mode 100644
index e901ebc343..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2051.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Item;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket2051 extends Application {
-
-    private static final Object P1 = new Object();
-    private static final Object P2 = new Object();
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        GridLayout layout = new GridLayout(10, 10);
-        w.setContent(layout);
-        createUI(layout);
-    }
-
-    private void createUI(GridLayout layout) {
-        Table t = new Table("This is a table");
-        t.addContainerProperty(P1, Component.class, null);
-        t.addContainerProperty(P2, Component.class, null);
-        t.setColumnHeaders(new String[] { "Col1", "Col2" });
-
-        Item i = t.addItem("1");
-        i.getItemProperty(P1).setValue(new TextField("abc"));
-        i.getItemProperty(P2).setValue(new Label("label"));
-        Item i2 = t.addItem("2");
-        i2.getItemProperty(P1).setValue(new Button("def"));
-        i2.getItemProperty(P2).setValue(new DateField());
-
-        layout.addComponent(t);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2053.java b/tests/src/com/vaadin/tests/tickets/Ticket2053.java
deleted file mode 100644
index f784b40aed..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2053.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Window.CloseEvent;
-
-public class Ticket2053 extends Application {
-
-    int childs = 0;
-
-    @Override
-    public void init() {
-
-        final Window main = new Window("#2053");
-        setMainWindow(main);
-        Button nothing = new Button("Do nothing");
-        main.addComponent(nothing);
-        nothing.setDescription("Even though no action is taked, this window is refreshed to "
-                + "draw changes not originating from this window. Such changes include changes "
-                + "made by other browser-windows.");
-        Button add = new Button("Add a window", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                final String name = "Child " + (++childs);
-                Window c = new Window(name);
-                c.addListener(new Window.CloseListener() {
-                    public void windowClose(CloseEvent e) {
-                        main.addComponent(new Label(name + " closed"));
-                    }
-                });
-                addWindow(c);
-                main.open(new ExternalResource(c.getURL()), "_new");
-                main.addComponent(new Label(name + " opened"));
-                final TextField tf = new TextField("Non immediate textfield");
-                c.addComponent(tf);
-                tf.addListener(new Property.ValueChangeListener() {
-                    public void valueChange(ValueChangeEvent event) {
-                        main.addComponent(new Label(name + " send text:"
-                                + tf.toString()));
-                    }
-                });
-                for (int i = 0; i < 3; i++) {
-                    final String caption = "Slow button " + i;
-                    c.addComponent(new Button(caption,
-                            new Button.ClickListener() {
-                                public synchronized void buttonClick(
-                                        ClickEvent event) {
-                                    try {
-                                        this.wait(2000);
-                                    } catch (InterruptedException e) {
-                                    }
-                                    main.addComponent(new Label(caption
-                                            + " pressed"));
-                                }
-                            }));
-                }
-
-            }
-        });
-        main.addComponent(add);
-        add.setDescription("This button opens a new browser window. Closing the browser "
-                + "window should do two things: 1) submit all unsubmitted state to server "
-                + "(print any changes to textfield to main window) and 2) call window.close()"
-                + " on the child window (print closed on the main window)");
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2060.java b/tests/src/com/vaadin/tests/tickets/Ticket2060.java
deleted file mode 100644
index 63bf5b3ff7..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2060.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2060 extends Application {
-
-    private Button button1;
-    private Button button2;
-    private Button button3;
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        GridLayout layout = new GridLayout(10, 10);
-        w.setContent(layout);
-        createUI(layout);
-    }
-
-    private void createUI(GridLayout layout) {
-        HorizontalLayout buttonLayout = new HorizontalLayout();
-        button1 = new Button("Button which is 50px wide");
-        button1.setWidth("50px");
-        button2 = new Button("Button without width");
-        button3 = new Button("Click to repaint buttons", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                button1.requestRepaint();
-                button2.requestRepaint();
-                button3.requestRepaint();
-
-            }
-
-        });
-
-        buttonLayout.addComponent(button1);
-        buttonLayout.addComponent(button2);
-        buttonLayout.addComponent(button3);
-
-        layout.addComponent(buttonLayout);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2061.java b/tests/src/com/vaadin/tests/tickets/Ticket2061.java
deleted file mode 100644
index c9cc3ce328..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2061.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.ui.Accordion;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2061 extends Application {
-
-    private Window mainWindow;
-
-    @Override
-    public void init() {
-        mainWindow = new Window("Ticket 2061");
-        mainWindow.setSizeFull();
-        mainWindow.getContent().setSizeFull();
-        setMainWindow(mainWindow);
-
-        MyTable table1 = new MyTable(24, "table1");
-        table1.loadTable(1000);
-
-        MyTable table2 = new MyTable(24, "table2");
-        table2.loadTable(1000);
-
-        MyTable table3 = new MyTable(24, "table3");
-        table3.loadTable(1000);
-
-        MyAccordion accordion = new MyAccordion(new Component[] { table1,
-                table2 }, "Test");
-
-        Tabs tab = new Tabs(new Component[] { accordion, table3 });
-
-        mainWindow.addComponent(tab);
-
-    }
-
-    public class MyTable extends CustomComponent implements ValueChangeListener {
-
-        private Table table = new Table();
-        private String[] columns;
-        private VerticalLayout layout = new VerticalLayout();
-
-        public MyTable(int columnNumber, String id) {
-            setDebugId(id);
-            setCompositionRoot(layout);
-            setSizeFull();
-            columns = initializeColumns(columnNumber);
-            table.setWidth("100%");
-            table.setHeight("100%");
-            table.setColumnReorderingAllowed(true);
-            table.setColumnCollapsingAllowed(true);
-            table.setSelectable(true);
-            table.setMultiSelect(false);
-            table.setNullSelectionAllowed(false);
-            // table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-            table.addListener(this);
-            table.setContainerDataSource(createContainer());
-            layout.addComponent(table);
-        }
-
-        public void loadTable(int itemNumber) {
-            table.removeAllItems();
-            for (int j = 0; j < itemNumber; j++) {
-                Item rowItem = table.addItem(j);
-                if (rowItem != null) {
-                    for (int i = 0; i < columns.length; i++) {
-                        rowItem.getItemProperty(columns[i]).setValue(
-                                "Value" + j);
-                    }
-                }
-            }
-        }
-
-        private HierarchicalContainer createContainer() {
-            final HierarchicalContainer c = new HierarchicalContainer();
-            for (int i = 0; i < columns.length; i++) {
-                c.addContainerProperty(columns[i], String.class, null);
-            }
-            return c;
-        }
-
-        private String[] initializeColumns(int number) {
-            String[] columns = new String[number];
-            for (int i = 0; i < number; i++) {
-                columns[i] = "Column" + i;
-            }
-            return columns;
-        }
-
-        public void valueChange(ValueChangeEvent event) {
-
-        }
-
-    }
-
-    public class Tabs extends TabSheet {
-
-        public Tabs(Component[] components) {
-            this.setWidth("100%");
-            this.setHeight("100%");
-            for (int i = 0; i < components.length; i++) {
-                this.addTab(components[i], components[i].getDebugId(), null);
-            }
-
-        }
-    }
-
-    public class MyAccordion extends Accordion {
-
-        public MyAccordion(Component[] components, String id) {
-            this.setWidth("100%");
-            this.setHeight("100%");
-            setDebugId(id);
-            for (int i = 0; i < components.length; i++) {
-                this.addTab(components[i], components[i].getDebugId(), null);
-            }
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2061b.java b/tests/src/com/vaadin/tests/tickets/Ticket2061b.java
deleted file mode 100644
index 5dc6dde768..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2061b.java
+++ /dev/null
@@ -1,200 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Accordion;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
-import com.vaadin.ui.TabSheet.SelectedTabChangeListener;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.VerticalSplitPanel;
-import com.vaadin.ui.Window;
-
-public class Ticket2061b extends Application implements
-        SelectedTabChangeListener {
-
-    private Window mainWindow;
-    private Panel p;
-
-    @Override
-    public void init() {
-        mainWindow = new Window("Ticket 2061b");
-        mainWindow.setSizeFull();
-        AbstractOrderedLayout mainLayout = (AbstractOrderedLayout) mainWindow
-                .getContent();
-        mainLayout.setSizeFull();
-        mainLayout.setMargin(false);
-        setMainWindow(mainWindow);
-
-        VerticalSplitPanel sp = new VerticalSplitPanel();
-        sp.setSizeFull();
-        sp.setSplitPosition(20, Sizeable.UNITS_PIXELS);
-
-        p = new Panel("This is a panel");
-        p.setSizeFull();
-        Label label1 = new Label("This is a table!");
-        label1.setHeight("1500px");
-        label1.setWidth("1500px");
-        p.addComponent(label1);
-        p.setScrollTop(50);
-        // MyTable table1 = new MyTable(24, "table1");
-        // table1.loadTable(1000);
-
-        // MyTable table2 = new MyTable(24, "table2");
-        // table2.loadTable(1000);
-
-        // MyTable table3 = new MyTable(24, "table3");
-        // table3.loadTable(1000);
-
-        // MyAccordion accordion = new MyAccordion(new Component[] { table1,
-        // table2 }, "Test");
-
-        Label a = new Label("abc123");
-        TextField tf = new TextField("A large textfield");
-        tf.setHeight("2500px");
-        tf.setWidth("2500px");
-
-        TabsAcc tab = new TabsAcc(new Component[] { p, a, tf });
-        tab.addListener(this);
-
-        mainLayout.addComponent(sp);
-        sp.addComponent(new Label("C 1"));
-        // sp.addComponent(new Label("C 2"));
-        // sp.setHeight("100px");
-
-        sp.addComponent(tab);
-        // mainLayout.addComponent(new Label("Filler"));
-        // mainLayout.addComponent(tab);
-        // mainLayout.setExpandRatio(tab, 1.0f);
-        // sp.addComponent(new Label("Filler"));
-        // sp.addComponent(tab);
-
-        p = new Panel("This is a panel");
-        p.setWidth("2000px");
-        p.setHeight("2000px");
-        Panel p2 = new Panel("This is another panel");
-        p2.setWidth("2500px");
-        p2.setHeight("2500px");
-        label1 = new Label("This is a table!");
-        label1.setHeight("1500px");
-        label1.setWidth("1500px");
-        p2.addComponent(label1);
-        p.addComponent(p2);
-
-        tab.addTab(p, "Panel with panel", null);
-    }
-
-    public class MyTable extends CustomComponent implements ValueChangeListener {
-
-        private Table table = new Table();
-        private String[] columns;
-        private VerticalLayout layout = new VerticalLayout();
-
-        public MyTable(int columnNumber, String id) {
-            setDebugId(id);
-            setCompositionRoot(layout);
-            setSizeFull();
-            columns = initializeColumns(columnNumber);
-            table.setWidth("100%");
-            table.setHeight("100%");
-            table.setColumnReorderingAllowed(true);
-            table.setColumnCollapsingAllowed(true);
-            table.setSelectable(true);
-            table.setMultiSelect(false);
-            table.setNullSelectionAllowed(false);
-            // table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-            table.addListener(this);
-            table.setContainerDataSource(createContainer());
-            layout.addComponent(table);
-        }
-
-        public void loadTable(int itemNumber) {
-            table.removeAllItems();
-            for (int j = 0; j < itemNumber; j++) {
-                Item rowItem = table.addItem(j);
-                if (rowItem != null) {
-                    for (int i = 0; i < columns.length; i++) {
-                        rowItem.getItemProperty(columns[i]).setValue(
-                                "Value" + j);
-                    }
-                }
-            }
-        }
-
-        private HierarchicalContainer createContainer() {
-            final HierarchicalContainer c = new HierarchicalContainer();
-            for (int i = 0; i < columns.length; i++) {
-                c.addContainerProperty(columns[i], String.class, null);
-            }
-            return c;
-        }
-
-        private String[] initializeColumns(int number) {
-            String[] columns = new String[number];
-            for (int i = 0; i < number; i++) {
-                columns[i] = "Column" + i;
-            }
-            return columns;
-        }
-
-        public void valueChange(ValueChangeEvent event) {
-
-        }
-
-    }
-
-    public class Tabs extends TabSheet {
-
-        public Tabs(Component[] components) {
-            this.setWidth("100%");
-            this.setHeight("100%");
-            for (int i = 0; i < components.length; i++) {
-                this.addTab(components[i], components[i].getDebugId(), null);
-            }
-
-        }
-
-    }
-
-    public class TabsAcc extends Accordion {
-
-        public TabsAcc(Component[] components) {
-            this.setWidth("100%");
-            this.setHeight("100%");
-            for (int i = 0; i < components.length; i++) {
-                this.addTab(components[i], components[i].getDebugId(), null);
-            }
-
-        }
-
-    }
-
-    public class MyAccordion extends Accordion {
-
-        public MyAccordion(Component[] components, String id) {
-            this.setWidth("100%");
-            this.setHeight("100%");
-            setDebugId(id);
-            for (int i = 0; i < components.length; i++) {
-                this.addTab(components[i], components[i].getDebugId(), null);
-            }
-        }
-    }
-
-    public void selectedTabChange(SelectedTabChangeEvent event) {
-        p.setScrollTop(10);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2061c.java b/tests/src/com/vaadin/tests/tickets/Ticket2061c.java
deleted file mode 100644
index 4cca979268..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2061c.java
+++ /dev/null
@@ -1,148 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.ui.Accordion;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
-import com.vaadin.ui.TabSheet.SelectedTabChangeListener;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2061c extends Application implements
-        SelectedTabChangeListener {
-
-    private Window mainWindow;
-    private Panel p;
-
-    @Override
-    public void init() {
-        mainWindow = new Window("Vaadin");
-        mainWindow.setSizeFull();
-        mainWindow.getContent().setSizeFull();
-        setMainWindow(mainWindow);
-
-        VerticalLayout ol = new VerticalLayout();
-        ol.setWidth("200px");
-        ol.setHeight("200px");
-
-        VerticalLayout ol2 = new VerticalLayout();
-        ol2.setSizeFull();
-
-        p = new Panel("This is a panel");
-        p.setSizeFull();
-
-        Label label1 = new Label("This is a table!");
-        label1.setHeight("1500px");
-        label1.setWidth("1500px");
-        p.setScrollTop(50);
-
-        p.addComponent(label1);
-        ol2.addComponent(p);
-        ol.addComponent(ol2);
-
-        Label a = new Label("abc123");
-        a.setCaption("Label a");
-        ol.setCaption("OL");
-        Tabs tab = new Tabs(new Component[] { a, ol });
-        tab.addListener(this);
-        mainWindow.addComponent(tab);
-
-    }
-
-    public class MyTable extends CustomComponent implements ValueChangeListener {
-
-        private Table table = new Table();
-        private String[] columns;
-        private VerticalLayout layout = new VerticalLayout();
-
-        public MyTable(int columnNumber, String id) {
-            setDebugId(id);
-            setCompositionRoot(layout);
-            setSizeFull();
-            columns = initializeColumns(columnNumber);
-            table.setWidth("100%");
-            table.setHeight("100%");
-            table.setColumnReorderingAllowed(true);
-            table.setColumnCollapsingAllowed(true);
-            table.setSelectable(true);
-            table.setMultiSelect(false);
-            table.setNullSelectionAllowed(false);
-            // table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-            table.addListener(this);
-            table.setContainerDataSource(createContainer());
-            layout.addComponent(table);
-        }
-
-        public void loadTable(int itemNumber) {
-            table.removeAllItems();
-            for (int j = 0; j < itemNumber; j++) {
-                Item rowItem = table.addItem(j);
-                if (rowItem != null) {
-                    for (int i = 0; i < columns.length; i++) {
-                        rowItem.getItemProperty(columns[i]).setValue(
-                                "Value" + j);
-                    }
-                }
-            }
-        }
-
-        private HierarchicalContainer createContainer() {
-            final HierarchicalContainer c = new HierarchicalContainer();
-            for (int i = 0; i < columns.length; i++) {
-                c.addContainerProperty(columns[i], String.class, null);
-            }
-            return c;
-        }
-
-        private String[] initializeColumns(int number) {
-            String[] columns = new String[number];
-            for (int i = 0; i < number; i++) {
-                columns[i] = "Column" + i;
-            }
-            return columns;
-        }
-
-        public void valueChange(ValueChangeEvent event) {
-
-        }
-
-    }
-
-    public class Tabs extends TabSheet {
-
-        public Tabs(Component[] components) {
-            this.setWidth("100%");
-            // this.setHeight("100%");
-            for (int i = 0; i < components.length; i++) {
-                this.addTab(components[i], components[i].getDebugId(), null);
-            }
-        }
-    }
-
-    public class MyAccordion extends Accordion {
-
-        public MyAccordion(Component[] components, String id) {
-            this.setWidth("100%");
-            this.setHeight("100%");
-            setDebugId(id);
-            for (int i = 0; i < components.length; i++) {
-                this.addTab(components[i], components[i].getDebugId(), null);
-            }
-        }
-    }
-
-    public void selectedTabChange(SelectedTabChangeEvent event) {
-        p.setScrollTop(10);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2062.java b/tests/src/com/vaadin/tests/tickets/Ticket2062.java
deleted file mode 100644
index 2dabffe5f4..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2062.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket2062 extends Application {
-    private static final Object P1 = new Object();
-
-    @Override
-    public void init() {
-        setMainWindow(new Window("Ticket2062"));
-        getMainWindow().setSizeFull();
-
-        HorizontalSplitPanel p = new HorizontalSplitPanel();
-        p.setSizeFull();
-        getMainWindow().setContent(p);
-
-        TextField tf1 = new TextField("Tab 1");
-        tf1.setValue("Field 1");
-        tf1.setSizeFull();
-
-        Table t = new Table("Table");
-        t.addContainerProperty(P1, String.class, "");
-        t.setSizeFull();
-
-        TabSheet tabSheet = new TabSheet();
-        tabSheet.setWidth("300px");
-        tabSheet.setHeight("300px");
-
-        tabSheet.addComponent(tf1);
-        tabSheet.addComponent(t);
-
-        getMainWindow().addComponent(tabSheet);
-
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2083.java b/tests/src/com/vaadin/tests/tickets/Ticket2083.java
deleted file mode 100644
index e722c6826c..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2083.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Window;
-
-public class Ticket2083 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        GridLayout layout = new GridLayout(10, 10);
-        w.setContent(layout);
-        createUI(layout);
-    }
-
-    private void createUI(GridLayout layout) {
-        Panel p = new Panel(
-                "This is a panel with a longer caption than it should have");
-        p.setWidth("100px");
-        p.getContent().addComponent(new Label("Contents"));
-        layout.addComponent(p);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2090.java b/tests/src/com/vaadin/tests/tickets/Ticket2090.java
deleted file mode 100644
index 5bc69e0a64..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2090.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.terminal.UserError;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket2090 extends Application {
-
-    Label label = new Label();
-    Button target = new Button();
-    Window w = new Window("#2090");
-
-    @Override
-    public void init() {
-        setMainWindow(w);
-        final TextField width = new TextField("Width");
-        width.setImmediate(true);
-        final TextField height = new TextField("Height");
-        height.setImmediate(true);
-        w.addComponent(width);
-        w.addComponent(height);
-        w.addComponent(label);
-        w.addComponent(target);
-        height.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                try {
-                    target.setHeight(height.toString());
-                    height.setComponentError(null);
-                    updateLabel();
-                } catch (Exception e) {
-                    height.setComponentError(new UserError(e.getMessage()));
-                }
-            }
-        });
-        width.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                try {
-                    target.setWidth(width.toString());
-                    width.setComponentError(null);
-                    updateLabel();
-                } catch (Exception e) {
-                    width.setComponentError(new UserError(e.getMessage()));
-                }
-            }
-        });
-
-    }
-
-    private void updateLabel() {
-        label.setValue("width: " + target.getWidth()
-                + Sizeable.UNIT_SYMBOLS[target.getWidthUnits()] + ", height: "
-                + target.getHeight()
-                + Sizeable.UNIT_SYMBOLS[target.getHeightUnits()]);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2095.java b/tests/src/com/vaadin/tests/tickets/Ticket2095.java
deleted file mode 100644
index 0911cb6830..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2095.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.Window;
-
-public class Ticket2095 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-
-        // uncomment to workaround iorderedlayout bug in current trunk
-        // w.setContent(new ExpandLayout());
-        w.getContent().setSizeFull();
-
-        Embedded em = new Embedded();
-        em.setType(Embedded.TYPE_BROWSER);
-        em.setSource(new ExternalResource("../statictestfiles/ticket2095.html"));
-        em.setDebugId("MYIFRAME");
-
-        em.setSizeFull();
-
-        w.addComponent(em);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2098.java b/tests/src/com/vaadin/tests/tickets/Ticket2098.java
deleted file mode 100644
index 829fb30070..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2098.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Window;
-
-public class Ticket2098 extends Application {
-
-    private static final String info = "First tab hidden, second should initially be selected";
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        w.addComponent(new Label(info));
-        createUI(w);
-    }
-
-    private void createUI(Window w) {
-        TabSheet ts = new TabSheet();
-        Label l1 = new Label("111");
-        Label l2 = new Label("222");
-        Label l3 = new Label("333");
-        Label l4 = new Label("444");
-
-        ts.addTab(l1, "1", null);
-        ts.addTab(l2, "2", null);
-        ts.addTab(l3, "3", null);
-        ts.addTab(l4, "4", null);
-
-        l1.setVisible(false);
-
-        w.addComponent(ts);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2099.java b/tests/src/com/vaadin/tests/tickets/Ticket2099.java
deleted file mode 100644
index 4f79eb7e64..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2099.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2099 extends Application {
-
-    private Label l1, l2, l3;
-    private VerticalLayout ol1, ol2, ol3;
-    private Window popup;
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        GridLayout layout = new GridLayout(10, 10);
-        w.setContent(layout);
-        createUI(layout);
-    }
-
-    private void createUI(GridLayout layout) {
-        Button b = new Button("Show popup", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                getMainWindow().addWindow(popup);
-                // popup.setVisible(true);
-            }
-
-        });
-        popup = createPopup();
-        addWindow(popup);
-
-        layout.addComponent(b);
-        layout.addComponent(new Button("Hide label '222'", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                l2.setVisible(!l2.isVisible());
-            }
-
-        }));
-
-    }
-
-    private Window createPopup() {
-        Window w = new Window("Popup");
-        TabSheet ts = new TabSheet();
-        ol1 = new VerticalLayout();
-        ol2 = new VerticalLayout();
-        ol3 = new VerticalLayout();
-        l1 = new Label("111");
-        l2 = new Label("222");
-        l3 = new Label("333");
-
-        ol1.addComponent(l1);
-        ol2.addComponent(l2);
-        ol3.addComponent(l3);
-
-        ts.addTab(ol1, "1", null);
-        ts.addTab(ol2, "2", null);
-        ts.addTab(ol3, "3", null);
-
-        // l1.setVisible(false);
-        // ts.setSelectedTab(l3);
-
-        w.addComponent(ts);
-
-        return w;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2101.java b/tests/src/com/vaadin/tests/tickets/Ticket2101.java
deleted file mode 100644
index 8c12ca10ce..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2101.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Window;
-
-public class Ticket2101 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-
-        Button b = new Button(
-                "Button with a long text which will not fit on 50 pixels");
-        b.setWidth("50px");
-
-        w.getContent().addComponent(b);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2103.java b/tests/src/com/vaadin/tests/tickets/Ticket2103.java
deleted file mode 100644
index d65f4c1aec..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2103.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.HierarchicalContainer;
-import com.vaadin.ui.Accordion;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2103 extends Application {
-    private Window mainWindow;
-
-    @Override
-    public void init() {
-        mainWindow = new Window(getClass().getSimpleName());
-        mainWindow.setContent(new VerticalLayout());
-        mainWindow.setSizeFull();
-        mainWindow.getContent().setSizeFull();
-
-        MyTable table1 = new MyTable(4, "table1");
-        table1.loadTable(100);
-        MyTable table2 = new MyTable(4, "table2");
-        table2.loadTable(100);
-
-        MyAccordion a = new MyAccordion(new Component[] { table1, table2 },
-                "FDSF");
-        mainWindow.addComponent(a);
-        setMainWindow(mainWindow);
-        // mainWindow.addComponent(table1);
-
-    }
-
-    public class MyAccordion extends Accordion {
-
-        public MyAccordion(Component[] components, String id) {
-            this.setWidth("100%");
-            this.setHeight("100%");
-            setDebugId(id);
-            for (int i = 0; i < components.length; i++) {
-                this.addTab(components[i], components[i].getDebugId(), null);
-            }
-        }
-    }
-
-    public class MyTable extends Table {
-
-        private Table table = this;
-        private String[] columns;
-        private VerticalLayout layout = new VerticalLayout();
-
-        public MyTable(int columnNumber, String id) {
-            setDebugId(id);
-            setSizeFull();
-            columns = initializeColumns(columnNumber);
-            table.setWidth("100%");
-            table.setHeight("100%");
-            table.setColumnReorderingAllowed(true);
-            table.setColumnCollapsingAllowed(true);
-            table.setSelectable(true);
-            table.setMultiSelect(false);
-            table.setNullSelectionAllowed(false);
-            // table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-            table.setContainerDataSource(createContainer());
-            layout.addComponent(table);
-        }
-
-        public void loadTable(int itemNumber) {
-            table.removeAllItems();
-            for (int j = 0; j < itemNumber; j++) {
-                Item rowItem = table.addItem(j);
-                if (rowItem != null) {
-                    for (int i = 0; i < columns.length; i++) {
-                        rowItem.getItemProperty(columns[i]).setValue(
-                                "Value" + j);
-                    }
-                }
-            }
-        }
-
-        private HierarchicalContainer createContainer() {
-            final HierarchicalContainer c = new HierarchicalContainer();
-            for (int i = 0; i < columns.length; i++) {
-                c.addContainerProperty(columns[i], String.class, null);
-            }
-            return c;
-        }
-
-        private String[] initializeColumns(int number) {
-            String[] columns = new String[number];
-            for (int i = 0; i < number; i++) {
-                columns[i] = "Column" + i;
-            }
-            return columns;
-        }
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2104.java b/tests/src/com/vaadin/tests/tickets/Ticket2104.java
deleted file mode 100644
index 8b95fa35a2..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2104.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.util.MethodProperty;
-import com.vaadin.event.ItemClickEvent;
-import com.vaadin.event.ItemClickEvent.ItemClickListener;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Tree;
-import com.vaadin.ui.Window;
-
-public class Ticket2104 extends Application {
-
-    private static final Label info = new Label(
-            "Click event should _always_ come trough. Switching features on/off should immediatly affect the tree (verify w/ debug window)",
-            Label.CONTENT_RAW);
-
-    Tree tree = new Tree();
-    Table table = new Table();
-
-    @Override
-    public void init() {
-        Window main = new Window();
-        setMainWindow(main);
-
-        main.addComponent(info);
-
-        HorizontalLayout ol = new HorizontalLayout();
-        main.addComponent(ol);
-        CheckBox cb = new CheckBox("immediate", new MethodProperty<Boolean>(
-                tree, "immediate"));
-        cb.setImmediate(true);
-        ol.addComponent(cb);
-        cb = new CheckBox("selectable", new MethodProperty<Boolean>(tree,
-                "selectable"));
-        cb.setImmediate(true);
-        ol.addComponent(cb);
-        cb = new CheckBox("nullsel", new MethodProperty<Boolean>(tree,
-                "nullSelectionAllowed"));
-        cb.setImmediate(true);
-        ol.addComponent(cb);
-        cb = new CheckBox("multi", new MethodProperty<Boolean>(tree,
-                "multiSelect"));
-        cb.setImmediate(true);
-        ol.addComponent(cb);
-        cb = new CheckBox("icon", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                if (tree.getItemIconPropertyId() == null) {
-                    tree.setItemIconPropertyId("icon");
-                } else {
-                    tree.setItemIconPropertyId(null);
-                }
-
-            }
-        });
-        cb.setImmediate(true);
-        ol.addComponent(cb);
-
-        main.addComponent(tree);
-        tree.setImmediate(true);
-        tree.setNullSelectionAllowed(false);
-        tree.addItem("Root 1");
-        tree.addItem("1. Child 1");
-        tree.setParent("1. Child 1", "Root 1");
-        tree.addItem("1. Child 2");
-        tree.setParent("1. Child 2", "Root 1");
-        tree.addItem("Root 2");
-        tree.addItem("2. Child 1");
-        tree.setParent("2. Child 1", "Root 2");
-        tree.addItem("2. Child 2");
-        tree.setParent("2. Child 2", "Root 2");
-        tree.addContainerProperty("icon", ExternalResource.class,
-                new ExternalResource(
-                        "http://www.itmill.com/res/images/itmill_logo.gif"));
-
-        tree.addListener(new ItemClickListener() {
-            public void itemClick(ItemClickEvent event) {
-                getMainWindow().addComponent(
-                        new Label(event.toString() + " // " + event.getItemId()
-                                + "//" + event.getSource()));
-
-            }
-        });
-
-        ol = new HorizontalLayout();
-        main.addComponent(ol);
-        cb = new CheckBox("immediate", new MethodProperty<Boolean>(table,
-                "immediate"));
-        cb.setImmediate(true);
-        ol.addComponent(cb);
-        cb = new CheckBox("selectable", new MethodProperty<Boolean>(table,
-                "selectable"));
-        cb.setImmediate(true);
-        ol.addComponent(cb);
-        cb = new CheckBox("nullsel", new MethodProperty<Boolean>(table,
-                "nullSelectionAllowed"));
-        cb.setImmediate(true);
-        ol.addComponent(cb);
-        cb = new CheckBox("multi", new MethodProperty<Boolean>(table,
-                "multiSelect"));
-        cb.setImmediate(true);
-        ol.addComponent(cb);
-        main.addComponent(table);
-        table.setWidth("150px");
-        table.setImmediate(true);
-        table.setSelectable(true);
-        table.setNullSelectionAllowed(false);
-        for (int i = 0; i < 10; i++) {
-            table.addItem("Item " + i);
-        }
-        table.addListener(new ItemClickListener() {
-            public void itemClick(ItemClickEvent event) {
-                getMainWindow().addComponent(
-                        new Label(event.toString() + " // " + event.getItemId()
-                                + "//" + event.getSource()));
-
-            }
-        });
-        table.addContainerProperty("Column", String.class, "value");
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2106.java b/tests/src/com/vaadin/tests/tickets/Ticket2106.java
deleted file mode 100644
index 92908aa66d..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2106.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.Date;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket2106 extends Application {
-
-    private static CustomizedSystemMessages msgs = new Application.CustomizedSystemMessages();
-    static {
-        // We will forward the user to www.vaadin.com when the session expires
-        msgs.setSessionExpiredURL("http://www.vaadin.com");
-        msgs.setSessionExpiredMessage(null);
-        msgs.setSessionExpiredCaption(null);
-    }
-
-    public static Application.SystemMessages getSystemMessages() {
-        return msgs;
-    }
-
-    @Override
-    public void init() {
-        setMainWindow(new Window("#2106"));
-        getMainWindow().addComponent(
-                new Button("Do nothing", new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        getMainWindow().addComponent(
-                                new Label("Last time did nothing: "
-                                        + new Date()));
-                    }
-                }));
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2107.java b/tests/src/com/vaadin/tests/tickets/Ticket2107.java
deleted file mode 100644
index 199b278343..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2107.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Validator;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Window.Notification;
-
-public class Ticket2107 extends Application {
-
-    @Override
-    public void init() {
-        final Window w = new Window("Testing for #2107");
-        setMainWindow(w);
-
-        final TextField tf = new TextField(
-                "Required field that validated the input");
-        tf.setDescription("Enter someting and click outside the field to activate");
-        tf.setRequired(true);
-        tf.setImmediate(true);
-        tf.addListener(new Property.ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                w.showNotification("TextField is " + (tf.isValid() ? "" : "in")
-                        + "valid, with error: " + tf.getErrorMessage(),
-                        Notification.TYPE_WARNING_MESSAGE);
-            }
-        });
-        tf.addValidator(new Validator() {
-
-            public boolean isValid(Object value) {
-                return value != null && value.toString().length() > 3;
-            }
-
-            public void validate(Object value) throws InvalidValueException {
-                if (!isValid(value)) {
-                    throw new InvalidValueException(
-                            "Text length must exceed 3 characters");
-                }
-            }
-        });
-        w.addComponent(tf);
-
-        final CheckBox b = new CheckBox(
-                "Field should use error message. (!) should be shown when empty.",
-                false);
-        w.addComponent(b);
-        b.setImmediate(true);
-        b.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                tf.setRequiredError(b.booleanValue() ? "Field must not be empty"
-                        : null);
-            }
-        });
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2117.java b/tests/src/com/vaadin/tests/tickets/Ticket2117.java
deleted file mode 100644
index 974b3c4572..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2117.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket2117 extends Application {
-
-    @Override
-    public void init() {
-        setMainWindow(createWindow());
-    }
-
-    @Override
-    public Window getWindow(String name) {
-
-        // If we already have the requested window, use it
-        Window w = super.getWindow(name);
-        if (w == null) {
-
-            // If no window found, create it
-            w = createExtraWindow(name);
-            w.open(new ExternalResource(w.getURL()));
-        }
-        return w;
-    }
-
-    private Window createExtraWindow(String name) {
-        final Window w = new Window("Extra window: " + name);
-        w.setName(name);
-        addWindow(w);
-        w.addComponent(new Label(
-                "This window has been created on fly for name: " + name));
-        w.addComponent(new Label("It has also been redirected to " + w.getURL()
-                + " to support reloading"));
-        w.addComponent(new Button("button", new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                w.showNotification("Button clicked");
-                w.addComponent(new Label("clicked"));
-            }
-        }));
-        return w;
-    }
-
-    private Window createWindow() {
-        final Window w = new Window();
-        w.addComponent(new Label(
-                "Click this link: <a target=\"_blank\" href='"
-                        + getURL().toExternalForm()
-                        + "'>"
-                        + getURL().toExternalForm()
-                        + "</a> which opens new windows to this uri. They should end up having a separate Window and URL.",
-                Label.CONTENT_XHTML));
-        return w;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2119.java b/tests/src/com/vaadin/tests/tickets/Ticket2119.java
deleted file mode 100644
index c1e0d64dde..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2119.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Property;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-/**
- * Test case for Ticket 2119.
- */
-public class Ticket2119 extends Application {
-
-    private ObjectProperty<String> globalValue;
-
-    @Override
-    public void init() {
-        globalValue = new ObjectProperty<String>(null, String.class);
-        Window main = createWindow();
-        setMainWindow(main);
-    }
-
-    @Override
-    public Window getWindow(String name) {
-        if (!isRunning()) {
-            return null;
-        }
-        // If we already have the requested window, use it
-        Window w = super.getWindow(name);
-        if (w == null) {
-            // If no window found, create it
-            w = createWindow();
-            addWindow(w);
-            w.open(new ExternalResource(w.getURL()));
-        }
-        return w;
-    }
-
-    private Window createWindow() {
-        Window main = new Window("Test for ticket XXX");
-        main.setContent(testLayout());
-        return main;
-    }
-
-    private Layout testLayout() {
-        final Layout layout = new VerticalLayout();
-        final Label label = new Label(
-                "Instructions to reproduce:\n"
-                        + "  - Open this application in two browser windows\n"
-                        + "  - Click the Button in first Window\n"
-                        + "  - Go to the second Window\n"
-                        + "     - Click the arrow in the Select\n"
-                        + "  --> The opened list correctly shows the new value but the old one is shown in the \"input\" part");
-        label.setContentMode(Label.CONTENT_PREFORMATTED);
-        layout.addComponent(label);
-
-        final Select select = new Select("Test Select");
-        select.setWidth("100px");
-        select.setImmediate(true);
-        select.setNullSelectionAllowed(false);
-        select.addItem("1");
-        select.addItem("2");
-        select.addItem("3");
-
-        final ObjectProperty<String> valueProperty = new ObjectProperty<String>(
-                "1", String.class);
-        select.setPropertyDataSource(valueProperty);
-        layout.addComponent(select);
-
-        globalValue.addListener(new Property.ValueChangeListener() {
-            public void valueChange(Property.ValueChangeEvent event) {
-                valueProperty.setValue(event.getProperty().getValue());
-            }
-        });
-
-        final Button changeValueButton = new Button("Change Value to 2");
-        changeValueButton.addListener(new Button.ClickListener() {
-            public void buttonClick(Button.ClickEvent event) {
-                globalValue.setValue("2");
-            }
-        });
-
-        layout.addComponent(changeValueButton);
-
-        return layout;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2125.java b/tests/src/com/vaadin/tests/tickets/Ticket2125.java
deleted file mode 100644
index b296a4ff46..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2125.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.util.MethodProperty;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.CellStyleGenerator;
-import com.vaadin.ui.Table.ColumnGenerator;
-import com.vaadin.ui.Window;
-
-public class Ticket2125 extends Application {
-
-    @Override
-    public void init() {
-        setMainWindow(new MainWindow("Ticket2125"));
-
-    }
-
-    class MainWindow extends Window {
-        MainWindow(String caption) {
-            super(caption);
-
-            addComponent(new Label(
-                    "Inspect w/ Firebug: row 5 should have a MYROW -style on the row, and MYCELL on all cells"));
-
-            Table table = new Table();
-            table.setRowHeaderMode(Table.ROW_HEADER_MODE_INDEX);
-            addComponent(table);
-            for (int i = 0; i < 50; i++) {
-                table.addItem(new Integer(i));
-            }
-            table.addContainerProperty("String", String.class, "a string");
-            table.addContainerProperty("Boolean", Boolean.class, Boolean.TRUE);
-            table.addGeneratedColumn("Generated", new ColumnGenerator() {
-                public Component generateCell(Table source, Object itemId,
-                        Object columnId) {
-                    return new Label("Item " + itemId);
-                }
-            });
-            table.setCellStyleGenerator(new CellStyleGenerator() {
-                public String getStyle(Object itemId, Object propertyId) {
-                    if (new Integer(4).equals(itemId)) {
-                        if (propertyId == null) {
-                            return "MYROW";
-                        } else {
-                            return "MYCELL";
-                        }
-                    }
-                    return null;
-                }
-
-            });
-            CheckBox b = new CheckBox("editmode", new MethodProperty<Boolean>(
-                    table, "editable"));
-            b.setImmediate(true);
-            addComponent(b);
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2126.java b/tests/src/com/vaadin/tests/tickets/Ticket2126.java
deleted file mode 100644
index 01ef18f2ef..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2126.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-/**
- * 
- * Toggling container with an empty one may result duplicate header cell in
- * client.
- * 
- */
-public class Ticket2126 extends com.vaadin.Application {
-
-    Window main = new Window();
-    Table table = new Table();
-
-    @Override
-    public void init() {
-        setMainWindow(main);
-
-        final IndexedContainer container1 = new IndexedContainer();
-        container1.addContainerProperty("text", Component.class, null);
-        final IndexedContainer container2 = new IndexedContainer();
-
-        // Case #2 Try to comment the following line for another type of strange
-        // behaviour
-        container2.addContainerProperty("text", Component.class, null);
-
-        for (int i = 0; i < 100; i++) {
-            Item item = container1.addItem(i);
-            item.getItemProperty("text").setValue(new Label("Test " + i));
-        }
-
-        table.setContainerDataSource(container1);
-
-        // workaround for case #2
-        // table.setWidth("300px");
-        // table.setHeight("300px");
-
-        Button refreshTable = new Button("Switch table container");
-        refreshTable.addListener(new Button.ClickListener() {
-            boolean full = true;
-
-            public void buttonClick(Button.ClickEvent e) {
-                if (full) {
-                    table.setContainerDataSource(container2);
-                } else {
-                    table.setContainerDataSource(container1);
-                }
-                full = !full;
-            }
-        });
-
-        main.addComponent(table);
-        main.addComponent(refreshTable);
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2151.java b/tests/src/com/vaadin/tests/tickets/Ticket2151.java
deleted file mode 100644
index 5a48156367..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2151.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket2151 extends Application {
-
-    private Label status;
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        createUI((AbstractOrderedLayout) w.getContent());
-    }
-
-    private void createUI(AbstractOrderedLayout layout) {
-        Button b = new Button("This is a button");
-        CheckBox cb = new CheckBox("This is a checkbox");
-        cb.setImmediate(true);
-        setTheme("tests-tickets");
-        layout.setStyleName("mylayout");
-        status = new Label("Result:");
-        layout.addComponent(status);
-        layout.setSpacing(true);
-        layout.setMargin(true);
-
-        layout.addComponent(b);
-        layout.addComponent(cb);
-
-        layout.addComponent(new Label("a"));
-        layout.addComponent(new Label("b"));
-        layout.addComponent(new Label("c"));
-
-        check(Button.class);
-        check(CheckBox.class);
-        checkDataBinding(Button.class);
-        checkDataBinding(CheckBox.class);
-
-    }
-
-    private void check(Class<? extends Button> class1) {
-        boolean ok = false;
-        Button b;
-        try {
-            b = class1.newInstance();
-            b.setCaption("Button of type " + class1.getSimpleName());
-            try {
-                // This should throw an exception
-                b.setValue("ON");
-            } catch (IllegalArgumentException e) {
-                ok = true;
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        } catch (Exception e1) {
-            e1.printStackTrace();
-            return;
-        }
-
-        if (ok) {
-            status.setValue(status.getValue() + " "
-                    + class1.getClass().getSimpleName() + ": OK");
-        } else {
-            status.setValue(status.getValue() + " "
-                    + class1.getClass().getSimpleName() + ": FAILED");
-        }
-
-    }
-
-    private void checkDataBinding(Class<? extends Button> class1) {
-        boolean ok = false;
-        Button b;
-        try {
-            b = class1.newInstance();
-            b.setCaption("Button of type " + class1.getSimpleName());
-            try {
-                b.setWriteThrough(true);
-                b.setReadThrough(true);
-                ObjectProperty<String> prop = new ObjectProperty<String>(
-                        "ABC 123");
-                /*
-                 * This should throw an exception or somehow tell that the
-                 * property was invalid (wrong type). See #2223.
-                 */
-                b.setPropertyDataSource(prop);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        } catch (Exception e1) {
-            e1.printStackTrace();
-            return;
-        }
-
-        if (ok) {
-            status.setValue(status.getValue() + " "
-                    + class1.getClass().getSimpleName() + "/DB: OK");
-        } else {
-            status.setValue(status.getValue() + " "
-                    + class1.getClass().getSimpleName() + "/DB: FAILED");
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2157.java b/tests/src/com/vaadin/tests/tickets/Ticket2157.java
deleted file mode 100644
index 3d90907e50..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2157.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2157 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        createUI((AbstractOrderedLayout) w.getContent());
-    }
-
-    private void createUI(AbstractOrderedLayout layout) {
-        VerticalLayout ol;
-        Panel p;
-        ComboBox cb;
-
-        ol = new VerticalLayout();
-        p = new Panel(ol);
-        p.setCaption("Combobox without width");
-        // p.setWidth("100px");
-        cb = new ComboBox();
-        // cb.setCaption("A combobox");
-        // cb.setWidth("100%");
-        p.addComponent(cb);
-        layout.addComponent(p);
-
-        ol = new VerticalLayout();
-        p = new Panel(ol);
-        p.setCaption("Combobox without width with caption");
-        // p.setWidth("100px");
-        cb = new ComboBox();
-        cb.setCaption("A combobox");
-        // cb.setWidth("100px");
-        p.addComponent(cb);
-        layout.addComponent(p);
-
-        //
-        ol = new VerticalLayout();
-        p = new Panel(ol);
-        p.setCaption("Combobox 100px wide");
-        // p.setWidth("100px");
-        cb = new ComboBox();
-        // cb.setCaption("A combobox");
-        cb.setWidth("100px");
-        p.addComponent(cb);
-        layout.addComponent(p);
-
-        ol = new VerticalLayout();
-        p = new Panel(ol);
-        p.setCaption("Combobox 100px wide with caption");
-        // p.setWidth("100px");
-        cb = new ComboBox();
-        cb.setCaption("A combobox");
-        cb.setWidth("100px");
-        p.addComponent(cb);
-        layout.addComponent(p);
-
-        ol = new VerticalLayout();
-        p = new Panel(ol);
-        p.setCaption("Combobox 500px wide");
-        // p.setWidth("500px");
-        cb = new ComboBox();
-        // cb.setCaption("A combobox");
-        cb.setWidth("500px");
-        p.addComponent(cb);
-        layout.addComponent(p);
-
-        ol = new VerticalLayout();
-        p = new Panel(ol);
-        p.setCaption("Combobox 500px wide with caption");
-        // p.setWidth("500px");
-        cb = new ComboBox();
-        cb.setCaption("A combobox");
-        cb.setWidth("500px");
-        p.addComponent(cb);
-        layout.addComponent(p);
-
-        ol = new VerticalLayout();
-        p = new Panel(ol);
-        p.setCaption("Combobox 100% wide");
-        p.setWidth("200px");
-        ol.setWidth("100%");
-        cb = new ComboBox();
-        // cb.setCaption("A combobox");
-        cb.setWidth("100%");
-        p.addComponent(cb);
-        layout.addComponent(p);
-
-        ol = new VerticalLayout();
-        p = new Panel(ol);
-        p.setCaption("Combobox 100% wide with caption");
-        p.setWidth("200px");
-        ol.setWidth("100%");
-        cb = new ComboBox();
-        cb.setCaption("A combobox");
-        cb.setWidth("100%");
-        p.addComponent(cb);
-        layout.addComponent(p);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2178.java b/tests/src/com/vaadin/tests/tickets/Ticket2178.java
deleted file mode 100644
index a3461dd8b6..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2178.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2178 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        createUI((AbstractOrderedLayout) w.getContent());
-    }
-
-    private void createUI(AbstractOrderedLayout layout) {
-        VerticalLayout ol;
-        Panel p;
-        ComboBox cb;
-
-        ol = new VerticalLayout();
-        p = new Panel(ol);
-        p.setCaption("Combobox without width");
-        // p.setWidth("100px");
-        cb = new ComboBox();
-        // cb.setCaption("A combobox");
-        // cb.setWidth("100%");
-        p.addComponent(cb);
-        layout.addComponent(p);
-
-        ol = new VerticalLayout();
-        p = new Panel(ol);
-        p.setCaption("Combobox without width with caption");
-        // p.setWidth("100px");
-        cb = new ComboBox();
-        cb.setCaption("A combobox");
-        // cb.setWidth("100px");
-        p.addComponent(cb);
-        layout.addComponent(p);
-
-        ol = new VerticalLayout();
-        p = new Panel(ol);
-        p.setCaption("Combobox 100px wide");
-        // p.setWidth("100px");
-        cb = new ComboBox();
-        // cb.setCaption("A combobox");
-        cb.setWidth("100px");
-        p.addComponent(cb);
-        layout.addComponent(p);
-
-        ol = new VerticalLayout();
-        p = new Panel(ol);
-        p.setCaption("Combobox 100px wide with caption");
-        // p.setWidth("100px");
-        cb = new ComboBox();
-        cb.setCaption("A combobox");
-        cb.setWidth("100px");
-        p.addComponent(cb);
-        layout.addComponent(p);
-
-        ol = new VerticalLayout();
-        p = new Panel(ol);
-        p.setCaption("Combobox 500px wide");
-        // p.setWidth("500px");
-        cb = new ComboBox();
-        // cb.setCaption("A combobox");
-        cb.setWidth("500px");
-        p.addComponent(cb);
-        layout.addComponent(p);
-
-        ol = new VerticalLayout();
-        p = new Panel(ol);
-        p.setCaption("Combobox 500px wide with caption");
-        // p.setWidth("500px");
-        cb = new ComboBox();
-        cb.setCaption("A combobox");
-        cb.setWidth("500px");
-        p.addComponent(cb);
-        layout.addComponent(p);
-
-        ol = new VerticalLayout();
-        p = new Panel(ol);
-        p.setCaption("Combobox 100% wide inside 200px panel");
-        p.setWidth("200px");
-        ol.setWidth("100%");
-        cb = new ComboBox();
-        // cb.setCaption("A combobox");
-        cb.setWidth("100%");
-        // cb.setWidth("500px");
-        p.addComponent(cb);
-        layout.addComponent(p);
-
-        ol = new VerticalLayout();
-        p = new Panel(ol);
-        p.setCaption("Combobox 100% wide inside 200px panel with caption");
-        p.setWidth("200px");
-        ol.setWidth("100%");
-        cb = new ComboBox();
-        cb.setCaption("A combobox");
-        cb.setWidth("100%");
-        p.addComponent(cb);
-        layout.addComponent(p);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2179.java b/tests/src/com/vaadin/tests/tickets/Ticket2179.java
deleted file mode 100644
index 165e770307..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2179.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Validator;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket2179 extends Application {
-
-    TextField f = new TextField("Test fiel ( must contain 1 & 2 )");
-    Window main = new Window("Dual validator test");
-
-    @Override
-    public void init() {
-
-        f.setImmediate(true);
-        f.setRequired(true);
-        f.addValidator(new ContainsValidator("1"));
-        f.addValidator(new ContainsValidator("2"));
-
-        setMainWindow(main);
-        main.addComponent(f);
-
-        f.addListener(new Property.ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                main.showNotification("Test field is "
-                        + (f.isValid() ? "valid" : "invalid"));
-            }
-        });
-
-    }
-
-    class ContainsValidator implements Validator {
-        private final String c;
-
-        public ContainsValidator(String c) {
-            this.c = c;
-        }
-
-        public boolean isValid(Object value) {
-            return value != null && value.toString().contains(c);
-        }
-
-        public void validate(Object value) throws InvalidValueException {
-            if (!isValid(value)) {
-                throw new InvalidValueException("Value does not contain " + c);
-            }
-
-        }
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2180.java b/tests/src/com/vaadin/tests/tickets/Ticket2180.java
deleted file mode 100644
index 9f5e2a2de1..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2180.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Window;
-
-public class Ticket2180 extends Application {
-
-    private Window mainWindow;
-    private TabSheet tabSheet;
-
-    @Override
-    public void init() {
-        mainWindow = new Window("Tabsheet should cause scrollbars");
-        setMainWindow(mainWindow);
-        // mainWindow.getLayout().setSizeFull();
-        tabSheet = new TabSheet();
-        // tabSheet.setWidth("100%");
-        Button button = new Button("Blah");
-        button.setWidth("100%");
-        Label label1 = new Label("Lorem ipsum");
-        Label label2 = new Label("Lorem");
-        Label label3 = new Label(
-                "Lorema jsdfhak sjdfh kajsdh fkajhd kfjah dkfjah ksfdjh kajsfh kj 1 2 3 4 5 6 7 8 9 10");
-
-        label3.setWidth("800px");
-        tabSheet.addTab(label1, "Tab 1", null);
-        tabSheet.addTab(label2, "Tab 2", null);
-        tabSheet.addTab(label3, "Tab 3", null);
-        tabSheet.addTab(new Label("a"), "Tab 4", null);
-        tabSheet.addTab(new Label("a"), "Tab 5", null);
-        tabSheet.addTab(new Label("a"), "Tab 6", null);
-        // mainWindow.addComponent(new Label("123"));
-        mainWindow.addComponent(tabSheet);
-        mainWindow.addComponent(button);
-        // mainWindow.addComponent(new Label("abc"));
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2181.java b/tests/src/com/vaadin/tests/tickets/Ticket2181.java
deleted file mode 100644
index ea3d996b98..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2181.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Random;
-import java.util.Set;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.terminal.UserError;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.OptionGroup;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2181 extends Application implements Button.ClickListener {
-
-    // private static final Object PROPERTY_VALUE = new Object();
-    // private static final Object PROPERTY_CAPTION = new Object();
-
-    private static final String caption = "This is a caption which is very long and nice and perhaps sometimes should be clipped";
-    Window main = new Window("#2181 test");
-    TextField tf1 = new TextField(caption, "Test field - undefined width");
-    TextField tf2 = new TextField(caption, "Test field - 150px wide");
-    Button setButton = new Button("Set", this);
-    private Random random = new Random(123);
-    private OptionGroup options;
-
-    private static ArrayList<String> icons = new ArrayList<String>();
-    static {
-        icons.add("icons/64/ok.png");
-        icons.add("icons/64/arrow-down.png");
-        icons.add("icons/64/arrow-left.png");
-        icons.add("icons/64/arrow-right.png");
-        icons.add("icons/64/arrow-up.png");
-    }
-
-    @Override
-    public void init() {
-        setMainWindow(main);
-        VerticalLayout ol;
-        ol = new VerticalLayout();
-        ol.addComponent(tf1);
-        main.addComponent(ol);
-
-        ol = new VerticalLayout();
-        ol.setWidth("150px");
-        tf2.setWidth("150px");
-        ol.addComponent(tf2);
-        main.addComponent(ol);
-
-        main.addComponent(createSelection());
-        main.addComponent(setButton);
-    }
-
-    private Component createSelection() {
-        options = new OptionGroup();
-        options.addItem("Icon");
-        options.addItem("Caption");
-        options.addItem("Required");
-        options.addItem("Error");
-        options.setMultiSelect(true);
-        options.select("Caption");
-
-        // ol.addComponent(og);
-        return options;
-    }
-
-    public void buttonClick(ClickEvent event) {
-        if (event.getButton() == setButton) {
-            set();
-        }
-    }
-
-    private void set() {
-        @SuppressWarnings("unchecked")
-        Set<String> values = (Set<String>) options.getValue();
-        TextField[] tfs = new TextField[] { tf1, tf2 };
-        for (TextField tf : tfs) {
-            // Clear all
-            tf.setCaption(null);
-            tf.setComponentError(null);
-            tf.setRequired(false);
-            tf.setIcon(null);
-
-            for (String value : values) {
-                if (value.equals("Caption")) {
-                    tf.setCaption(caption);
-                } else if (value.equals("Icon")) {
-                    String timestamp = String.valueOf(new Date().getTime());
-                    tf.setIcon(new ThemeResource(icons.get(random.nextInt(icons
-                            .size())) + "?" + timestamp));
-                } else if (value.equals("Required")) {
-                    tf.setRequired(true);
-                } else if (value.equals("Error")) {
-                    tf.setComponentError(new UserError("Nooooo..."));
-                }
-            }
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2186.java b/tests/src/com/vaadin/tests/tickets/Ticket2186.java
deleted file mode 100644
index bc9ff8c27d..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2186.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2186 extends Application {
-
-    @Override
-    public void init() {
-        Window main = new Window("Quick test");
-        setMainWindow(main);
-
-        HorizontalLayout base = new HorizontalLayout();
-        main.setContent(base);
-
-        VerticalLayout content = new VerticalLayout();
-
-        content.addComponent(new Label("Content."));
-        content.setWidth("500px");
-
-        Table table = new Table();
-
-        table.setPageLength(10);
-
-        table.setWidth("100%");
-
-        table.addContainerProperty("Lähettäjä", String.class, "");
-        table.addContainerProperty("Viestin tyyppi", String.class, "");
-
-        for (int i = 0; i < 15; i++) {
-
-            table.addItem(new Object[] { i + " Joku Ihminen", "Testiviesti" },
-
-            new Object());
-
-        }
-
-        content.addComponent(table);
-
-        Panel right = new Panel("Panel");
-
-        right.addComponent(new Label("Some basic text might show up here."));
-
-        base.addComponent(content);
-
-        base.addComponent(right);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2204.java b/tests/src/com/vaadin/tests/tickets/Ticket2204.java
deleted file mode 100644
index 6a047cb626..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2204.java
+++ /dev/null
@@ -1,177 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import com.vaadin.Application;
-import com.vaadin.data.Item;
-import com.vaadin.data.util.BeanItem;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.AbstractSplitPanel;
-import com.vaadin.ui.Accordion;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.FormFieldFactory;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.RichTextArea;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.VerticalSplitPanel;
-import com.vaadin.ui.Window;
-
-public class Ticket2204 extends Application {
-
-    private final List<RichTextArea> textAreas = new ArrayList<RichTextArea>();
-    private TabSheet ts;
-    private final Map<Component, Component> containerToComponent = new HashMap<Component, Component>();
-    private RichTextArea rta;
-    private final List<Class<? extends Component>> classes = new ArrayList<Class<? extends Component>>();
-    protected RichTextArea formTextArea;
-
-    @Override
-    public void init() {
-        classes.add(VerticalLayout.class);
-        classes.add(HorizontalLayout.class);
-        classes.add(GridLayout.class);
-        classes.add(Accordion.class);
-        classes.add(TabSheet.class);
-        classes.add(Panel.class);
-        classes.add(VerticalSplitPanel.class);
-        classes.add(HorizontalSplitPanel.class);
-        classes.add(Form.class);
-
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        createUI((AbstractOrderedLayout) w.getContent());
-    }
-
-    private void createUI(AbstractOrderedLayout layout) {
-        ts = new TabSheet();
-        layout.addComponent(ts);
-
-        for (Class<? extends Component> c : classes) {
-            ts.addTab(createComponent(c), c.getSimpleName(), null);
-        }
-        rta = new RichTextArea();
-        rta.setVisible(false);
-        ts.addTab(rta, "Hidden rta", null);
-
-        Button b = new Button("Show area", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                showHide();
-            }
-        });
-
-        layout.addComponent(b);
-
-        b = new Button("Show tab", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                showTab();
-            }
-        });
-
-        layout.addComponent(b);
-
-    }
-
-    protected void showTab() {
-        rta.setVisible(!rta.isVisible());
-
-    }
-
-    protected void showHide() {
-        Component c = containerToComponent.get(ts.getSelectedTab());
-        c.setVisible(!c.isVisible());
-    }
-
-    private Component createComponent(Class<? extends Component> c) {
-        RichTextArea textArea = new RichTextArea();
-        textArea.setVisible(false);
-        textArea.setCaption("This is the textArea");
-        textArea.setWidth("200px");
-        textArea.setHeight("100px");
-        textAreas.add(textArea);
-        Component cc = null;
-
-        try {
-            cc = c.newInstance();
-        } catch (Exception e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-            return null;
-        }
-        // if (c == OrderedLayout.class) {
-        // cc = new VerticalLayout();
-        // } else
-        if (c == Accordion.class) {
-            // Label l = new Label("Filler");
-            // l.setCaption("Filler label");
-            // cc.addComponent(l);
-        }
-
-        if (c == Form.class) {
-            Form f = (Form) cc;
-            f.setFormFieldFactory(new FormFieldFactory() {
-
-                public Field createField(Item item, Object propertyId,
-                        Component uiContext) {
-                    formTextArea = new RichTextArea();
-                    formTextArea.setVisible(false);
-                    return formTextArea;
-                }
-
-            });
-            f.setItemDataSource(new BeanItem<Object>(new Object() {
-                private int a;
-
-                @SuppressWarnings("unused")
-                public int getA() {
-                    return a;
-                }
-
-                @SuppressWarnings("unused")
-                public void setA(int a) {
-                    this.a = a;
-                }
-            }));
-            containerToComponent.put(f, formTextArea);
-            return f;
-        }
-        containerToComponent.put(cc, textArea);
-        if (cc instanceof ComponentContainer) {
-            ((ComponentContainer) cc).addComponent(textArea);
-        }
-
-        if (AbstractSplitPanel.class.isAssignableFrom(c)) {
-            AbstractSplitPanel sp = (AbstractSplitPanel) cc;
-            sp.setWidth("300px");
-            sp.setHeight("300px");
-            sp.addComponent(new Label("Label"));
-            textArea.setSizeFull();
-        }
-        if (c == Panel.class) {
-            Layout layout = (Layout) ((Panel) cc).getContent();
-            containerToComponent.put(cc, layout);
-            layout.setVisible(false);
-            textArea.setVisible(true);
-            return cc;
-        }
-
-        return cc;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2208.java b/tests/src/com/vaadin/tests/tickets/Ticket2208.java
deleted file mode 100644
index a326a0c381..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2208.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Item;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.CellStyleGenerator;
-import com.vaadin.ui.Table.ColumnGenerator;
-import com.vaadin.ui.Window;
-
-public class Ticket2208 extends Application {
-
-    private Table t;
-
-    @Override
-    public void init() {
-        Window mainWindow = new Window();
-        setMainWindow(mainWindow);
-
-        t = new Table("A table");
-        t.addContainerProperty("col 1 (red)", String.class, "");
-        t.addContainerProperty("col 2", String.class, "");
-
-        t.setHeight("150px");
-        t.addGeneratedColumn("col 3 (green)", new ColumnGenerator() {
-
-            public Component generateCell(Table source, Object itemId,
-                    Object columnId) {
-                Item item = source.getItem(itemId);
-                String col1 = (String) item.getItemProperty("col 1 (red)")
-                        .getValue();
-                String col2 = (String) item.getItemProperty("col 2").getValue();
-                return new Label(col1 + "-" + col2);
-            }
-        });
-
-        t.addContainerProperty("col 4", String.class, "");
-        t.setCellStyleGenerator(new CellStyleGenerator() {
-
-            public String getStyle(Object itemId, Object propertyId) {
-                if ("col 1 (red)".equals(propertyId)) {
-                    return "red";
-                }
-
-                if ("col 3 (green)".equals(propertyId)) {
-                    return "green";
-                }
-
-                return null;
-            }
-        });
-
-        t.addItem(new Object[] { "Col 1-1", "Col 2-1", "Col 4-1" },
-                new Object());
-        t.addItem(new Object[] { "Col 1-2", "Col 2-2", "Col 4-2" },
-                new Object());
-        t.addItem(new Object[] { "Col 1-3", "Col 2-3", "Col 4-3" },
-                new Object());
-
-        t.setColumnReorderingAllowed(true);
-        t.setColumnCollapsingAllowed(true);
-        setTheme("tests-tickets");
-        mainWindow.addComponent(t);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2209.java b/tests/src/com/vaadin/tests/tickets/Ticket2209.java
deleted file mode 100644
index 7ee8a07405..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2209.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket2209 extends Application {
-
-    private GridLayout gl;
-    private ComboBox combo;
-    private Label labelLong;
-
-    @Override
-    public void init() {
-        setMainWindow(new Window());
-
-        gl = new GridLayout(1, 2);
-        gl.setStyleName("borders");
-        getMainWindow().addComponent(gl);
-        setTheme("tests-tickets");
-        combo = new ComboBox("Combo caption");
-        labelLong = new Label(
-                "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?");
-        gl.addComponent(combo);
-        gl.addComponent(labelLong);
-
-        Button b = new Button("Add label text", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                labelLong.setValue(labelLong.getValue() + "-12345");
-            }
-
-        });
-        getMainWindow().addComponent(b);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2209OL.java b/tests/src/com/vaadin/tests/tickets/Ticket2209OL.java
deleted file mode 100644
index b7b7b8aba1..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2209OL.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2209OL extends Application {
-
-    private VerticalLayout gl;
-    private ComboBox combo;
-    private Label labelLong;
-
-    @Override
-    public void init() {
-        setMainWindow(new Window());
-        getMainWindow().getContent().setWidth("250px");
-        gl = new VerticalLayout();
-        gl.setStyleName("borders");
-        getMainWindow().addComponent(gl);
-        setTheme("tests-tickets");
-        combo = new ComboBox("Combo caption");
-        labelLong = new Label(
-                "This should stay on one line or to wrap to multiple lines? At leas it should display all the text?. "
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?");
-        gl.addComponent(combo);
-        gl.addComponent(labelLong);
-
-        Button b = new Button("Add label text", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                labelLong.setValue(labelLong.getValue() + "-12345");
-            }
-
-        });
-        getMainWindow().addComponent(b);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2209OL2.java b/tests/src/com/vaadin/tests/tickets/Ticket2209OL2.java
deleted file mode 100644
index 99103e7e42..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2209OL2.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2209OL2 extends Application {
-
-    private VerticalLayout gl;
-    private ComboBox combo;
-    private Label labelLong;
-
-    @Override
-    public void init() {
-        setMainWindow(new Window());
-        getMainWindow().getContent().setWidth("250px");
-        gl = new VerticalLayout();
-        gl.setSizeUndefined();
-        gl.setStyleName("borders");
-        getMainWindow().addComponent(gl);
-        setTheme("tests-tickets");
-        combo = new ComboBox("Combo caption");
-        labelLong = new Label(
-                "This should stay on one line or to wrap to multiple lines? At leas it should display all the text?. "
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
-                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?");
-        gl.addComponent(combo);
-        gl.addComponent(labelLong);
-
-        Button b = new Button("Add label text", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                labelLong.setValue(labelLong.getValue() + "-12345");
-            }
-
-        });
-        getMainWindow().addComponent(b);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2215.java b/tests/src/com/vaadin/tests/tickets/Ticket2215.java
deleted file mode 100644
index 221f84f86f..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2215.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.themes.Reindeer;
-
-public class Ticket2215 extends Application {
-
-    @Override
-    public void init() {
-        setMainWindow(new Window());
-
-        VerticalLayout ol = new VerticalLayout();
-        Panel p = new Panel("Test");
-        p.addComponent(new Label("Panel1"));
-        p.setHeight("500px");
-        p.setWidth("500px");
-        p.setStyleName(Reindeer.PANEL_LIGHT);
-        ol.addComponent(p);
-        ol.addComponent(new Label("NextComponent"));
-
-        getMainWindow().addComponent(ol);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2221.java b/tests/src/com/vaadin/tests/tickets/Ticket2221.java
deleted file mode 100644
index e6489da432..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2221.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2221 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        createUI((AbstractOrderedLayout) w.getContent());
-    }
-
-    private void createUI(AbstractOrderedLayout layout) {
-        layout.setSizeFull();
-        layout.addComponent(new Invoice());
-    }
-
-    public class Invoice extends CustomComponent {
-
-        Layout main = new VerticalLayout();
-
-        private TextField tf;
-
-        private Panel outerPanel;
-
-        private TextField tf2;
-
-        public Invoice() {
-            setSizeFull();
-
-            setCompositionRoot(main);
-            main.setSizeFull();
-            Button b = new Button("Switch textfield/panel",
-                    new ClickListener() {
-
-                        public void buttonClick(ClickEvent event) {
-                            Component visible = tf;
-
-                            if (tf.isVisible()) {
-                                visible = outerPanel;
-                            }
-
-                            outerPanel.setVisible(false);
-                            tf.setVisible(false);
-
-                            visible.setVisible(true);
-                        }
-
-                    });
-            main.addComponent(b);
-
-            tf = new TextField("TextField");
-            tf.setHeight("1000px");
-            tf.setWidth("1000px");
-
-            outerPanel = new Panel();
-            outerPanel.setCaption("A RichTextArea");
-            outerPanel.setVisible(false);
-            outerPanel.setHeight("1000px");
-            outerPanel.setWidth("1000px");
-
-            outerPanel.getContent().setSizeFull();
-            Panel innerPanel = new Panel("Inner panel");
-            innerPanel.setSizeFull();
-            outerPanel.addComponent(innerPanel);
-
-            tf2 = new TextField("A 2000x2000 textfield");
-            tf2.setWidth("2000px");
-            tf2.setHeight("2000px");
-
-            innerPanel.addComponent(tf2);
-            main.addComponent(outerPanel);
-            main.addComponent(tf);
-        }
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2222.java b/tests/src/com/vaadin/tests/tickets/Ticket2222.java
deleted file mode 100644
index 86dccede69..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2222.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2222 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        setTheme("tests-tickets");
-        createUI((AbstractOrderedLayout) w.getContent());
-    }
-
-    private void createUI(AbstractOrderedLayout layout) {
-        HorizontalLayout horiz = new HorizontalLayout();
-        horiz.setSpacing(true);
-        horiz.setMargin(true);
-        horiz.setStyleName("ticket2222");
-
-        horiz.addComponent(new Label("Horiz spacing: 60px;"));
-        horiz.addComponent(new Label("Margin-left: 40px"));
-        horiz.addComponent(new Label("Margin-top: 100px;"));
-        horiz.addComponent(new Label("Margin-right: 20px;"));
-        horiz.addComponent(new Label("Margin-bottom: 30px;"));
-        horiz.addStyleName("borders");
-
-        VerticalLayout vert = new VerticalLayout();
-        vert.setSizeUndefined();
-        vert.setSpacing(true);
-        vert.setMargin(false);
-        vert.setStyleName("ticket2222");
-        vert.addComponent(new Label("Vert spacing: 50px;"));
-        vert.addComponent(new Label("No margins"));
-        vert.addComponent(new Label("label 3"));
-        vert.addStyleName("borders");
-
-        GridLayout gl = new GridLayout(3, 2);
-        gl.setStyleName("borders");
-        gl.setSpacing(true);
-        gl.setMargin(true);
-        gl.setStyleName("ticket2222");
-        gl.addComponent(new Label("Vert spacing: 50px; horiz 20px;"));
-        gl.addComponent(new Label("Margin-left: 40px"));
-        gl.addComponent(new Label("Margin-top: 100px;"));
-        gl.addComponent(new Label("Margin-right: 20px;"));
-        gl.addComponent(new Label("Margin-bottom: 30px;"));
-        gl.addComponent(new Label("label 3"));
-        gl.addStyleName("borders");
-
-        layout.addComponent(horiz);
-        layout.addComponent(new Label(" "));
-        layout.addComponent(vert);
-        layout.addComponent(new Label(" "));
-        layout.addComponent(gl);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2227OrderedlayoutInTable.java b/tests/src/com/vaadin/tests/tickets/Ticket2227OrderedlayoutInTable.java
deleted file mode 100644
index c93b26bec2..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2227OrderedlayoutInTable.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Item;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2227OrderedlayoutInTable extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window();
-        Table t = new Table();
-        t.setWidth("500px");
-        t.setHeight("200px");
-        t.addContainerProperty("pno", String.class, "");
-        t.addContainerProperty("testi", String.class, "");
-        t.addContainerProperty("testi2", Layout.class, null);
-        t.addContainerProperty("komponentti", Component.class, null);
-        t.addContainerProperty("nimi", String.class, "");
-        t.setVisibleColumns(new Object[] { "pno", "testi", "testi2", "nimi" });
-
-        t.setSelectable(true);
-
-        Item i = t.addItem(1);
-        i.getItemProperty("pno").setValue("1");
-        i.getItemProperty("testi").setValue("12.12.08");
-        VerticalLayout ol = new VerticalLayout();
-        ol.setWidth("100%");
-        ol.setHeight(null);
-        ol.addComponent(new Label("monirivi testi"));
-        ol.addComponent(new Label("monirivi testi2"));
-
-        i.getItemProperty("testi2").setValue(ol);
-        i.getItemProperty("nimi").setValue("test");
-
-        w.addComponent(t);
-        setMainWindow(w);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2231.java b/tests/src/com/vaadin/tests/tickets/Ticket2231.java
deleted file mode 100644
index ba12dd7abc..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2231.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket2231 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        setTheme("tests-tickets");
-        createUI((AbstractOrderedLayout) w.getContent());
-    }
-
-    private void createUI(AbstractOrderedLayout layout) {
-        layout.setSizeUndefined();
-        layout.setMargin(false);
-        layout.setStyleName("borders");
-        Label l = new Label("Margin-label");
-
-        l.setStyleName("ticket2231");
-
-        layout.addComponent(l);
-
-        for (int i = 0; i < 5; i++) {
-            l = new Label("This is a label with border");
-            l.setStyleName("ticket2231-border");
-            if (i == 2) {
-                l.setWidth("100%");
-                l.setValue("100% wide");
-            } else if (i == 4) {
-                l.setWidth("20em");
-                l.setValue("20em wide");
-            }
-            // l.addStyleName("ticket2231");
-            layout.addComponent(l);
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2232.java b/tests/src/com/vaadin/tests/tickets/Ticket2232.java
deleted file mode 100644
index 6df6717c33..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2232.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Layout.SpacingHandler;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2232 extends Application {
-
-    @Override
-    public void init() {
-        setMainWindow(new Window());
-        setTheme("tests-tickets");
-
-        getMainWindow()
-                .addComponent(
-                        new Label(
-                                "Defining spacing must be possible also with pure CSS"));
-
-        Layout gl;
-        gl = new VerticalLayout();
-        gl.setWidth("100%");
-        gl.setHeight("200px");
-        gl.setStyleName("t2232");
-        fillAndAdd(gl);
-
-        gl = new GridLayout();
-        gl.setWidth("100%");
-        gl.setHeight("200px");
-        gl.setStyleName("t2232");
-        fillAndAdd(gl);
-
-        gl = new VerticalLayout();
-        gl.setWidth("100%");
-        gl.setHeight("200px");
-        ((SpacingHandler) gl).setSpacing(true);
-        fillAndAdd(gl);
-
-        gl = new GridLayout();
-        gl.setWidth("100%");
-        gl.setHeight("200px");
-        ((SpacingHandler) gl).setSpacing(true);
-        fillAndAdd(gl);
-
-        gl = new VerticalLayout();
-        gl.setWidth("100%");
-        gl.setHeight("200px");
-        fillAndAdd(gl);
-
-        gl = new GridLayout();
-        gl.setWidth("100%");
-        gl.setHeight("200px");
-        fillAndAdd(gl);
-
-    }
-
-    private void fillAndAdd(Layout gl) {
-        for (int i = 0; i < 4; i++) {
-            Button b = new Button("B");
-            b.setSizeFull();
-            gl.addComponent(b);
-        }
-        String caption = gl.getClass().getSimpleName();
-        caption += " style: " + gl.getStyleName() + ", spacingFromServer:"
-                + ((SpacingHandler) gl).isSpacing();
-        gl.setCaption(caption);
-        getMainWindow().addComponent(gl);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2234.java b/tests/src/com/vaadin/tests/tickets/Ticket2234.java
deleted file mode 100644
index 5c6167fbfe..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2234.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Item;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Window;
-
-public class Ticket2234 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        createUI((AbstractOrderedLayout) w.getContent());
-    }
-
-    private void createUI(AbstractOrderedLayout layout) {
-        ComboBox combo = new ComboBox("Combobox caption");
-        combo.addContainerProperty("blah", String.class, "");
-        combo.setItemCaptionPropertyId("blah");
-
-        Item item;
-        for (int i = 0; i < 100; i++) {
-            item = combo.addItem(new Object());
-            item.getItemProperty("blah").setValue("Item " + i);
-        }
-
-        layout.addComponent(combo);
-
-        combo = new ComboBox("Combobox caption");
-        combo.addContainerProperty("blah", String.class, "");
-        combo.setItemCaptionPropertyId("blah");
-
-        for (int i = 0; i < 5; i++) {
-            item = combo.addItem(new Object());
-            item.getItemProperty("blah").setValue("Item " + i);
-        }
-
-        layout.addComponent(combo);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2235.java b/tests/src/com/vaadin/tests/tickets/Ticket2235.java
deleted file mode 100644
index 72a77e502e..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2235.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.TextArea;
-import com.vaadin.ui.Window;
-
-public class Ticket2235 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        createUI((AbstractOrderedLayout) w.getContent());
-    }
-
-    private void createUI(AbstractOrderedLayout layout) {
-        layout.setSizeFull();
-
-        TextArea tf = new TextArea();
-        tf.setCaption("A text field");
-        tf.setSizeFull();
-        tf.setRows(2);
-
-        layout.addComponent(tf);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2240.java b/tests/src/com/vaadin/tests/tickets/Ticket2240.java
deleted file mode 100644
index 6d70d89af8..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2240.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket2240 extends Application {
-
-    public static final String txt = "<p>There are two main types of windows: application-level windows, and "
-            + "\"sub windows\".</p><p>A sub window is rendered as a \"inline\" popup window"
-            + " within the (native) browser window to which it was added. You can create"
-            + " a sub window by creating a new Window and adding it to a application-level window, for instance"
-            + " your main window. </p><p> In contrast, you create a application-level window by"
-            + " creating a new Window and adding it to the Application. Application-level"
-            + " windows are not shown by default - you need to open a browser window for"
-            + " the url representing the window. You can think of the application-level"
-            + " windows as separate views into your application - and a way to create a"
-            + " \"native\" browser window.</p><p>Depending on your needs, it's also"
-            + " possible to create a new window instance (with it's own internal state)"
-            + " for each new (native) browser window, or you can share the same instance"
-            + " (and state) between several browser windows (the latter is most useful"
-            + " for read-only views).</p><br/><p>This is the end.</p>";
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        setTheme("tests-tickets");
-        createUI((AbstractOrderedLayout) w.getContent());
-    }
-
-    private void createUI(AbstractOrderedLayout layout) {
-        layout.setHeight(null);
-        layout.setStyleName("borders");
-        // layout.setSizeFull();
-        final Label l = new Label(txt);
-        l.setContentMode(Label.CONTENT_XHTML);
-        // l.setWidth("100%");
-
-        TextField tf = new TextField("This is a textField");
-        tf.setWidth("100%");
-
-        layout.addComponent(tf);
-        layout.addComponent(l);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2242.java b/tests/src/com/vaadin/tests/tickets/Ticket2242.java
deleted file mode 100644
index fa25ff55f1..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2242.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-public class Ticket2242 extends Application implements ValueChangeListener {
-
-    private Object tableValue = null;
-    private Table t;
-    private String valueDataSource = "-";
-    private ObjectProperty<String> prop;
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        createUI((AbstractOrderedLayout) w.getContent());
-    }
-
-    private void createUI(AbstractOrderedLayout layout) {
-        Button b = new Button("Change container datasource",
-                new ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        for (int i = 0; i < 5; i++) {
-                            t.setContainerDataSource(createContainer());
-                            // prop.setValue("ipsum");
-                        }
-                    }
-
-                });
-
-        layout.addComponent(b);
-
-        t = new Table("A table");
-        prop = new ObjectProperty<String>(valueDataSource);
-        t.setPropertyDataSource(prop);
-        t.setSelectable(true);
-        t.setImmediate(true);
-        t.setPageLength(5);
-        t.setContainerDataSource(createContainer());
-        tableValue = t.getValue();
-        t.addListener(this);
-
-        layout.addComponent(t);
-    }
-
-    private IndexedContainer createContainer() {
-        IndexedContainer ic = new IndexedContainer();
-        ic.addContainerProperty("a", String.class, null);
-
-        for (String s : new String[] { "Lorem", "ipsum", "dolor", "sit",
-                "amet", "consectetuer" }) {
-            Item item = ic.addItem(s);
-            item.getItemProperty("a").setValue(s);
-
-        }
-
-        return ic;
-    }
-
-    public void valueChange(ValueChangeEvent event) {
-        System.out.println("Value change from " + tableValue + " to "
-                + t.getValue());
-        tableValue = t.getValue();
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2244.java b/tests/src/com/vaadin/tests/tickets/Ticket2244.java
deleted file mode 100644
index e9ae3ac720..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2244.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.util.BeanItem;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.FormLayout;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket2244 extends Application {
-
-    Form form;
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-
-        GridLayout gl = new GridLayout(3, 3);
-        gl.setSpacing(true);
-        gl.addComponent(new Label("Before form"));
-        gl.newLine();
-
-        form = new Form(gl);
-        form.setItemDataSource(new BeanItem<MyBean>(new MyBean()));
-
-        gl.addComponent(new Label("After form"));
-
-        w.addComponent(form);
-
-        w.addComponent(new Button("new item", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                form.setItemDataSource(new BeanItem<MyBean>(new MyBean()));
-
-            }
-
-        }));
-        w.addComponent(new Button("new bigger item",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        form.setItemDataSource(new BeanItem<MyBean>(
-                                new MyBiggerBean()));
-
-                    }
-
-                }));
-        w.addComponent(new Button("new grid layout",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        form.setLayout(new GridLayout());
-
-                    }
-
-                }));
-        w.addComponent(new Button("new form layout",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        form.setLayout(new FormLayout());
-
-                    }
-
-                }));
-
-    }
-
-    public class MyBean {
-        String firstname;
-        String lastname;
-        String password;
-
-        public String getFirstname() {
-            return firstname;
-        }
-
-        public void setFirstname(String firstname) {
-            this.firstname = firstname;
-        }
-
-        public String getLastname() {
-            return lastname;
-        }
-
-        public void setLastname(String lastname) {
-            this.lastname = lastname;
-        }
-
-        public String getPassword() {
-            return password;
-        }
-
-        public void setPassword(String password) {
-            this.password = password;
-        }
-
-    }
-
-    public class MyBiggerBean extends MyBean {
-        String address;
-        String phone;
-
-        public String getAddress() {
-            return address;
-        }
-
-        public void setAddress(String address) {
-            this.address = address;
-        }
-
-        public String getPhone() {
-            return phone;
-        }
-
-        public void setPhone(String phone) {
-            this.phone = phone;
-        }
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2245.java b/tests/src/com/vaadin/tests/tickets/Ticket2245.java
deleted file mode 100644
index bac85c95cd..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2245.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Window;
-
-public class Ticket2245 extends Application {
-
-    @Override
-    public void init() {
-        Window main = new Window("The Main Window");
-        main.getContent().setSizeFull();
-        setMainWindow(main);
-        HorizontalSplitPanel sp = new HorizontalSplitPanel();
-        main.addComponent(sp);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2267.java b/tests/src/com/vaadin/tests/tickets/Ticket2267.java
deleted file mode 100644
index 020ea5c7c6..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2267.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket2267 extends Application {
-
-    Label l = new Label("0");
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        GridLayout gl = new GridLayout(4, 2);
-
-        Button button = new Button("1", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                Button b = event.getButton();
-                l.setValue(l.getValue() + b.getCaption());
-
-            }
-
-        });
-
-        gl.addComponent(l, 0, 0, 3, 0);
-        gl.addComponent(button);
-        gl.addComponent(new Label("2"));
-        gl.addComponent(new Label("3"));
-        gl.addComponent(new Label("4"));
-
-        w.setContent(gl);
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2271.java b/tests/src/com/vaadin/tests/tickets/Ticket2271.java
deleted file mode 100644
index 50a99edb7a..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2271.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2271 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        createUI((AbstractOrderedLayout) w.getContent());
-    }
-
-    private void createUI(AbstractOrderedLayout layout) {
-
-        VerticalLayout ol = new VerticalLayout();
-        ol.setWidth(null);
-
-        ComboBox cb = new ComboBox("Asiakas");
-        cb.setWidth("100%");
-
-        Button b = new Button("View CSV-tiedostoon");
-
-        ol.addComponent(cb);
-        ol.addComponent(b);
-
-        layout.addComponent(ol);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2279.java b/tests/src/com/vaadin/tests/tickets/Ticket2279.java
deleted file mode 100644
index e3b446f242..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2279.java
+++ /dev/null
@@ -1,209 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.gwt.client.ui.AlignmentInfo;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Layout.AlignmentHandler;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-// This tests the deprecated setComponentAlignment(Component,String) API
-@SuppressWarnings("deprecation")
-public class Ticket2279 extends Application {
-
-    private Label label;
-
-    private static Map<String, Integer> expected = new HashMap<String, Integer>();
-
-    private static Set<String> longHorizontalAlignments = new HashSet<String>();
-    private static Set<String> shortHorizontalAlignments = new HashSet<String>();
-    private static Set<String> longVerticalAlignments = new HashSet<String>();
-    private static Set<String> shortVerticalAlignments = new HashSet<String>();
-
-    static {
-        expected.put("r", AlignmentInfo.Bits.ALIGNMENT_RIGHT);
-        expected.put("l", AlignmentInfo.Bits.ALIGNMENT_LEFT);
-        expected.put("c", AlignmentInfo.Bits.ALIGNMENT_HORIZONTAL_CENTER);
-        expected.put("t", AlignmentInfo.Bits.ALIGNMENT_TOP);
-        expected.put("b", AlignmentInfo.Bits.ALIGNMENT_BOTTOM);
-        expected.put("m", AlignmentInfo.Bits.ALIGNMENT_VERTICAL_CENTER);
-
-        expected.put("right", AlignmentInfo.Bits.ALIGNMENT_RIGHT);
-        expected.put("left", AlignmentInfo.Bits.ALIGNMENT_LEFT);
-        expected.put("center", AlignmentInfo.Bits.ALIGNMENT_HORIZONTAL_CENTER);
-        expected.put("top", AlignmentInfo.Bits.ALIGNMENT_TOP);
-        expected.put("bottom", AlignmentInfo.Bits.ALIGNMENT_BOTTOM);
-        expected.put("middle", AlignmentInfo.Bits.ALIGNMENT_VERTICAL_CENTER);
-
-        shortHorizontalAlignments.add("r");
-        shortHorizontalAlignments.add("l");
-        shortHorizontalAlignments.add("c");
-        shortVerticalAlignments.add("t");
-        shortVerticalAlignments.add("b");
-        shortVerticalAlignments.add("m");
-
-        longHorizontalAlignments.add("right");
-        longHorizontalAlignments.add("left");
-        longHorizontalAlignments.add("center");
-        longVerticalAlignments.add("top");
-        longVerticalAlignments.add("bottom");
-        longVerticalAlignments.add("middle");
-
-    }
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        setTheme("tests-tickets");
-        AbstractOrderedLayout layout = (AbstractOrderedLayout) w.getContent();
-
-        createUI(layout);
-    }
-
-    private void createUI(Layout layout) {
-        VerticalLayout vl = new VerticalLayout();
-        vl.setWidth("500px");
-        vl.setHeight("500px");
-        vl.setStyleName("borders");
-        label = new Label("<b>Error messages follows:</b><br/>",
-                Label.CONTENT_XHTML);
-        vl.addComponent(label);
-        layout.addComponent(vl);
-
-        testAlignments(vl);
-
-        GridLayout gl = new GridLayout(1, 1);
-        gl.setWidth("500px");
-        gl.setHeight("500px");
-        gl.setStyleName("borders");
-        label = new Label("<b>Error messages follows:</b><br/>",
-                Label.CONTENT_XHTML);
-        gl.addComponent(label);
-        layout.addComponent(gl);
-
-        testAlignments(gl);
-
-    }
-
-    private void testAlignments(AlignmentHandler layout) {
-        HashSet<String> horizontals = new HashSet<String>();
-        horizontals.addAll(shortHorizontalAlignments);
-        horizontals.addAll(longHorizontalAlignments);
-
-        for (String horiz : horizontals) {
-            // Test "l","r","left","right" etc
-            int expectedHoriz = expected.get(horiz);
-            checkAlignment(layout, horiz, AlignmentHandler.ALIGNMENT_TOP
-                    | expectedHoriz);
-
-            for (String vert : shortVerticalAlignments) {
-                int expectedVert = expected.get(vert);
-
-                // Test "lt","rt" etc
-                if (horiz.length() == 1) {
-                    checkAlignment(layout, horiz + vert, expectedHoriz
-                            | expectedVert);
-                    checkAlignment(layout, vert + horiz, expectedHoriz
-                            | expectedVert);
-                } else {
-                    boolean ok = false;
-                    try {
-                        checkAlignment(layout, horiz + vert, expectedHoriz
-                                | expectedVert);
-                    } catch (IllegalArgumentException e) {
-                        // OK, "centert","rightb" etc are not valid
-                        ok = true;
-                    }
-                    if (!ok) {
-                        error("IllegalArgumentException was not thrown for "
-                                + horiz + vert);
-                    }
-                    ok = false;
-                    try {
-                        checkAlignment(layout, vert + horiz, expectedHoriz
-                                | expectedVert);
-                    } catch (IllegalArgumentException e) {
-                        // OK, "centert","rightb" etc are not valid
-                        ok = true;
-                    }
-                    if (!ok) {
-                        error("IllegalArgumentException was not thrown for "
-                                + horiz + vert);
-                    }
-
-                }
-
-                // Test "l t","r t" etc
-                checkAlignment(layout, horiz + " " + vert, expectedHoriz
-                        | expectedVert);
-                checkAlignment(layout, vert + " " + horiz, expectedHoriz
-                        | expectedVert);
-            }
-
-            for (String vert : longVerticalAlignments) {
-                int expectedVert = expected.get(vert);
-
-                // Test "right t","right b" etc
-                checkAlignment(layout, horiz + " " + vert, expectedHoriz
-                        | expectedVert);
-                checkAlignment(layout, vert + " " + horiz, expectedHoriz
-                        | expectedVert);
-
-                // Three alignments should throw an exception
-                boolean ok = false;
-                try {
-                    checkAlignment(layout, horiz + " " + vert + " " + horiz,
-                            expectedHoriz | expectedVert);
-                } catch (IllegalArgumentException e) {
-                    // OK, "centert","rightb" etc are not valid
-                    ok = true;
-                }
-                if (!ok) {
-                    error("IllegalArgumentException was not thrown for "
-                            + horiz + " " + vert + " " + horiz);
-                }
-            }
-        }
-
-        checkAlignment(layout, "left right", AlignmentHandler.ALIGNMENT_TOP
-                | AlignmentHandler.ALIGNMENT_RIGHT);
-    }
-
-    private void checkAlignment(AlignmentHandler layout,
-            String alignmentString, int expected) {
-        layout.setComponentAlignment(label, AlignmentInfo.Bits.ALIGNMENT_TOP,
-                AlignmentInfo.Bits.ALIGNMENT_LEFT);
-        if (layout instanceof AbstractOrderedLayout) {
-            ((AbstractOrderedLayout) layout).setComponentAlignment(label,
-                    alignmentString);
-        } else {
-            ((GridLayout) layout).setComponentAlignment(label, alignmentString);
-        }
-
-        int actual = layout.getComponentAlignment(label).getBitMask();
-        if (actual != expected) {
-            String error = "Error " + alignmentString
-                    + " did not produce expected results";
-            error(error);
-        } else {
-            String str = layout.getClass().getSimpleName() + "/"
-                    + alignmentString + ": OK";
-            System.out.println(str);
-        }
-
-    }
-
-    private void error(String error) {
-        label.setValue(label.getValue() + error + "<br/>");
-        System.out.println(error);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2282.java b/tests/src/com/vaadin/tests/tickets/Ticket2282.java
deleted file mode 100644
index c63faf2cef..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2282.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.FormLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket2282 extends Application {
-
-    private FormLayout layout1;
-    private FormLayout layout2;
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        setTheme("tests-tickets");
-        w.getContent().setSizeUndefined();
-
-        layout1 = new FormLayout();
-        layout1.setSizeUndefined();
-        layout1.setStyleName("borders");
-        Label label = new Label(
-                "This should not be wider than this label + reserved error space");
-        label.setCaption("A caption");
-        layout1.addComponent(label);
-        w.addComponent(layout1);
-
-        layout2 = new FormLayout();
-        layout2.setWidth("500px");
-        layout2.setStyleName("borders");
-        label = new Label("This should be 500px wide");
-        label.setCaption("A caption");
-        layout2.addComponent(label);
-        w.addComponent(layout2);
-
-        Button b = new Button("Swap", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                if (layout1.getWidth() < 0.0) {
-                    layout1.setWidth("500px");
-                    layout2.setWidth(null);
-                } else {
-                    layout1.setWidth(null);
-                    layout2.setWidth("500px");
-                }
-            }
-
-        });
-        w.addComponent(b);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2283.java b/tests/src/com/vaadin/tests/tickets/Ticket2283.java
deleted file mode 100644
index 89b90eaa01..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2283.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket2283 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-
-        GridLayout gl = new GridLayout(2, 2);
-        gl.setSizeUndefined();
-
-        gl.addComponent(new Label(
-                "Label 1 abc abc abcasdfas dfasd fasdf asdf sadf asdf"));
-        gl.addComponent(new Label("Label 2 abc abc abc "));
-        Label l = new Label("Colspan2, align right");
-        gl.addComponent(l, 0, 1, 1, 1);
-        gl.setComponentAlignment(l, Alignment.TOP_RIGHT);
-        w.setContent(gl);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2287.java b/tests/src/com/vaadin/tests/tickets/Ticket2287.java
deleted file mode 100644
index 5d4ac308ef..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2287.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.net.URL;
-
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket2287 extends Ticket2292 {
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-        URL url = getURL();
-        main.addComponent(new Label(
-                "Icon is built by servlet with a slow method, so it will show the bug (components not firing requestLayout)."));
-
-        Label l = new Label();
-        l.setContentMode(Label.CONTENT_XHTML);
-        l.setValue("This is a label with as slow image. <img src=\"" + url
-                + "/icon.png\" />");
-        main.addComponent(l);
-
-        l = new Label();
-        l.setContentMode(Label.CONTENT_XHTML);
-        l.setValue("This is a label with as slow image. <img src=\"" + url
-                + "/icon.png\" />");
-        main.addComponent(l);
-
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2289.java b/tests/src/com/vaadin/tests/tickets/Ticket2289.java
deleted file mode 100644
index 19574b50fb..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2289.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Accordion;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2289 extends Application {
-
-    TabSheet ts = null;
-    Accordion acc = null;
-
-    @Override
-    public void init() {
-
-        Window w = new Window();
-        setMainWindow(w);
-        VerticalLayout ol = new VerticalLayout();
-        w.setContent(ol);
-        Button b = new Button("close current tab");
-        b.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                closeCurrentTab();
-
-            }
-        });
-        ol.addComponent(b);
-
-        b = new Button("close first tab");
-        b.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                closeFirstTab();
-
-            }
-        });
-
-        ol.addComponent(b);
-        ts = new TabSheet();
-        ts.setSizeUndefined();
-        ts.setWidth("300px");
-        ts.addTab(new MyTab("tab one"), "Caption1", null);
-        ts.addTab(new MyTab("tab two"), "Caption2", null);
-        ts.addTab(new MyTab("tab three"), "Caption3", null);
-        ts.addTab(new MyTab("tab four"), "Caption4", null);
-        ts.addTab(new MyTab("tab five"), "Caption5", null);
-
-        acc = new Accordion();
-        acc.setSizeUndefined();
-        acc.addTab(new MyTab("tab one"), "Caption1", null);
-        acc.addTab(new MyTab("tab two"), "Caption2", null);
-        acc.addTab(new MyTab("tab three"), "Caption3", null);
-        acc.addTab(new MyTab("tab four"), "Caption4", null);
-
-        ol.addComponent(acc);
-        ts = null;
-        // ol.addComponent(ts);
-
-    }
-
-    private void closeCurrentTab() {
-        if (ts != null) {
-            MyTab m = (MyTab) ts.getSelectedTab();
-            if (m != null) {
-                ts.removeComponent(m);
-            }
-        }
-        if (acc != null) {
-            MyTab m = (MyTab) acc.getSelectedTab();
-            if (m != null) {
-                acc.removeComponent(m);
-            }
-        }
-    }
-
-    private void closeFirstTab() {
-        if (ts != null) {
-            ts.removeComponent(ts.getComponentIterator().next());
-        }
-        if (acc != null) {
-            acc.removeComponent(acc.getComponentIterator().next());
-        }
-    }
-
-}
-
-class MyTab extends CustomComponent {
-    public MyTab(String text) {
-        setSizeUndefined();
-        HorizontalLayout ol = new HorizontalLayout();
-        setCompositionRoot(ol);
-        ol.addComponent(new Label(text));
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2292.java b/tests/src/com/vaadin/tests/tickets/Ticket2292.java
deleted file mode 100644
index 2fd7c3511a..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2292.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.net.URL;
-
-import javax.imageio.ImageIO;
-
-import com.vaadin.terminal.DownloadStream;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.Window;
-
-public class Ticket2292 extends com.vaadin.Application {
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        ExternalResource icon = new ExternalResource("./icon.png");
-        main.addComponent(new Label(
-                "Note, run with trailing slash in url to have a working icon. Icon is built by servlet with a slow method, so it will show the bug (components not firing requestLayout)"));
-        Button b = new Button();
-        main.addComponent(b);
-        b.setIcon(icon);
-
-        CheckBox checkBox = new CheckBox();
-        main.addComponent(checkBox);
-        checkBox.setIcon(icon);
-
-        Link l = new Link("l", icon);
-        main.addComponent(l);
-
-    }
-
-    @Override
-    public DownloadStream handleURI(URL context, String relativeUri) {
-        if (!relativeUri.contains("icon.png")) {
-            return null;
-        }
-
-        // be slow to show bug
-        try {
-            Thread.sleep(2000);
-        } catch (InterruptedException e1) {
-            // TODO Auto-generated catch block
-            e1.printStackTrace();
-        }
-
-        BufferedImage image = new BufferedImage(200, 200,
-                BufferedImage.TYPE_INT_RGB);
-        Graphics drawable = image.getGraphics();
-        drawable.setColor(Color.lightGray);
-        drawable.fillRect(0, 0, 200, 200);
-        drawable.setColor(Color.yellow);
-        drawable.fillOval(25, 25, 150, 150);
-        drawable.setColor(Color.blue);
-        drawable.drawRect(0, 0, 199, 199);
-
-        // Use the parameter to create dynamic content.
-        drawable.setColor(Color.black);
-        drawable.drawString("Tex", 75, 100);
-
-        try {
-            // Write the image to a buffer.
-            ByteArrayOutputStream imagebuffer = new ByteArrayOutputStream();
-            ImageIO.write(image, "png", imagebuffer);
-
-            // Return a stream from the buffer.
-            ByteArrayInputStream istream = new ByteArrayInputStream(
-                    imagebuffer.toByteArray());
-            return new DownloadStream(istream, null, null);
-        } catch (IOException e) {
-            return null;
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2294.java b/tests/src/com/vaadin/tests/tickets/Ticket2294.java
deleted file mode 100644
index 37c29ca5e0..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2294.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket2294 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        createUI((AbstractOrderedLayout) w.getContent());
-    }
-
-    private void createUI(AbstractOrderedLayout layout) {
-        Label label1 = new Label();
-        Label label2 = null;
-        Label label3 = new Label();
-        String result1 = "";
-        String result2 = "";
-        String result3 = "";
-
-        layout.addComponent(label1);
-        try {
-            layout.setComponentAlignment(label1, Alignment.BOTTOM_LEFT);
-            result1 = "OK";
-        } catch (Exception e) {
-            result1 = "FAILED: " + e.getMessage();
-        }
-
-        try {
-            layout.setComponentAlignment(label2, Alignment.BOTTOM_LEFT);
-            result2 = "FAILED, no exception";
-        } catch (IllegalArgumentException e) {
-            result2 = "OK";
-        } catch (Exception e) {
-            result2 = "FAILED: " + e.getMessage();
-        }
-
-        try {
-            layout.setComponentAlignment(label3, Alignment.BOTTOM_LEFT);
-            result3 = "FAILED, no exception";
-        } catch (IllegalArgumentException e) {
-            result3 = "OK";
-        } catch (Exception e) {
-            result3 = "FAILED: " + e.getMessage();
-        }
-
-        label1.setValue("Result 1: " + result1 + ", result 2: " + result2
-                + ", result 3: " + result3);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2296.java b/tests/src/com/vaadin/tests/tickets/Ticket2296.java
deleted file mode 100644
index 1503811341..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2296.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.CustomLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2296 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        setTheme("tests-tickets");
-        CustomLayout cl = new CustomLayout("Ticket2296");
-        cl.setSizeFull();
-        Button b = new Button("100%x100% button");
-        b.setSizeFull();
-        cl.addComponent(b, "button1");
-
-        b = new Button("100%x100% button");
-        b.setSizeFull();
-        cl.addComponent(b, "button2");
-
-        b = new Button("50%x50% button");
-        b.setWidth("50%");
-        b.setHeight("50%");
-        cl.addComponent(b, "button3");
-
-        w.setContent(cl);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2297.java b/tests/src/com/vaadin/tests/tickets/Ticket2297.java
deleted file mode 100644
index da257b4ae8..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2297.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.net.URL;
-
-import com.vaadin.ui.CustomLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket2297 extends Ticket2292 {
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-        URL url = getURL();
-        main.addComponent(new Label(
-                "Icon is built by servlet with a slow method, so it will show the bug (components not firing requestLayout)."));
-
-        try {
-            CustomLayout cl = new CustomLayout(
-                    new ByteArrayInputStream(
-                            ("This is an empty CustomLayout with as slow image. <img src=\""
-                                    + url.toString() + "/icon.png\" />")
-                                    .getBytes()));
-            main.addComponent(cl);
-
-            cl = new CustomLayout(
-                    new ByteArrayInputStream(
-                            ("This is an empty CustomLayout with as slow image. <img src=\""
-                                    + url.toString() + "/icon.png\" />")
-                                    .getBytes()));
-            main.addComponent(cl);
-        } catch (IOException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2303.java b/tests/src/com/vaadin/tests/tickets/Ticket2303.java
deleted file mode 100644
index 21b33d5bb6..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2303.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-
-import com.vaadin.Application;
-import com.vaadin.ui.CustomLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2303 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window("main window");
-
-        String customlayout = "<div location=\"test\"></div>";
-        CustomLayout cl = null;
-        try {
-            cl = new CustomLayout(new ByteArrayInputStream(
-                    customlayout.getBytes()));
-        } catch (IOException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-        cl.setWidth("100%");
-        w.setContent(cl);
-
-        // VerticalLayout ol = new VerticalLayout();
-        // w.setContent(ol);
-        VerticalLayout hugeLayout = new VerticalLayout();
-        hugeLayout.setMargin(true);
-        hugeLayout.setSpacing(true);
-        for (int i = 0; i < 30; i++) {
-            hugeLayout.addComponent(new Label("huge " + i));
-        }
-        cl.addComponent(hugeLayout, "test");
-        // ol.addComponent(hugeLayout);
-        setMainWindow(w);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2304.java b/tests/src/com/vaadin/tests/tickets/Ticket2304.java
deleted file mode 100644
index 1b356c73fb..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2304.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.themes.Reindeer;
-
-public class Ticket2304 extends Application {
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        Panel p = new Panel();
-        p.setStyleName(Reindeer.PANEL_LIGHT);
-        main.addComponent(p);
-        p.setHeight("100px");
-
-        Label l = new Label(
-                "a\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\n");
-        l.setContentMode(Label.CONTENT_PREFORMATTED);
-        p.addComponent(l);
-        main.addComponent(new Label(
-                "This text should be right below the panel, w/o spacing"));
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2310.java b/tests/src/com/vaadin/tests/tickets/Ticket2310.java
deleted file mode 100644
index 6363fddcaf..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2310.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.themes.Reindeer;
-
-public class Ticket2310 extends Application {
-
-    @Override
-    public void init() {
-        final Window main = new Window(getClass().getName().substring(
-                getClass().getName().lastIndexOf(".") + 1));
-        setMainWindow(main);
-
-        main.addComponent(new Label("Instructions: change label when panel is "
-                + "invisible -> invalid change (with disabled "
-                + "flag) is sent to client. Label is grey when panel is shown."));
-
-        final Panel p = new Panel();
-        p.setStyleName(Reindeer.PANEL_LIGHT);
-        main.addComponent(p);
-        p.setHeight("100px");
-
-        final Label l = new Label("foobar");
-
-        p.addComponent(l);
-
-        Button b = new Button("change label");
-
-        b.addListener(new Button.ClickListener() {
-            int i = 0;
-
-            public void buttonClick(ClickEvent event) {
-
-                l.setValue("foobar " + i++);
-
-            }
-        });
-
-        Button b2 = new Button("toggle panel visibility");
-        b2.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                p.setVisible(!p.isVisible());
-            }
-        });
-
-        main.addComponent(b);
-        main.addComponent(b2);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2319.java b/tests/src/com/vaadin/tests/tickets/Ticket2319.java
deleted file mode 100644
index b8a2ba8db8..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2319.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.VerticalSplitPanel;
-import com.vaadin.ui.Window;
-
-public class Ticket2319 extends Application {
-
-    @Override
-    public void init() {
-        Window mainw = new Window();
-        setMainWindow(mainw);
-
-        mainw.addComponent(new Label(
-                "This test has somewhat invalid layouts in it to detect analyzy layout function in debug dialog"));
-
-        HorizontalLayout hl = new HorizontalLayout();
-        Panel panel = new Panel("p1");
-        Panel panel2 = new Panel("p2");
-        hl.addComponent(panel);
-        hl.addComponent(panel2);
-
-        mainw.addComponent(hl);
-
-        hl = new HorizontalLayout();
-        panel = new Panel("p1");
-        panel.setSizeUndefined();
-        panel.setHeight("100%");
-        panel2 = new Panel("p2");
-        panel2.setSizeUndefined();
-        panel2.setHeight("100%");
-
-        hl.addComponent(panel);
-        hl.addComponent(panel2);
-        mainw.addComponent(hl);
-
-        HorizontalSplitPanel sp = new HorizontalSplitPanel();
-
-        VerticalLayout first = new VerticalLayout();
-        first.addComponent(new Label("first"));
-        VerticalLayout second = new VerticalLayout();
-        second.addComponent(new Label("second"));
-
-        sp.setFirstComponent(first);
-        sp.setSecondComponent(second);
-
-        VerticalSplitPanel sp2 = new VerticalSplitPanel();
-        Label label = new Label("first");
-        label.setSizeFull();
-        sp2.setFirstComponent(label);
-        sp2.setSecondComponent(sp);
-
-        sp2.setHeight("200px");
-
-        mainw.addComponent(sp2);
-
-        mainw.addComponent(new Button("click me to save split panel state"));
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2323.java b/tests/src/com/vaadin/tests/tickets/Ticket2323.java
deleted file mode 100644
index 503878ecad..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2323.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.RichTextArea;
-import com.vaadin.ui.Window;
-
-public class Ticket2323 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-
-        Window subWindow = new Window("");
-        subWindow.setSizeUndefined();
-        subWindow.getContent().setSizeUndefined();
-        subWindow.center();
-        subWindow.addComponent(new RichTextArea());
-        w.addWindow(subWindow);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2325.java b/tests/src/com/vaadin/tests/tickets/Ticket2325.java
deleted file mode 100644
index 1245254fa0..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2325.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.TextArea;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2325 extends Application {
-
-    @Override
-    public void init() {
-        Window main = new Window("Testing....");
-        setMainWindow(main);
-
-        final VerticalLayout lo = new VerticalLayout();
-        lo.setSizeUndefined();
-        lo.setWidth("100%");
-        TextArea tf = new TextArea();
-        tf.setValue("The textfield should fill the window."
-                + "\n - Try to resize window\n - Try to push REdo button");
-        tf.setRows(10);
-        tf.setWidth("100%");
-        lo.addComponent(tf);
-        Window subWin = new Window(
-                "This window should initially be as wide as the caption", lo);
-        main.addWindow(subWin);
-        // subWin.setWidth("500px");
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2329.java b/tests/src/com/vaadin/tests/tickets/Ticket2329.java
deleted file mode 100644
index 57dbeb4033..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2329.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Table.ColumnGenerator;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2329 extends Application {
-    private Table table;
-    private VerticalLayout mainLo;
-
-    @Override
-    public void init() {
-        Window mainw = new Window();
-        setMainWindow(mainw);
-        mainLo = (VerticalLayout) mainw.getContent();
-        table = new Table();
-        for (int i = 0; i < 10000; i++) {
-            table.addItem(i);
-        }
-        TestColumnGenerator cgen = new TestColumnGenerator();
-        table.addGeneratedColumn("col1", cgen);
-        table.addGeneratedColumn("col2", cgen);
-        table.addGeneratedColumn("col3", cgen);
-        table.addGeneratedColumn("col4", cgen);
-        table.addGeneratedColumn("col5", cgen);
-        table.addGeneratedColumn("col6", cgen);
-        table.addGeneratedColumn("col7", cgen);
-        table.setHeight("500px");
-        mainLo.addComponent(table);
-    }
-
-    class TestColumnGenerator implements ColumnGenerator {
-        public Component generateCell(Table source, Object rowId,
-                Object columnId) {
-            return new Button("1");
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2337.java b/tests/src/com/vaadin/tests/tickets/Ticket2337.java
deleted file mode 100644
index 9277a01f96..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2337.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket2337 extends Application {
-
-    GridLayout gl = new GridLayout(3, 1);
-
-    @Override
-    public void init() {
-        Window w = new Window();
-        setMainWindow(w);
-        Button b = new Button("add", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                gl.addComponent(new Label("asd"), 0, gl.getCursorY(), 2,
-                        gl.getCursorY());
-
-            }
-
-        });
-        w.addComponent(b);
-
-        b = new Button("empty", new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                gl.removeAllComponents();
-                ;
-
-            }
-
-        });
-        w.addComponent(b);
-
-        w.addComponent(gl);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2339.java b/tests/src/com/vaadin/tests/tickets/Ticket2339.java
deleted file mode 100644
index 6476807ada..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2339.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.CustomLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2339 extends Application {
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window(getClass().getSimpleName());
-        setMainWindow(mainWin);
-
-        try {
-            CustomLayout cl = new CustomLayout(
-                    new ByteArrayInputStream(
-                            "<div style=\"width:400px;overflow:hidden;background-color:red;\"><div style=\"border:1em solid blue; height:4em; padding:1em 1.5em;\" location=\"b\"></div></div>"
-                                    .getBytes()));
-            Button button = new Button("b");
-            button.setSizeFull();
-
-            cl.addComponent(button, "b");
-
-            mainWin.addComponent(cl);
-
-        } catch (IOException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2341.java b/tests/src/com/vaadin/tests/tickets/Ticket2341.java
deleted file mode 100644
index d7fbccfa4e..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2341.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.data.Item;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-public class Ticket2341 extends com.vaadin.Application {
-    @Override
-    public void init() {
-        Window main = new Window();
-        setMainWindow(main);
-        constructTables((Layout) main.getContent());
-    }
-
-    private void constructTables(Layout layout) {
-
-        Table t = createTable();
-        layout.addComponent(t);
-        t = createTable();
-        Label l = new Label("A high label to enable scrollbars");
-        l.setHeight("2000px");
-        layout.addComponent(l);
-
-    }
-
-    private Table createTable() {
-        Table t = new Table();
-        t.addContainerProperty("test1", String.class, "");
-        t.addContainerProperty("test2", String.class, "");
-        t.addContainerProperty("test3", String.class, "");
-        t.addContainerProperty("test4", String.class, "");
-        t.setWidth("100%");
-        t.setHeight("300px");
-        for (int i = 0; i < 100; i++) {
-            Item item = t.addItem(i);
-            item.getItemProperty("test1").setValue("testing1 " + i);
-            item.getItemProperty("test2").setValue("testing2 " + i);
-            item.getItemProperty("test3").setValue("testing3 " + i);
-            item.getItemProperty("test4").setValue("testing4 " + i);
-        }
-
-        return t;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2344.java b/tests/src/com/vaadin/tests/tickets/Ticket2344.java
deleted file mode 100644
index 26ef216940..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2344.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.Random;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.themes.BaseTheme;
-
-public class Ticket2344 extends Application {
-
-    @Override
-    public void init() {
-        Window main = new Window("Quick test");
-
-        setMainWindow(main);
-
-        // setTheme("quicktest");
-
-        VerticalLayout hl = new VerticalLayout();
-        hl.setWidth("400px");
-        main.setContent(hl);
-
-        Table t = new Table();
-        t.setWidth("100%");
-
-        t.addContainerProperty("Prop 1", VerticalLayout.class, "");
-        t.addContainerProperty("Prop 2", String.class, "");
-        t.addContainerProperty("Prop 3", String.class, "");
-        t.addContainerProperty("Prop 4", String.class, "");
-        t.addContainerProperty("Prop 5", Button.class, "");
-
-        t.setPageLength(3);
-
-        for (int i = 0; i < 10; i++) {
-
-            VerticalLayout vl = new VerticalLayout();
-            // vl.setWidth(null);
-            Button b = new Button("String 1 2 3");
-            b.setStyleName(BaseTheme.BUTTON_LINK);
-            vl.addComponent(b);
-            t.addItem(new Object[] { vl, "String 2", "String 3", "String 4",
-
-            new Button("String 5") }, new Integer(new Random().nextInt()));
-
-        }
-
-        hl.addComponent(t);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2347.java b/tests/src/com/vaadin/tests/tickets/Ticket2347.java
deleted file mode 100644
index 76e59146db..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2347.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.CustomLayout;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2347 extends Application {
-
-    private Button b1;
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        setTheme("tests-tickets");
-        createUI((VerticalLayout) w.getContent());
-    }
-
-    private void createUI(VerticalLayout layout) {
-        CustomLayout cl = new CustomLayout("Ticket2347");
-        b1 = new Button("200px button");
-        b1.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                if (b1.getWidth() == 200.0) {
-                    b1.setWidth("300px");
-                } else {
-                    b1.setWidth("200px");
-
-                }
-                b1.setCaption(b1.getWidth() + "px button");
-
-            }
-
-        });
-        b1.setWidth("200px");
-        Button b2 = new Button("100% button");
-        b2.setWidth("100%");
-
-        cl.addComponent(b1, "button1");
-        cl.addComponent(b2, "button2");
-
-        layout.addComponent(cl);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2364.java b/tests/src/com/vaadin/tests/tickets/Ticket2364.java
deleted file mode 100644
index 7f7290dd80..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2364.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2364 extends Application {
-
-    @Override
-    public void init() {
-
-        Window main = new Window("The Main Window!!!");
-        setMainWindow(main);
-        Form form = new Form();
-        VerticalLayout formLayout = new VerticalLayout();
-        form.setLayout(formLayout);
-        Select formSelect = new Select("hello");
-        Select select = new Select("hello");
-        form.setEnabled(false);
-        select.setEnabled(false);
-        formLayout.addComponent(formSelect);
-
-        VerticalLayout l2 = new VerticalLayout();
-        l2.addComponent(new Select("hello"));
-        l2.setEnabled(false);
-
-        form.setCaption("Form");
-        main.addComponent(form);
-        l2.setCaption("VerticalLayout");
-        main.addComponent(l2);
-        main.addComponent(select);
-        main.addComponent(new Select("Enabled=true select"));
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2365.java b/tests/src/com/vaadin/tests/tickets/Ticket2365.java
deleted file mode 100644
index 0c8a095ec9..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2365.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2365 extends Application {
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window(getClass().getSimpleName());
-        setMainWindow(mainWin);
-
-        VerticalLayout lo = new VerticalLayout();
-        lo.setSizeFull();
-        mainWin.setContent(lo);
-
-        final Panel p = createMultilevelPanel(5, (Panel) null);
-
-        Button b = new Button("Toggle parent level size");
-        lo.addComponent(b);
-        b.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                if (p.getWidth() > 0) {
-                    p.setSizeUndefined();
-                } else {
-                    p.setSizeFull();
-                }
-            }
-        });
-
-        lo.addComponent(p);
-
-        lo.setExpandRatio(p, 1);
-
-    }
-
-    private Panel createMultilevelPanel(int i, Panel panel) {
-        if (panel == null) {
-            panel = new Panel("Panel level " + i);
-            panel.setSizeFull();
-            panel.getContent().setSizeFull();
-        }
-        Panel p = new Panel("Panel level " + i--);
-        p.getContent().setSizeFull();
-        p.setSizeFull();
-        panel.addComponent(p);
-        if (i > 0) {
-            createMultilevelPanel(i, p);
-        }
-        return panel;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2398.java b/tests/src/com/vaadin/tests/tickets/Ticket2398.java
deleted file mode 100644
index dee0417eff..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2398.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-public class Ticket2398 extends Application {
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window();
-        setMainWindow(mainWin);
-
-        Table t = new Table();
-
-        IndexedContainer c = new IndexedContainer();
-
-        c.addItem("foo");
-
-        c.addContainerProperty("testcol1", Integer.class, new Integer(7));
-        c.addContainerProperty("testcol2", String.class, "str");
-        c.addContainerProperty("testcol3", String.class, null);
-
-        c.addItem("bar");
-
-        t.setContainerDataSource(c);
-
-        t.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
-
-        mainWin.addComponent(new Label(
-                "Both rows in table should have same data (default values)"));
-
-        mainWin.addComponent(t);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2404.java b/tests/src/com/vaadin/tests/tickets/Ticket2404.java
deleted file mode 100644
index 478d8b7786..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2404.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2404 extends Application {
-
-    @Override
-    public void init() {
-
-        GridLayout gl = new GridLayout(2, 2);
-        gl.setSizeFull();
-
-        Button bb = new Button("1st row on 2x2 GridLayout");
-        bb.setSizeFull();
-        gl.addComponent(bb, 0, 0, 1, 0);
-        for (int i = 0; i < 2; i++) {
-            Button b = new Button("" + i);
-            gl.addComponent(b);
-            b.setSizeFull();
-        }
-
-        setMainWindow(new Window("GridLayout test", gl));
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2405.java b/tests/src/com/vaadin/tests/tickets/Ticket2405.java
deleted file mode 100644
index 9ab0d851ad..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2405.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2405 extends Application {
-
-    private Label label;
-    private HorizontalSplitPanel split;
-
-    @Override
-    public void init() {
-
-        final Window root = new Window("VaadinTunes");
-        root.setWidth("90%");
-        root.setHeight("90%");
-        root.center();
-
-        // We'll attach the window to the browser view already here, so we won't
-        // forget it later.
-        // browser.addWindow(root);
-        setMainWindow(root);
-
-        root.getContent().setSizeFull();
-        ((Layout) root.getContent()).setMargin(false);
-
-        // Top area, containing playback and volume controls, play status, view
-        // modes and search
-        HorizontalLayout top = new HorizontalLayout();
-        // GridLayout top = new GridLayout(1, 1);
-        top.setWidth("100%");
-        top.setMargin(false);
-        top.setSpacing(false);
-
-        // Let's attach that one straight away too
-        root.addComponent(top);
-
-        label = new Label(
-                "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent porttitor porta lacus. Nulla tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin mollis turpis in mauris faucibus posuere. Nullam rutrum, nisi a fermentum tempus, lacus metus rutrum massa, a condimentum mauris justo a tortor. Mauris aliquet, ante quis ultricies posuere, sapien libero laoreet sem, a accumsan diam metus sed elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur vehicula metus nec turpis dignissim cursus. Suspendisse potenti. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam feugiat orci eget risus. Vestibulum at sem. ");
-        label.setWidth("100%");
-        top.addComponent(label);
-        split = new HorizontalSplitPanel();
-        split.setHeight("100%");
-        Embedded image = new Embedded("An image", new ExternalResource(
-                "http://dev.itmill.com/chrome/site/toolkit-logo.png"));
-        image.setWidth("100%");
-        root.addComponent(split);
-        ((VerticalLayout) root.getContent()).setExpandRatio(split, 1.0f);
-        VerticalLayout vl = new VerticalLayout();
-        split.addComponent(vl);
-
-        vl.addComponent(new TextField("abc"));
-        vl.addComponent(image);
-        vl.setExpandRatio(image, 1.0f);
-        vl.setComponentAlignment(image, Alignment.BOTTOM_CENTER);
-        vl.setHeight("100%");
-        // We'll need one splitpanel to separate the sidebar and track listing
-        Button bottomButton = new Button("Filler");
-        bottomButton.setSizeFull();
-        // root.addComponent(bottomButton);
-
-        // The splitpanel is by default 100% x 100%, but we'll need to adjust
-        // our main window layout to accomodate the height
-        root.getContent().setHeight("100%");
-        // ((VerticalLayout) root.getLayout()).setExpandRatio(bottomButton,
-        // 1.0F);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2406.java b/tests/src/com/vaadin/tests/tickets/Ticket2406.java
deleted file mode 100644
index b7c9f902d2..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2406.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2406 extends Application {
-
-    private Window w;
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-        // setTheme("tests-tickets");
-        createUI((VerticalLayout) w.getContent());
-    }
-
-    private void createUI(VerticalLayout layout) {
-        w = new Window("A sub window");
-        w.setSizeUndefined();
-        getMainWindow().addWindow(w);
-
-        VerticalLayout l = new VerticalLayout();
-        l.setSizeFull();
-        w.setContent(l);
-
-        Button b = new Button("Button 1");
-        b.setSizeFull();
-        b.addListener(new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                w.setHeight("200px");
-            }
-
-        });
-        l.addComponent(b);
-
-        for (int i = 0; i < 5; i++) {
-            b = new Button("Button number " + (i + 2));
-            b.setSizeFull();
-            l.addComponent(b);
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2407.java b/tests/src/com/vaadin/tests/tickets/Ticket2407.java
deleted file mode 100644
index e095bb294c..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2407.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.ui.Form;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2407 extends com.vaadin.Application {
-
-    @Override
-    public void init() {
-        final Window main = new Window("Ticket2407");
-        setMainWindow(main);
-
-        Form form = new Form(new VerticalLayout());
-        TextField text = new TextField("This caption shall be visible");
-        text.setRequired(true);
-        form.addField("test", text);
-        main.addComponent(form);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2411.java b/tests/src/com/vaadin/tests/tickets/Ticket2411.java
deleted file mode 100644
index 3159be360b..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2411.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket2411 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-
-        // VerticalLayout l = new VerticalLayout();
-        GridLayout l = new GridLayout();
-        w.setContent(l);
-
-        l.setHeight("504px");
-
-        for (int i = 1; i <= 5; i++) {
-            Button b = new Button("Button " + i
-                    + " should be 100px or 101px high");
-            b.setHeight("100%");
-            l.addComponent(b);
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2415.java b/tests/src/com/vaadin/tests/tickets/Ticket2415.java
deleted file mode 100644
index 5c1d0c2a51..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2415.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket2415 extends Application {
-
-    @Override
-    public void init() {
-        final Window main = new Window("");
-        setMainWindow(main);
-
-        final TextField tf = new TextField("Try to change me");
-        main.addComponent(tf);
-
-        tf.setImmediate(true);
-        tf.addListener(new Property.ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                main.showNotification("New value = " + tf);
-            }
-        });
-
-        final TextField tf2 = new TextField("Try to change me");
-        main.addComponent(tf2);
-
-        tf2.setImmediate(true);
-        tf2.addListener(new Property.ValueChangeListener() {
-
-            public void valueChange(ValueChangeEvent event) {
-                main.showNotification("New value = " + tf2);
-            }
-        });
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2420.java b/tests/src/com/vaadin/tests/tickets/Ticket2420.java
deleted file mode 100644
index e40d73877c..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2420.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.ProgressIndicator;
-import com.vaadin.ui.Window;
-
-public class Ticket2420 extends Application {
-
-    @Override
-    public void init() {
-        final Window main = new Window("Hello window");
-        setMainWindow(main);
-
-        main.setTheme("tests-tickets");
-
-        ProgressIndicator pi = new ProgressIndicator();
-        pi.setCaption("Visible");
-        pi.setIndeterminate(false);
-        pi.setValue(new Float(0.5));
-        main.addComponent(pi);
-
-        pi = new ProgressIndicator();
-        pi.setCaption("Visible (indeterminate)");
-        pi.setIndeterminate(true);
-
-        main.addComponent(pi);
-
-        main.addComponent(pi);
-
-        pi = new ProgressIndicator();
-        pi.setCaption("Visible (indeterminate, with .redborder css)");
-        pi.addStyleName("redborder");
-        pi.setIndeterminate(true);
-
-        main.addComponent(pi);
-
-        pi = new ProgressIndicator();
-        pi.setCaption("Disabled ");
-        pi.setEnabled(false);
-        pi.setIndeterminate(true);
-
-        main.addComponent(pi);
-
-        pi = new ProgressIndicator();
-
-        pi.setCaption("Hidden (via css)");
-
-        pi.addStyleName("dispnone");
-
-        main.addComponent(pi);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2425.java b/tests/src/com/vaadin/tests/tickets/Ticket2425.java
deleted file mode 100644
index 75810137ad..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2425.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TabSheet;
-import com.vaadin.ui.Window;
-
-public class Ticket2425 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window(getClass().getSimpleName());
-        setMainWindow(w);
-
-        w.addComponent(new Label("No scrollbars should be visible anywhere"));
-        TabSheet ts = new TabSheet();
-        ts.addTab(new Panel(), "Panel 1", null);
-        ts.addTab(new Panel(), "Panel 2", null);
-
-        w.addComponent(ts);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2426.java b/tests/src/com/vaadin/tests/tickets/Ticket2426.java
deleted file mode 100644
index 90e2ce438d..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2426.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket2426 extends Application {
-
-    @Override
-    public void init() {
-        Window w = new Window();
-        setMainWindow(w);
-
-        final String content = "<select/>";
-
-        w.addComponent(new Label("CONTENT_DEFAULT: " + content,
-                Label.CONTENT_DEFAULT));
-        w.addComponent(new Label("CONTENT_PREFORMATTED: " + content,
-                Label.CONTENT_PREFORMATTED));
-        w.addComponent(new Label("CONTENT_RAW: " + content, Label.CONTENT_RAW));
-        w.addComponent(new Label("CONTENT_TEXT: " + content, Label.CONTENT_TEXT));
-        w.addComponent(new Label("CONTENT_XML: " + content, Label.CONTENT_XML));
-        w.addComponent(new Label("CONTENT_XHTML: " + content,
-                Label.CONTENT_XHTML));
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2431.java b/tests/src/com/vaadin/tests/tickets/Ticket2431.java
deleted file mode 100644
index e1eb2531f2..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2431.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.event.Action;
-import com.vaadin.event.Action.Handler;
-import com.vaadin.event.ShortcutAction;
-import com.vaadin.event.ShortcutAction.KeyCode;
-import com.vaadin.event.ShortcutAction.ModifierKey;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket2431 extends Application {
-
-    @Override
-    public void init() {
-
-        Window w = new Window();
-        setMainWindow(w);
-        Label help = new Label(
-                "Use CTRL X to fire action, CTRL C to remove it (fails before fix)");
-
-        w.addComponent(help);
-
-        w.addActionHandler(new Handler() {
-
-            final ShortcutAction a1 = new ShortcutAction("action", KeyCode.X,
-                    new int[] { ModifierKey.CTRL });
-            final ShortcutAction a2 = new ShortcutAction("action", KeyCode.C,
-                    new int[] { ModifierKey.CTRL });
-
-            Action[] actions = new Action[] { a1, a2 };
-
-            public Action[] getActions(Object target, Object sender) {
-                return actions;
-            }
-
-            public void handleAction(Action action, Object sender, Object target) {
-                if (action == a1) {
-                    getMainWindow().addComponent(new Label("CTRL X hit"));
-                } else {
-                    actions = new Action[] { a2 };
-                    // annoyance, we need to repaint the panel or detect the
-                    // action in presence in handler
-                    getMainWindow().removeActionHandler(this);
-                    getMainWindow().addActionHandler(this);
-                }
-            }
-        });
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2432.java b/tests/src/com/vaadin/tests/tickets/Ticket2432.java
deleted file mode 100644
index 326f27d58a..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2432.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.Layout.AlignmentHandler;
-import com.vaadin.ui.Layout.SpacingHandler;
-import com.vaadin.ui.Window;
-
-public class Ticket2432 extends Application {
-
-    @Override
-    public void init() {
-
-        Window w = new Window();
-        setMainWindow(w);
-        w.getContent().setSizeFull();
-        ((SpacingHandler) w.getContent()).setSpacing(true);
-
-        Layout layout = new GridLayout(3, 3);
-        populateLayout(layout);
-        w.addComponent(layout);
-        layout = new HorizontalLayout();
-        populateLayout(layout);
-        w.addComponent(layout);
-
-    }
-
-    private static Alignment[] alignments = new Alignment[] {
-            Alignment.TOP_LEFT, Alignment.TOP_CENTER, Alignment.TOP_RIGHT,
-            Alignment.MIDDLE_LEFT, Alignment.MIDDLE_CENTER,
-            Alignment.MIDDLE_RIGHT, Alignment.BOTTOM_LEFT,
-            Alignment.BOTTOM_CENTER, Alignment.BOTTOM_RIGHT };
-
-    private void populateLayout(Layout layout) {
-        layout.setSizeFull();
-        for (int i = 0; i < 9; i++) {
-            Label l = new Label("M");
-            Alignment a = alignments[i];
-            l.setCaption(a.getHorizontalAlignment() + " "
-                    + a.getVerticalAlignment() + " " + a.getBitMask());
-            layout.addComponent(l);
-            ((AlignmentHandler) layout).setComponentAlignment(l, a);
-        }
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2434.java b/tests/src/com/vaadin/tests/tickets/Ticket2434.java
deleted file mode 100644
index 5d4a884895..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2434.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.tests.TestForTablesInitialColumnWidthLogicRendering;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.Window;
-
-public class Ticket2434 extends Application {
-
-    @Override
-    public void init() {
-
-        Window w = new Window();
-
-        setMainWindow(w);
-
-        Table t = TestForTablesInitialColumnWidthLogicRendering.getTestTable(3,
-                50);
-
-        t.setPageLength(0);
-
-        t.addStyleName("bordered");
-
-        w.addComponent(t);
-
-        setTheme("tests-tickets");
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2436.java b/tests/src/com/vaadin/tests/tickets/Ticket2436.java
deleted file mode 100644
index 0d8c5ad2dd..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2436.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.PopupView;
-import com.vaadin.ui.Window;
-
-public class Ticket2436 extends Application {
-
-    @Override
-    public void init() {
-        final Window main = new Window();
-        setMainWindow(main);
-
-        final Button remover = new Button("Remove PopupView");
-        final PopupView pv = new PopupView(new PopupView.Content() {
-            public String getMinimizedValueAsHTML() {
-                return "PopupView";
-            }
-
-            public Component getPopupComponent() {
-                return remover;
-            }
-        });
-
-        remover.addListener(new Button.ClickListener() {
-            public void buttonClick(Button.ClickEvent event) {
-                main.removeComponent(pv);
-            }
-        });
-
-        main.addComponent(pv);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2440.java b/tests/src/com/vaadin/tests/tickets/Ticket2440.java
deleted file mode 100644
index cd1e8e682e..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2440.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.net.URL;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.DownloadStream;
-import com.vaadin.terminal.ExternalResource;
-import com.vaadin.terminal.URIHandler;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Link;
-import com.vaadin.ui.Window;
-
-public class Ticket2440 extends Application {
-
-    @Override
-    public void init() {
-        final Window main = new MainWindow();
-        setMainWindow(main);
-        main.addComponent(new Label(
-                "Clicking the link should open a new window that should receive the URI 'msg/hello' and add that a a Label to it's ui. Currently the Label ends up in this (main) window (try reloading). Console intentionally spams during the window finding/uri handling - looks, uhm, interesting."));
-    }
-
-    @Override
-    public Window getWindow(String name) {
-        System.err.println("Looking for " + name);
-        if ("msg".equals(name)) {
-            System.err
-                    .println(" rest uri, returning new MainWindow with message from uri");
-            MainWindow restWindow = new MainWindow();
-            addWindow(restWindow);
-            return restWindow;
-        }
-        // If we already have the requested window, use it
-        Window w = super.getWindow(name);
-        if (w == null) {
-            // If no window found, create it
-            System.err.println(" new win");
-            w = new MainWindow();
-            w.setName(name);
-            addWindow(w);
-            return w;
-        } else {
-            System.err.println(" found win");
-            return w;
-        }
-
-    }
-
-    private class MainWindow extends Window {
-        public MainWindow() {
-            super("Main window");
-
-            addComponent(new Link("new mainwin", new ExternalResource(
-                    Ticket2440.this.getURL() + "msg/hello"), "_blank", -1, -1,
-                    Window.BORDER_DEFAULT));
-
-            addURIHandler(new URIHandler() {
-                public DownloadStream handleURI(URL context, String relativeUri) {
-                    System.err
-                            .println((getMainWindow() == getWindow() ? "mainwin: "
-                                    : "subwin: ")
-                                    + context + ", " + relativeUri);
-                    addComponent(new Label(relativeUri));
-                    return null;
-                }
-            });
-        }
-
-        @Override
-        public DownloadStream handleURI(URL context, String relativeUri) {
-            System.err.println("MainWindow.handleURI();");
-            return super.handleURI(context, relativeUri);
-        }
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2526.java b/tests/src/com/vaadin/tests/tickets/Ticket2526.java
deleted file mode 100644
index 5fc06c27bf..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2526.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Window;
-
-public class Ticket2526 extends Application {
-
-    @Override
-    public void init() {
-        final Window main = new Window();
-        setMainWindow(main);
-        Button b = new Button("Add windows");
-        b.addListener(new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                main.addWindow(new Window());
-            }
-        });
-        main.addComponent(b);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2742.java b/tests/src/com/vaadin/tests/tickets/Ticket2742.java
deleted file mode 100644
index 11eb01e051..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2742.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 
- */
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.Window;
-
-/**
- * @author Risto Yrjänä / IT Mill Ltd.
- * 
- */
-public class Ticket2742 extends Application {
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.vaadin.Application#init()
-     */
-    @Override
-    public void init() {
-        Window mainWindow = new Window();
-        setMainWindow(mainWindow);
-
-        String shortString = "Short";
-        String longString = "Very, very long";
-
-        HorizontalLayout hl = new HorizontalLayout();
-
-        for (int i = 0; i < 2; i++) {
-            NativeSelect ns = new NativeSelect(shortString);
-            ns.addItem(longString);
-            ns.setNullSelectionAllowed(false);
-            ns.select(longString);
-            hl.addComponent(ns);
-        }
-        mainWindow.addComponent(hl);
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2901.java b/tests/src/com/vaadin/tests/tickets/Ticket2901.java
deleted file mode 100644
index 9e28908c22..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2901.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.VerticalSplitPanel;
-import com.vaadin.ui.Window;
-
-/**
- * With IE7 extra scrollbars appear in content area all though content fits
- * properly. Scrollbars will disappear if "shaking" content a bit, like
- * selecting tests in area.
- */
-public class Ticket2901 extends Application {
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window("Test app to break layout in IE6");
-        setMainWindow(mainWin);
-
-        VerticalSplitPanel sp = new VerticalSplitPanel();
-
-        VerticalLayout l = new VerticalLayout();
-        for (int i = 0; i < 100; i++) {
-            l.addComponent(new Label("Label" + i));
-        }
-        sp.setFirstComponent(l);
-
-        mainWin.setContent(sp);
-
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket2998.java b/tests/src/com/vaadin/tests/tickets/Ticket2998.java
deleted file mode 100644
index 81ffcf5a01..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket2998.java
+++ /dev/null
@@ -1,332 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.io.Serializable;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-
-import com.vaadin.Application;
-import com.vaadin.data.Container;
-import com.vaadin.data.Validator;
-import com.vaadin.data.util.BeanItemContainer;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.DefaultFieldFactory;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.FormLayout;
-import com.vaadin.ui.Layout;
-import com.vaadin.ui.ListSelect;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.themes.Reindeer;
-
-/**
- * Table layout is very slow in Firefox 3.0.10 when the table contains
- * components.
- * 
- * This is adapted from the HbnContainer example application WorkoutLog.
- * 
- * Other browsers are much faster.
- */
-public class Ticket2998 extends Application {
-    private Table table;
-    private VerticalLayout mainLayout;
-
-    public class Workout implements Serializable {
-        private Long id;
-        private Date date = new Date();
-        private String title = " -- new workout -- ";
-        private float kilometers;
-
-        private String trainingType;
-
-        private Set<String> secondaryTypes;
-
-        public Workout() {
-        }
-
-        public Long getId() {
-            return id;
-        }
-
-        public Date getDate() {
-            return date;
-        }
-
-        public void setDate(Date date) {
-            this.date = date;
-        }
-
-        public String getTitle() {
-            return title;
-        }
-
-        public void setTitle(String title) {
-            this.title = title;
-        }
-
-        public float getKilometers() {
-            return kilometers;
-        }
-
-        public void setKilometers(float kilometers) {
-            this.kilometers = kilometers;
-        }
-
-        public String getTrainingType() {
-            return trainingType;
-        }
-
-        public void setTrainingType(String trainingType) {
-            this.trainingType = trainingType;
-        }
-
-        public void setSecondaryTypes(Set<String> secondaryTypes) {
-            this.secondaryTypes = secondaryTypes;
-        }
-
-        public Set<String> getSecondaryTypes() {
-            return secondaryTypes;
-        }
-
-    }
-
-    public class WorkoutEditor extends Window {
-
-        private DateField date = new DateField("Date");
-        private TextField kilomiters = new TextField("Kilometers");
-        private TextField title = new TextField("Title/note");
-
-        private Ticket2998 workoutLog;
-
-        public WorkoutEditor(Ticket2998 app) {
-            super("Edit workout");
-            workoutLog = app;
-            Layout main = new VerticalLayout();
-            setContent(main);
-            main.setSizeUndefined();
-            main.setStyleName(Reindeer.PANEL_LIGHT);
-
-            FormLayout form = new FormLayout();
-            form.setSizeUndefined();
-            date.setResolution(DateField.RESOLUTION_MIN);
-            form.addComponent(date);
-            form.addComponent(kilomiters);
-            form.addComponent(title);
-            main.addComponent(form);
-
-        }
-
-        public void loadRun(Workout run) {
-            if (run == null) {
-                close();
-            } else {
-                date.setValue(run.getDate());
-                kilomiters.setValue(run.getKilometers());
-                title.setValue(run.getTitle());
-                if (getParent() == null) {
-                    workoutLog.getMainWindow().addWindow(this);
-                }
-                kilomiters.focus();
-            }
-        }
-    }
-
-    public class MyFieldFactory extends DefaultFieldFactory {
-
-        public MyFieldFactory(Ticket2998 app) {
-        }
-
-        @Override
-        public Field createField(Container container, Object itemId,
-                Object propertyId, Component uiContext) {
-
-            /*
-             * trainingType is manyToOne relation, give it a combobox
-             */
-            if (propertyId.equals("trainingType")) {
-                return getTrainingTypeComboboxFor(itemId);
-            }
-
-            /*
-             * Secondarytypes is manyToMany relation, give it a multiselect list
-             */
-            if (propertyId.equals("secondaryTypes")) {
-                return getSecondaryTypesList(itemId);
-            }
-
-            final Field f = super.createField(container, itemId, propertyId,
-                    uiContext);
-            if (f != null) {
-                if (f instanceof TextField) {
-                    TextField tf = (TextField) f;
-                    tf.setWidth("100%");
-                }
-                if (propertyId.equals("kilometers")) {
-                    f.setWidth("4em");
-                    f.addValidator(new Validator() {
-                        public boolean isValid(Object value) {
-                            try {
-                                @SuppressWarnings("unused")
-                                float f = Float.parseFloat((String) value);
-                                return true;
-                            } catch (Exception e) {
-                                f.getWindow().showNotification(
-                                        "Bad number value");
-                                f.setValue(0);
-                                return false;
-                            }
-                        }
-
-                        public void validate(Object value)
-                                throws InvalidValueException {
-                            // TODO Auto-generated method stub
-
-                        }
-                    });
-                }
-                if (propertyId.equals("date")) {
-                    ((DateField) f).setResolution(DateField.RESOLUTION_MIN);
-                }
-            }
-            return f;
-
-        }
-
-        private Map<Object, ListSelect> workoutIdToList = new HashMap<Object, ListSelect>();
-
-        private Field getSecondaryTypesList(Object itemId) {
-            ListSelect list = workoutIdToList.get(itemId);
-            if (list == null) {
-                list = new ListSelect();
-                list.setMultiSelect(true);
-                list.addItem("Item1");
-                list.addItem("Item2");
-                list.addItem("Item3");
-                list.addItem("Item4");
-                list.addItem("Item5");
-                // list.setContainerDataSource(trainingTypes);
-                list.setRows(4);
-                workoutIdToList.put(itemId, list);
-            }
-            return list;
-        }
-
-        private Map<Object, ComboBox> workoutIdToCombobox = new HashMap<Object, ComboBox>();
-
-        private Field getTrainingTypeComboboxFor(Object itemId) {
-            ComboBox cb = workoutIdToCombobox.get(itemId);
-            if (cb == null) {
-                final ComboBox cb2 = new ComboBox();
-                cb2.addItem("value1");
-                cb2.addItem("value2");
-                cb2.addItem("value3");
-                cb2.addItem("value4");
-                cb2.setNewItemsAllowed(true);
-
-                workoutIdToCombobox.put(itemId, cb2);
-                cb = cb2;
-            }
-            return cb;
-        }
-    }
-
-    @Override
-    public void init() {
-        buildView();
-        setTheme("reindeer");
-    }
-
-    /**
-     * Builds a simple view for application with Table and a row of buttons
-     * below it.
-     */
-    private void buildView() {
-
-        final Window w = new Window("Workout Log");
-
-        // set theme and some layout stuff
-        setMainWindow(w);
-        w.getContent().setSizeFull();
-        ((Layout) w.getContent()).setMargin(false);
-
-        Panel p = new Panel("Workout Log");
-        p.setStyleName(Reindeer.PANEL_LIGHT);
-        w.addComponent(p);
-        mainLayout = new VerticalLayout();
-        p.setContent(mainLayout);
-
-        populateAndConfigureTable();
-
-        mainLayout.addComponent(table);
-
-        // make table consume all extra space
-        p.setSizeFull();
-        mainLayout.setSizeFull();
-        mainLayout.setExpandRatio(table, 1);
-        table.setSizeFull();
-    }
-
-    protected void populateAndConfigureTable() {
-        table = new Table();
-
-        table.setWidth("100%");
-        table.setSelectable(true);
-        table.setImmediate(true);
-        table.setColumnCollapsingAllowed(true);
-        table.setColumnWidth("date", 200);
-        table.setColumnWidth("kilometers", 100);
-        // table.addListener(this);
-        table.setTableFieldFactory(new MyFieldFactory(this));
-
-        loadWorkouts();
-
-        table.setEditable(true);
-    }
-
-    /**
-     * Loads container to Table
-     */
-    protected void loadWorkouts() {
-        final BeanItemContainer<Workout> cont;
-        // Use plain HbnContainer
-        cont = new BeanItemContainer<Workout>(Workout.class);
-        table.setContainerDataSource(cont);
-
-        // insert some sample data
-        Calendar c = Calendar.getInstance();
-        c.set(Calendar.MILLISECOND, 0);
-        c.set(Calendar.SECOND, 0);
-        c.set(Calendar.MINUTE, 0);
-
-        String[] titles = new String[] { "A short easy one", "intervals",
-                "very long", "just shaking legs after work",
-                "long one with Paul", "test run" };
-
-        c.add(Calendar.DATE, -1000);
-
-        Random rnd = new Random();
-
-        Workout r;
-
-        for (int i = 0; i < 1000; i++) {
-            r = new Workout();
-            c.set(Calendar.HOUR_OF_DAY,
-                    12 + (rnd.nextInt(11) - rnd.nextInt(11)));
-            r.setDate(c.getTime());
-            r.setTitle(titles[rnd.nextInt(titles.length)]);
-            r.setKilometers(Math.round(rnd.nextFloat() * 30));
-            r.setTrainingType("tt");
-            c.add(Calendar.DATE, 1);
-            cont.addBean(r);
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket3146.java b/tests/src/com/vaadin/tests/tickets/Ticket3146.java
deleted file mode 100644
index 6afa25efda..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket3146.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.Collection;
-import java.util.HashSet;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket3146 extends Application {
-
-    Table table;
-    TextField result;
-
-    @Override
-    public void init() {
-        Window mainWindow = new Window("Test");
-
-        table = new Table();
-        table.addContainerProperty("Items", String.class, null);
-        table.addItem(new String[] { "a" }, "a");
-        table.addItem(new String[] { "b" }, "b");
-        table.addItem(new String[] { "c" }, "c");
-        for (int i = 1; i < 100; ++i) {
-            table.addItem(new String[] { "Item " + i }, "Item " + i);
-        }
-        table.setMultiSelect(true);
-        table.setSelectable(true);
-        table.setImmediate(true);
-        table.setHeight("200px");
-        table.setWidth("200px");
-        mainWindow.addComponent(table);
-
-        Button clearButton = new Button("Clear selection",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        clearSelection();
-                    }
-                });
-        mainWindow.addComponent(clearButton);
-        Button clearButton2 = new Button("Clear selection 2",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        clearSelection2();
-                    }
-                });
-        mainWindow.addComponent(clearButton2);
-        Button clearButton3 = new Button("Clear selection 3",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        clearSelection3();
-                    }
-                });
-        mainWindow.addComponent(clearButton3);
-        Button printButton = new Button("Print selection",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        printSelection();
-                    }
-                });
-        mainWindow.addComponent(printButton);
-
-        result = new TextField();
-        result.setHeight("200px");
-        result.setWidth("200px");
-        mainWindow.addComponent(result);
-
-        setMainWindow(mainWindow);
-    }
-
-    void clearSelection() {
-        table.setValue(null);
-    }
-
-    void clearSelection2() {
-        table.setValue(new HashSet<Object>());
-    }
-
-    void clearSelection3() {
-        table.unselect("a");
-        table.unselect("b");
-        table.unselect("c");
-    }
-
-    void printSelection() {
-        String selection = "";
-        for (Object item : (Collection<?>) table.getValue()) {
-            selection = selection + item + ' ';
-        }
-        result.setValue(selection);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket34.java b/tests/src/com/vaadin/tests/tickets/Ticket34.java
deleted file mode 100644
index 7d3baf78fa..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket34.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.UriFragmentUtility;
-import com.vaadin.ui.UriFragmentUtility.FragmentChangedEvent;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket34 extends Application {
-
-    private Map<String, Component> views = new HashMap<String, Component>();
-    private VerticalLayout mainLayout;
-    private Component currentView;
-    private UriFragmentUtility reader;
-
-    @Override
-    public void init() {
-
-        buildViews(new String[] { "main", "view2", "view3" });
-
-        reader = new UriFragmentUtility();
-        reader.addListener(new UriFragmentUtility.FragmentChangedListener() {
-
-            public void fragmentChanged(FragmentChangedEvent event) {
-                getMainWindow().showNotification(
-                        "Fragment now: "
-                                + event.getUriFragmentUtility().getFragment());
-                // try to change to view mapped by fragment string
-                setView(event.getUriFragmentUtility().getFragment());
-            }
-        });
-
-        mainLayout = new VerticalLayout();
-        mainLayout.setSizeFull();
-        final Window mainWin = new Window(
-                "Test app for URI fragment management/reading", mainLayout);
-        setMainWindow(mainWin);
-
-        // UriFragmentReader is 0px size by default, so it will not render
-        // anything on screen
-        mainLayout.addComponent(reader);
-
-        setView("main");
-
-    }
-
-    private void setView(String string) {
-        Component component = views.get(string);
-        if (component == null) {
-            getMainWindow().showNotification(
-                    "View called " + string + " not found!");
-        } else if (component != currentView) {
-            if (currentView != null) {
-                mainLayout.replaceComponent(currentView, component);
-            } else {
-                mainLayout.addComponent(component);
-            }
-            // give all extra space for view
-            mainLayout.setExpandRatio(component, 1);
-            currentView = component;
-        }
-    }
-
-    private void buildViews(String[] strings) {
-        for (String string : strings) {
-            Panel p = new Panel(string);
-            p.setSizeFull();
-            ((VerticalLayout) p.getContent()).setSpacing(true);
-            p.addComponent(new Label("This is a simple test case for "
-                    + "UriFragmentReader that can be used for"
-                    + " adding linking, back/forward button "
-                    + "and history support for ajax application. "));
-            StringBuffer sb = new StringBuffer();
-            sb.append("Available views : ");
-            for (String key : strings) {
-                sb.append(key);
-                sb.append(" ");
-            }
-            sb.append("Application will change to them from uri "
-                    + "fragment or server initiated via textfield below.");
-            p.addComponent(new Label(sb.toString()));
-
-            final TextField tf = new TextField(
-                    "Type view name (will change to that "
-                            + "view and change the uri fragment)");
-            p.addComponent(tf);
-            Button b = new Button("Go!");
-            p.addComponent(b);
-            b.addListener(new Button.ClickListener() {
-
-                public void buttonClick(ClickEvent event) {
-                    String viewName = tf.getValue().toString();
-                    // fragmentChangedListener will change the view if possible
-                    reader.setFragment(viewName);
-                }
-            });
-
-            views.put(string, p);
-        }
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket5053.java b/tests/src/com/vaadin/tests/tickets/Ticket5053.java
deleted file mode 100644
index bbb9a1ebc2..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket5053.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.ComboBox;
-import com.vaadin.ui.Window;
-
-/**
- * #5053: Last ComboBox item may not be shown if null selection enabled
- */
-public class Ticket5053 extends Application {
-
-    @Override
-    public void init() {
-        Window main = new Window();
-        setMainWindow(main);
-
-        ComboBox combobox = new ComboBox("My ComboBox");
-
-        // Enable null selection
-        combobox.setNullSelectionAllowed(true);
-        // Add the item that marks 'null' value
-        String nullitem = "-- none --";
-        combobox.addItem(nullitem);
-        // Designate it was the 'null' value marker
-        combobox.setNullSelectionItemId(nullitem);
-
-        // Add some other items
-        for (int i = 0; i < 10; i++) {
-            combobox.addItem("Item " + i);
-        }
-
-        main.addComponent(combobox);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket5157.java b/tests/src/com/vaadin/tests/tickets/Ticket5157.java
deleted file mode 100644
index f620cd27be..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket5157.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.event.ShortcutAction.KeyCode;
-import com.vaadin.event.ShortcutListener;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-/**
- * Key codes were converted to lower case on the server (overlapping special key
- * codes for function keys etc.) and then back to upper case on the client.
- * Therefore, registering e.g. F8 as a key code resulted in "w" being used as
- * the trigger and F8 being ignored.
- */
-public class Ticket5157 extends Application {
-
-    @Override
-    public void init() {
-        final Window mainWindow = new Window("Forumtests Application");
-        setMainWindow(mainWindow);
-
-        Panel p = new Panel();
-        mainWindow.addComponent(p);
-
-        Label l = new Label("Panel with F8 bound");
-        p.addComponent(l);
-
-        TextField f = new TextField();
-        p.addComponent(f);
-
-        p.addAction(new ShortcutListener("F8", KeyCode.F8, null) {
-
-            @Override
-            public void handleAction(Object sender, Object target) {
-                mainWindow.showNotification(getCaption());
-
-            }
-        });
-
-        p.addAction(new ShortcutListener("a", KeyCode.A, null) {
-
-            @Override
-            public void handleAction(Object sender, Object target) {
-                mainWindow.showNotification(getCaption());
-
-            }
-        });
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket5952.java b/tests/src/com/vaadin/tests/tickets/Ticket5952.java
deleted file mode 100644
index 4a5d405858..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket5952.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class Ticket5952 extends Application {
-
-    @Override
-    public void init() {
-        final Window mainWindow = new Window("Forumtests Application");
-        setMainWindow(mainWindow);
-        
-        String mathml =
-            "<math mode='display' xmlns='http://www.w3.org/1998/Math/MathML'>"+
-            "<mrow>"+
-            "    <msup>"+
-            "      <mi>x</mi>"+
-            "      <mn>2</mn>"+
-            "    </msup>"+
-            "    <msup>"+
-            "      <mi>c</mi>"+
-            "      <mn>2</mn>"+
-            "    </msup>"+
-            "  </mrow>"+
-            "</math>";
-        Label mathLabel = new Label(mathml, Label.CONTENT_XML);
-        mainWindow.addComponent(mathLabel);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket6002.java b/tests/src/com/vaadin/tests/tickets/Ticket6002.java
deleted file mode 100644
index 888f1c05ca..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket6002.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class Ticket6002 extends TestBase {
-
-    @Override
-    public void setup() {
-        Window main = new Window("The Main Window");
-        setMainWindow(main);
-
-        final VerticalLayout mainLayout = new VerticalLayout();
-        main.setContent(mainLayout);
-
-        mainLayout.addComponent(new Label(
-                "Replace the floating-point values with an integer"));
-
-        // ///////////////////////////////////////////////////
-        // Better working case
-
-        final ObjectProperty<Double> property1 = new ObjectProperty<Double>(
-                new Double(42.0));
-
-        // A text field that changes its caption
-        final TextField tf1 = new TextField(
-                "Changing this field modifies only the textfield", property1);
-        tf1.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                // This value change event is called twice if the new
-                // input value is an integer. The second time is during
-                // paint() of AbstractOrderedLayout.
-
-                System.out.println("Value 2 is: " + property1.getValue());
-
-                tf1.setCaption("With caption " + property1.getValue());
-            }
-        });
-        tf1.setImmediate(true);
-        mainLayout.addComponent(tf1);
-
-        // ///////////////////////////////////////////////////
-        // Totally failing case
-
-        final ObjectProperty<Double> property2 = new ObjectProperty<Double>(
-                new Double(42.0));
-
-        // A text field that adds new components
-        final TextField tf2 = new TextField(
-                "Changing this field modifies the layout - do it twice",
-                property2);
-        tf2.addListener(new Property.ValueChangeListener() {
-            public void valueChange(ValueChangeEvent event) {
-                // This value change event is called twice if the new
-                // input value is an integer. The second time is during
-                // paint() of AbstractOrderedLayout.
-
-                System.out.println("Value 1 is: " + property2.getValue());
-
-                // When this listener is called the second time in paint(), the
-                // add operation causes a ConcurrentModificationException
-                mainLayout.addComponent(new Label(
-                        "Added a component, value is " + property2.getValue()));
-            }
-        });
-        tf2.setImmediate(true);
-        mainLayout.addComponent(tf2);
-
-        mainLayout.setSpacing(true);
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Change the numbers to integer value or add 0 in the decimal representation. "
-                + "This causes a secondary call during paint() to reformat the value, which causes ConcurrentModificationException in the second case.";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 6002;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket677.java b/tests/src/com/vaadin/tests/tickets/Ticket677.java
deleted file mode 100644
index ee7320e59b..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket677.java
+++ /dev/null
@@ -1,210 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.util.BeanItem;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.DefaultFieldFactory;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.GridLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Table;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket677 extends Application {
-
-    private static final Label info = new Label(
-            "<li> keep debug window open to see variable changes"
-                    + "<li> disable root panel w/ toggle button"
-                    + "<li> toggle one of the subpanels"
-                    + "<li> we attempt to focus the subpanels first textfield"
-                    + "<li> focusing should fail (try tabbing as well) [worked previousy]"
-                    + "<li> no variable changes should be sent from disabled fields [changed sent previously]"
-                    + "<li> try further toggling and tabbing around",
-            Label.CONTENT_RAW);
-
-    Panel root = new Panel("Enabled");
-    Panel one = new Panel("Enabled");
-    Panel two = new Panel("Enabled");
-    Form form;
-    Table table;
-
-    @Override
-    public void init() {
-        Window main = new Window();
-        setMainWindow(main);
-
-        main.addComponent(info);
-
-        HorizontalLayout l = new HorizontalLayout();
-        main.addComponent(l);
-
-        l.addComponent(new Button("Toggle root panel",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        toggle(root);
-                    }
-                }));
-        l.addComponent(new Button("Toggle panel one",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        toggle(one);
-                    }
-                }));
-        l.addComponent(new Button("Toggle panel two",
-                new Button.ClickListener() {
-                    public void buttonClick(ClickEvent event) {
-                        toggle(two);
-                    }
-                }));
-        l.addComponent(new Button("Toggle form", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                toggle(form);
-            }
-        }));
-        l.addComponent(new Button("Toggle table", new Button.ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                toggle(table);
-            }
-        }));
-
-        root.setContent(new GridLayout(2, 3));
-        main.addComponent(root);
-
-        TextField tf = new TextField("Enabled");
-        tf.setImmediate(true);
-        root.addComponent(tf);
-        tf = new TextField("Disabled");
-        tf.setImmediate(true);
-        tf.setEnabled(false);
-        root.addComponent(tf);
-
-        root.addComponent(one);
-        tf = new TextField("Enabled");
-        tf.setImmediate(true);
-        one.addComponent(tf);
-        tf = new TextField("Disabled");
-        tf.setImmediate(true);
-        tf.setEnabled(false);
-        one.addComponent(tf);
-
-        root.addComponent(two);
-        tf = new TextField("Enabled");
-        tf.setImmediate(true);
-        two.addComponent(tf);
-        tf = new TextField("Disabled");
-        tf.setImmediate(true);
-        tf.setEnabled(false);
-        two.addComponent(tf);
-
-        form = new Form();
-        form.setCaption("Enabled");
-        form.setFormFieldFactory(new DefaultFieldFactory() {
-
-            @Override
-            public Field createField(Item item, Object propertyId,
-                    Component uiContext) {
-                Field f = super.createField(item, propertyId, uiContext);
-                f.setEnabled(!"disabled".equals(propertyId));
-                return f;
-            }
-
-        });
-        form.setItemDataSource(new BeanItem<MyBean>(new MyBean()));
-        root.addComponent(form);
-
-        table = new Table("Enabled");
-        table.setPageLength(7);
-        table.addContainerProperty("Text", String.class, null);
-        for (int i = 0; i < 150; i++) {
-            Item item = table.addItem("Item" + i);
-            Property p = item.getItemProperty("Text");
-            p.setValue(i % 5 == 0 ? "enabled" : "disabled");
-        }
-
-        table.setTableFieldFactory(new DefaultFieldFactory() {
-
-            @Override
-            public Field createField(Container container, Object itemId,
-                    Object propertyId, Component uiContext) {
-                Field f = super.createField(container, itemId, propertyId,
-                        uiContext);
-                Item item = container.getItem(itemId);
-                Property p = item.getItemProperty(propertyId);
-                if ("disabled".equals(p.getValue())) {
-                    f.setEnabled(false);
-                }
-                return f;
-            }
-
-        });
-        table.setEditable(true);
-        root.addComponent(table);
-
-    }
-
-    private void toggle(Component c) {
-        boolean enable = "Disabled".equals(c.getCaption());
-        c.setEnabled(enable);
-        c.setCaption((enable ? "Enabled" : "Disabled"));
-        if (c instanceof ComponentContainer) {
-            TextField tf = (TextField) ((ComponentContainer) c)
-                    .getComponentIterator().next();
-            tf.focus();
-        }
-    }
-
-    class MyBean {
-        boolean on = false;
-        int number = 1;
-        String rw = "read/write";
-        String r = "read";
-        String disabled = "disabled";
-
-        public boolean isOn() {
-            return on;
-        }
-
-        public void setOn(boolean on) {
-            this.on = on;
-        }
-
-        public int getNumber() {
-            return number;
-        }
-
-        public void setNumber(int number) {
-            this.number = number;
-        }
-
-        public String getRw() {
-            return rw;
-        }
-
-        public void setRw(String rw) {
-            this.rw = rw;
-        }
-
-        public String getDisabled() {
-            return disabled;
-        }
-
-        public void setDisabled(String disabled) {
-            this.disabled = disabled;
-        }
-
-        public String getR() {
-            return r;
-        }
-
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket695.java b/tests/src/com/vaadin/tests/tickets/Ticket695.java
deleted file mode 100644
index f122031b6e..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket695.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Window;
-
-@SuppressWarnings("serial")
-public class Ticket695 extends Application {
-
-    @Override
-    public void init() {
-        final Window w = new Window("Serialization test #695");
-        setMainWindow(w);
-        Button b = new Button("Serialize ApplicationContext");
-        w.addComponent(b);
-        b.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-                try {
-                    ObjectOutputStream oos = new ObjectOutputStream(buffer);
-                    long t = System.currentTimeMillis();
-                    oos.writeObject(getContext());
-                    w.showNotification("ApplicationContext serialized ("
-                            + buffer.size() + "bytes) in "
-                            + (System.currentTimeMillis() - t) + "ms");
-                } catch (IOException e) {
-                    e.printStackTrace();
-                    w.showNotification("ApplicationContext serialization failed - see console for stacktrace");
-                }
-
-            }
-        });
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket736.java b/tests/src/com/vaadin/tests/tickets/Ticket736.java
deleted file mode 100644
index c530b7ca99..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket736.java
+++ /dev/null
@@ -1,194 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Validator;
-import com.vaadin.data.util.BeanItem;
-import com.vaadin.data.util.MethodProperty;
-import com.vaadin.terminal.ThemeResource;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Window;
-
-public class Ticket736 extends Application {
-
-    Address address = new Address();
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window("Test app for #736");
-        setMainWindow(mainWin);
-
-        mainWin.setTheme("runo");
-
-        // Create form for editing address
-        final Form f = new Form();
-        f.setItemDataSource(new BeanItem<Address>(address, new String[] {
-                "name", "street", "zip", "city", "state", "country" }));
-        f.setCaption("Office address");
-        f.setIcon(new ThemeResource("../runo/icons/16/document.png"));
-        f.setDescription("Jep jpe, this is form description.");
-        mainWin.addComponent(f);
-
-        // Select to use buffered mode for editing to enable commit and discard
-        f.setWriteThrough(false);
-        f.setReadThrough(false);
-        Button commit = new Button("Commit", f, "commit");
-        Button discard = new Button("Discard", f, "discard");
-        HorizontalLayout ol = new HorizontalLayout();
-        ol.setHeight("3em");
-        ol.addComponent(commit);
-        ol.setComponentAlignment(commit, Alignment.TOP_RIGHT);
-        ol.addComponent(discard);
-        f.setFooter(ol);
-
-        // Add some validators for the form
-        f.getField("zip").addValidator(new IsInteger());
-        f.getField("zip").setDescription("Jepjep");
-        ((AbstractComponent) f.getField("zip")).setIcon(new ThemeResource(
-                "../runo/icons/16/folder.png"));
-        f.getField("state").addValidator(new IsValidState());
-        f.getField("name").setRequired(true);
-        f.getField("street").setRequired(true);
-        f.getField("city").setRequired(true);
-        f.getField("zip").setRequired(true);
-
-        // Debug form properties
-        final Panel formProperties = new Panel("Form properties");
-        formProperties.setWidth("200px");
-        final String[] visibleProps = { "required", "invalidAllowed",
-                "readOnly", "readThrough", "writeThrough", "invalidCommitted",
-                "validationVisible", "immediate" };
-        for (int i = 0; i < visibleProps.length; i++) {
-            CheckBox b = new CheckBox(visibleProps[i],
-                    new MethodProperty<Boolean>(f, visibleProps[i]));
-            b.setImmediate(true);
-            formProperties.addComponent(b);
-        }
-        mainWin.addComponent(formProperties);
-
-        // Debug the internal state of the address-object
-        mainWin.addComponent(new Button("Show state of the address object",
-                new Button.ClickListener() {
-
-                    public void buttonClick(ClickEvent event) {
-                        mainWin.showNotification(address.toString());
-                    }
-                }));
-    }
-
-    /** Address pojo. */
-    public class Address {
-        String name = "";
-        String street = "";
-        String zip = "";
-        String city = "";
-        String state = "";
-        String country = "";
-
-        public String getName() {
-            return name;
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public String getStreet() {
-            return street;
-        }
-
-        public void setStreet(String street) {
-            this.street = street;
-        }
-
-        public String getZip() {
-            return zip;
-        }
-
-        public void setZip(String zip) {
-            this.zip = zip;
-        }
-
-        public String getCity() {
-            return city;
-        }
-
-        public void setCity(String city) {
-            this.city = city;
-        }
-
-        public String getState() {
-            return state;
-        }
-
-        public void setState(String state) {
-            this.state = state;
-        }
-
-        public String getCountry() {
-            return country;
-        }
-
-        public void setCountry(String country) {
-            this.country = country;
-        }
-
-        @Override
-        public String toString() {
-            return name + "; " + street + "; " + city + " " + zip
-                    + (state != null ? " " + state : "") + " " + country;
-        }
-
-    }
-
-    /** Simple validator for checking if the validated value is an integer */
-    class IsInteger implements Validator {
-
-        public boolean isValid(Object value) {
-            try {
-                Integer.parseInt("" + value);
-                return true;
-            } catch (NumberFormatException e) {
-                return false;
-            }
-        }
-
-        public void validate(Object value) throws InvalidValueException {
-            if (!isValid(value)) {
-                throw new InvalidValueException("'" + value
-                        + "' is not a number");
-            }
-        }
-    }
-
-    /** Simple state validator */
-    class IsValidState implements Validator {
-
-        public boolean isValid(Object value) {
-            // Empty and null are accepted values
-            if (value == null || "".equals("" + value)) {
-                return true;
-            }
-
-            // Otherwise state must be two capital letter combo
-            if (value.toString().length() != 2) {
-                return false;
-            }
-            return value.toString().equals(("" + value).toUpperCase());
-        }
-
-        public void validate(Object value) throws InvalidValueException {
-            if (!isValid(value)) {
-                throw new InvalidValueException(
-                        "State must be either two capital letter abreviation or left empty");
-            }
-        }
-    }
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket846.java b/tests/src/com/vaadin/tests/tickets/Ticket846.java
deleted file mode 100644
index 23f3134308..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket846.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.data.Validator;
-import com.vaadin.data.util.MethodProperty;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket846 extends Application {
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window("Test app for #846");
-        setMainWindow(mainWin);
-
-        final TextField tx = new TextField("Integer");
-        mainWin.addComponent(tx);
-        tx.setImmediate(true);
-        tx.addValidator(new Validator() {
-
-            public boolean isValid(Object value) {
-                try {
-                    Integer.parseInt("" + value);
-                    return true;
-                } catch (NumberFormatException e) {
-                    return false;
-                }
-            }
-
-            public void validate(Object value) throws InvalidValueException {
-                if (!isValid(value)) {
-                    throw new InvalidValueException(value + " is not a number");
-                }
-            }
-        });
-
-        final String[] visibleProps = { "required", "invalidAllowed",
-                "readOnly", "readThrough", "invalidCommitted",
-                "validationVisible" };
-        for (int i = 0; i < visibleProps.length; i++) {
-            CheckBox b = new CheckBox(visibleProps[i],
-                    new MethodProperty<Boolean>(tx, visibleProps[i]));
-            b.setImmediate(true);
-            mainWin.addComponent(b);
-        }
-
-        // tx.setIcon(new ThemeResource("icons/16/folder.png"));
-
-        mainWin.addComponent(new Button("Validate integer",
-                new Button.ClickListener() {
-                    public void buttonClick(
-                            com.vaadin.ui.Button.ClickEvent event) {
-                        mainWin.showNotification("The field is "
-                                + (tx.isValid() ? "" : "not ") + "valid");
-                    };
-                }));
-        TextField caption = new TextField("Caption",
-                new MethodProperty<String>(tx, "caption"));
-        caption.setImmediate(true);
-        mainWin.addComponent(caption);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/tickets/Ticket932.java b/tests/src/com/vaadin/tests/tickets/Ticket932.java
deleted file mode 100644
index a9333b5e0f..0000000000
--- a/tests/src/com/vaadin/tests/tickets/Ticket932.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.vaadin.tests.tickets;
-
-import com.vaadin.Application;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextArea;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Window;
-
-public class Ticket932 extends Application {
-
-    @Override
-    public void init() {
-
-        final Window mainWin = new Window("Test app for max length feature");
-        setMainWindow(mainWin);
-
-        final TextField tx = new TextField(
-                "Textfield with maxlenght 10, single row");
-        tx.setImmediate(true);
-        tx.setMaxLength(10);
-
-        final Label l = new Label();
-
-        Button b = new Button("Check value");
-        b.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                l.setValue("Length: " + tx.getValue().toString().length()
-                        + " Content: " + tx.getValue());
-            }
-        });
-
-        mainWin.addComponent(tx);
-        mainWin.addComponent(b);
-
-        final TextArea tx2 = new TextArea(
-                "Textfield with maxlenght 10, multirow ");
-        mainWin.addComponent(tx2);
-        tx2.setImmediate(true);
-        tx2.setRows(5);
-        tx2.setMaxLength(10);
-
-        Button b2 = new Button("Check value");
-        b2.addListener(new Button.ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                l.setValue("Length: " + tx2.getValue().toString().length()
-                        + " Content: " + tx2.getValue());
-            }
-        });
-
-        mainWin.addComponent(tx);
-        mainWin.addComponent(b);
-
-        mainWin.addComponent(l);
-
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/util/Log.java b/tests/src/com/vaadin/tests/util/Log.java
deleted file mode 100644
index bdb40d56d7..0000000000
--- a/tests/src/com/vaadin/tests/util/Log.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.vaadin.tests.util;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-
-public class Log extends VerticalLayout {
-    List<Label> eventLabels = new ArrayList<Label>();
-    private boolean numberLogRows = true;
-    private int nextLogNr = 1;
-
-    public Log(int nr) {
-        for (int i = 0; i < nr; i++) {
-            Label l = createEventLabel();
-            l.setDebugId("Log_row_" + i);
-            eventLabels.add(l);
-            addComponent(l);
-        }
-        setDebugId("Log");
-        setCaption("Events:");
-    }
-
-    /**
-     * Clears the rows and reset the row number to zero.
-     */
-    public Log clear() {
-        for (Label l : eventLabels) {
-            l.setValue("&nbsp;");
-        }
-        nextLogNr = 0;
-        return this;
-    }
-
-    public Log log(String event) {
-        int nr = eventLabels.size();
-        for (int i = nr - 1; i > 0; i--) {
-            eventLabels.get(i).setValue(eventLabels.get(i - 1).getValue());
-        }
-        String msg = event;
-        if (numberLogRows) {
-            msg = nextLogNr + ". " + msg;
-            nextLogNr++;
-        }
-        eventLabels.get(0).setValue(msg);
-        System.out.println(event);
-        return this;
-    }
-
-    private Label createEventLabel() {
-        Label l = new Label("&nbsp;", Label.CONTENT_XHTML);
-        l.setWidth(null);
-        return l;
-    }
-
-    public Log setNumberLogRows(boolean numberLogRows) {
-        this.numberLogRows = numberLogRows;
-        return this;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/util/LogPrintWriter.java b/tests/src/com/vaadin/tests/util/LogPrintWriter.java
deleted file mode 100644
index 1f07a9c7ae..0000000000
--- a/tests/src/com/vaadin/tests/util/LogPrintWriter.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.vaadin.tests.util;
-
-import java.io.PrintWriter;
-import java.io.Writer;
-
-/**
- * Use for collecting HTTP response.
- * 
- */
-public class LogPrintWriter extends PrintWriter {
-
-    private final StringBuffer result = new StringBuffer(256);
-
-    public LogPrintWriter(Writer out) {
-        super(out);
-    }
-
-    @Override
-    public void print(String s) {
-        result.append(s);
-        super.print(s);
-    }
-
-    @Override
-    public void write(String s) {
-        result.append(s);
-        super.write(s);
-    }
-
-    public String getResult() {
-        return result.toString();
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/util/LoremIpsum.java b/tests/src/com/vaadin/tests/util/LoremIpsum.java
deleted file mode 100644
index 3dc775badf..0000000000
--- a/tests/src/com/vaadin/tests/util/LoremIpsum.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vaadin.tests.util;
-
-public class LoremIpsum {
-    private static final String LOREM = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi lacinia sollicitudin neque, vitae cursus eros scelerisque sit amet. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin sollicitudin tempus lorem, sed consectetur nibh ultrices nec. Ut tempus laoreet dolor non molestie. Quisque consectetur tellus ut tortor imperdiet semper. In tempor odio eu metus hendrerit pharetra. Aliquam erat volutpat. Aliquam erat volutpat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec sit amet turpis facilisis ipsum cursus viverra ut vitae turpis. Integer tincidunt sem id sem tristique a laoreet eros euismod. Ut quis leo vel neque pellentesque ullamcorper. Aliquam at fermentum justo. Sed eget laoreet elit. Pellentesque commodo dui quis metus ornare bibendum. Ut tempus, ipsum in euismod scelerisque, augue ante lacinia sem, scelerisque imperdiet felis lectus rhoncus felis.Fusce vitae nisl lorem, id ultricies massa. Phasellus augue eros, dapibus vel fermentum non, sodales id mi. Nulla tincidunt diam a justo ultricies vestibulum nec sed tellus. Morbi faucibus leo et odio condimentum at porttitor diam auctor. Aenean volutpat lacinia mauris. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean malesuada ullamcorper elit ut eleifend. Etiam tempor, mauris id aliquet tempor, erat felis rutrum eros, a aliquam dolor nunc nec enim. Sed enim dolor, tristique ut tempus vitae, elementum at velit. Duis vulputate ultricies risus, ac gravida erat tincidunt posuere. Pellentesque dapibus tincidunt rhoncus. Phasellus eleifend molestie eros. Praesent id imperdiet urna. Etiam fermentum interdum quam, in tempus quam condimentum at.Curabitur eget ultrices augue. Suspendisse potenti. Nam hendrerit, dolor eget adipiscing lobortis, enim risus dignissim orci, a imperdiet tellus nulla id nibh. Praesent eu dui sit amet nulla interdum dignissim vel quis ante. Sed a lectus metus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus eget ultrices neque. Cras adipiscing condimentum justo adipiscing consequat. In accumsan mollis sapien ut euismod. Nulla sodales pulvinar leo, nec condimentum leo vestibulum ut. Phasellus risus metus, aliquet quis porta at, imperdiet vitae metus. Proin nec odio odio. Quisque nec elit id lacus iaculis ullamcorper sit amet vel ipsum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In non lacus sed libero euismod rhoncus. Suspendisse augue massa, ullamcorper at accumsan at, porttitor ac odio.Morbi imperdiet, lectus vehicula eleifend ornare, lectus arcu ullamcorper augue, a imperdiet eros augue id justo. Integer eget pretium lorem. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras vehicula leo eget metus consectetur viverra. Nullam a mi nisl, in lacinia metus. Curabitur mollis eleifend augue, consectetur imperdiet velit sagittis aliquet. In tempor tempor orci eu faucibus. Mauris nisi neque, vulputate eu dignissim eget, aliquet sed nibh. Mauris rhoncus elit eget lectus dignissim bibendum. Phasellus sed nunc lacus, nec aliquet elit. Fusce blandit, sem vitae gravida elementum, sem orci porttitor eros, id porta tortor massa ut velit. Nulla pretium mi at tortor porttitor sollicitudin.Ut gravida est at lectus eleifend non ultrices ligula blandit. Sed purus lectus, adipiscing ut mollis vel, interdum quis diam. Phasellus eget nibh augue. Fusce justo felis, facilisis in auctor ut, cursus et enim. Praesent hendrerit venenatis elit, iaculis cursus ligula auctor in. Proin mollis malesuada dolor at elementum. Maecenas sit amet leo odio. Integer ac enim in justo eleifend dapibus. Pellentesque consequat, libero congue sagittis pulvinar, odio eros porta quam, et aliquet dolor turpis non lacus. Sed eu risus nunc. Aliquam tempus nulla a purus auctor mattis. Nullam adipiscing nisl nec purus porttitor rutrum. Sed pellentesque tincidunt posuere. Nulla varius cursus eros. Phasellus vel neque at metus tempus placerat laoreet ac dolor. Nulla faucibus leo nisi, vel placerat lectus.Donec non leo lacinia metus euismod dignissim suscipit ut neque. Donec iaculis, lacus ut luctus bibendum, mi libero tristique sem, vel consectetur risus ligula in turpis. Nulla lorem justo, porttitor non sollicitudin at, pharetra non ante. Phasellus tristique, purus at luctus auctor, nisl neque congue lacus, eget convallis mauris libero sit amet arcu. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tellus quam, lobortis vitae commodo id, ultrices a augue. Nam tellus erat, varius vel iaculis et, fermentum ut tellus. Donec id urna orci. Curabitur eleifend hendrerit libero, id tempor dolor faucibus eu. Quisque aliquam sapien a tortor mollis sollicitudin. Duis augue erat, sagittis eget consequat vel, volutpat et augue. Sed vehicula mattis nisi, non porta elit imperdiet vitae. Curabitur scelerisque mollis lectus, consequat suscipit est ultricies sit amet. Aenean in sem libero, id adipiscing urna. Aenean eleifend posuere lorem in aliquet. Praesent arcu est, tristique quis adipiscing ac, tincidunt nec dui. Nunc sed leo quis justo posuere suscipit. Fusce vitae lectus vitae urna sodales aliquam.Sed velit purus, ullamcorper non interdum quis, facilisis eget tortor. Etiam vestibulum venenatis aliquet. Fusce felis felis, venenatis id tincidunt at, vehicula et erat. Curabitur eu sagittis nisl. Curabitur nisi sapien, venenatis nec pulvinar ut, tempor id diam. Suspendisse metus libero, placerat in fermentum a, aliquam id arcu. Nulla quis accumsan massa. Curabitur consectetur pulvinar sapien non consequat. Etiam sem dolor, posuere id laoreet a, tempor vel nisl. Fusce eu lacus orci. Pellentesque tellus dui, pulvinar nec egestas vitae, adipiscing euismod nunc. Mauris consequat felis sit amet justo pellentesque venenatis. Donec dignissim porta dolor, eget pellentesque lorem porta eu. Donec eget enim eu leo mattis ornare in ut libero. Maecenas sit amet ante mauris.Praesent ultrices diam id lectus viverra sed lobortis risus adipiscing. Nulla in risus est. Proin vitae dolor ligula, a placerat enim. Integer hendrerit erat tincidunt leo malesuada sit amet tincidunt justo mattis. Morbi ut neque urna, ut blandit erat. Donec eleifend justo ac augue ultrices consectetur. In rutrum, leo ac porttitor volutpat, neque mi lacinia diam, id fermentum risus neque vitae risus. Suspendisse in justo libero, eget ultrices nisl. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In sollicitudin, arcu et convallis fermentum, est tellus pellentesque neque, ac faucibus tellus orci non purus. Ut aliquet facilisis ullamcorper. Cras justo ipsum, mollis vel ultricies non, consectetur a libero.Aliquam erat volutpat. Nunc ut mauris eu lorem consequat placerat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse sapien nisi, pellentesque ut porttitor eget, auctor vitae massa. Fusce et euismod massa. In dolor enim, commodo vitae scelerisque sit amet, vulputate quis nibh. Donec ut mollis elit. Nullam placerat sem at urna euismod tempus vitae a mi. Curabitur ac sem non tortor dapibus euismod in et augue. Phasellus elit nisi, ornare eget aliquam et, convallis vitae eros. Vivamus vitae facilisis quam. Nullam a dolor sit amet ante sodales vulputate. Sed vel elit libero. Vestibulum vestibulum porttitor orci, a elementum risus congue in. Mauris ut justo sed dolor rhoncus viverra nec non eros. Phasellus dignissim, mi id laoreet venenatis, enim lacus pharetra arcu, sit amet consectetur velit elit hendrerit arcu. Integer hendrerit suscipit pretium. Proin orci quam, vehicula vel accumsan tempor, facilisis tempus tortor.Etiam et nunc id odio lobortis ornare ac eget lorem. Proin tristique iaculis felis, ut gravida lacus congue ut. Etiam nibh turpis, congue vel ornare ut, feugiat ut mi. Etiam id ante eget turpis laoreet dapibus. Vivamus accumsan sem at est lacinia sagittis vitae a erat. Etiam mollis justo et felis faucibus sodales. Etiam placerat felis sed ante sollicitudin dignissim. Nunc fringilla nunc in lacus ultricies rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed venenatis porta turpis dignissim tempor. Etiam consequat vulputate elementum. Sed augue lacus, aliquam eu ornare vel, aliquam at turpis.Ut lacinia velit odio. Nulla sapien tellus, fringilla dignissim porta sed, elementum eget diam. Quisque pulvinar commodo massa, vitae lobortis velit iaculis id. Vestibulum id dolor vel mauris auctor commodo id at odio. Suspendisse consectetur consequat erat. Aliquam in purus at sem pretium ultricies. In urna elit, porttitor vel gravida at, varius non nisi. Nullam id eros at lorem posuere ullamcorper eget in dui. Sed sit amet mi vel quam vestibulum imperdiet. Ut ullamcorper purus nibh, a commodo tortor. Phasellus pretium, nulla ut venenatis euismod, augue arcu volutpat nulla, id semper est purus eget urna. Vivamus pharetra diam ac ante cursus tempus.Cras in rhoncus felis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In semper leo sit amet nisi rutrum et interdum odio fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras sollicitudin dui non risus iaculis a lobortis odio consequat. Sed consectetur nisl eu nisi pulvinar fermentum. Etiam placerat tincidunt pellentesque. Etiam luctus auctor nulla ac pulvinar. Pellentesque sit amet eros est. Sed hendrerit sem rhoncus purus rhoncus ullamcorper. Integer vitae commodo sem. Donec orci lectus, gravida sit amet viverra ut, suscipit eu odio. Vivamus ac dolor sit amet augue porttitor imperdiet nec quis mauris. Etiam luctus pharetra lectus sed mattis. Proin tincidunt ultricies dolor, at sagittis ante tincidunt ac.Morbi sit amet sem ut leo ornare luctus at sed odio. Donec vestibulum consequat consectetur. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer sit amet leo eget ipsum eleifend commodo et vel sapien. Donec vulputate facilisis nisi in bibendum. Vestibulum justo magna, mollis in varius a, malesuada id nisl. Vestibulum fermentum leo at ipsum euismod scelerisque. Donec id diam eget sapien varius ultricies. Quisque mollis vehicula lorem, vitae suscipit lorem gravida vel. Cras ipsum odio, pellentesque vitae molestie at, facilisis eget felis. Morbi gravida velit eget ante posuere id pharetra dolor vehicula. Praesent lectus sem, pretium sit amet eleifend non, ultricies vitae eros.Etiam consequat felis quis elit semper sed lobortis risus faucibus. Quisque diam ante, gravida ut mollis tristique, auctor ac mauris. Phasellus vestibulum sapien et justo sagittis sed dignissim dui sollicitudin. Maecenas egestas quam et odio mattis eu posuere est sagittis. Nulla nec posuere turpis. In mauris sapien, pharetra et placerat eu, dictum quis justo. Curabitur sit amet varius nulla. Cras feugiat erat quis ante aliquam blandit. In ac libero id massa dapibus ultrices. Donec non massa orci.In gravida justo vitae eros ultrices fringilla. Sed mi quam, lobortis eu pharetra nec, pulvinar eu justo. Sed ornare diam sed nulla pellentesque at tincidunt lacus cursus. Donec vel neque et urna euismod suscipit. Proin in tortor eget felis euismod ultrices. Nunc ut orci elit, vitae pellentesque ligula. Vivamus in mi felis, at congue nulla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi mattis, ligula id sollicitudin posuere, eros odio pellentesque felis, in auctor libero mi nec massa. Praesent fringilla pretium tempus. Sed quis leo nulla, a pretium mi. Sed malesuada quam eget lorem tristique eget accumsan libero auctor. Vestibulum metus nisl, rutrum vel ullamcorper scelerisque, ultrices cursus purus. Aliquam convallis sollicitudin elit at mattis. Phasellus vitae magna id quam laoreet gravida quis ac metus.Duis lobortis arcu a elit porta laoreet. Pellentesque at condimentum sapien. Maecenas rutrum eleifend quam, eu pellentesque quam tincidunt ac. Vivamus fermentum justo ac dui dapibus ut tempus massa congue. Phasellus fermentum placerat enim, et dignissim mi feugiat in. Etiam odio diam, mollis vitae viverra a, egestas eget arcu. Curabitur purus lectus, accumsan quis lobortis ut, faucibus ac magna. Vivamus consectetur, ligula sit amet convallis rhoncus, risus lorem scelerisque arcu, eu fermentum felis leo sit amet eros. In hac habitasse platea dictumst. Sed congue pretium erat, vel hendrerit velit dapibus ut. Aliquam porta porttitor nunc facilisis pretium. Aliquam tincidunt porttitor tincidunt. Sed at erat a arcu elementum dignissim nec et ipsum. In et magna erat. In hac habitasse platea dictumst. Nulla sit amet enim vitae magna ullamcorper auctor ac id lectus. Fusce id sapien massa.Fusce porta nisl non leo iaculis sed elementum purus viverra. Aenean vitae erat elit. Proin id tincidunt nibh. Fusce faucibus dignissim laoreet. Etiam volutpat ultricies magna in euismod. Quisque luctus malesuada massa, ac ullamcorper dui luctus quis. Mauris a felis ut urna blandit semper egestas vel dui. Nulla facilisi. Ut dapibus bibendum bibendum. Curabitur id facilisis tellus. Vestibulum arcu orci, pretium vestibulum accumsan ut, feugiat eget eros. Mauris dapibus sem a massa ornare id posuere purus ornare. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus mollis, orci ac eleifend pharetra, risus turpis euismod urna, ut congue neque nunc ut felis. Aliquam a nisi leo. Nulla consequat faucibus ligula consectetur tristique. Duis at lacus orci, eget pulvinar tortor.Aenean nisi justo, dictum ac sagittis a, mollis ut orci. Donec faucibus congue neque ut gravida. Nam interdum nunc vel ipsum molestie elementum. Aliquam a eros non mi accumsan lacinia ut eu justo. Donec id ipsum purus, sed congue nunc. Donec euismod ante quis metus interdum feugiat. Sed nec dictum neque. Vivamus sed felis non lorem placerat facilisis eu sit amet nisi. Morbi dolor dolor, malesuada eu congue at, sollicitudin ut metus. In sit amet ipsum purus, ut dignissim dolor. Pellentesque quis velit velit. Aenean dapibus ipsum eu felis placerat volutpat. Donec auctor dictum ligula ut facilisis. Aliquam vulputate nunc nec diam ultricies auctor dictum dui fringilla. Cras urna metus, porttitor et sodales eu, tempus non mauris. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.Etiam tempor, mi ut tempor adipiscing, nunc lorem gravida odio, scelerisque aliquet ante massa id nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus eu nisl urna. Quisque vel leo in lorem bibendum bibendum ut eget massa. Morbi dictum, metus eu pellentesque lobortis, augue nisi facilisis velit, sit amet feugiat risus nunc vitae elit. Fusce blandit mi a augue gravida eu tristique sem consequat. Suspendisse non malesuada nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Quisque commodo lorem id ipsum cursus posuere. Proin euismod facilisis est, vel imperdiet lectus commodo blandit. Proin luctus dapibus purus, id vulputate mauris tincidunt vel. Vestibulum volutpat molestie nulla faucibus malesuada. Aenean ut ornare lectus.Maecenas vel mauris in dolor imperdiet gravida eu nec mi. Vestibulum varius sem et nibh aliquet eu posuere tellus luctus. Fusce blandit, odio ut gravida semper, tellus lorem porta felis, vitae posuere mi lorem eget magna. Sed tristique nisi ut ipsum adipiscing molestie. Donec volutpat nunc eget neque posuere aliquam. Vivamus vel sem lectus. In volutpat dictum eros. Curabitur mollis pretium arcu ut rhoncus. Vivamus eros risus, sagittis posuere suscipit sit amet, consectetur eget elit. Mauris porttitor feugiat magna, sed lobortis ante porttitor at. Etiam non enim quam, nec tempus erat. Ut porta pharetra nibh vel laoreet. Sed euismod elit eget sem tempus non sodales massa cursus. Aliquam erat volutpat. Nulla a tortor ornare nibh feugiat venenatis. Mauris interdum mattis odio eget porta. Maecenas ac ullamcorper velit. Nulla id sagittis ligula. Aliquam pharetra, diam ut euismod pellentesque, sapien ligula sagittis nisi, sed dictum dolor purus sit amet elit.Aenean quis metus velit. In at fermentum nunc. Cras in magna sapien, sed vestibulum lacus. Sed pellentesque, massa sed malesuada tincidunt, erat tortor consectetur lacus, vel congue arcu enim id libero. Donec elit neque, egestas a faucibus ut, tempor nec diam. Donec turpis est, vulputate id venenatis vitae, vulputate sit amet elit. Ut semper nibh orci. Fusce nibh nisi, tristique eu dapibus id, faucibus nec augue. Sed sagittis malesuada leo, pretium porttitor ante lacinia in. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.Sed quis libero ante, ac consequat nisl. Cras nisl urna, ultrices eu dapibus sed, pretium quis diam. Curabitur aliquam, dolor et convallis viverra, purus orci commodo neque, a sagittis felis tellus quis mi. In mi orci, tempus ut sodales imperdiet, condimentum ac tortor. Phasellus ornare, tortor eget egestas ultricies, est risus ultricies lorem, ac tempus nibh ligula ac ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum nibh vitae tortor laoreet sed rutrum arcu suscipit. Fusce iaculis nisl in justo pretium a interdum ipsum dignissim. Sed sed semper metus. Aenean ante turpis, fermentum vestibulum dapibus eget, dictum id leo. Nam nec lorem erat.Cras dolor nulla, suscipit nec viverra ac, egestas vitae enim. Quisque vel laoreet sem. Sed non felis at nisl ultricies pharetra vitae a lorem. Suspendisse tempor arcu id massa laoreet congue. Nam eu turpis justo, nec adipiscing tortor. Etiam mattis lorem tincidunt diam molestie semper. Vivamus rutrum est in tortor egestas consequat. Sed vitae ultrices leo. Aenean pulvinar malesuada enim, eget elementum purus bibendum a. Vivamus sit amet mauris mauris, placerat varius lorem. Sed diam tortor, posuere non convallis molestie, dictum quis libero. Nulla quis tellus a nunc semper elementum vel sed odio. Cras ac mattis lectus. Proin placerat imperdiet sodales. Fusce quis magna dolor, eget porttitor lectus. Mauris elementum lorem vitae lectus porta scelerisque nec a sapien. Vivamus dapibus volutpat leo nec vehicula. Praesent ac diam ipsum.Pellentesque nec ullamcorper nulla. Nam lectus dolor, porttitor vitae varius sed, egestas a arcu. Suspendisse malesuada venenatis erat nec consequat. Morbi consequat magna a neque ultrices eget aliquet sapien ultrices. Aenean vel diam ipsum, ac scelerisque dui. Morbi quis arcu neque, eget auctor enim. Etiam pretium est sit amet nunc porta ornare vel quis sapien. Aliquam pulvinar pharetra risus, vel mollis mauris cursus sed. In sagittis nisl ac nunc placerat bibendum. Proin in risus lorem, sed fringilla eros.Proin luctus aliquam metus vitae euismod. Maecenas hendrerit sollicitudin hendrerit. Etiam magna elit, fringilla ut suscipit at, viverra eget ante. Morbi consequat, dui non tristique varius, eros ipsum vulputate sem, eu tristique nibh lacus vel felis. Maecenas eget eros a urna consectetur interdum. Integer est nibh, semper sed feugiat quis, lacinia eget diam. In ultricies mollis lectus sed imperdiet. Proin sed magna nec tortor blandit lacinia in sit amet nibh. Nullam ultrices tempor lacus, vel tincidunt eros vulputate euismod. Praesent justo nibh, convallis ut vehicula consequat, molestie posuere nulla. Mauris sollicitudin egestas vestibulum. Suspendisse auctor imperdiet eros, sit amet dignissim magna dapibus in. Praesent ultrices sem et risus interdum vel pharetra dolor tristique. Proin eleifend nunc eget risus venenatis posuere. Sed est nisi, interdum porta dapibus a, laoreet ac mi. Praesent sit amet varius lectus. Phasellus suscipit lacinia velit, sed tempus odio varius at. Fusce eleifend elementum aliquet. Proin ultricies libero at ipsum condimentum rhoncus.Quisque convallis, arcu at vehicula imperdiet, velit eros posuere sem, sit amet pulvinar purus massa a tellus. Maecenas cursus neque in dolor facilisis ac aliquam ligula eleifend. Fusce quis faucibus nisl. Fusce pulvinar magna vel enim scelerisque id cursus tortor faucibus. Nunc est turpis, iaculis ac sodales non, euismod vitae nunc. Fusce felis purus, iaculis dapibus mollis quis, condimentum consequat eros. Ut a lectus nec mi lacinia fringilla. Donec eget metus lectus, et rhoncus enim. Donec pharetra malesuada enim at rutrum. Vestibulum tincidunt gravida viverra. Vestibulum commodo sem nisl.Vivamus iaculis mollis arcu, quis dapibus risus semper quis. Quisque consectetur ullamcorper arcu id lacinia. Proin non tellus tellus. Nunc vehicula, arcu in pharetra feugiat, ante ante viverra urna, at convallis ligula odio id purus. Morbi quis orci non ante imperdiet luctus. Maecenas et ipsum est, at viverra sem. Morbi placerat ultrices imperdiet. Nullam id arcu at quam mollis hendrerit eu ac lectus. Etiam a neque sed turpis vestibulum posuere. Ut elementum tincidunt nulla at pellentesque. Integer nisl nunc, faucibus non sollicitudin eu, vestibulum ut nulla. In auctor est blandit purus rhoncus et sagittis eros convallis. Mauris sodales ultricies varius. Nulla facilisi. Donec ut nisl nunc, id accumsan erat. Praesent gravida molestie lobortis. In suscipit nisi sed elit sagittis tristique. Pellentesque vitae ante elit. Nullam diam est, ultrices vitae molestie at, tempus et magna. In hac habitasse platea dictumst.Vestibulum id tristique quam. Vivamus dui nulla, pretium eget elementum et, pulvinar a diam. Sed sed arcu sapien, et pharetra nisl. Nunc dignissim, lectus ac fringilla cursus, risus ante pretium justo, nec molestie sem urna id velit. Aenean tincidunt felis sed risus vestibulum ultricies. Aliquam lacinia scelerisque hendrerit. Morbi tincidunt molestie sapien sed faucibus. Vivamus et nisl velit, in semper libero. Duis elementum, dolor eget euismod porttitor, tortor eros tristique risus, eget posuere purus leo venenatis leo. Quisque in elit hendrerit felis accumsan gravida id sed sem.Sed massa turpis, interdum eget adipiscing a, tempor non enim. Vivamus sit amet purus tortor, quis tincidunt nunc. Nam vehicula dolor vitae est bibendum sed condimentum nisl pretium. Aenean pellentesque egestas lacinia. Vestibulum id felis sapien, vestibulum pharetra mauris. Donec quis ligula quis risus ultrices pharetra ac et quam. Nunc aliquam adipiscing mauris id euismod. Suspendisse potenti. Ut pharetra tristique pellentesque. Fusce tristique nisl vitae eros adipiscing lobortis. Ut porttitor porttitor est, vel euismod mi feugiat quis. Sed bibendum lacus vel sem hendrerit a ultricies sapien mattis.Vestibulum a tempus urna. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aenean tincidunt interdum dui, in accumsan ante placerat non. Aliquam suscipit eros eget quam ullamcorper consequat. Nulla facilisi. Phasellus porttitor interdum quam nec mattis. Etiam vitae diam vel est tempus aliquam eu et tellus. Phasellus lobortis porttitor mi, eu mollis augue tempus eu. Morbi a urna id nibh faucibus dictum. Sed hendrerit fringilla nunc vel elementum. Donec vel massa vitae nibh imperdiet vestibulum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum in velit lorem, eu posuere felis. Maecenas ornare posuere faucibus. Donec dignissim ante eu neque suscipit interdum. Pellentesque ultrices dictum quam, tempor tempus leo posuere eget. Vestibulum dictum interdum urna, at feugiat neque venenatis ac. Donec tempus dictum enim, nec tempor neque rhoncus vel.Sed mollis luctus leo sed mattis. Vestibulum tempor mattis vehicula. Duis id elementum libero. Integer condimentum tincidunt molestie. Aenean quam tortor, rutrum sit amet placerat sed, sollicitudin eget turpis. In hac habitasse platea dictumst. Mauris lacinia mollis rhoncus. Fusce nec tellus elementum magna congue ultricies. Nulla consequat, dui nec facilisis hendrerit, ligula sapien viverra velit, at tempor risus leo vestibulum risus. Cras volutpat molestie orci ullamcorper gravida. Nullam est nisi, tempus et tincidunt ut, dapibus vitae nibh. Nam scelerisque purus sit amet odio imperdiet mattis. Integer ut ultrices odio.Cras placerat turpis nisl. Quisque consectetur urna vel nunc faucibus dictum. Nunc ac varius mauris. In ut egestas purus. Sed arcu nibh, mollis vitae dapibus eget, consectetur sit amet eros. Curabitur tincidunt purus sagittis neque adipiscing pretium. Aliquam tempor ullamcorper lectus. Cras quis elit et sapien euismod dapibus vitae in urna. Aliquam adipiscing urna non elit suscipit hendrerit. Mauris euismod tincidunt tortor eu vestibulum. Praesent ac quam massa. Fusce vitae viverra justo. Phasellus vel posuere augue. Praesent sagittis auctor odio in cursus. Sed vel lacus velit, vitae eleifend leo. Donec dapibus ornare mauris ut imperdiet. Nullam a sem felis, in commodo ligula. Nunc sed justo id metus bibendum pretium. Fusce lacinia lorem at leo ultricies porta.Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi non ipsum nisi, at porta ipsum. Nulla dolor lacus, auctor eget tincidunt et, tempor in velit. Cras vel diam facilisis dolor sagittis sodales. In hac habitasse platea dictumst. Donec dignissim vulputate tempor. Fusce tristique vestibulum vehicula. Integer nec erat a risus semper ultrices nec ac eros. Phasellus egestas, risus eget suscipit iaculis, mi magna posuere urna, in sollicitudin odio leo nec lorem. Ut at enim nunc, eget pellentesque ipsum. Nam at ipsum et magna tempor gravida vestibulum ut diam. Aenean aliquam scelerisque blandit. Cras sapien sem, consectetur a laoreet at, mattis vel lorem. Maecenas enim mauris, hendrerit ac imperdiet in, hendrerit a justo. Vestibulum justo metus, adipiscing at pulvinar at, scelerisque at velit. Aliquam sodales feugiat tortor ullamcorper cursus. Quisque tortor felis, sodales eu bibendum in, pellentesque eget urna.Nullam ultricies congue nisi nec blandit. Nulla nisl mi, aliquet vel dictum in, pellentesque fringilla arcu. Nam vulputate iaculis pellentesque. Morbi faucibus, augue vitae aliquam fringilla, ipsum tellus lacinia ligula, a luctus mauris orci id nulla. Vestibulum commodo, diam eget tincidunt iaculis, leo ante suscipit ligula, convallis scelerisque quam augue quis libero. Pellentesque vulputate ultricies eros a porta. In hac habitasse platea dictumst. Quisque at sem vel nisl pellentesque pellentesque at imperdiet turpis. Sed quis sem non nulla pellentesque placerat. Etiam sed ultricies nisl. Nunc vel leo augue, vitae fringilla urna. Suspendisse eget dolor enim, sed interdum lorem. Etiam imperdiet, nunc a tempor elementum, ipsum ante sodales tortor, id dignissim arcu diam vitae metus.Sed tincidunt fringilla mauris a lobortis. Morbi mollis elementum purus ac auctor. Etiam malesuada sapien vehicula magna fringilla sit amet porta sem scelerisque. Vestibulum malesuada ante nunc. Curabitur laoreet commodo mauris eu tempor. Sed hendrerit, lorem vel scelerisque aliquam, metus ligula ultricies ante, at luctus neque risus ut nisi. Suspendisse lectus sapien, tempor eget volutpat non, tempor at orci. Aenean eu est metus, vel convallis augue. Integer aliquam turpis id neque posuere tincidunt. Morbi at ante felis, ac semper diam. Etiam iaculis sapien a mauris tempus semper. Nunc ut leo nec massa tincidunt sodales id sed justo. Fusce sed blandit turpis. Pellentesque scelerisque laoreet luctus.Integer lobortis sollicitudin sapien, vel consequat augue hendrerit ut. Quisque pretium, enim condimentum ornare viverra, est nisl convallis lacus, vel varius turpis mi a eros. Curabitur eget enim non quam condimentum lobortis id sit amet dolor. Aliquam in ligula ut nisi accumsan consectetur. Pellentesque blandit ultrices magna, eget posuere dui eleifend ut. Quisque ornare, ante eget iaculis rutrum, nisi dolor tincidunt diam, eget volutpat nibh sapien vel massa. Sed viverra pulvinar lectus et commodo. Sed lacus mauris, aliquet ut tristique at, feugiat sit amet lectus. Duis lacinia purus a lacus accumsan tristique. Donec felis nunc, egestas ut porttitor ac, vulputate at purus. Quisque euismod nibh sit amet metus ullamcorper a consequat ipsum luctus. Mauris vitae sapien tristique lorem mollis porta auctor vitae leo.Donec mauris nibh, elementum a tincidunt nec, volutpat vitae enim. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque at purus quis massa vulputate mollis ut eu risus. Cras libero diam, pharetra quis ultrices facilisis, tincidunt id arcu. Praesent at volutpat quam. Phasellus quis malesuada sapien. Nullam eu leo quam, bibendum sagittis turpis. Vestibulum sagittis accumsan enim ut tristique. Donec eu enim nisi. Curabitur mauris orci, fringilla et suscipit placerat, ullamcorper vel turpis. Mauris est arcu, gravida ac accumsan ac, tincidunt vel nibh. Mauris pulvinar massa tempor dui hendrerit vel elementum diam pulvinar. Sed felis leo, laoreet at laoreet nec, venenatis eu risus. Nunc a massa lacus. Vestibulum ut pellentesque sem. Donec consectetur, turpis consequat aliquam consectetur, leo nunc lobortis elit, at sagittis ipsum risus sed turpis. Vivamus at sollicitudin purus. Nulla facilisi.Morbi congue dignissim nibh ut commodo. Integer sed urna fermentum neque hendrerit aliquam ac et tortor. Phasellus massa sem, egestas sed tincidunt id, malesuada vel odio. Nulla arcu nisl, elementum at pretium interdum, pharetra at nulla. Vestibulum lectus ante, ultricies ac lacinia euismod, adipiscing at metus. Aliquam velit orci, posuere a dapibus dapibus, consectetur vitae est. Pellentesque suscipit pulvinar varius. Morbi sagittis blandit nulla, eu posuere arcu blandit eu. Nulla cursus nunc volutpat orci commodo aliquet. Quisque condimentum dui a mi facilisis tincidunt.Quisque ac nisi vitae ipsum condimentum luctus non quis erat. Pellentesque eget nunc sit amet ipsum pharetra vulputate ac in mi. Etiam consectetur nulla vitae risus pharetra a ornare ligula sagittis. Proin euismod mauris id lectus tincidunt luctus at sed ligula. Aenean porttitor hendrerit quam quis interdum. Suspendisse eu metus turpis, ut venenatis ipsum. Nulla ipsum orci, lacinia ac vestibulum ut, mattis quis eros. Pellentesque a velit et erat sodales ornare. Pellentesque pellentesque tortor eget magna facilisis accumsan. Praesent tincidunt posuere lacus sed sollicitudin. Praesent consectetur diam vel turpis elementum vehicula. Integer rutrum dignissim justo, ac dapibus quam fringilla non. Suspendisse porta elementum bibendum. Praesent at lorem at quam dignissim commodo. Etiam placerat euismod ipsum eu interdum. Aliquam in mi molestie justo varius venenatis eu aliquam quam. Integer feugiat, neque hendrerit egestas hendrerit, lectus ligula placerat enim, a faucibus ante ligula vitae mi. Praesent urna nunc, volutpat vitae scelerisque non, porta vel dolor. Aenean quam sem, dignissim at faucibus non, auctor sodales libero.Morbi justo elit, tempus ac cursus porta, eleifend nec odio. Ut nec quam velit. Duis elit nulla, placerat et rutrum quis, tempor non nisi. Quisque massa erat, pretium ut elementum sit amet, sodales vel metus. Phasellus sollicitudin sapien vel nisl faucibus ornare. Duis ut dolor arcu, vel semper felis. In quis orci mauris, id porttitor diam. Fusce ornare, dolor in posuere blandit, neque est mollis lacus, eu venenatis nisi orci vel diam. Etiam ornare sapien eu sapien tristique vitae consequat arcu consequat. Fusce a felis at dui sollicitudin pellentesque sit amet vel mi. Curabitur congue porttitor orci, eu auctor nibh mollis at. Nulla facilisi. Nam aliquet ullamcorper metus ac vulputate. Aenean feugiat purus vitae dui congue egestas. Curabitur sollicitudin leo eget nibh facilisis fermentum fermentum non nisi. Ut at libero eget est bibendum laoreet non eu ante. Proin pellentesque quam ut augue condimentum id suscipit risus tristique. Nunc laoreet risus elit.Suspendisse vel ante elit, eu feugiat diam. Etiam ultrices condimentum tempor. Donec eget porta lacus. Nunc in velit lacus, ut ultricies felis. Nulla id cursus metus. Praesent suscipit, orci a facilisis imperdiet, eros lectus eleifend nibh, sit amet auctor magna arcu ac enim. In malesuada volutpat felis a posuere. Aliquam mattis ipsum ut quam semper aliquet. Maecenas convallis consequat magna, blandit viverra nulla consectetur sit amet. Pellentesque id velit nec risus iaculis imperdiet ac accumsan metus. Suspendisse et sem massa. Vestibulum ac enim hendrerit est tincidunt ullamcorper.Curabitur placerat, libero id molestie vehicula, neque tortor vulputate sapien, ut blandit orci metus et nibh. Cras convallis justo a nibh iaculis ut convallis neque vestibulum. Duis gravida purus metus, nec viverra leo. In tincidunt elit sit amet orci lacinia non eleifend orci tincidunt. Praesent est metus, molestie a ullamcorper ultricies, cursus imperdiet augue. Sed vitae quam eu dui pellentesque dignissim. Curabitur convallis volutpat accumsan. Donec egestas malesuada est, vitae faucibus sem fermentum id. Donec porttitor rutrum vehicula. Nulla placerat risus in est egestas nec ultrices ligula auctor. Quisque erat lorem, ullamcorper vitae interdum sit amet, laoreet vel elit. Proin eu porta neque. Pellentesque eleifend, ipsum a sollicitudin ultrices, ligula nisl aliquet dui, eget fermentum quam mi vel.";
-
-    public static String get(int len) {
-        return LOREM.substring(0, len);
-    }
-
-    public static String get() {
-        return LOREM;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/util/Person.java b/tests/src/com/vaadin/tests/util/Person.java
deleted file mode 100644
index 822f62d17a..0000000000
--- a/tests/src/com/vaadin/tests/util/Person.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package com.vaadin.tests.util;
-
-import java.io.Serializable;
-
-@SuppressWarnings("serial")
-public class Person implements Serializable {
-    private String firstName = "";
-    private String lastName = "";
-    private String email = "";
-    private String phoneNumber = "";
-    private String streetAddress = "";
-    private Integer postalCode = null;
-    private String city = "";
-
-    /**
-     * @return the firstName
-     */
-    public String getFirstName() {
-        return firstName;
-    }
-
-    /**
-     * @param firstName
-     *            the firstName to set
-     */
-    public void setFirstName(String firstName) {
-        this.firstName = firstName;
-    }
-
-    /**
-     * @return the lastName
-     */
-    public String getLastName() {
-        return lastName;
-    }
-
-    /**
-     * @param lastName
-     *            the lastName to set
-     */
-    public void setLastName(String lastName) {
-        this.lastName = lastName;
-    }
-
-    /**
-     * @return the email
-     */
-    public String getEmail() {
-        return email;
-    }
-
-    /**
-     * @param email
-     *            the email to set
-     */
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
-    /**
-     * @return the phoneNumber
-     */
-    public String getPhoneNumber() {
-        return phoneNumber;
-    }
-
-    /**
-     * @param phoneNumber
-     *            the phoneNumber to set
-     */
-    public void setPhoneNumber(String phoneNumber) {
-        this.phoneNumber = phoneNumber;
-    }
-
-    /**
-     * @return the streetAddress
-     */
-    public String getStreetAddress() {
-        return streetAddress;
-    }
-
-    /**
-     * @param streetAddress
-     *            the streetAddress to set
-     */
-    public void setStreetAddress(String streetAddress) {
-        this.streetAddress = streetAddress;
-    }
-
-    /**
-     * @return the postalCode
-     */
-    public Integer getPostalCode() {
-        return postalCode;
-    }
-
-    /**
-     * @param postalCode
-     *            the postalCode to set
-     */
-    public void setPostalCode(Integer postalCode) {
-        this.postalCode = postalCode;
-    }
-
-    /**
-     * @return the city
-     */
-    public String getCity() {
-        return city;
-    }
-
-    /**
-     * @param city
-     *            the city to set
-     */
-    public void setCity(String city) {
-        this.city = city;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/util/PersonContainer.java b/tests/src/com/vaadin/tests/util/PersonContainer.java
deleted file mode 100644
index 8195b4d5f0..0000000000
--- a/tests/src/com/vaadin/tests/util/PersonContainer.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.vaadin.tests.util;
-
-import java.io.Serializable;
-import java.util.Random;
-
-import com.vaadin.data.util.BeanItemContainer;
-
-@SuppressWarnings("serial")
-public class PersonContainer extends BeanItemContainer<Person> implements
-        Serializable {
-
-    /**
-     * Natural property order for Person bean. Used in tables and forms.
-     */
-    public static final Object[] NATURAL_COL_ORDER = new Object[] {
-            "firstName", "lastName", "email", "phoneNumber", "streetAddress",
-            "postalCode", "city" };
-
-    /**
-     * "Human readable" captions for properties in same order as in
-     * NATURAL_COL_ORDER.
-     */
-    public static final String[] COL_HEADERS_ENGLISH = new String[] {
-            "First name", "Last name", "Email", "Phone number",
-            "Street Address", "Postal Code", "City" };
-
-    public PersonContainer() throws InstantiationException,
-            IllegalAccessException {
-        super(Person.class);
-    }
-
-    public static PersonContainer createWithTestData() {
-        final String[] fnames = { "Peter", "Alice", "Joshua", "Mike", "Olivia",
-                "Nina", "Alex", "Rita", "Dan", "Umberto", "Henrik", "Rene",
-                "Lisa", "Marge" };
-        final String[] lnames = { "Smith", "Gordon", "Simpson", "Brown",
-                "Clavel", "Simons", "Verne", "Scott", "Allison", "Gates",
-                "Rowling", "Barks", "Ross", "Schneider", "Tate" };
-        final String cities[] = { "Amsterdam", "Berlin", "Helsinki",
-                "Hong Kong", "London", "Luxemburg", "New York", "Oslo",
-                "Paris", "Rome", "Stockholm", "Tokyo", "Turku" };
-        final String streets[] = { "4215 Blandit Av.", "452-8121 Sem Ave",
-                "279-4475 Tellus Road", "4062 Libero. Av.", "7081 Pede. Ave",
-                "6800 Aliquet St.", "P.O. Box 298, 9401 Mauris St.",
-                "161-7279 Augue Ave", "P.O. Box 496, 1390 Sagittis. Rd.",
-                "448-8295 Mi Avenue", "6419 Non Av.",
-                "659-2538 Elementum Street", "2205 Quis St.",
-                "252-5213 Tincidunt St.", "P.O. Box 175, 4049 Adipiscing Rd.",
-                "3217 Nam Ave", "P.O. Box 859, 7661 Auctor St.",
-                "2873 Nonummy Av.", "7342 Mi, Avenue",
-                "539-3914 Dignissim. Rd.", "539-3675 Magna Avenue",
-                "Ap #357-5640 Pharetra Avenue", "416-2983 Posuere Rd.",
-                "141-1287 Adipiscing Avenue", "Ap #781-3145 Gravida St.",
-                "6897 Suscipit Rd.", "8336 Purus Avenue", "2603 Bibendum. Av.",
-                "2870 Vestibulum St.", "Ap #722 Aenean Avenue",
-                "446-968 Augue Ave", "1141 Ultricies Street",
-                "Ap #992-5769 Nunc Street", "6690 Porttitor Avenue",
-                "Ap #105-1700 Risus Street",
-                "P.O. Box 532, 3225 Lacus. Avenue", "736 Metus Street",
-                "414-1417 Fringilla Street", "Ap #183-928 Scelerisque Road",
-                "561-9262 Iaculis Avenue" };
-        PersonContainer c = null;
-        Random r = new Random(0);
-        try {
-            c = new PersonContainer();
-            for (int i = 0; i < 100; i++) {
-                Person p = new Person();
-                p.setFirstName(fnames[r.nextInt(fnames.length)]);
-                p.setLastName(lnames[r.nextInt(lnames.length)]);
-                p.setCity(cities[r.nextInt(cities.length)]);
-                p.setEmail(p.getFirstName().toLowerCase() + "."
-                        + p.getLastName().toLowerCase() + "@vaadin.com");
-                p.setPhoneNumber("+358 02 555 " + r.nextInt(10) + r.nextInt(10)
-                        + r.nextInt(10) + r.nextInt(10));
-                int n = r.nextInt(100000);
-                if (n < 10000) {
-                    n += 10000;
-                }
-                p.setPostalCode(n);
-                p.setStreetAddress(streets[r.nextInt(streets.length)]);
-                c.addItem(p);
-            }
-        } catch (InstantiationException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        } catch (IllegalAccessException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-
-        return c;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/util/PortableRandom.java b/tests/src/com/vaadin/tests/util/PortableRandom.java
deleted file mode 100644
index 2e6d7ce9af..0000000000
--- a/tests/src/com/vaadin/tests/util/PortableRandom.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vaadin.tests.util;
-
-import java.util.concurrent.atomic.AtomicLong;
-
-public class PortableRandom {
-    private final static long multiplier = 0x5DEECE66DL;
-    private final static long addend = 0xBL;
-    private final static long mask = (1L << 48) - 1;
-    private AtomicLong seed;
-
-    public PortableRandom(long seed) {
-        this.seed = new AtomicLong(0L);
-        setSeed(seed);
-    }
-
-    synchronized public void setSeed(long seed) {
-        seed = (seed ^ multiplier) & mask;
-        this.seed.set(seed);
-    }
-
-    public int nextInt(int n) {
-        if (n <= 0) {
-            throw new IllegalArgumentException("n must be positive");
-        }
-
-        if ((n & -n) == n) {
-            return (int) ((n * (long) next(31)) >> 31);
-        }
-
-        int bits, val;
-        do {
-            bits = next(31);
-            val = bits % n;
-        } while (bits - val + (n - 1) < 0);
-        return val;
-    }
-
-    protected int next(int bits) {
-        long oldseed, nextseed;
-        AtomicLong seed = this.seed;
-        do {
-            oldseed = seed.get();
-            nextseed = (oldseed * multiplier + addend) & mask;
-        } while (!seed.compareAndSet(oldseed, nextseed));
-        return (int) (nextseed >>> (48 - bits));
-    }
-
-    public boolean nextBoolean() {
-        return next(1) != 0;
-    }
-
-}
\ No newline at end of file
diff --git a/tests/src/com/vaadin/tests/util/SampleDirectory.java b/tests/src/com/vaadin/tests/util/SampleDirectory.java
deleted file mode 100644
index ab52e4050c..0000000000
--- a/tests/src/com/vaadin/tests/util/SampleDirectory.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/* 
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.tests.util;
-
-import java.io.File;
-
-import com.vaadin.Application;
-import com.vaadin.terminal.SystemError;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Panel;
-
-/**
- * Provides sample directory based on application directory. If this fails then
- * sampleDirectory property is read. If no sample directory is resolved, then a
- * panel displaying error message is added to main window.
- * 
- * @author IT Mill Ltd.
- * 
- */
-public class SampleDirectory {
-
-    /**
-     * Get sample directory.
-     * 
-     * @param application
-     * @return file pointing to sample directory
-     */
-    public static File getDirectory(Application application) {
-        String errorMessage = "Access to application "
-                + "context base directory failed, "
-                + "possible security constraint with Application "
-                + "Server or Servlet Container.<br />";
-        File file = application.getContext().getBaseDirectory();
-        if ((file == null) || (!file.canRead())
-                || (file.getAbsolutePath() == null)) {
-            // cannot access example directory, possible security issue with
-            // Application Server or Servlet Container
-            // Try to read sample directory from web.xml parameter
-            if (application.getProperty("sampleDirectory") != null) {
-                file = new File(application.getProperty("sampleDirectory"));
-                if ((file != null) && (file.canRead())
-                        && (file.getAbsolutePath() != null)) {
-                    // Success using property
-                    return file;
-                }
-                // Failure using property
-                errorMessage += "Failed also to access sample directory <b>["
-                        + application.getProperty("sampleDirectory")
-                        + "]</b> defined in <b>sampleDirectory property</b>.";
-            } else {
-                // Failure using application context base dir, no property set
-                errorMessage += "<b>Note: </b>You can set this manually in "
-                        + "web.xml by defining " + "sampleDirectory property.";
-            }
-        } else {
-            // Success using application context base dir
-            return file;
-        }
-        // Add failure notification as an Panel to main window
-        final Panel errorPanel = new Panel("Demo application error");
-        errorPanel.setStyleName("strong");
-        errorPanel.setComponentError(new SystemError(
-                "Cannot provide sample directory"));
-        errorPanel.addComponent(new Label(errorMessage, Label.CONTENT_XHTML));
-        // Remove all components from applications main window
-        application.getMainWindow().getContent().removeAllComponents();
-        // Add error panel
-        application.getMainWindow().getContent().addComponent(errorPanel);
-        return null;
-    }
-}
diff --git a/tests/src/com/vaadin/tests/util/TestClickListener.java b/tests/src/com/vaadin/tests/util/TestClickListener.java
deleted file mode 100644
index 95b9cf2d40..0000000000
--- a/tests/src/com/vaadin/tests/util/TestClickListener.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.vaadin.tests.util;
-
-import java.util.HashMap;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-
-public class TestClickListener implements Button.ClickListener {
-
-    private static final HashMap<String, Integer> buttonListeners = new HashMap<String, Integer>();
-
-    String name = "";
-    int count = 0;
-
-    public TestClickListener(String name) {
-        Integer count = null;
-        try {
-            count = buttonListeners.get(name);
-            count = new Integer(count.intValue() + 1);
-            buttonListeners.put(name, count);
-        } catch (Exception e) {
-            count = new Integer(1);
-            buttonListeners.put(name, count);
-        }
-
-        this.name = name;
-        this.count = count.intValue();
-
-        System.out.println("Created listener " + name + ", id=" + count);
-    }
-
-    public void buttonClick(ClickEvent event) {
-        System.out
-                .println("ClickEvent from listener " + name + ", id=" + count);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/util/TestUtils.java b/tests/src/com/vaadin/tests/util/TestUtils.java
deleted file mode 100644
index aed69055c7..0000000000
--- a/tests/src/com/vaadin/tests/util/TestUtils.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package com.vaadin.tests.util;
-
-import com.vaadin.data.Item;
-import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.ui.Window;
-
-public class TestUtils {
-
-    public static final Object iso3166_PROPERTY_NAME = "name";
-    public static final Object iso3166_PROPERTY_SHORT = "short";
-
-    private static final String[] iso3166 = new String[] { "AFGHANISTAN", "AF",
-            "ÅLAND ISLANDS", "AX", "ALBANIA", "AL", "ALGERIA", "DZ",
-            "AMERICAN SAMOA", "AS", "ANDORRA", "AD", "ANGOLA", "AO",
-            "ANGUILLA", "AI", "ANTARCTICA", "AQ", "ANTIGUA AND BARBUDA", "AG",
-            "ARGENTINA", "AR", "ARMENIA", "AM", "ARUBA", "AW", "AUSTRALIA",
-            "AU", "AUSTRIA", "AT", "AZERBAIJAN", "AZ", "BAHAMAS", "BS",
-            "BAHRAIN", "BH", "BANGLADESH", "BD", "BARBADOS", "BB", "BELARUS",
-            "BY", "BELGIUM", "BE", "BELIZE", "BZ", "BENIN", "BJ", "BERMUDA",
-            "BM", "BHUTAN", "BT", "BOLIVIA", "BO", "BOSNIA AND HERZEGOVINA",
-            "BA", "BOTSWANA", "BW", "BOUVET ISLAND", "BV", "BRAZIL", "BR",
-            "BRITISH INDIAN OCEAN TERRITORY", "IO", "BRUNEI DARUSSALAM", "BN",
-            "BULGARIA", "BG", "BURKINA FASO", "BF", "BURUNDI", "BI",
-            "CAMBODIA", "KH", "CAMEROON", "CM", "CANADA", "CA", "CAPE VERDE",
-            "CV", "CAYMAN ISLANDS", "KY", "CENTRAL AFRICAN REPUBLIC", "CF",
-            "CHAD", "TD", "CHILE", "CL", "CHINA", "CN", "CHRISTMAS ISLAND",
-            "CX", "COCOS (KEELING) ISLANDS", "CC", "COLOMBIA", "CO", "COMOROS",
-            "KM", "CONGO", "CG", "CONGO, THE DEMOCRATIC REPUBLIC OF THE", "CD",
-            "COOK ISLANDS", "CK", "COSTA RICA", "CR", "CÔTE D'IVOIRE", "CI",
-            "CROATIA", "HR", "CUBA", "CU", "CYPRUS", "CY", "CZECH REPUBLIC",
-            "CZ", "DENMARK", "DK", "DJIBOUTI", "DJ", "DOMINICA", "DM",
-            "DOMINICAN REPUBLIC", "DO", "ECUADOR", "EC", "EGYPT", "EG",
-            "EL SALVADOR", "SV", "EQUATORIAL GUINEA", "GQ", "ERITREA", "ER",
-            "ESTONIA", "EE", "ETHIOPIA", "ET", "FALKLAND ISLANDS (MALVINAS)",
-            "FK", "FAROE ISLANDS", "FO", "FIJI", "FJ", "FINLAND", "FI",
-            "FRANCE", "FR", "FRENCH GUIANA", "GF", "FRENCH POLYNESIA", "PF",
-            "FRENCH SOUTHERN TERRITORIES", "TF", "GABON", "GA", "GAMBIA", "GM",
-            "GEORGIA", "GE", "GERMANY", "DE", "GHANA", "GH", "GIBRALTAR", "GI",
-            "GREECE", "GR", "GREENLAND", "GL", "GRENADA", "GD", "GUADELOUPE",
-            "GP", "GUAM", "GU", "GUATEMALA", "GT", "GUERNSEY", "GG", "GUINEA",
-            "GN", "GUINEA-BISSAU", "GW", "GUYANA", "GY", "HAITI", "HT",
-            "HEARD ISLAND AND MCDONALD ISLANDS", "HM",
-            "HOLY SEE (VATICAN CITY STATE)", "VA", "HONDURAS", "HN",
-            "HONG KONG", "HK", "HUNGARY", "HU", "ICELAND", "IS", "INDIA", "IN",
-            "INDONESIA", "ID", "IRAN, ISLAMIC REPUBLIC OF", "IR", "IRAQ", "IQ",
-            "IRELAND", "IE", "ISLE OF MAN", "IM", "ISRAEL", "IL", "ITALY",
-            "IT", "JAMAICA", "JM", "JAPAN", "JP", "JERSEY", "JE", "JORDAN",
-            "JO", "KAZAKHSTAN", "KZ", "KENYA", "KE", "KIRIBATI", "KI",
-            "KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF", "KP",
-            "KOREA, REPUBLIC OF", "KR", "KUWAIT", "KW", "KYRGYZSTAN", "KG",
-            "LAO PEOPLE'S DEMOCRATIC REPUBLIC", "LA", "LATVIA", "LV",
-            "LEBANON", "LB", "LESOTHO", "LS", "LIBERIA", "LR",
-            "LIBYAN ARAB JAMAHIRIYA", "LY", "LIECHTENSTEIN", "LI", "LITHUANIA",
-            "LT", "LUXEMBOURG", "LU", "MACAO", "MO",
-            "MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF", "MK", "MADAGASCAR",
-            "MG", "MALAWI", "MW", "MALAYSIA", "MY", "MALDIVES", "MV", "MALI",
-            "ML", "MALTA", "MT", "MARSHALL ISLANDS", "MH", "MARTINIQUE", "MQ",
-            "MAURITANIA", "MR", "MAURITIUS", "MU", "MAYOTTE", "YT", "MEXICO",
-            "MX", "MICRONESIA, FEDERATED STATES OF", "FM",
-            "MOLDOVA, REPUBLIC OF", "MD", "MONACO", "MC", "MONGOLIA", "MN",
-            "MONTENEGRO", "ME", "MONTSERRAT", "MS", "MOROCCO", "MA",
-            "MOZAMBIQUE", "MZ", "MYANMAR", "MM", "NAMIBIA", "NA", "NAURU",
-            "NR", "NEPAL", "NP", "NETHERLANDS", "NL", "NETHERLANDS ANTILLES",
-            "AN", "NEW CALEDONIA", "NC", "NEW ZEALAND", "NZ", "NICARAGUA",
-            "NI", "NIGER", "NE", "NIGERIA", "NG", "NIUE", "NU",
-            "NORFOLK ISLAND", "NF", "NORTHERN MARIANA ISLANDS", "MP", "NORWAY",
-            "NO", "OMAN", "OM", "PAKISTAN", "PK", "PALAU", "PW",
-            "PALESTINIAN TERRITORY, OCCUPIED", "PS", "PANAMA", "PA",
-            "PAPUA NEW GUINEA", "PG", "PARAGUAY", "PY", "PERU", "PE",
-            "PHILIPPINES", "PH", "PITCAIRN", "PN", "POLAND", "PL", "PORTUGAL",
-            "PT", "PUERTO RICO", "PR", "QATAR", "QA", "REUNION", "RE",
-            "ROMANIA", "RO", "RUSSIAN FEDERATION", "RU", "RWANDA", "RW",
-            "SAINT BARTHÉLEMY", "BL", "SAINT HELENA", "SH",
-            "SAINT KITTS AND NEVIS", "KN", "SAINT LUCIA", "LC", "SAINT MARTIN",
-            "MF", "SAINT PIERRE AND MIQUELON", "PM",
-            "SAINT VINCENT AND THE GRENADINES", "VC", "SAMOA", "WS",
-            "SAN MARINO", "SM", "SAO TOME AND PRINCIPE", "ST", "SAUDI ARABIA",
-            "SA", "SENEGAL", "SN", "SERBIA", "RS", "SEYCHELLES", "SC",
-            "SIERRA LEONE", "SL", "SINGAPORE", "SG", "SLOVAKIA", "SK",
-            "SLOVENIA", "SI", "SOLOMON ISLANDS", "SB", "SOMALIA", "SO",
-            "SOUTH AFRICA", "ZA",
-            "SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS", "GS", "SPAIN",
-            "ES", "SRI LANKA", "LK", "SUDAN", "SD", "SURINAME", "SR",
-            "SVALBARD AND JAN MAYEN", "SJ", "SWAZILAND", "SZ", "SWEDEN", "SE",
-            "SWITZERLAND", "CH", "SYRIAN ARAB REPUBLIC", "SY",
-            "TAIWAN, PROVINCE OF CHINA", "TW", "TAJIKISTAN", "TJ",
-            "TANZANIA, UNITED REPUBLIC OF", "TZ", "THAILAND", "TH",
-            "TIMOR-LESTE", "TL", "TOGO", "TG", "TOKELAU", "TK", "TONGA", "TO",
-            "TRINIDAD AND TOBAGO", "TT", "TUNISIA", "TN", "TURKEY", "TR",
-            "TURKMENISTAN", "TM", "TURKS AND CAICOS ISLANDS", "TC", "TUVALU",
-            "TV", "UGANDA", "UG", "UKRAINE", "UA", "UNITED ARAB EMIRATES",
-            "AE", "UNITED KINGDOM", "GB", "UNITED STATES", "US",
-            "UNITED STATES MINOR OUTLYING ISLANDS", "UM", "URUGUAY", "UY",
-            "UZBEKISTAN", "UZ", "VANUATU", "VU", "VENEZUELA", "VE", "VIET NAM",
-            "VN", "VIRGIN ISLANDS, BRITISH", "VG", "VIRGIN ISLANDS, U.S.",
-            "VI", "WALLIS AND FUTUNA", "WF", "WESTERN SAHARA", "EH", "YEMEN",
-            "YE", "ZAMBIA", "ZM", "ZIMBABWE", "ZW" };
-
-    /**
-     * Crossbrowser hack to dynamically add css current window. Can be used to
-     * keep tests css in source files.
-     * 
-     * @param cssString
-     */
-    public static void injectCSS(Window w, String cssString) {
-        String script = "if ('\\v'=='v') /* ie only */ {\n"
-                + "        document.createStyleSheet().cssText = '"
-                + cssString
-                + "';\n"
-                + "    } else {var tag = document.createElement('style'); tag.type = 'text/css';"
-                + " document.getElementsByTagName('head')[0].appendChild(tag);tag[ (typeof "
-                + "document.body.style.WebkitAppearance=='string') /* webkit only */ ? 'innerText' "
-                + ": 'innerHTML'] = '" + cssString + "';}";
-
-        w.executeJavaScript(script);
-    }
-
-    public static IndexedContainer getISO3166Container() {
-        IndexedContainer c = new IndexedContainer();
-        fillIso3166Container(c);
-        return c;
-    }
-
-    private static void fillIso3166Container(IndexedContainer container) {
-        container.addContainerProperty(iso3166_PROPERTY_NAME, String.class,
-                null);
-        container.addContainerProperty(iso3166_PROPERTY_SHORT, String.class,
-                null);
-        for (int i = 0; i < iso3166.length; i++) {
-            String name = iso3166[i++];
-            String id = iso3166[i];
-            Item item = container.addItem(id);
-            item.getItemProperty(iso3166_PROPERTY_NAME).setValue(name);
-            item.getItemProperty(iso3166_PROPERTY_SHORT).setValue(id);
-        }
-        container.sort(new Object[] { iso3166_PROPERTY_NAME },
-                new boolean[] { true });
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/vaadin_spin.swf b/tests/src/com/vaadin/tests/vaadin_spin.swf
deleted file mode 100644
index 9e58ce29c6..0000000000
Binary files a/tests/src/com/vaadin/tests/vaadin_spin.swf and /dev/null differ
diff --git a/tests/src/com/vaadin/tests/validation/EmptyFieldErrorIndicators.html b/tests/src/com/vaadin/tests/validation/EmptyFieldErrorIndicators.html
deleted file mode 100644
index c8fcb20411..0000000000
--- a/tests/src/com/vaadin/tests/validation/EmptyFieldErrorIndicators.html
+++ /dev/null
@@ -1,247 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8080/run/com.vaadin.tests.validation.EmptyFieldErrorIndicators?restartApplication" />
-<title>EmptyFieldErrorIndicators</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">EmptyFieldErrorIndicators</td></tr>
-</thead><tbody>
-<tr>
-	<td>open</td>
-	<td>/run/com.vaadin.tests.validation.EmptyFieldErrorIndicators?restartApplication</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>initial</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>emptyValidated</td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
-	<td>39,16</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
-	<td>a</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=Value 1</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VFilterSelect[0]/domChild[1]</td>
-	<td>15,16</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VFilterSelect[1]/domChild[1]</td>
-	<td>15,16</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[2]/td</td>
-	<td>56,8</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VOptionGroup[0]/domChild[0]/domChild[0]</td>
-	<td>5,7</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VOptionGroup[1]/domChild[0]/domChild[0]</td>
-	<td>8,11</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
-	<td>62,12</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>enterCharacter</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
-	<td>a</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>select</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VNativeSelect[0]/domChild[0]</td>
-	<td>label=Value 1</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VFilterSelect[1]/domChild[1]</td>
-	<td>13,12</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[2]/td</td>
-	<td>61,14</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VOptionGroup[0]/domChild[0]/domChild[0]</td>
-	<td>7,8</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>mouseClick</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VOptionGroup[1]/domChild[0]/domChild[0]</td>
-	<td>4,3</td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>click</td>
-	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
-	<td></td>
-</tr>
-<tr>
-	<td>waitForVaadin</td>
-	<td></td>
-	<td></td>
-</tr>
-<tr>
-	<td>screenCapture</td>
-	<td></td>
-	<td>filledValidated</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/tests/src/com/vaadin/tests/validation/EmptyFieldErrorIndicators.java b/tests/src/com/vaadin/tests/validation/EmptyFieldErrorIndicators.java
deleted file mode 100644
index b1d6a8f068..0000000000
--- a/tests/src/com/vaadin/tests/validation/EmptyFieldErrorIndicators.java
+++ /dev/null
@@ -1,146 +0,0 @@
-package com.vaadin.tests.validation;
-
-import java.util.Date;
-
-import com.vaadin.data.Validator.InvalidValueException;
-import com.vaadin.data.validator.AbstractValidator;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.Field;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.NativeSelect;
-import com.vaadin.ui.OptionGroup;
-import com.vaadin.ui.Panel;
-import com.vaadin.ui.Select;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.themes.Reindeer;
-
-public class EmptyFieldErrorIndicators extends TestBase {
-
-    @Override
-    protected void setup() {
-        getLayout().setSizeFull();
-
-        HorizontalLayout hl = new HorizontalLayout();
-        hl.setSizeFull();
-        hl.setSpacing(true);
-
-        ComponentContainer part1 = createPart(
-                "Empty required fields validation", true, false);
-        part1.setDebugId("emptyFieldPart");
-        hl.addComponent(part1);
-
-        ComponentContainer part2 = createPart(
-                "Empty required fields with failing validator", true, true);
-        part1.setDebugId("validatedFieldPart");
-        hl.addComponent(part2);
-
-        Panel panel = new Panel();
-        panel.setSizeFull();
-        panel.setStyleName(Reindeer.PANEL_LIGHT);
-        panel.addComponent(hl);
-        panel.setScrollable(true);
-        addComponent(panel);
-    }
-
-    private ComponentContainer createPart(String caption, boolean required,
-            boolean failValidator) {
-        VerticalLayout part = new VerticalLayout();
-        part.setMargin(true);
-
-        final Form form = createForm(required, failValidator);
-        part.addComponent(form);
-
-        Button validate = new Button("Validate fields");
-        validate.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                try {
-                    form.validate();
-                } catch (InvalidValueException e) {
-                }
-            }
-        });
-        part.addComponent(validate);
-
-        Panel panel = new Panel(caption, part);
-        panel.setHeight("100%");
-        return panel;
-    }
-
-    private Form createForm(final boolean required, final boolean failValidator) {
-        // hand-crafted form, not using form field factory
-        final Form form = new Form() {
-            @Override
-            public void addField(Object propertyId, Field field) {
-                super.addField(propertyId, field);
-                field.setRequired(required);
-                field.setRequiredError("Missing required value!");
-                if (failValidator && !(field instanceof Button)) {
-                    field.addValidator(new AbstractValidator("Validation error") {
-                        public boolean isValid(Object value) {
-                            return false;
-                        }
-                    });
-                }
-            }
-        };
-
-        form.addField("Field", new TextField("Text"));
-        form.addField("Date", new DateField("Date"));
-        // not good for automated testing with screenshots when null
-        // form.addField("Inline Date", new InlineDateField("Date"));
-        // same as basic DateField
-        // form.addField("Popup Date", new PopupDateField("Date"));
-        Button setDateButton = new Button("Set date");
-        form.addField("Set Date", setDateButton);
-        setDateButton.addListener(new ClickListener() {
-            public void buttonClick(ClickEvent event) {
-                form.getField("Date").setValue(new Date(0));
-            }
-        });
-
-        NativeSelect nativeSelect = new NativeSelect("NativeSelect");
-        form.addField("Native Select", nativeSelect);
-        nativeSelect.addItem("Value 1");
-
-        // in #4103, the Select component was behaving differently from others
-        form.addField("Select", new Select("Select"));
-
-        Select select2 = new Select("Select 2");
-        select2.addItem("Value 1");
-        form.addField("Select 2", select2);
-
-        OptionGroup optionGroup = new OptionGroup("OptionGroup");
-        optionGroup.setMultiSelect(false);
-        optionGroup.addItem("Option 1");
-        optionGroup.addItem("Option 2");
-        form.addField("Option Group 1", optionGroup);
-
-        OptionGroup optionGroup2 = new OptionGroup("OptionGroup");
-        optionGroup2.setMultiSelect(true);
-        optionGroup2.addItem("Option 1");
-        optionGroup2.addItem("Option 2");
-        form.addField("Option Group 2", optionGroup2);
-
-        // TODO could add more different fields
-
-        return form;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "Fields on a form should not show the error indicator if required and empty";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 4013;
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/validation/RequiredErrorMessage.java b/tests/src/com/vaadin/tests/validation/RequiredErrorMessage.java
deleted file mode 100644
index 7f5048bd80..0000000000
--- a/tests/src/com/vaadin/tests/validation/RequiredErrorMessage.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vaadin.tests.validation;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
-
-public class RequiredErrorMessage extends TestBase {
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2442;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "This test verifies that the tooltip for a required field contains the requiredError message if such has been given. The tooltip for the first field should contain a message, the second field has no required error message set";
-    }
-
-    @Override
-    public void setup() {
-
-        final Window main = new Window(getClass().getName());
-        setMainWindow(main);
-
-        final Form form = new Form(new VerticalLayout());
-        final TextField requiredFieldWithError = new TextField(
-                "Field with requiredError");
-        requiredFieldWithError.setRequired(true);
-        requiredFieldWithError
-                .setRequiredError("Error message for required field");
-        form.addField("field1", requiredFieldWithError);
-
-        final TextField requiredFieldNoError = new TextField(
-                "Field without requiredError");
-        requiredFieldNoError.setRequired(true);
-        form.addField("field2", requiredFieldNoError);
-
-        final TextField requiredFieldDescriptionAndError = new TextField(
-                "Field with requiredError and description");
-        requiredFieldDescriptionAndError.setRequired(true);
-        requiredFieldDescriptionAndError
-                .setRequiredError("Error message for required field");
-        requiredFieldDescriptionAndError
-                .setDescription("Description message for the field");
-        form.addField("field3", requiredFieldDescriptionAndError);
-
-        main.addComponent(form);
-    }
-
-}
diff --git a/tests/src/com/vaadin/tests/validation/RequiredIndicatorForReadOnly.java b/tests/src/com/vaadin/tests/validation/RequiredIndicatorForReadOnly.java
deleted file mode 100644
index 6e806b60f4..0000000000
--- a/tests/src/com/vaadin/tests/validation/RequiredIndicatorForReadOnly.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.vaadin.tests.validation;
-
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.TextField;
-
-public class RequiredIndicatorForReadOnly extends TestBase {
-
-    @Override
-    protected String getDescription() {
-        return "Required flags should not be visible when a component is in read-only mode or inside a read-only form";
-    }
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 2465;
-    }
-
-    @Override
-    protected void setup() {
-        TextField tf = new TextField("A read only field");
-        tf.setReadOnly(true);
-        tf.setRequired(true);
-        addComponent(tf);
-
-        Form f = new Form();
-        TextField tf2 = new TextField("A field in a read only form");
-        tf2.setRequired(true);
-        f.addField("Field-1", tf2);
-        f.setReadOnly(true);
-        addComponent(f);
-    }
-}
diff --git a/tests/src/com/vaadin/tests/validation/TestReadOnlyValidation.java b/tests/src/com/vaadin/tests/validation/TestReadOnlyValidation.java
deleted file mode 100644
index 2765bf6b13..0000000000
--- a/tests/src/com/vaadin/tests/validation/TestReadOnlyValidation.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.vaadin.tests.validation;
-
-import org.junit.Test;
-
-import com.vaadin.data.validator.IntegerValidator;
-import com.vaadin.ui.TextField;
-
-public class TestReadOnlyValidation {
-
-    @Test
-    public void testIntegerValidation() {
-        TextField field = new TextField();
-        field.addValidator(new IntegerValidator("Enter a Valid Number"));
-        field.setValue(Integer.valueOf(10));
-        field.validate();
-    }
-}
diff --git a/tests/src/com/vaadin/tests/validation/TestValidators.java b/tests/src/com/vaadin/tests/validation/TestValidators.java
deleted file mode 100644
index 5264d47c9d..0000000000
--- a/tests/src/com/vaadin/tests/validation/TestValidators.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package com.vaadin.tests.validation;
-
-import com.vaadin.data.Validator;
-import com.vaadin.data.validator.AbstractStringValidator;
-import com.vaadin.data.validator.CompositeValidator;
-import com.vaadin.data.validator.DoubleValidator;
-import com.vaadin.data.validator.EmailValidator;
-import com.vaadin.data.validator.IntegerValidator;
-import com.vaadin.data.validator.RegexpValidator;
-import com.vaadin.data.validator.StringLengthValidator;
-import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.Button.ClickListener;
-import com.vaadin.ui.Form;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window.Notification;
-
-public class TestValidators extends TestBase {
-
-    @Override
-    protected Integer getTicketNumber() {
-        return 680;
-    }
-
-    @Override
-    protected String getDescription() {
-        return "This test verifies that various validators work correctly";
-    }
-
-    @Override
-    public void setup() {
-        final Form form = new Form(new VerticalLayout());
-
-        // simple validators
-
-        TextField tf = new TextField("A field, must contain 1-2 chars");
-        tf.addValidator(new StringLengthValidator("Invalid length", 1, 2, false));
-        tf.setRequired(true);
-        tf.setValue("ab");
-        form.addField("a", tf);
-
-        tf = new TextField("A field, must contain an integer");
-        tf.addValidator(new IntegerValidator("Invalid integer {0}"));
-        tf.setRequired(true);
-        tf.setValue("123");
-        form.addField("b", tf);
-
-        tf = new TextField("A field, must contain an integer or be empty");
-        tf.addValidator(new IntegerValidator("Invalid integer {0}"));
-        tf.setValue("-321");
-        form.addField("c", tf);
-
-        tf = new TextField(
-                "A field, must contain a floating point number or be empty");
-        tf.addValidator(new DoubleValidator("Invalid double {0}"));
-        tf.setValue("-123.45e6");
-        form.addField("d", tf);
-
-        tf = new TextField(
-                "A field, must contain an e-mail address or be empty");
-        tf.addValidator(new EmailValidator("Invalid e-mail address {0}"));
-        tf.setValue("a.b@example.com");
-        form.addField("e", tf);
-
-        // regular expressions
-
-        tf = new TextField("A field, must match the regular expression a.*b.*c");
-        tf.addValidator(new RegexpValidator("a.*b.*c",
-                "{0} does not match the regular expression"));
-        tf.setValue("aagsabeqgc");
-        form.addField("f", tf);
-
-        tf = new TextField(
-                "A field, must contain the regular expression a.*b.*c");
-        tf.addValidator(new RegexpValidator("a.*b.*c", false,
-                "{0} does not contain the regular expression"));
-        tf.setValue("aagsabeqgc");
-        form.addField("g", tf);
-
-        tf = new TextField(
-                "A field, must match the regular expression ^a.*b.*c$");
-        tf.addValidator(new RegexpValidator("^a.*b.*c$", false,
-                "{0} does not match the regular expression with ^ and $"));
-        tf.setValue("aagsabeqgc");
-        form.addField("h", tf);
-
-        tf = new TextField(
-                "A field, must contain the regular expression ^a.*b.*c$");
-        tf.addValidator(new RegexpValidator("^a.*b.*c$", false,
-                "{0} does not contain the regular expression with ^ and $"));
-        tf.setValue("aagsabeqgc");
-        form.addField("i", tf);
-
-        // TODO CompositeValidator
-        tf = new TextField(
-                "A field, must be a floating point number with 4-5 chars");
-        CompositeValidator cv = new CompositeValidator(
-                CompositeValidator.MODE_AND,
-                "The field must contain a floating point number with 4-5 characters");
-        cv.addValidator(new StringLengthValidator(
-                "String length of '{0}' should be 4-5 characters", 4, 5, false));
-        cv.addValidator(new DoubleValidator(
-                "{0} must be a floating point number"));
-        tf.addValidator(cv);
-        tf.setValue("12.34");
-        form.addField("j", tf);
-
-        tf = new TextField(
-                "A field, must be a floating point number or 4-5 chars");
-        cv = new CompositeValidator(CompositeValidator.MODE_OR,
-                "The field must contain a floating point  or with 4-5 characters");
-        cv.addValidator(new StringLengthValidator(
-                "String length of '{0}' should be 4-5 characters", 4, 5, false));
-        cv.addValidator(new DoubleValidator(
-                "{0} must be a floating point number"));
-        tf.addValidator(cv);
-        tf.setValue("12.34g");
-        form.addField("jb", tf);
-
-        // Postal code that must be 5 digits (10000-99999).
-        tf = new TextField("Postal Code");
-        tf.setColumns(5);
-
-        // Create the validator - this would be even easier with RegexpValidator
-        Validator postalCodeValidator = new AbstractStringValidator(
-                "Postal code must be a number 10000-99999.") {
-            @Override
-            protected boolean isValidString(String value) {
-                return value.matches("[1-9][0-9]{4}");
-            }
-        };
-        tf.addValidator(postalCodeValidator);
-        tf.setValue("12345");
-        form.addField("k", tf);
-
-        Button b = new Button("Commit", new ClickListener() {
-
-            public void buttonClick(ClickEvent event) {
-                try {
-                    form.commit();
-                    if (form.isValid()) {
-                        getMainWindow().showNotification(
-                                "OK! Form validated and no error was thrown",
-                                Notification.TYPE_HUMANIZED_MESSAGE);
-                    } else {
-                        getMainWindow().showNotification(
-                                "Form is invalid but no exception was thrown",
-                                Notification.TYPE_ERROR_MESSAGE);
-                    }
-                } catch (Exception e) {
-                    if (form.isValid()) {
-                        getMainWindow().showNotification(
-                                "Form is valid but an exception was thrown",
-                                Notification.TYPE_ERROR_MESSAGE);
-                    } else {
-                        getMainWindow().showNotification(
-                                "OK! Error was thrown for an invalid input",
-                                Notification.TYPE_HUMANIZED_MESSAGE);
-
-                    }
-                }
-            }
-
-        });
-
-        addComponent(form);
-        addComponent(b);
-    }
-}
diff --git a/tests/test.xml b/tests/test.xml
index 2b52c74af3..4addbf3b4a 100644
--- a/tests/test.xml
+++ b/tests/test.xml
@@ -42,10 +42,10 @@
 		<fileset dir="${com.vaadin.testbench.lib.dir}" includes="**/*.jar" />
 	</path>
 
-	<!-- fileset containing all tests to run -->
+	<!-- fileset containing all TestBench tests to run -->
 	<fileset dir=".." id="html-test-files">
 		<include name="tests/**/**.html" />
-		<include name="src/com/vaadin/tests/**/**.html" />
+		<include name="testbench/com/vaadin/tests/**/**.html" />
 		<exclude name="tests/integration-testscripts/**" />
 	</fileset>
 
@@ -76,7 +76,7 @@
 
 
 	<!-- ================================================================== -->
-	<!-- Toolkit Server Management                                          -->
+	<!-- Vaadin Server Management                                           -->
 	<!-- ================================================================== -->
 
 	<target name="server-start">
@@ -90,7 +90,7 @@
 		<echo>Testing area: ${testing.testarea}</echo>
 
 		<exec executable="python" searchpath="true" dir=".." resultproperty="server.start.result">
-			<arg value="build/testing/toolkit-server.py" />
+			<arg value="build/testing/vaadin-server.py" />
 			<arg value="start" />
 			<arg value="${package.name}" />
 			<arg value="${package.filename}" />
@@ -105,7 +105,7 @@
 
 	<target name="server-stop">
 		<exec executable="python" dir=".." searchpath="true" resultproperty="server.stop.result">
-			<arg value="build/testing/toolkit-server.py" />
+			<arg value="build/testing/vaadin-server.py" />
 			<arg value="stop" />
 		</exec>
 	</target>
diff --git a/tests/testbench/com/vaadin/tests/Components.java b/tests/testbench/com/vaadin/tests/Components.java
new file mode 100644
index 0000000000..6987c04a54
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/Components.java
@@ -0,0 +1,269 @@
+package com.vaadin.tests;
+
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import com.vaadin.Application;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.DefaultItemSorter;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.event.ItemClickEvent;
+import com.vaadin.event.ItemClickEvent.ItemClickListener;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.tests.components.AbstractComponentTest;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Tree.ItemStyleGenerator;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Components extends Application {
+
+    private static final Object CAPTION = "c";
+    private Map<Class<? extends AbstractComponentTest<?>>, String> tests = new HashMap<Class<? extends AbstractComponentTest<?>>, String>();
+    private Tree naviTree;
+    private HorizontalSplitPanel sp;
+    private Window mainWindow;
+    private final Embedded applicationEmbedder = new Embedded();
+    private String baseUrl;
+    private List<Class<? extends Component>> componentsWithoutTests = new ArrayList<Class<? extends Component>>();
+
+    {
+        for (Class<? extends AbstractComponentTest<?>> c : VaadinClasses
+                .getBasicComponentTests()) {
+            String testClass = c.getSimpleName();
+            tests.put(c, testClass);
+        }
+
+        List<Class<? extends Component>> componentsWithoutTest = VaadinClasses
+                .getComponents();
+        Set<String> availableTests = new HashSet<String>();
+        for (String testName : tests.values()) {
+            availableTests.add(testName);
+        }
+
+        for (Class<? extends Component> component : componentsWithoutTest) {
+            String baseName = component.getSimpleName();
+            if (availableTests.contains(baseName + "es")) {
+                continue;
+            }
+            if (availableTests.contains(baseName + "es2")) {
+                continue;
+            }
+            if (availableTests.contains(baseName + "s2")) {
+                continue;
+            }
+            if (availableTests.contains(baseName + "s")) {
+                continue;
+            }
+            if (availableTests.contains(baseName + "Test")) {
+                continue;
+            }
+
+            componentsWithoutTests.add(component);
+        }
+
+    }
+
+    class MissingTest extends AbstractComponentTest<AbstractComponent> {
+        @Override
+        protected Class<AbstractComponent> getTestClass() {
+            return null;
+        }
+    }
+
+    @Override
+    public void init() {
+        mainWindow = new Window();
+        setTheme("tests-components");
+        mainWindow.getContent().setSizeFull();
+        setMainWindow(mainWindow);
+        sp = new HorizontalSplitPanel();
+        sp.setSizeFull();
+        VerticalLayout naviLayout = new VerticalLayout();
+        naviLayout
+                .addComponent(new Label(
+                        "Click to open a test case.<br/>Right click to open test in a new window<br/><br/>",
+                        Label.CONTENT_XHTML));
+        naviLayout.addComponent(createMenu());
+        naviLayout.addComponent(createMissingTestsList());
+
+        sp.setFirstComponent(naviLayout);
+        sp.setSplitPosition(250, Sizeable.UNITS_PIXELS);
+        VerticalLayout embeddingLayout = new VerticalLayout();
+        embeddingLayout.setSizeFull();
+        embeddingLayout
+                .addComponent(new Label(
+                        "<b>Do not use the embedded version for creating automated tests. Open the test in a new window before recording.</b><br/>",
+                        Label.CONTENT_XHTML));
+        applicationEmbedder.setSizeFull();
+        embeddingLayout.addComponent(applicationEmbedder);
+        embeddingLayout.setExpandRatio(applicationEmbedder, 1);
+        sp.setSecondComponent(embeddingLayout);
+        mainWindow.addComponent(sp);
+
+        applicationEmbedder.setType(Embedded.TYPE_BROWSER);
+        baseUrl = getURL().toString().replace(getClass().getName(), "")
+                .replaceAll("//$", "/");
+    }
+
+    private Component createMissingTestsList() {
+        String missingTests = "";
+        for (Class<? extends Component> component : componentsWithoutTests) {
+            String cls = "missing";
+            if (component.getAnnotation(Deprecated.class) != null) {
+                cls = "missing-deprecated";
+            }
+            missingTests += "<font class=\"" + cls + "\">"
+                    + component.getSimpleName() + "</font><br/>";
+        }
+        return new Label("<b>Components without a test:</B><br/>"
+                + missingTests, Label.CONTENT_XHTML);
+    }
+
+    private Component createMenu() {
+        naviTree = new Tree();
+        naviTree.setItemStyleGenerator(new ItemStyleGenerator() {
+
+            public String getStyle(Object itemId) {
+                Class<?> cls = (Class<?>) itemId;
+                if (!isAbstract(cls)) {
+                    return "blue";
+                }
+                return null;
+            }
+        });
+        HierarchicalContainer hc = new HierarchicalContainer();
+        naviTree.setContainerDataSource(hc);
+        DefaultItemSorter sorter = new DefaultItemSorter() {
+            @SuppressWarnings("rawtypes")
+            @Override
+            public int compare(Object o1, Object o2) {
+                if (o1 instanceof Class && o2 instanceof Class && o1 != null
+                        && o2 != null) {
+                    Class<?> c1 = (Class) o1;
+                    Class<?> c2 = (Class) o2;
+                    boolean a1 = isAbstract(c1);
+                    boolean a2 = isAbstract(c2);
+
+                    if (a1 && !a2) {
+                        return 1;
+                    } else if (!a1 && a2) {
+                        return -1;
+                    }
+
+                }
+                return super.compare(o1, o2);
+            }
+        };
+        hc.setItemSorter(sorter);
+        naviTree.addContainerProperty(CAPTION, String.class, "");
+        naviTree.setItemCaptionPropertyId(CAPTION);
+        for (Class<? extends AbstractComponentTest<?>> cls : tests.keySet()) {
+            addTreeItem(cls);
+        }
+        hc.sort(new Object[] { CAPTION }, new boolean[] { true });
+        naviTree.setSelectable(false);
+        for (Object o : naviTree.rootItemIds()) {
+            expandAndSetChildrenAllowed(o);
+        }
+
+        naviTree.addListener(new ItemClickListener() {
+
+            public void itemClick(ItemClickEvent event) {
+                Class<?> cls = (Class<?>) event.getItemId();
+                if (!isAbstract(cls)) {
+                    String url = baseUrl + cls.getName()
+                            + "?restartApplication";
+                    if (event.getButton() == ItemClickEvent.BUTTON_LEFT) {
+                        openEmbedded(url);
+                        naviTree.setValue(event.getItemId());
+                    } else if (event.getButton() == ItemClickEvent.BUTTON_RIGHT) {
+                        openInNewTab(url);
+                    }
+                }
+            }
+
+        });
+        return naviTree;
+    }
+
+    protected void openInNewTab(String url) {
+        getMainWindow().open(new ExternalResource(url), "_blank");
+    }
+
+    protected void openEmbedded(String url) {
+        applicationEmbedder.setSource(new ExternalResource(url));
+    }
+
+    private void expandAndSetChildrenAllowed(Object o) {
+        Collection<?> children = naviTree.getChildren(o);
+        if (children == null || children.size() == 0) {
+            naviTree.setChildrenAllowed(o, false);
+        } else {
+            naviTree.expandItem(o);
+            for (Object c : children) {
+                expandAndSetChildrenAllowed(c);
+            }
+        }
+
+    }
+
+    protected boolean isAbstract(Class<?> cls) {
+        return Modifier.isAbstract(cls.getModifiers());
+    }
+
+    @SuppressWarnings("unchecked")
+    private void addTreeItem(Class<? extends AbstractComponentTest<?>> cls) {
+        String name = tests.get(cls);
+        if (name == null) {
+            name = cls.getSimpleName();
+        }
+
+        Class<? extends AbstractComponentTest<?>> superClass = (Class<? extends AbstractComponentTest<?>>) cls
+                .getSuperclass();
+
+        // This cast is needed only to make compilation through Ant work ..
+        if (((Class<?>) cls) != AbstractComponentTest.class) {
+            addTreeItem(superClass);
+        }
+        if (naviTree.containsId(cls)) {
+            return;
+        }
+
+        Item i = naviTree.addItem(cls);
+        i.getItemProperty(CAPTION).setValue(name);
+        naviTree.setParent(cls, superClass);
+    }
+
+    protected Component createTestComponent(
+            Class<? extends AbstractComponentTest<?>> cls) {
+        try {
+            AbstractComponentTest<?> t = cls.newInstance();
+            t.init();
+            ComponentContainer c = t.getMainWindow().getContent();
+            t.getMainWindow().setContent(null);
+            return c;
+        } catch (InstantiationException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/CustomLayoutDemo.java b/tests/testbench/com/vaadin/tests/CustomLayoutDemo.java
new file mode 100644
index 0000000000..c81491a8be
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/CustomLayoutDemo.java
@@ -0,0 +1,140 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component.Event;
+import com.vaadin.ui.Component.Listener;
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.PasswordField;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Window;
+
+/**
+ * This example demonstrates custom layout. All components created here are
+ * placed using custom.html file. Custom layouts may be created with any web
+ * designer tool such as Dreamweaver. To place Vaadin components into html page,
+ * use divs with location tag as an identifier for Vaadin components, see html
+ * page (themes/example/layout/custom.html) and source code below. Body panel
+ * contents are changed when menu items are clicked. Contents are HTML pages
+ * located at themes/example/layout directory.
+ * 
+ * @author IT Mill Ltd.
+ * @since 4.0.0
+ * 
+ */
+public class CustomLayoutDemo extends com.vaadin.Application implements
+        Listener {
+
+    private CustomLayout mainLayout = null;
+
+    private final Panel bodyPanel = new Panel();
+
+    private final TextField username = new TextField("Username");
+
+    private final PasswordField loginPwd = new PasswordField("Password");
+
+    private final Button loginButton = new Button("Login", this, "loginClicked");
+
+    private final Tree menu = new Tree();
+
+    /**
+     * Initialize Application. Demo components are added to main window.
+     */
+    @Override
+    public void init() {
+        final Window mainWindow = new Window("CustomLayout demo");
+        setMainWindow(mainWindow);
+
+        // set the application to use example -theme
+        setTheme("tests-components");
+
+        // Create custom layout, themes/example/layout/mainLayout.html
+        mainLayout = new CustomLayout("mainLayout");
+        // wrap custom layout inside a panel
+        final Panel customLayoutPanel = new Panel(
+                "Panel containing custom layout (mainLayout.html)");
+        customLayoutPanel.addComponent(mainLayout);
+
+        // Login components
+        mainLayout.addComponent(username, "loginUser");
+        mainLayout.addComponent(loginPwd, "loginPassword");
+        mainLayout.addComponent(loginButton, "loginButton");
+
+        // Menu component, when clicked bodyPanel is updated
+        menu.addItem("Welcome");
+        menu.addItem("Products");
+        menu.addItem("Support");
+        menu.addItem("News");
+        menu.addItem("Developers");
+        menu.addItem("Contact");
+        // "this" handles all menu events, e.g. node clicked event
+        menu.addListener(this);
+        // Value changes are immediate
+        menu.setImmediate(true);
+        menu.setNullSelectionAllowed(false);
+        mainLayout.addComponent(menu, "menu");
+
+        // Body component
+        mainLayout.addComponent(bodyPanel, "body");
+
+        // Initial body are comes from Welcome.html
+        setBody("Welcome");
+
+        // Add heading label and custom layout panel to main window
+        mainWindow.addComponent(new Label("<h3>Custom layout demo</h3>",
+                Label.CONTENT_XHTML));
+        mainWindow.addComponent(customLayoutPanel);
+    }
+
+    /**
+     * Login button clicked. Hide login components and replace username
+     * component with "Welcome user Username" message.
+     * 
+     */
+    public void loginClicked() {
+        username.setVisible(false);
+        loginPwd.setVisible(false);
+        if (username.getValue().toString().length() < 1) {
+            username.setValue("Anonymous");
+        }
+        mainLayout.replaceComponent(loginButton, new Label("Welcome user <em>"
+                + username.getValue() + "</em>", Label.CONTENT_XHTML));
+    }
+
+    /**
+     * Set body panel caption, remove all existing components and add given
+     * custom layout in it.
+     * 
+     */
+    public void setBody(String customLayout) {
+        bodyPanel.setCaption(customLayout + ".html");
+        bodyPanel.removeAllComponents();
+        bodyPanel.addComponent(new CustomLayout(customLayout));
+    }
+
+    /**
+     * Handle all menu events. Updates body panel contents if menu item is
+     * clicked.
+     */
+    public void componentEvent(Event event) {
+        // Check if event occured at fsTree component
+        if (event.getSource() == menu) {
+            // Check if event is about changing value
+            if (event.getClass() == Field.ValueChangeEvent.class) {
+                // Update body area with selected item
+                setBody(menu.getValue().toString());
+            }
+            // here we could check for other type of events for tree
+            // component
+        }
+        // here we could check for other component's events
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/FocusingComponents.java b/tests/testbench/com/vaadin/tests/FocusingComponents.java
new file mode 100644
index 0000000000..e74a935830
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/FocusingComponents.java
@@ -0,0 +1,65 @@
+package com.vaadin.tests;
+
+import com.vaadin.ui.AbstractSelect;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.ListSelect;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.OptionGroup;
+import com.vaadin.ui.TextField;
+
+/**
+ * Simple test helper to test Focusable.focus() method.
+ * 
+ */
+public class FocusingComponents extends CustomComponent {
+    GridLayout lo = new GridLayout(2, 1);
+
+    public FocusingComponents() {
+
+        setCompositionRoot(lo);
+        lo.setSpacing(true);
+
+        Focusable f;
+
+        f = new Button();
+
+        addFocusableTest(f);
+        addFocusableTest(new ComboBox());
+        addFocusableTest(new TextField());
+        addFocusableTest(new DateField());
+        addFocusableTest(new NativeSelect());
+        addFocusableTest(new ListSelect());
+        addFocusableTest(new OptionGroup());
+        OptionGroup optionGroup = new OptionGroup();
+        optionGroup.setMultiSelect(true);
+        addFocusableTest(optionGroup);
+
+    }
+
+    private void addFocusableTest(final Focusable f) {
+
+        f.setCaption(f.getClass().getSimpleName());
+        lo.addComponent(f);
+
+        if (f instanceof AbstractSelect) {
+            AbstractSelect s = (AbstractSelect) f;
+            s.addItem("Foo");
+            s.addItem("Bar");
+        }
+
+        Button focus = new Button("focus");
+        focus.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                f.focus();
+            }
+        });
+        lo.addComponent(focus);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/LayoutDemo.java b/tests/testbench/com/vaadin/tests/LayoutDemo.java
new file mode 100644
index 0000000000..a06e7e4da2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/LayoutDemo.java
@@ -0,0 +1,146 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.terminal.ClassResource;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+/**
+ * This example demonstrates layouts. Layouts are populated with sample Vaadin
+ * UI components.
+ * 
+ * @author IT Mill Ltd.
+ * @since 4.0.0
+ * 
+ */
+public class LayoutDemo extends com.vaadin.Application {
+
+    /**
+     * Initialize Application. Demo components are added to main window.
+     */
+    @Override
+    public void init() {
+        final Window mainWindow = new Window("Layout demo");
+        setMainWindow(mainWindow);
+
+        //
+        // Create horizontal ordered layout
+        //
+        final HorizontalLayout layoutA = new HorizontalLayout();
+        // Add 4 panels
+        fillLayout(layoutA, 4);
+
+        //
+        // Create vertical ordered layout
+        //
+        final VerticalLayout layoutB = new VerticalLayout();
+        // Add 4 panels
+        fillLayout(layoutB, 4);
+
+        //
+        // Create grid layout
+        //
+        final GridLayout layoutG = new GridLayout(4, 4);
+        // Add 16 panels components
+        fillLayout(layoutG, 16);
+
+        //
+        // Create grid layout
+        //
+        final GridLayout layoutG2 = new GridLayout(4, 4);
+        // Add 4 panels with absolute coordinates (diagonally)
+        layoutG2.addComponent(getExampleComponent("x=0, y=0"), 0, 0);
+        layoutG2.addComponent(getExampleComponent("x=1, y=1"), 1, 1);
+        layoutG2.addComponent(getExampleComponent("x=2, y=2"), 2, 2);
+        layoutG2.addComponent(getExampleComponent("x=3, y=3"), 3, 3);
+        // Add 4 pictures with absolute coordinates (diagonally)
+        layoutG2.addComponent(getExamplePicture("x=3, y=0"), 3, 0);
+        layoutG2.addComponent(getExamplePicture("x=2, y=1"), 2, 1);
+        layoutG2.addComponent(getExamplePicture("x=1, y=2"), 1, 2);
+        layoutG2.addComponent(getExamplePicture("x=0, y=3"), 0, 3);
+
+        //
+        // Create TabSheet
+        //
+        final TabSheet tabsheet = new TabSheet();
+        tabsheet.setCaption("Tabsheet, above layouts are added to this component");
+        tabsheet.addTab(layoutA, "Horizontal ordered layout", null);
+        tabsheet.addTab(layoutB, "Vertical ordered layout", null);
+        tabsheet.addTab(layoutG, "First grid layout", null);
+        tabsheet.addTab(layoutG2, "Second grid layout", null);
+
+        //
+        // Add demo layouts to main window
+        //
+        mainWindow.addComponent(new Label(
+                "<h3>Horizontal ordered layout</h3>Added four components.",
+                Label.CONTENT_XHTML));
+        mainWindow.addComponent(layoutA);
+        mainWindow.addComponent(new Label(
+                "<br /><h3>Vertical ordered layout</h3>Added four components.",
+                Label.CONTENT_XHTML));
+        mainWindow.addComponent(layoutB);
+        mainWindow.addComponent(new Label(
+                "<br /><h3>Grid Layout (4 x 4)</h3>Added 16 components.",
+                Label.CONTENT_XHTML));
+        mainWindow.addComponent(layoutG);
+        mainWindow
+                .addComponent(new Label("<br /><h3>Grid Layout (4 x 4)</h3>"
+                        + "Added four panels and four embedded components "
+                        + "diagonally with absolute coordinates.",
+                        Label.CONTENT_XHTML));
+        mainWindow.addComponent(layoutG2);
+        mainWindow.addComponent(new Label(
+                "<br /><h3>TabSheet</h3>Added above layouts as tabs.",
+                Label.CONTENT_XHTML));
+        mainWindow.addComponent(tabsheet);
+
+    }
+
+    private Component getExamplePicture(String caption) {
+        // loads image from package com.vaadin.demo
+        final ClassResource cr = new ClassResource("m-bullet-blue.gif", this);
+        final Embedded em = new Embedded("Embedded " + caption, cr);
+        em.setWidth("170px");
+        return em;
+    }
+
+    private Component getExampleComponent(String caption) {
+        final Panel panel = new Panel();
+        panel.setCaption("Panel component " + caption);
+        panel.addComponent(new Label(
+                "Panel is a container for other components, by default it draws a frame around it's "
+                        + "extremities and may have a caption to clarify the nature of the contained components' purpose."
+                        + " Panel contains an layout where the actual contained components are added, "
+                        + "this layout may be switched on the fly.",
+                Label.CONTENT_XHTML));
+        panel.setWidth("222px");
+        return panel;
+    }
+
+    /**
+     * Add multiple demo component to given layout.
+     * 
+     * @param layout
+     *            where components are added
+     * @param numberOfComponents
+     *            to add
+     */
+    private void fillLayout(Layout layout, int numberOfComponents) {
+        for (int i = 1; i <= numberOfComponents; i++) {
+            layout.addComponent(getExampleComponent(Integer.toString(i)));
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/ListenerOrder.java b/tests/testbench/com/vaadin/tests/ListenerOrder.java
new file mode 100644
index 0000000000..c1d6245222
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/ListenerOrder.java
@@ -0,0 +1,163 @@
+package com.vaadin.tests;
+
+import java.util.HashMap;
+import java.util.Iterator;
+
+import com.vaadin.data.Container.ItemSetChangeEvent;
+import com.vaadin.data.Container.ItemSetChangeListener;
+import com.vaadin.data.Container.PropertySetChangeEvent;
+import com.vaadin.data.Container.PropertySetChangeListener;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.Window;
+
+public class ListenerOrder extends com.vaadin.Application implements
+        Button.ClickListener, PropertySetChangeListener, ItemSetChangeListener,
+        ValueChangeListener {
+
+    Button b1;
+
+    Select s1;
+
+    HashMap<String, Integer> buttonListeners = new HashMap<String, Integer>();
+
+    @Override
+    public void init() {
+        createNewView();
+    }
+
+    public void createNewView() {
+        final Window main = new Window("Test window");
+        setMainWindow(main);
+
+        main.removeAllComponents();
+        main.addComponent(new Label("Testing multiple listeners."));
+
+        //
+        // Button listeners
+        //
+        b1 = new Button("Button 1");
+        main.addComponent(b1);
+
+        MyClickListener mutualListener = new MyClickListener("mutual1");
+
+        addListeners(b1, 1);
+        b1.addListener(mutualListener);
+        b1.addListener(mutualListener);
+        b1.addListener((Button.ClickListener) this);
+        b1.addListener(mutualListener);
+        Button.ClickListener b1Listener = addListeners(b1, 3);
+        b1.addListener(mutualListener);
+        b1.addListener((Button.ClickListener) this);
+        b1.addListener((ValueChangeListener) this);
+        b1.addListener(mutualListener);
+        b1.removeListener(b1Listener);
+        // remove non-existing listener
+        b1.removeListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+            }
+        });
+
+        //
+        // Select listeners
+        //
+        s1 = new Select("Select 1");
+        main.addComponent(s1);
+        s1.setImmediate(true);
+        s1.setNewItemsAllowed(true);
+
+        s1.addItem("first");
+        s1.addItem("first");
+        s1.addItem("first");
+        s1.addItem("second");
+        s1.addItem("third");
+        s1.addItem("fourth");
+        s1.addListener((ValueChangeListener) this);
+        s1.addListener((PropertySetChangeListener) this);
+        s1.addListener((ItemSetChangeListener) this);
+        s1.addListener((ItemSetChangeListener) this);
+        s1.addListener((PropertySetChangeListener) this);
+        s1.addListener((PropertySetChangeListener) this);
+        s1.addListener((ItemSetChangeListener) this);
+        s1.addListener((ValueChangeListener) this);
+        s1.addListener((ValueChangeListener) this);
+
+        Item i = s1.getItem("second");
+        for (Iterator<?> it = i.getItemPropertyIds().iterator(); it.hasNext();) {
+            Object o = it.next();
+            System.out.println("[" + o + "]");
+        }
+
+    }
+
+    private Button.ClickListener addListeners(Button b, int count) {
+        String name = b.getCaption();
+        // System.out.println("Adding listener for " + name);
+        Button.ClickListener listener = null;
+        for (int i = 0; i < count; i++) {
+            listener = new MyClickListener(name);
+            b.addListener(listener);
+        }
+        // return last listener added
+        return listener;
+    }
+
+    public void buttonClick(ClickEvent event) {
+        System.out.println("ClickEvent from Test1");
+        s1.addItem("new item " + System.currentTimeMillis());
+    }
+
+    public class MyClickListener implements Button.ClickListener {
+        String name = "";
+        int count = 0;
+
+        public MyClickListener(String name) {
+            Integer count = null;
+            try {
+                count = buttonListeners.get(name);
+                count = new Integer(count.intValue() + 1);
+                buttonListeners.put(name, count);
+            } catch (Exception e) {
+                count = new Integer(1);
+                buttonListeners.put(name, count);
+            }
+
+            this.name = name;
+            this.count = count.intValue();
+
+            System.out.println("Created listener " + name + ", id=" + count);
+        }
+
+        public void buttonClick(ClickEvent event) {
+            String msg = "ClickEvent from MyClickListener " + name + ", id="
+                    + count;
+            System.out.println(msg);
+            getMainWindow().showNotification(msg);
+        }
+
+    }
+
+    public void containerPropertySetChange(PropertySetChangeEvent event) {
+        String msg = "containerPropertySetChange from " + this;
+        System.out.println(msg);
+        getMainWindow().showNotification(msg);
+    }
+
+    public void containerItemSetChange(ItemSetChangeEvent event) {
+        String msg = "containerItemSetChange from " + this;
+        System.out.println(msg);
+        getMainWindow().showNotification(msg);
+    }
+
+    public void valueChange(ValueChangeEvent event) {
+        String msg = "valueChange from " + this;
+        System.out.println(msg);
+        getMainWindow().showNotification(msg);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/ModalWindow.java b/tests/testbench/com/vaadin/tests/ModalWindow.java
new file mode 100644
index 0000000000..4ace9f889e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/ModalWindow.java
@@ -0,0 +1,84 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+/**
+ * Simple program that demonstrates "modal windows" that block all access other
+ * windows.
+ * 
+ * @author IT Mill Ltd.
+ * @since 4.0.1
+ * @see com.vaadin.Application
+ * @see com.vaadin.ui.Window
+ * @see com.vaadin.ui.Label
+ */
+public class ModalWindow extends com.vaadin.Application implements
+        ClickListener {
+
+    private Window test;
+    private Button reopen;
+
+    @Override
+    public void init() {
+
+        // Create main window
+        final Window main = new Window("ModalWindow demo");
+        setMainWindow(main);
+        main.addComponent(new Label("ModalWindow demo"));
+
+        // Main window textfield
+        final TextField f = new TextField();
+        f.setTabIndex(1);
+        main.addComponent(f);
+
+        // Main window button
+        final Button b = new Button("Test Button in main window");
+        b.addListener(this);
+        b.setTabIndex(2);
+        main.addComponent(b);
+
+        reopen = new Button("Open modal subwindow");
+        reopen.addListener(this);
+        reopen.setTabIndex(3);
+        main.addComponent(reopen);
+
+    }
+
+    public void buttonClick(ClickEvent event) {
+        if (event.getButton() == reopen) {
+            openSubWindow();
+        }
+        getMainWindow().addComponent(
+                new Label("Button click: " + event.getButton().getCaption()));
+    }
+
+    private void openSubWindow() {
+        // Modal window
+        test = new Window("Modal window");
+        test.setModal(true);
+        getMainWindow().addWindow(test);
+        test.addComponent(new Label(
+                "You have to close this window before accessing others."));
+
+        // Textfield for modal window
+        final TextField f = new TextField();
+        f.setTabIndex(4);
+        test.addComponent(f);
+        f.focus();
+
+        // Modal window button
+        final Button b = new Button("Test Button in modal window");
+        b.setTabIndex(5);
+        b.addListener(this);
+        test.addComponent(b);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/NativeWindowing.java b/tests/testbench/com/vaadin/tests/NativeWindowing.java
new file mode 100644
index 0000000000..877aeceae1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/NativeWindowing.java
@@ -0,0 +1,127 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class NativeWindowing extends Application {
+
+    Window main = new Window("Windowing test");
+
+    @Override
+    public void init() {
+
+        setMainWindow(main);
+
+        main.addComponent(new Button("Add new subwindow",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        final Window w = new Window("sw "
+                                + System.currentTimeMillis());
+                        main.addWindow(w);
+                        w.setPositionX(100);
+                        w.setPositionY(100);
+                        w.setWidth("200px");
+                        w.setHeight("200px");
+
+                        w.setWidth("100px");
+                        w.setHeight("400px");
+
+                        final Button closebutton = new Button("Close "
+                                + w.getCaption(), new Button.ClickListener() {
+                            public void buttonClick(ClickEvent event) {
+                                main.removeWindow(w);
+                            }
+
+                        });
+                        w.addComponent(closebutton);
+
+                        w.addComponent(new Label(
+                                "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>",
+                                Label.CONTENT_XHTML));
+
+                    }
+                }));
+
+        main.addComponent(new Button(
+                "Open a currently uncreated application level window",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        try {
+                            main.open(
+                                    new com.vaadin.terminal.ExternalResource(
+                                            new URL(
+                                                    getURL(),
+                                                    "mainwin-"
+                                                            + System.currentTimeMillis()
+                                                            + "/")), null);
+                        } catch (final MalformedURLException e) {
+                        }
+                    }
+                }));
+
+        main.addComponent(new Button(
+                "Commit (saves window state: size, place, scrollpos)"));
+    }
+
+    @Override
+    public Window getWindow(String name) {
+
+        final Window w = super.getWindow(name);
+        if (w != null) {
+            return w;
+        }
+
+        if (name != null && name.startsWith("mainwin-")) {
+            final String postfix = name.substring("mainwin-".length());
+            final Window ww = new Window("Window: " + postfix);
+            ww.setName(name);
+            ww.addComponent(new Label(
+                    "This is a application-level window opened with name: "
+                            + name));
+            ww.addComponent(new Button("Click me", new Button.ClickListener() {
+                int state = 0;
+
+                public void buttonClick(ClickEvent event) {
+                    ww.addComponent(new Label("Button clicked " + (++state)
+                            + " times"));
+                }
+            }));
+            addWindow(ww);
+            return ww;
+        }
+
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/OrderedLayoutSwapComponents.java b/tests/testbench/com/vaadin/tests/OrderedLayoutSwapComponents.java
new file mode 100644
index 0000000000..34ec439010
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/OrderedLayoutSwapComponents.java
@@ -0,0 +1,110 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.util.ArrayList;
+
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * 
+ * This Component contains some simple test to see that component updates its
+ * contents propertly.
+ * 
+ * @author IT Mill Ltd.
+ */
+public class OrderedLayoutSwapComponents extends CustomComponent {
+
+    private final AbstractOrderedLayout main;
+
+    ArrayList<MyComponent> order = new ArrayList<MyComponent>();
+
+    public OrderedLayoutSwapComponents() {
+
+        main = new VerticalLayout();
+        // main.setSizeFull();
+        setCompositionRoot(main);
+        createNewView();
+    }
+
+    public void createNewView() {
+        main.removeAllComponents();
+
+        for (int i = 0; i < 10; i++) {
+            MyComponent c = new MyComponent("Component " + i);
+            main.addComponent(c);
+            order.add(c);
+        }
+        setCompositionRoot(main);
+
+    }
+
+    class MyComponent extends CustomComponent {
+
+        private static final int FIRST = 0;
+        private static final int LAST = 1;
+        private Button up;
+        private Button down;
+
+        MyComponent(String name) {
+            HorizontalLayout ol = new HorizontalLayout();
+            ol.setDebugId(name.replaceAll(" ", ""));
+            ol.addComponent(new Label(name));
+            up = new Button("up");
+            up.addListener(new Button.ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    int newIndex = order.indexOf(MyComponent.this) - 1;
+                    MyComponent old = order.get(newIndex);
+                    main.replaceComponent(old, MyComponent.this);
+                    order.remove(MyComponent.this);
+                    order.add(newIndex, MyComponent.this);
+                    if (newIndex == 0) {
+                        MyComponent.this.setMode(FIRST);
+                    } else {
+                        MyComponent.this.setMode(69);
+                    }
+                }
+            });
+            ol.addComponent(up);
+
+            down = new Button("down");
+            down.addListener(new Button.ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    int newIndex = order.indexOf(MyComponent.this) + 1;
+                    MyComponent old = order.get(newIndex);
+                    main.replaceComponent(old, MyComponent.this);
+                    order.remove(MyComponent.this);
+                    order.add(newIndex, MyComponent.this);
+                    if (newIndex == order.size() - 1) {
+                        MyComponent.this.setMode(LAST);
+                    } else {
+                        MyComponent.this.setMode(69);
+                    }
+                }
+            });
+            ol.addComponent(down);
+
+            setCompositionRoot(ol);
+
+        }
+
+        public void setMode(int mode) {
+            up.setEnabled(true);
+            down.setEnabled(true);
+            if (mode == FIRST) {
+                up.setEnabled(false);
+            } else if (mode == LAST) {
+                down.setEnabled(false);
+            }
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/Parameters.java b/tests/testbench/com/vaadin/tests/Parameters.java
new file mode 100644
index 0000000000..34b32a8808
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/Parameters.java
@@ -0,0 +1,127 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.net.URL;
+import java.util.Iterator;
+import java.util.Map;
+
+import com.vaadin.terminal.DownloadStream;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.terminal.ParameterHandler;
+import com.vaadin.terminal.URIHandler;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+/**
+ * This is a demonstration of how URL parameters can be recieved and handled.
+ * Parameters and URL:s can be received trough the windows by registering
+ * URIHandler and ParameterHandler classes window.
+ * 
+ * @since 3.1.1
+ */
+public class Parameters extends com.vaadin.Application implements URIHandler,
+        ParameterHandler {
+
+    private final Label context = new Label();
+
+    private final Label relative = new Label();
+
+    private final Table params = new Table();
+
+    @Override
+    public void init() {
+        final Window main = new Window("Parameters demo");
+        setMainWindow(main);
+
+        // This class acts both as URI handler and parameter handler
+        main.addURIHandler(this);
+        main.addParameterHandler(this);
+
+        final VerticalLayout layout = new VerticalLayout();
+        final Label info = new Label("To test URI and Parameter Handlers, "
+                + "add get parameters to URL. For example try examples below: ");
+        info.setCaption("Usage info");
+        layout.addComponent(info);
+        try {
+            final URL u1 = new URL(getURL(), "test/uri?test=1&test=2");
+            final URL u2 = new URL(getURL(), "foo/bar?mary=john&count=3");
+            layout.addComponent(new Link(u1.toString(),
+                    new ExternalResource(u1)));
+            layout.addComponent(new Label("Or this: "));
+            layout.addComponent(new Link(u2.toString(),
+                    new ExternalResource(u2)));
+        } catch (final Exception e) {
+            System.out.println("Couldn't get hostname for this machine: "
+                    + e.toString());
+            e.printStackTrace();
+        }
+
+        // URI
+        final Panel panel1 = new Panel("URI Handler");
+        context.setCaption("Last URI handler context");
+        panel1.addComponent(context);
+        relative.setCaption("Last relative URI");
+        panel1.addComponent(relative);
+        layout.addComponent(panel1);
+
+        params.addContainerProperty("Key", String.class, "");
+        params.addContainerProperty("Value", String.class, "");
+        final Panel panel2 = new Panel("Parameter Handler");
+        params.setSizeFull();
+        panel2.setContent(new VerticalLayout());
+        ((Layout) panel2.getContent()).setMargin(true);
+
+        params.setColumnHeaderMode(Table.COLUMN_HEADER_MODE_ID);
+        panel2.addComponent(params);
+        layout.addComponent(panel2);
+
+        // expand parameter panel and its table
+        layout.setExpandRatio(panel2, 1);
+
+        layout.setMargin(true);
+        layout.setSpacing(true);
+
+        main.setContent(layout);
+    }
+
+    /**
+     * Update URI
+     * 
+     * @see com.vaadin.terminal.URIHandler#handleURI(URL, String)
+     */
+    @Override
+    public DownloadStream handleURI(URL context, String relativeUri) {
+        this.context.setValue(context.toString());
+        relative.setValue(relativeUri);
+        return null;
+    }
+
+    /**
+     * Handles GET parameters, in this demo GET parameteres are used to
+     * communicate with EmbeddedToolkit.jsp
+     */
+    public void handleParameters(Map<String, String[]> parameters) {
+        params.removeAllItems();
+        for (final Iterator<String> i = parameters.keySet().iterator(); i
+                .hasNext();) {
+            final String name = i.next();
+            final String[] values = parameters.get(name);
+            String v = "";
+            for (int j = 0; j < values.length; j++) {
+                if (v.length() > 0) {
+                    v += ", ";
+                }
+                v += "'" + values[j] + "'";
+            }
+            params.addItem(new Object[] { name, v }, name);
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/PerformanceTestBasicComponentRendering.java b/tests/testbench/com/vaadin/tests/PerformanceTestBasicComponentRendering.java
new file mode 100644
index 0000000000..7258df1879
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/PerformanceTestBasicComponentRendering.java
@@ -0,0 +1,108 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.util.Date;
+import java.util.Map;
+
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class PerformanceTestBasicComponentRendering extends CustomComponent {
+
+    private final VerticalLayout main;
+
+    private final VerticalLayout testContainer;
+
+    private Date startTime;
+
+    private final Label result;
+
+    private static final String DESCRIPTION = "Rendering lots of differend components to stress rendering performance. Visits server after render (due table cache row fetch) and prints client round trip time to a label. More exact render time can be checked from clients debug dialog.";
+
+    private static final int INITIAL_COMPONENTS = 10;
+
+    public PerformanceTestBasicComponentRendering() {
+
+        main = new VerticalLayout();
+        setCompositionRoot(main);
+        addInfo();
+
+        result = new Label();
+        main.addComponent(result);
+
+        testContainer = new VerticalLayout();
+
+        final Table t = TestForTablesInitialColumnWidthLogicRendering
+                .getTestTable(5, 200);
+
+        Table t2 = new Table("Test Table with 199 rows rendered initially") {
+            @Override
+            public void changeVariables(Object source,
+                    Map<String, Object> variables) {
+                super.changeVariables(source, variables);
+                // end timing on cache row request
+                endTest();
+            }
+        };
+        t2.setPageLength(199); // render almost all rows at once
+        t2.setContainerDataSource(t.getContainerDataSource());
+
+        testContainer.addComponent(t2);
+
+        for (int i = 0; i < INITIAL_COMPONENTS; i++) {
+            ComboBox cb = new ComboBox("Combobox " + i);
+            for (int j = 0; j < INITIAL_COMPONENTS; j++) {
+                cb.addItem("option " + i + " " + j);
+            }
+            testContainer.addComponent(cb);
+
+            TextField tf = new TextField("TextField " + i);
+            tf.setDescription("DESC SDKJSDF");
+            tf.setComponentError(new UserError("dsfjklsdf"));
+            testContainer.addComponent(tf);
+
+            testContainer.addComponent(new DateField("DateField" + i));
+
+            testContainer.addComponent(new Button("Button" + i));
+
+            TabSheet ts = new TabSheet();
+
+            for (int j = 0; j < INITIAL_COMPONENTS; j++) {
+                Label tab = new Label("Tab content " + i + " " + j);
+                tab.setCaption("Tab " + i + " " + j);
+                ts.addTab(tab);
+            }
+            testContainer.addComponent(ts);
+
+        }
+
+        main.addComponent(testContainer);
+        startTest();
+    }
+
+    public void startTest() {
+        startTime = new Date();
+    }
+
+    public void endTest() {
+        final long millis = (new Date()).getTime() - startTime.getTime();
+        final Float f = new Float(millis / 1000.0);
+        result.setValue("Test completed in " + f + " seconds");
+    }
+
+    private void addInfo() {
+        main.addComponent(new Label(DESCRIPTION, Label.CONTENT_XHTML));
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/PerformanceTestLabelsAndOrderedLayouts.java b/tests/testbench/com/vaadin/tests/PerformanceTestLabelsAndOrderedLayouts.java
new file mode 100644
index 0000000000..ff2ed51c57
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/PerformanceTestLabelsAndOrderedLayouts.java
@@ -0,0 +1,79 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.util.Date;
+
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+public class PerformanceTestLabelsAndOrderedLayouts extends CustomComponent {
+    private final AbstractOrderedLayout main;
+
+    private final AbstractOrderedLayout testContainer;
+
+    private Date startTime;
+
+    private final Label result;
+
+    private static final String DESCRIPTION = "Simple test that renders n labels into ordered layout.";
+
+    private static final int INITIAL_COMPONENTS = 1000;
+
+    public PerformanceTestLabelsAndOrderedLayouts() {
+        main = new VerticalLayout();
+        setCompositionRoot(main);
+        addInfo();
+
+        result = new Label();
+        main.addComponent(result);
+
+        main.addComponent(new Button("click when rendered",
+                new ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        endTest();
+                    }
+                }));
+
+        main.addComponent(new Button(
+                "Click for layout repaint (cached components)",
+                new ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        testContainer.requestRepaint();
+                    }
+                }));
+
+        testContainer = new VerticalLayout();
+
+        for (int i = 0; i < INITIAL_COMPONENTS; i++) {
+            Label l = new Label("foo" + i);
+            testContainer.addComponent(l);
+        }
+
+        main.addComponent(testContainer);
+        startTest();
+    }
+
+    public void startTest() {
+        startTime = new Date();
+    }
+
+    public void endTest() {
+        final long millis = (new Date()).getTime() - startTime.getTime();
+        final Float f = new Float(millis / 1000.0);
+        result.setValue("Test completed in " + f + " seconds");
+    }
+
+    private void addInfo() {
+        main.addComponent(new Label(DESCRIPTION, Label.CONTENT_XHTML));
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/PerformanceTestSubTreeCaching.java b/tests/testbench/com/vaadin/tests/PerformanceTestSubTreeCaching.java
new file mode 100644
index 0000000000..a746ed45bf
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/PerformanceTestSubTreeCaching.java
@@ -0,0 +1,83 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.util.Date;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+
+public class PerformanceTestSubTreeCaching extends CustomComponent {
+
+    private final VerticalLayout main;
+
+    private final VerticalLayout testContainer;
+
+    private Date startTime;
+
+    private final Label result;
+
+    private static final String DESCRIPTION = "Hypothesis: Toolkit 4 has major architechtural problem when adding "
+            + "small incrementall updates to a container which has either a lot or "
+            + "some very slow components in it. Toolkit 5 has 'subtree caching' and a"
+            + " small amount of logic in containers, so CommunicationManager can assure"
+            + " that client do not need information about unchanged components it contains."
+            + " Completing test ought to be much faster with Toolkit 5.";
+
+    private static final int INITIAL_COMPONENTS = 40;
+
+    public PerformanceTestSubTreeCaching() {
+        main = new VerticalLayout();
+        setCompositionRoot(main);
+        addInfo();
+
+        Button b = new Button("start test", this, "startTest");
+        b.setDescription("Push this button to start test. A test label will be rendered above existing components.");
+        main.addComponent(b);
+        b = new Button("end test", this, "endTest");
+        b.setDescription("Push this button as soon as test componenet is rendered.");
+        main.addComponent(b);
+
+        result = new Label();
+        main.addComponent(result);
+
+        testContainer = new VerticalLayout();
+        populateContainer(testContainer, INITIAL_COMPONENTS);
+        main.addComponent(testContainer);
+    }
+
+    public void startTest() {
+        startTime = new Date();
+        testContainer.addComponentAsFirst(new Label("Simplel Test Component"));
+    }
+
+    public void endTest() {
+        final long millis = (new Date()).getTime() - startTime.getTime();
+        final Float f = new Float(millis / 1000.0);
+        result.setValue("Test completed in " + f + " seconds");
+    }
+
+    /**
+     * Adds n Table components to given container
+     * 
+     * @param testContainer2
+     */
+    private void populateContainer(VerticalLayout container, int n) {
+        for (int i = 0; i < n; i++) {
+            // array_type array_element = [i];
+            final Table t = TestForTablesInitialColumnWidthLogicRendering
+                    .getTestTable(5, 100);
+            container.addComponent(t);
+        }
+    }
+
+    private void addInfo() {
+        main.addComponent(new Label(DESCRIPTION, Label.CONTENT_XHTML));
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/RandomLayoutStress.java b/tests/testbench/com/vaadin/tests/RandomLayoutStress.java
new file mode 100644
index 0000000000..7e4daa47dc
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/RandomLayoutStress.java
@@ -0,0 +1,187 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.util.Random;
+
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+/**
+ * This example demonstrates layouts. Layouts are populated with sample Vaadin
+ * UI components.
+ * 
+ * @author IT Mill Ltd.
+ * 
+ */
+public class RandomLayoutStress extends com.vaadin.Application {
+
+    private final Random seededRandom = new Random(1);
+
+    // FIXME increasing these settings brings out interesting client-side issues
+    // (DOM errors)
+    // TODO increasing values "even more" crashes Hosted Mode, pumping Xmx/Xms
+    // helps to some extent
+    private static final int componentCountA = 50;
+    private static final int componentCountB = 50;
+    private static final int componentCountC = 200;
+    private static final int componentCountD = 50;
+
+    /**
+     * Initialize Application. Demo components are added to main window.
+     */
+    @Override
+    public void init() {
+        final Window mainWindow = new Window("Layout demo");
+        setMainWindow(mainWindow);
+
+        // Create horizontal ordered layout
+        final Panel panelA = new Panel(
+                "Panel containing horizontal ordered layout");
+        HorizontalLayout layoutA = new HorizontalLayout();
+        // Add 4 random components
+        fillLayout(layoutA, componentCountA);
+        // Add layout to panel
+        panelA.addComponent(layoutA);
+
+        // Create vertical ordered layout
+        final Panel panelB = new Panel(
+                "Panel containing vertical ordered layout");
+        VerticalLayout layoutB = new VerticalLayout();
+        // Add 4 random components
+        fillLayout(layoutB, componentCountB);
+        // Add layout to panel
+        panelB.addComponent(layoutB);
+
+        // Create grid layout
+        final int gridSize = (int) java.lang.Math.sqrt(componentCountC);
+        final Panel panelG = new Panel("Panel containing grid layout ("
+                + gridSize + " x " + gridSize + ")");
+        GridLayout layoutG = new GridLayout(gridSize, gridSize);
+        // Add 12 random components
+        fillLayout(layoutG, componentCountC);
+        // Add layout to panel
+        panelG.addComponent(layoutG);
+
+        // Create TabSheet
+        final TabSheet tabsheet = new TabSheet();
+        tabsheet.setCaption("Tabsheet, above layouts are added to this component");
+        layoutA = new HorizontalLayout();
+        // Add 4 random components
+        fillLayout(layoutA, componentCountA);
+        tabsheet.addTab(layoutA, "Horizontal ordered layout", null);
+        layoutB = new VerticalLayout();
+        // Add 4 random components
+        fillLayout(layoutB, componentCountB);
+        tabsheet.addTab(layoutB, "Vertical ordered layout", null);
+        layoutG = new GridLayout(gridSize, gridSize);
+        // Add 12 random components
+        fillLayout(layoutG, componentCountC);
+        tabsheet.addTab(layoutG, "Grid layout (4 x 2)", null);
+
+        // Create custom layout
+        final Panel panelC = new Panel("Custom layout with style exampleStyle");
+        final CustomLayout layoutC = new CustomLayout("exampleStyle");
+        // Add 4 random components
+        fillLayout(layoutC, componentCountD);
+        // Add layout to panel
+        panelC.addComponent(layoutC);
+
+        // Add demo panels (layouts) to main window
+        mainWindow.addComponent(panelA);
+        mainWindow.addComponent(panelB);
+        mainWindow.addComponent(panelG);
+        mainWindow.addComponent(tabsheet);
+        mainWindow.addComponent(panelC);
+    }
+
+    private AbstractComponent getRandomComponent(int caption) {
+        AbstractComponent result = null;
+        final int randint = seededRandom.nextInt(7);
+        switch (randint) {
+        case 0:
+            // Label
+            result = new Label();
+            result.setCaption("Label component " + caption);
+            break;
+        case 1:
+            // Button
+            result = new Button();
+            result.setCaption("Button component " + caption);
+            break;
+        case 2:
+            // TextField
+            result = new TextField();
+            result.setCaption("TextField component " + caption);
+            break;
+        case 3:
+            // Select
+            result = new Select("Select " + caption);
+            result.setCaption("Select component " + caption);
+            ((Select) result).addItem("First item");
+            ((Select) result).addItem("Second item");
+            ((Select) result).addItem("Third item");
+            break;
+        case 4:
+            // Link
+            result = new Link("", new ExternalResource("http://www.vaadin.com"));
+            result.setCaption("Link component " + caption);
+            break;
+        case 5:
+            // Link
+            result = new Panel();
+            result.setCaption("Panel component " + caption);
+            ((Panel) result)
+                    .addComponent(new Label(
+                            "Panel is a container for other components, by default it draws a frame around it's "
+                                    + "extremities and may have a caption to clarify the nature of the contained components' purpose."
+                                    + " Panel contains an layout where the actual contained components are added, "
+                                    + "this layout may be switched on the fly."));
+            ((Panel) result).setWidth("250px");
+            break;
+        case 6:
+            // Datefield
+            result = new DateField();
+            ((DateField) result).setStyleName("calendar");
+            ((DateField) result).setValue(new java.util.Date());
+            result.setCaption("Calendar component " + caption);
+            break;
+        case 7:
+            // Datefield
+            result = new DateField();
+            ((DateField) result).setValue(new java.util.Date());
+            result.setCaption("Calendar component " + caption);
+            break;
+        }
+
+        return result;
+    }
+
+    /**
+     * Add demo components to given layout
+     * 
+     * @param layout
+     */
+    private void fillLayout(Layout layout, int numberOfComponents) {
+        for (int i = 0; i < numberOfComponents; i++) {
+            layout.addComponent(getRandomComponent(i));
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/ScrollbarStressTest.java b/tests/testbench/com/vaadin/tests/ScrollbarStressTest.java
new file mode 100644
index 0000000000..a66274a635
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/ScrollbarStressTest.java
@@ -0,0 +1,237 @@
+package com.vaadin.tests;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Accordion;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.OptionGroup;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.VerticalSplitPanel;
+import com.vaadin.ui.Window;
+
+public class ScrollbarStressTest extends Application {
+
+    final Window main = new Window("Scrollbar Stress Test");
+
+    final Panel panel = new Panel("Panel");
+    final VerticalSplitPanel splitPanel = new VerticalSplitPanel();
+    final Accordion accordion = new Accordion();
+    final TabSheet tabsheet = new TabSheet();
+    final Window subwindow = new Window("Subwindow");
+
+    final OptionGroup width = new OptionGroup("LO Width");
+    final OptionGroup height = new OptionGroup("LO Height");
+
+    private boolean getTable;
+
+    @Override
+    public void init() {
+        setTheme("tests-tickets");
+        setMainWindow(main);
+        createControlWindow();
+        subwindow.setWidth("400px");
+        subwindow.setHeight("400px");
+    }
+
+    private void createControlWindow() {
+        final OptionGroup context = new OptionGroup("Context");
+        context.addItem("Main window");
+        context.addItem("ExpandLayout");
+        context.addItem("Subwindow");
+        context.addItem("Panel");
+        context.addItem("Split Panel");
+        context.addItem("TabSheet");
+        context.addItem("Accordion");
+        context.setValue("Main window");
+
+        final OptionGroup testComponent = new OptionGroup(
+                "TestComponent 100%x100%");
+        testComponent.addItem("Label");
+        testComponent.addItem("Table");
+        testComponent.setValue("Label");
+
+        width.addItem("100%");
+        width.addItem("50%");
+        width.addItem("150%");
+        width.addItem("100px");
+        width.addItem("500px");
+        width.setValue("100%");
+
+        height.addItem("100%");
+        height.addItem("50%");
+        height.addItem("150%");
+        height.addItem("100px");
+        height.addItem("500px");
+        height.setValue("100%");
+
+        final Button set = new Button("Set", new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                getTable = testComponent.getValue().equals("Table");
+
+                if (context.getValue() == "Main window") {
+                    drawInMainWindow();
+                } else if (context.getValue() == "Subwindow") {
+                    drawInSubwindow();
+                } else if (context.getValue() == "Panel") {
+                    drawInPanel();
+                } else if (context.getValue() == "Split Panel") {
+                    drawInSplitPanel();
+                } else if (context.getValue() == "TabSheet") {
+                    drawInTabSheet(false);
+                } else if (context.getValue() == "Accordion") {
+                    drawInTabSheet(true);
+                } else if (context.getValue() == "ExpandLayout") {
+                    drawInExpandLayout();
+                }
+            }
+        });
+
+        HorizontalLayout ol = new HorizontalLayout();
+        ol.addComponent(context);
+        ol.addComponent(testComponent);
+        ol.addComponent(width);
+        ol.addComponent(height);
+        ol.addComponent(set);
+        ol.setSpacing(true);
+        ol.setMargin(true);
+
+        Window controller = new Window("Controller");
+        controller.setContent(ol);
+        main.addWindow(controller);
+    }
+
+    protected void drawInExpandLayout() {
+        main.removeAllComponents();
+        main.getContent().setSizeFull();
+
+        VerticalLayout ol = new VerticalLayout();
+
+        VerticalLayout el = new VerticalLayout();
+
+        el.removeAllComponents();
+
+        ol.setWidth((String) width.getValue());
+        ol.setHeight((String) height.getValue());
+
+        ol.addComponent(getTestComponent());
+
+        el.addComponent(ol);
+
+        main.getContent().addComponent(el);
+        main.removeWindow(subwindow);
+
+    }
+
+    protected void drawInTabSheet(boolean verticalAkaAccordion) {
+        main.removeAllComponents();
+        main.getContent().setSizeFull();
+
+        VerticalLayout ol = new VerticalLayout();
+        ol.setCaption("Tab 1");
+        VerticalLayout ol2 = new VerticalLayout();
+        ol2.setCaption("Tab 2");
+
+        TabSheet ts = (verticalAkaAccordion ? accordion : tabsheet);
+        ts.setSizeFull();
+
+        ts.removeAllComponents();
+
+        ts.addComponent(ol);
+        ts.addComponent(ol2);
+
+        ol.setWidth((String) width.getValue());
+        ol.setHeight((String) height.getValue());
+        ol2.setWidth((String) width.getValue());
+        ol2.setHeight((String) height.getValue());
+
+        ol.addComponent(getTestComponent());
+
+        ol2.addComponent(getTestComponent());
+
+        main.addComponent(ts);
+        main.removeWindow(subwindow);
+    }
+
+    private void drawInSplitPanel() {
+        main.removeAllComponents();
+        main.getContent().setSizeFull();
+
+        VerticalLayout ol = new VerticalLayout();
+        VerticalLayout ol2 = new VerticalLayout();
+
+        splitPanel.setFirstComponent(ol);
+        splitPanel.setSecondComponent(ol2);
+
+        ol.setWidth((String) width.getValue());
+        ol.setHeight((String) height.getValue());
+        ol2.setWidth((String) width.getValue());
+        ol2.setHeight((String) height.getValue());
+
+        ol.addComponent(getTestComponent());
+
+        ol2.addComponent(getTestComponent());
+
+        main.addComponent(splitPanel);
+        main.removeWindow(subwindow);
+    }
+
+    private void drawInPanel() {
+        main.removeAllComponents();
+        main.getContent().setSizeFull();
+
+        VerticalLayout ol = new VerticalLayout();
+        panel.setSizeFull();
+        panel.setContent(ol);
+
+        ol.setWidth((String) width.getValue());
+        ol.setHeight((String) height.getValue());
+
+        ol.addComponent(getTestComponent());
+        main.addComponent(panel);
+        main.removeWindow(subwindow);
+    }
+
+    private void drawInSubwindow() {
+        main.removeAllComponents();
+        main.getContent().setSizeFull();
+        VerticalLayout ol = new VerticalLayout();
+        ol.setWidth((String) width.getValue());
+        ol.setHeight((String) height.getValue());
+
+        ol.addComponent(getTestComponent());
+        subwindow.setContent(ol);
+        main.addWindow(subwindow);
+    }
+
+    private void drawInMainWindow() {
+        main.removeAllComponents();
+        VerticalLayout ol = new VerticalLayout();
+        main.setContent(ol);
+        ol.setWidth((String) width.getValue());
+        ol.setHeight((String) height.getValue());
+
+        ol.addComponent(getTestComponent());
+        main.removeWindow(subwindow);
+    }
+
+    private Component getTestComponent() {
+        if (getTable) {
+            Table testTable = TestForTablesInitialColumnWidthLogicRendering
+                    .getTestTable(4, 50);
+            testTable.setSizeFull();
+            return testTable;
+        } else {
+            Label l = new Label("Label");
+            l.setStyleName("no-padding");
+            l.setSizeFull();
+            return l;
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/StressComponentsInTable.java b/tests/testbench/com/vaadin/tests/StressComponentsInTable.java
new file mode 100644
index 0000000000..75b4916b37
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/StressComponentsInTable.java
@@ -0,0 +1,75 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.util.Date;
+import java.util.Vector;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+
+public class StressComponentsInTable extends CustomComponent {
+
+    public StressComponentsInTable() {
+        final VerticalLayout main = new VerticalLayout();
+        setCompositionRoot(main);
+
+        main.addComponent(getTestTable(4, 1000));
+
+    }
+
+    public static Table getTestTable(int cols, int rows) {
+        final Table t = new Table();
+        t.setColumnCollapsingAllowed(true);
+        for (int i = 0; i < cols; i++) {
+            t.addContainerProperty(testString[i], String.class, "");
+        }
+        t.addContainerProperty("button", Button.class, null);
+        for (int i = 0; i < rows; i++) {
+            final Vector<Object> content = new Vector<Object>();
+            for (int j = 0; j < cols; j++) {
+                content.add(rndString());
+            }
+            content.add(new Button("b" + i, new Button.ClickListener() {
+
+                public void buttonClick(ClickEvent event) {
+                    Button b = event.getButton();
+                    System.out.println(b.getCaption() + " click: "
+                            + (new Date()).toString());
+                    System.out.println(b.getApplication());
+
+                }
+            }));
+            t.addItem(content.toArray(), "" + i);
+        }
+        t.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+        return t;
+    }
+
+    static String[] testString = new String[] { "Jacob", "Michael", "Joshua",
+            "Matthew", "Ethan", "Andrew", "Daniel", "Anthony", "Christopher",
+            "Joseph", "William", "Alexander", "Ryan", "David", "Nicholas",
+            "Tyler", "James", "John", "Jonathan", "Nathan", "Samuel",
+            "Christian", "Noah", "Dylan", "Benjamin", "Logan", "Brandon",
+            "Gabriel", "Zachary", "Jose", "Elijah", "Angel", "Kevin", "Jack",
+            "Caleb", "Justin", "Austin", "Evan", "Robert", "Thomas", "Luke",
+            "Mason", "Aidan", "Jackson", "Isaiah", "Jordan", "Gavin", "Connor",
+            "Aiden", "Isaac", "Jason", "Cameron", "Hunter", "Jayden", "Juan",
+            "Charles", "Aaron", "Lucas", "Luis", "Owen", "Landon", "Diego",
+            "Brian", "Adam", "Adrian", "Kyle", "Eric", "Ian", "Nathaniel",
+            "Carlos", "Alex", "Bryan", "Jesus", "Julian", "Sean", "Carter",
+            "Hayden", "Jeremiah", "Cole", "Brayden", "Wyatt", "Chase",
+            "Steven", "Timothy", "Dominic", "Sebastian", "Xavier", "Jaden",
+            "Jesse", "Devin", "Seth", "Antonio", "Richard", "Miguel", "Colin",
+            "Cody", "Alejandro", "Caden", "Blake", "Carson" };
+
+    public static String rndString() {
+        return testString[(int) (Math.random() * testString.length)];
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TableChangingDatasource.java b/tests/testbench/com/vaadin/tests/TableChangingDatasource.java
new file mode 100644
index 0000000000..2b9639b32d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TableChangingDatasource.java
@@ -0,0 +1,53 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+
+public class TableChangingDatasource extends CustomComponent implements
+        ClickListener {
+    Table t;
+    Table[] ta = new Table[4];
+    private int mode = 0;
+
+    public TableChangingDatasource() {
+        final VerticalLayout main = new VerticalLayout();
+
+        main.addComponent(new Label(
+                "Table should look sane after data source changes"));
+
+        t = new Table();
+
+        t.setWidth("500px");
+        t.setHeight("300px");
+
+        ta[0] = TestForTablesInitialColumnWidthLogicRendering
+                .getTestTable(3, 0);
+        ta[1] = TestForTablesInitialColumnWidthLogicRendering
+                .getTestTable(3, 7);
+        ta[2] = TestForTablesInitialColumnWidthLogicRendering
+                .getTestTable(3, 5);
+        ta[3] = TestForTablesInitialColumnWidthLogicRendering
+                .getTestTable(3, 1);
+
+        main.addComponent(t);
+        main.addComponent(new Button("switch DS", this));
+
+        setCompositionRoot(main);
+
+    }
+
+    public void buttonClick(ClickEvent event) {
+        int i = mode % 4;
+        t.setContainerDataSource(ta[i].getContainerDataSource());
+        mode++;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/TableSelectTest.java b/tests/testbench/com/vaadin/tests/TableSelectTest.java
new file mode 100644
index 0000000000..d5196d2a2a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TableSelectTest.java
@@ -0,0 +1,123 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+
+public class TableSelectTest extends CustomComponent implements
+        Table.ValueChangeListener {
+
+    public TableSelectTest() {
+        final VerticalLayout main = new VerticalLayout();
+        setCompositionRoot(main);
+        main.addComponent(new Label("Hello World!"));
+
+        Table t;
+        t = new Table("single nullsel");
+        main.addComponent(t);
+        t(t);
+        t.setMultiSelect(false);
+        t.setNullSelectionAllowed(true);
+        t.addListener(this);
+
+        t = new Table("single NO-nullsel");
+        main.addComponent(t);
+        t(t);
+        t.setMultiSelect(false);
+        t.setNullSelectionAllowed(false);
+        t.addListener(this);
+
+        t = new Table("multi nullsel");
+        main.addComponent(t);
+        t(t);
+        t.setMultiSelect(true);
+        t.setNullSelectionAllowed(true);
+        t.addListener(this);
+
+        t = new Table("multi NO-nullsel");
+        main.addComponent(t);
+        t(t);
+        t.setMultiSelect(true);
+        t.setNullSelectionAllowed(false);
+        t.addListener(this);
+
+        // --
+
+        t = new Table("single nullsel nullselid");
+        main.addComponent(t);
+        Object id = t(t);
+        t.setNullSelectionItemId(id);
+        t.setMultiSelect(false);
+        t.setNullSelectionAllowed(true);
+        t.addListener(this);
+
+        t = new Table("single NO-nullsel nullselid");
+        main.addComponent(t);
+        id = t(t);
+        t.setNullSelectionItemId(id);
+        t.setMultiSelect(false);
+        t.setNullSelectionAllowed(false);
+        t.addListener(this);
+
+        t = new Table("multi(fails) nullsel nullselid");
+        main.addComponent(t);
+        id = t(t);
+        t.setNullSelectionItemId(id);
+        try {
+            t.setMultiSelect(true);
+            t.setCaption("multi(SHOLD FAIL BUT DID NOT) nullsel nullselid");
+        } catch (final Exception e) {
+            System.err.println("failed ok");
+        }
+        t.setNullSelectionAllowed(true);
+        t.addListener(this);
+
+        t = new Table("multi(fails) NO-nullsel nullselid");
+        main.addComponent(t);
+        id = t(t);
+        t.setNullSelectionItemId(id);
+        try {
+            t.setMultiSelect(true);
+            t.setCaption("multi(SHOLD FAIL BUT DID NOT) NO-nullsel nullselid");
+        } catch (final Exception e) {
+            System.err.println("failed ok");
+        }
+        t.setNullSelectionAllowed(false);
+        t.addListener(this);
+
+        /*
+         * And that's it! The framework will display the main window and its
+         * contents when the application is accessed with the terminal.
+         */
+
+    }
+
+    private Object t(Table t) {
+        t.setImmediate(true);
+        t.setSelectable(true);
+
+        Object id = null;
+        for (int i = 0; i < 5; i++) {
+            id = t.addItem();
+        }
+        t.addContainerProperty("asd", String.class, "the asd thing");
+        t.addContainerProperty("foo", String.class, "foo stuff");
+        t.addContainerProperty("Alonger column header", String.class, "short");
+
+        return id;
+    }
+
+    public void valueChange(ValueChangeEvent event) {
+        final Object val = event.getProperty().getValue();
+
+        System.err.println("Value: " + val);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestBench.java b/tests/testbench/com/vaadin/tests/TestBench.java
new file mode 100644
index 0000000000..98c6cd41f8
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestBench.java
@@ -0,0 +1,330 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import com.vaadin.Application;
+import com.vaadin.data.Property;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.UriFragmentUtility;
+import com.vaadin.ui.UriFragmentUtility.FragmentChangedEvent;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+/**
+ * TestBench finds out testable classes within given java packages and adds them
+ * to menu from where they can be executed. Class is considered testable if it
+ * is of class Application or CustomComponent.
+ * 
+ * Note: edit TestBench.testablePackages array
+ * 
+ * @author IT Mill Ltd.
+ * 
+ */
+public class TestBench extends com.vaadin.Application implements
+        Property.ValueChangeListener {
+
+    // Add here packages which are used for finding testable classes
+    String[] testablePackages = { "com.vaadin.tests",
+            "com.vaadin.tests.tickets" };
+
+    HierarchicalContainer testables = new HierarchicalContainer();
+
+    Window mainWindow = new Window("TestBench window");
+
+    // Main layout consists of tree menu and body layout
+    HorizontalSplitPanel mainLayout = new HorizontalSplitPanel();
+
+    Tree menu;
+
+    Panel bodyLayout = new Panel();
+
+    // TODO this could probably be a simple Set
+    HashMap<Class<?>, String> itemCaptions = new HashMap<Class<?>, String>();
+
+    @Override
+    public void init() {
+
+        // Add testable classes to hierarchical container
+        for (int p = 0; p < testablePackages.length; p++) {
+            testables.addItem(testablePackages[p]);
+            try {
+                final List<Class<?>> testableClasses = getTestableClassesForPackage(testablePackages[p]);
+                for (final Iterator<Class<?>> it = testableClasses.iterator(); it
+                        .hasNext();) {
+                    final Class<?> t = it.next();
+                    // ignore TestBench itself
+                    if (t.equals(TestBench.class)) {
+                        continue;
+                    }
+                    try {
+                        testables.addItem(t);
+                        itemCaptions.put(t, t.getName());
+                        testables.setParent(t, testablePackages[p]);
+                        testables.setChildrenAllowed(t, false);
+                        continue;
+                    } catch (final Exception e) {
+                        try {
+                            testables.addItem(t);
+                            itemCaptions.put(t, t.getName());
+                            testables.setParent(t, testablePackages[p]);
+                            testables.setChildrenAllowed(t, false);
+                            continue;
+                        } catch (final Exception e1) {
+                            e1.printStackTrace();
+                        }
+                    }
+                }
+            } catch (final Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        menu = new Tree("Testables", testables);
+
+        for (final Iterator<Class<?>> i = itemCaptions.keySet().iterator(); i
+                .hasNext();) {
+            final Class<?> testable = i.next();
+            // simplify captions
+            final String name = testable.getName().substring(
+                    testable.getName().lastIndexOf('.') + 1);
+            menu.setItemCaption(testable, name);
+        }
+        // expand all root items
+        for (final Iterator<?> i = menu.rootItemIds().iterator(); i.hasNext();) {
+            menu.expandItemsRecursively(i.next());
+        }
+
+        menu.addListener(this);
+        menu.setImmediate(true);
+        menu.setNullSelectionAllowed(false);
+        VerticalLayout lo = new VerticalLayout();
+        lo.addComponent(menu);
+
+        UriFragmentUtility uri = new UriFragmentUtility();
+        lo.addComponent(uri);
+
+        uri.addListener(new UriFragmentUtility.FragmentChangedListener() {
+            public void fragmentChanged(FragmentChangedEvent source) {
+                String fragment = source.getUriFragmentUtility().getFragment();
+                if (fragment != null && !"".equals(fragment)) {
+                    // try to find a proper test class
+
+                    // exact match
+                    Iterator<?> iterator = menu.getItemIds().iterator();
+                    while (iterator.hasNext()) {
+                        Object next = iterator.next();
+                        if (next instanceof Class) {
+                            Class<?> c = (Class<?>) next;
+                            String string = c.getName();
+                            if (string.equals(fragment)) {
+                                menu.setValue(c);
+                                mainLayout.setSplitPosition(0);
+                                return;
+                            }
+                        }
+                    }
+
+                    // simple name match
+                    iterator = menu.getItemIds().iterator();
+                    while (iterator.hasNext()) {
+                        Object next = iterator.next();
+                        if (next instanceof Class) {
+                            Class<?> c = (Class<?>) next;
+                            String string = c.getSimpleName();
+                            if (string.equals(fragment)) {
+                                menu.setValue(c);
+                                mainLayout.setSplitPosition(0);
+                                return;
+                            }
+                        }
+                    }
+                    // ticket match
+                    iterator = menu.getItemIds().iterator();
+                    while (iterator.hasNext()) {
+                        Object next = iterator.next();
+                        if (next instanceof Class) {
+                            Class<?> c = (Class<?>) next;
+                            String string = c.getSimpleName();
+                            if (string.startsWith("Ticket" + fragment)) {
+                                menu.setValue(c);
+                                mainLayout.setSplitPosition(0);
+                                return;
+                            }
+                        }
+                    }
+
+                    // just partly mach lowercase
+                    iterator = menu.getItemIds().iterator();
+                    while (iterator.hasNext()) {
+                        Object next = iterator.next();
+                        if (next instanceof Class) {
+                            Class<?> c = (Class<?>) next;
+                            String string = c.getSimpleName();
+                            if (string.toLowerCase().contains(
+                                    fragment.toLowerCase())) {
+                                menu.setValue(c);
+                                mainLayout.setSplitPosition(0);
+                                return;
+                            }
+                        }
+                    }
+
+                    getMainWindow().showNotification(
+                            "No potential matc for #" + fragment);
+
+                }
+
+            }
+        });
+
+        mainLayout.addComponent(lo);
+
+        bodyLayout.addStyleName("light");
+        bodyLayout.setSizeFull();
+        bodyLayout.setContent(new VerticalLayout());
+
+        mainLayout.addComponent(bodyLayout);
+
+        mainLayout.setSplitPosition(30);
+
+        mainWindow.setContent(mainLayout);
+
+        setMainWindow(mainWindow);
+    }
+
+    private Component createTestable(Class<?> c) {
+        try {
+            final Application app = (Application) c.newInstance();
+            app.init();
+            Layout lo = (Layout) app.getMainWindow().getContent();
+            lo.setParent(null);
+            return lo;
+        } catch (final Exception e) {
+            try {
+                final CustomComponent cc = (CustomComponent) c.newInstance();
+                cc.setSizeFull();
+                return cc;
+            } catch (final Exception e1) {
+                e1.printStackTrace();
+                VerticalLayout lo = new VerticalLayout();
+                lo.addComponent(new Label(
+                        "Cannot create application / custom component: "
+                                + e1.toString()));
+
+                Link l = new Link("Try opening via app runner",
+                        new ExternalResource("../run/" + c.getName()));
+                lo.addComponent(l);
+
+                return lo;
+            }
+        }
+    }
+
+    // Handle menu selection and update body
+    public void valueChange(Property.ValueChangeEvent event) {
+        bodyLayout.removeAllComponents();
+        bodyLayout.setCaption(null);
+
+        final Object o = menu.getValue();
+        if (o != null && o instanceof Class) {
+            final Class<?> c = (Class<?>) o;
+            final String title = c.getName();
+            bodyLayout.setCaption(title);
+            bodyLayout.addComponent(createTestable(c));
+        } else {
+            // NOP node selected or deselected tree item
+        }
+    }
+
+    /**
+     * Return all testable classes within given package. Class is considered
+     * testable if it's superclass is Application or CustomComponent.
+     * 
+     * @param packageName
+     * @return
+     * @throws ClassNotFoundException
+     */
+    public static List<Class<?>> getTestableClassesForPackage(String packageName)
+            throws Exception {
+        final ArrayList<File> directories = new ArrayList<File>();
+        try {
+            final ClassLoader cld = Thread.currentThread()
+                    .getContextClassLoader();
+            if (cld == null) {
+                throw new ClassNotFoundException("Can't get class loader.");
+            }
+            final String path = packageName.replace('.', '/');
+            // Ask for all resources for the path
+            final Enumeration<URL> resources = cld.getResources(path);
+            while (resources.hasMoreElements()) {
+                final URL url = resources.nextElement();
+                directories.add(new File(url.getFile()));
+            }
+        } catch (final Exception x) {
+            throw new Exception(packageName
+                    + " does not appear to be a valid package.");
+        }
+
+        final ArrayList<Class<?>> classes = new ArrayList<Class<?>>();
+        // For every directory identified capture all the .class files
+        for (final Iterator<File> it = directories.iterator(); it.hasNext();) {
+            final File directory = it.next();
+            if (directory.exists()) {
+                // Get the list of the files contained in the package
+                final String[] files = directory.list();
+                for (int j = 0; j < files.length; j++) {
+                    // we are only interested in .class files
+                    if (files[j].endsWith(".class")) {
+                        // removes the .class extension
+                        final String p = packageName + '.'
+                                + files[j].substring(0, files[j].length() - 6);
+                        final Class<?> c = Class.forName(p);
+                        if (c.getSuperclass() != null) {
+                            if ((c.getSuperclass()
+                                    .equals(com.vaadin.Application.class))) {
+                                classes.add(c);
+                            } else if ((c.getSuperclass()
+                                    .equals(com.vaadin.ui.CustomComponent.class))) {
+                                classes.add(c);
+                            }
+                        }
+
+                        // for (int i = 0; i < c.getInterfaces().length; i++) {
+                        // Class cc = c.getInterfaces()[i];
+                        // if (c.getInterfaces()[i].equals(Testable.class)) {
+                        // // Class is testable
+                        // classes.add(c);
+                        // }
+                        // }
+                    }
+                }
+            } else {
+                throw new ClassNotFoundException(packageName + " ("
+                        + directory.getPath()
+                        + ") does not appear to be a valid package");
+            }
+        }
+
+        return classes;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestCaptionWrapper.java b/tests/testbench/com/vaadin/tests/TestCaptionWrapper.java
new file mode 100644
index 0000000000..f63c148892
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestCaptionWrapper.java
@@ -0,0 +1,204 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.terminal.ClassResource;
+import com.vaadin.terminal.ErrorMessage;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component.Listener;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.OptionGroup;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.ProgressIndicator;
+import com.vaadin.ui.RichTextArea;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.Slider;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.TwinColSelect;
+import com.vaadin.ui.Upload;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class TestCaptionWrapper extends CustomComponent implements Listener {
+
+    VerticalLayout main = new VerticalLayout();
+
+    final String eventListenerString = "Component.Listener feedback: ";
+    Label eventListenerFeedback = new Label(eventListenerString
+            + " <no events occured>");
+    int count = 0;
+
+    public TestCaptionWrapper() {
+        setCompositionRoot(main);
+    }
+
+    @Override
+    public void attach() {
+        super.attach();
+        createNewView();
+    }
+
+    public void createNewView() {
+        main.removeAllComponents();
+
+        main.addComponent(new Label(
+                "Each Layout and their contained components should "
+                        + "have icon, caption, description, user error defined. "
+                        + "Eeach layout should contain similar components."));
+
+        main.addComponent(eventListenerFeedback);
+
+        main.addComponent(new Label("OrderedLayout"));
+        test(main);
+        populateLayout(main);
+
+        final Panel panel = new Panel("Panel");
+        test(panel);
+        populateLayout((Layout) panel.getContent());
+
+        final TabSheet tabsheet = new TabSheet();
+        test(tabsheet);
+        final VerticalLayout tab1 = new VerticalLayout();
+        tab1.addComponent(new Label("try tab2"));
+        final VerticalLayout tab2 = new VerticalLayout();
+        test(tab2);
+        populateLayout(tab2);
+        tabsheet.addTab(tab1, "TabSheet tab1", new ClassResource("m.gif",
+                getApplication()));
+        tabsheet.addTab(tab2, "TabSheet tab2", new ClassResource("m.gif",
+                getApplication()));
+
+        final VerticalLayout expandLayout = new VerticalLayout();
+        test(expandLayout);
+        populateLayout(expandLayout);
+
+        final GridLayout gridLayout = new GridLayout();
+        test(gridLayout);
+        populateLayout(gridLayout);
+
+        final Window window = new Window("TEST: Window");
+        test(window);
+        populateLayout((Layout) window.getContent());
+
+    }
+
+    void populateLayout(Layout layout) {
+
+        final Button button = new Button("Button " + count++);
+        test(layout, button);
+        button.addListener(this);
+
+        final DateField df = new DateField("DateField " + count++);
+        test(layout, df);
+
+        final CheckBox cb = new CheckBox("Checkbox " + count++);
+        test(layout, cb);
+
+        final Embedded emb = new Embedded("Embedded " + count++);
+        test(layout, emb);
+
+        final Panel panel = new Panel("Panel " + count++);
+        test(layout, panel);
+
+        final Label label = new Label("Label " + count++);
+        test(layout, label);
+
+        final Link link = new Link("Link " + count++, new ExternalResource(
+                "www.vaadin.com"));
+        test(layout, link);
+
+        final NativeSelect nativeSelect = new NativeSelect("NativeSelect "
+                + count++);
+        test(layout, nativeSelect);
+
+        final OptionGroup optionGroup = new OptionGroup("OptionGroup "
+                + count++);
+        test(layout, optionGroup);
+
+        final ProgressIndicator pi = new ProgressIndicator();
+        test(layout, pi);
+
+        final RichTextArea rta = new RichTextArea();
+        test(layout, rta);
+
+        final Select select = new Select("Select " + count++);
+        test(layout, select);
+
+        final Slider slider = new Slider("Slider " + count++);
+        test(layout, slider);
+
+        final Table table = new Table("Table " + count++);
+        test(layout, table);
+
+        final TextField tf = new TextField("Textfield " + count++);
+        test(layout, tf);
+
+        final Tree tree = new Tree("Tree " + count++);
+        test(layout, tree);
+
+        final TwinColSelect twinColSelect = new TwinColSelect("TwinColSelect "
+                + count++);
+        test(layout, twinColSelect);
+
+        final Upload upload = new Upload("Upload (non-functional)", null);
+        test(layout, upload);
+
+        // Custom components
+        layout.addComponent(new Label("<B>Below are few custom components</B>",
+                Label.CONTENT_XHTML));
+        final TestForUpload tfu = new TestForUpload();
+        layout.addComponent(tfu);
+
+    }
+
+    /**
+     * Stresses component by configuring it
+     * 
+     * @param c
+     */
+    void test(AbstractComponent c) {
+        final ClassResource res = new ClassResource("m.gif", getApplication());
+        final ErrorMessage errorMsg = new UserError("User error " + c);
+
+        if ((c.getCaption() == null) || (c.getCaption().length() <= 0)) {
+            c.setCaption("Caption " + c);
+        }
+        c.setDescription("Description " + c);
+        c.setComponentError(errorMsg);
+        c.setIcon(res);
+    }
+
+    /**
+     * Stresses component by configuring it in a given layout
+     * 
+     * @param c
+     */
+    void test(Layout layout, AbstractComponent c) {
+        test(c);
+        layout.addComponent(c);
+    }
+
+    public void componentEvent(Event event) {
+        final String feedback = eventListenerString + " source="
+                + event.getSource() + ", toString()=" + event.toString();
+        System.out.println("eventListenerFeedback: " + feedback);
+        eventListenerFeedback.setValue(feedback);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestComponentAddAndRecursion.java b/tests/testbench/com/vaadin/tests/TestComponentAddAndRecursion.java
new file mode 100644
index 0000000000..5203a7055f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestComponentAddAndRecursion.java
@@ -0,0 +1,128 @@
+/**
+ * 
+ */
+package com.vaadin.tests;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+/**
+ * @author marc
+ * 
+ */
+public class TestComponentAddAndRecursion extends CustomComponent {
+    Panel p;
+    Panel p2;
+    Label l;
+    Label l2;
+    Panel p3;
+
+    public TestComponentAddAndRecursion() {
+
+        VerticalLayout main = new VerticalLayout();
+        setCompositionRoot(main);
+
+        l = new Label("A");
+        l2 = new Label("B");
+        p = new Panel("p");
+        p.addComponent(l);
+        p.addComponent(l2);
+        main.addComponent(p);
+        p2 = new Panel("p2");
+        p2.addComponent(l);
+        main.addComponent(p2);
+        p3 = new Panel("p3");
+        p2.addComponent(p3);
+
+        Button b = new Button("use gridlayout", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                p.setContent(new GridLayout());
+                p2.setContent(new GridLayout());
+                p3.setContent(new GridLayout());
+            }
+
+        });
+        main.addComponent(b);
+        b = new Button("use orderedlayout", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                p.setContent(new VerticalLayout());
+                p2.setContent(new VerticalLayout());
+                p3.setContent(new VerticalLayout());
+            }
+
+        });
+        main.addComponent(b);
+        b = new Button("move B", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                p2.addComponent(l2);
+            }
+
+        });
+        main.addComponent(b);
+        b = new Button("move p", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                p3.addComponent(p);
+            }
+
+        });
+        main.addComponent(b);
+        b = new Button("add to both", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                Label l = new Label("both");
+                p.addComponent(l);
+                p2.addComponent(l);
+            }
+
+        });
+        main.addComponent(b);
+        b = new Button("recurse", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                try {
+                    p3.addComponent(p2);
+                    getWindow().showNotification("ERROR",
+                            "This should have failed",
+                            Window.Notification.TYPE_ERROR_MESSAGE);
+                } catch (Exception e) {
+                    getWindow().showNotification("OK", "threw, as expected",
+                            Window.Notification.TYPE_ERROR_MESSAGE);
+                }
+            }
+
+        });
+        main.addComponent(b);
+        b = new Button("recurse2", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                Panel p = new Panel("dynamic");
+                p.addComponent(p2);
+                try {
+                    p3.addComponent(p);
+                    getWindow().showNotification("ERROR",
+                            "This should have failed",
+                            Window.Notification.TYPE_ERROR_MESSAGE);
+                } catch (Exception e) {
+                    getWindow().showNotification("OK", "threw, as expected",
+                            Window.Notification.TYPE_ERROR_MESSAGE);
+                }
+            }
+
+        });
+        main.addComponent(b);
+        /*
+         * And that's it! The framework will display the main window and its
+         * contents when the application is accessed with the terminal.
+         */
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/TestContainerChanges.java b/tests/testbench/com/vaadin/tests/TestContainerChanges.java
new file mode 100644
index 0000000000..c3a1a98665
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestContainerChanges.java
@@ -0,0 +1,212 @@
+/**
+ * 
+ */
+package com.vaadin.tests;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.ContainerHierarchicalWrapper;
+import com.vaadin.data.util.ContainerOrderedWrapper;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.ListSelect;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.themes.Reindeer;
+
+/**
+ * @author marc
+ * 
+ */
+public class TestContainerChanges extends CustomComponent {
+    Container cont = new IndexedContainer();
+    Container hierarchical = new ContainerHierarchicalWrapper(cont);
+    Container ordered = new ContainerOrderedWrapper(cont);
+
+    int cnt = 0;
+    Table tbl;
+
+    public TestContainerChanges() {
+
+        cont.addContainerProperty("Asd", String.class, "qwe");
+        cont.addContainerProperty("Bar", String.class, "foo");
+
+        VerticalLayout main = new VerticalLayout();
+        setCompositionRoot(main);
+
+        main.addComponent(new Label(
+                "The same IndexedContainer is wrapped in a ordered/hierarchical wrapper and is set as data source for all components . The buttons only affect the 'original' IndexedContainer."));
+
+        HorizontalLayout h = new HorizontalLayout();
+
+        main.addComponent(h);
+
+        VerticalLayout v = new VerticalLayout();
+        h.addComponent(v);
+        tbl = new Table();
+        tbl.setHeight("200px");
+        tbl.setWidth("300px");
+        v.addComponent(tbl);
+        tbl.setSelectable(true);
+        tbl.setMultiSelect(false);
+        tbl.setImmediate(true);
+        tbl.setEditable(true);
+        tbl.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+        // Original container
+        tbl.setContainerDataSource(hierarchical);
+
+        Table tbl2 = new Table();
+        tbl2.setHeight("200px");
+        tbl2.setWidth("300px");
+        v.addComponent(tbl2);
+        tbl2.setSelectable(true);
+        tbl2.setMultiSelect(false);
+        tbl2.setImmediate(true);
+        tbl2.addListener(new Table.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                System.err.println("Value now "
+                        + event.getProperty().getValue());
+
+            }
+        });
+        tbl2.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+        // non-ordered container will get wrapped
+        tbl2.setContainerDataSource(hierarchical);
+
+        VerticalLayout buttons = new VerticalLayout();
+        v.addComponent(buttons);
+
+        Button b = new Button("table.commit()", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                tbl.commit();
+            }
+
+        });
+        buttons.addComponent(b);
+
+        b = new Button("indexedcontainer.addItem()",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        cont.addItem(new Integer(cnt++));
+                    }
+
+                });
+        buttons.addComponent(b);
+        b = new Button("indexedcontainer.addItem(null)",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        cont.addItem(null);
+                    }
+
+                });
+        buttons.addComponent(b);
+        b = new Button("indexedcontainer.removeItem(table.lastItemId()",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        cont.removeItem(tbl.lastItemId());
+                    }
+
+                });
+        buttons.addComponent(b);
+
+        b = new Button("indexedcontainer.addContainerProperty()",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        cont.addContainerProperty("prop" + cnt, String.class,
+                                "#" + cnt++);
+                    }
+
+                });
+        buttons.addComponent(b);
+
+        b = new Button("indexedcontainer.clear()", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                cont.removeAllItems();
+            }
+
+        });
+        buttons.addComponent(b);
+        b = new Button("table.setContainerDataSource(indexedcontainer)",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        tbl.setContainerDataSource(cont);
+                    }
+
+                });
+        buttons.addComponent(b);
+        b = new Button("table.setContainerDataSource(orderedwrapper)",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        tbl.setContainerDataSource(ordered);
+                    }
+
+                });
+        buttons.addComponent(b);
+        b = new Button("table.setContainerDataSource(hierarchicalwrapper)",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        tbl.setContainerDataSource(hierarchical);
+                    }
+
+                });
+        buttons.addComponent(b);
+
+        Panel p = new Panel("Tree");
+        p.setStyleName(Reindeer.PANEL_LIGHT);
+        h.addComponent(p);
+        Tree tree = new Tree("ITEM_CAPTION_MODE_PROPERTY");
+        tree.setContainerDataSource(ordered);
+        tree.setItemCaptionPropertyId("Asd");
+        tree.setItemCaptionMode(Tree.ITEM_CAPTION_MODE_PROPERTY);
+        p.addComponent(tree);
+        tree = new Tree("ITEM_CAPTION_MODE_ITEM");
+        // nonhierarchical container will get wrapped
+        tree.setContainerDataSource(ordered);
+        tree.setItemCaptionMode(Tree.ITEM_CAPTION_MODE_ITEM);
+        p.addComponent(tree);
+
+        p = new Panel("ComboBox");
+        p.setStyleName(Reindeer.PANEL_LIGHT);
+        h.addComponent(p);
+        ComboBox c = new ComboBox("ITEM_CAPTION_MODE_PROPERTY");
+        c.setImmediate(true);
+        c.setContainerDataSource(cont);
+        c.setItemCaptionPropertyId("Asd");
+        c.setItemCaptionMode(ComboBox.ITEM_CAPTION_MODE_PROPERTY);
+        p.addComponent(c);
+        c = new ComboBox("ITEM_CAPTION_MODE_ITEM");
+        c.setImmediate(true);
+        c.setContainerDataSource(cont);
+        c.setItemCaptionMode(ComboBox.ITEM_CAPTION_MODE_ITEM);
+        p.addComponent(c);
+
+        p = new Panel("ListBox");
+        p.setStyleName(Reindeer.PANEL_LIGHT);
+        h.addComponent(p);
+        ListSelect l = new ListSelect("ITEM_CAPTION_MODE_PROPERTY");
+        l.setContainerDataSource(cont);
+        l.setItemCaptionPropertyId("Asd");
+        l.setItemCaptionMode(ComboBox.ITEM_CAPTION_MODE_PROPERTY);
+        p.addComponent(l);
+        l = new ListSelect("ITEM_CAPTION_MODE_ITEM");
+        l.setContainerDataSource(cont);
+        l.setItemCaptionMode(ComboBox.ITEM_CAPTION_MODE_ITEM);
+        p.addComponent(l);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/TestDateField.java b/tests/testbench/com/vaadin/tests/TestDateField.java
new file mode 100644
index 0000000000..287007bad6
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestDateField.java
@@ -0,0 +1,74 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.util.Locale;
+
+import com.vaadin.terminal.ClassResource;
+import com.vaadin.terminal.ErrorMessage;
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * 
+ * @author IT Mill Ltd.
+ */
+public class TestDateField extends CustomComponent {
+
+    VerticalLayout main = new VerticalLayout();
+
+    DateField df;
+
+    public TestDateField() {
+        setCompositionRoot(main);
+        createNewView();
+    }
+
+    public void createNewView() {
+        main.removeAllComponents();
+        main.addComponent(new Label("DateField"));
+
+        df = new DateField();
+        main.addComponent(df);
+
+        final ErrorMessage errorMsg = new UserError("User error " + df);
+        df.setCaption("DateField caption " + df);
+        df.setDescription("DateField description " + df);
+        df.setComponentError(errorMsg);
+        df.setImmediate(true);
+        // FIXME: bug #1138 this makes datefield to render with unknown
+        // component (UIDL tree debug)
+        df.addStyleName("thisShouldBeHarmless");
+
+        // Another test: locale
+        final DateField df1 = new DateField("US locale");
+        main.addComponent(df1);
+        df1.setLocale(new Locale("en", "US"));
+
+        final DateField df2 = new DateField("DE locale");
+        main.addComponent(df2);
+        df2.setLocale(new Locale("de", "DE"));
+
+        final DateField df3 = new DateField("RU locale");
+        main.addComponent(df3);
+        df3.setLocale(new Locale("ru", "RU"));
+
+        final DateField df4 = new DateField("FI locale");
+        main.addComponent(df4);
+        df4.setLocale(new Locale("fi", "FI"));
+    }
+
+    @Override
+    public void attach() {
+        final ClassResource res = new ClassResource("m.gif",
+                super.getApplication());
+        df.setIcon(res);
+        super.attach();
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestForAlignments.java b/tests/testbench/com/vaadin/tests/TestForAlignments.java
new file mode 100644
index 0000000000..4296744224
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForAlignments.java
@@ -0,0 +1,58 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class TestForAlignments extends CustomComponent {
+
+    public TestForAlignments() {
+
+        final VerticalLayout main = new VerticalLayout();
+
+        final Button b1 = new Button("Right");
+        final Button b2 = new Button("Left");
+        final Button b3 = new Button("Bottom");
+        final Button b4 = new Button("Top");
+        final TextField t1 = new TextField("Right aligned");
+        final TextField t2 = new TextField("Bottom aligned");
+        final DateField d1 = new DateField("Center aligned");
+        final DateField d2 = new DateField("Center aligned");
+
+        final VerticalLayout vert = new VerticalLayout();
+        vert.addComponent(b1);
+        vert.addComponent(b2);
+        vert.addComponent(t1);
+        vert.addComponent(d1);
+        // vert.getSize().setWidth(500);
+        vert.setComponentAlignment(b1, Alignment.TOP_RIGHT);
+        vert.setComponentAlignment(b2, Alignment.TOP_LEFT);
+        vert.setComponentAlignment(t1, Alignment.TOP_RIGHT);
+        vert.setComponentAlignment(d1, Alignment.TOP_CENTER);
+        final HorizontalLayout hori = new HorizontalLayout();
+        hori.addComponent(b3);
+        hori.addComponent(b4);
+        hori.addComponent(t2);
+        hori.addComponent(d2);
+        // hori.getSize().setHeight(200);
+        hori.setComponentAlignment(b3, Alignment.BOTTOM_LEFT);
+        hori.setComponentAlignment(b4, Alignment.TOP_LEFT);
+        hori.setComponentAlignment(t2, Alignment.BOTTOM_LEFT);
+        hori.setComponentAlignment(d2, Alignment.MIDDLE_LEFT);
+
+        main.addComponent(vert);
+        main.addComponent(hori);
+
+        setCompositionRoot(main);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestForApplicationLayoutThatUsesWholeBrosersSpace.java b/tests/testbench/com/vaadin/tests/TestForApplicationLayoutThatUsesWholeBrosersSpace.java
new file mode 100644
index 0000000000..b15949518a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForApplicationLayoutThatUsesWholeBrosersSpace.java
@@ -0,0 +1,64 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.Application;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.VerticalSplitPanel;
+import com.vaadin.ui.Window;
+
+public class TestForApplicationLayoutThatUsesWholeBrosersSpace extends
+        Application {
+
+    Window main = new Window("Windowing test");
+
+    VerticalLayout rootLayout;
+
+    VerticalSplitPanel firstLevelSplit;
+
+    @Override
+    public void init() {
+        setMainWindow(main);
+
+        rootLayout = new VerticalLayout();
+        main.setContent(rootLayout);
+
+        rootLayout.addComponent(new Label("header"));
+
+        firstLevelSplit = new VerticalSplitPanel();
+
+        final HorizontalSplitPanel secondSplitPanel = new HorizontalSplitPanel();
+        secondSplitPanel.setFirstComponent(new Label("left"));
+
+        final VerticalLayout topRight = new VerticalLayout();
+        topRight.addComponent(new Label("topright header"));
+
+        final Table t = TestForTablesInitialColumnWidthLogicRendering
+                .getTestTable(4, 100);
+        t.setSizeFull();
+        topRight.addComponent(t);
+        topRight.setExpandRatio(t, 1);
+
+        topRight.addComponent(new Label("topright footer"));
+
+        secondSplitPanel.setSecondComponent(topRight);
+
+        final VerticalLayout el = new VerticalLayout();
+        el.addComponent(new Label("B��"));
+
+        firstLevelSplit.setFirstComponent(secondSplitPanel);
+        firstLevelSplit.setSecondComponent(el);
+
+        rootLayout.addComponent(firstLevelSplit);
+        rootLayout.setExpandRatio(firstLevelSplit, 1);
+
+        rootLayout.addComponent(new Label("footer"));
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestForBasicApplicationLayout.java b/tests/testbench/com/vaadin/tests/TestForBasicApplicationLayout.java
new file mode 100644
index 0000000000..e4b7592398
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForBasicApplicationLayout.java
@@ -0,0 +1,101 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.util.Locale;
+
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.themes.Reindeer;
+
+public class TestForBasicApplicationLayout extends CustomComponent {
+
+    private final Button click;
+    private final Button click2;
+    private final TabSheet tab;
+
+    public TestForBasicApplicationLayout() {
+
+        click = new Button("Set height -1", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                tab.setHeight(null);
+            }
+
+        });
+
+        click2 = new Button("Set height 100%", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                tab.setHeight(100, TabSheet.UNITS_PERCENTAGE);
+            }
+
+        });
+
+        final HorizontalSplitPanel sp = new HorizontalSplitPanel();
+        sp.setSplitPosition(290, Sizeable.UNITS_PIXELS);
+
+        final HorizontalSplitPanel sp2 = new HorizontalSplitPanel();
+        sp2.setSplitPosition(255, Sizeable.UNITS_PIXELS);
+
+        final Panel p = new Panel("Accordion Panel");
+        p.setSizeFull();
+
+        tab = new TabSheet();
+        tab.setSizeFull();
+
+        final Panel report = new Panel("Monthly Program Runs",
+                new VerticalLayout());
+        final VerticalLayout controls = new VerticalLayout();
+        controls.setMargin(true);
+        controls.addComponent(new Label("Report tab"));
+        controls.addComponent(click);
+        controls.addComponent(click2);
+        report.addComponent(controls);
+        final DateField cal = new DateField();
+        cal.setResolution(DateField.RESOLUTION_DAY);
+        cal.setLocale(new Locale("en", "US"));
+        report.addComponent(cal);
+        ((VerticalLayout) report.getContent()).setExpandRatio(controls, 1);
+        report.addStyleName(Reindeer.PANEL_LIGHT);
+        report.setHeight(100, Sizeable.UNITS_PERCENTAGE);
+
+        sp2.setFirstComponent(report);
+
+        final Table table = TestForTablesInitialColumnWidthLogicRendering
+                .getTestTable(5, 200);
+        table.setPageLength(15);
+        table.setSelectable(true);
+        table.setRowHeaderMode(Table.ROW_HEADER_MODE_INDEX);
+        table.setColumnCollapsingAllowed(true);
+        table.setColumnReorderingAllowed(true);
+        table.setSortDisabled(false);
+        table.setSizeFull();
+        table.addStyleName("table-inline");
+        sp2.setSecondComponent(table);
+
+        tab.addTab(new Label("Tab1"), "Summary", null);
+        tab.addTab(sp2, "Reports", null);
+        tab.addTab(new Label("Tab 3"), "Statistics", null);
+        tab.addTab(new Label("Tab 4"), "Error Tracking", null);
+        tab.setSelectedTab(sp2);
+
+        sp.setFirstComponent(p);
+        sp.setSecondComponent(tab);
+
+        setCompositionRoot(sp);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestForChildComponentRendering.java b/tests/testbench/com/vaadin/tests/TestForChildComponentRendering.java
new file mode 100644
index 0000000000..2aafe6b38c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForChildComponentRendering.java
@@ -0,0 +1,95 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * 
+ * This Component contains some simple test to see that component updates its
+ * contents propertly.
+ * 
+ * @author IT Mill Ltd.
+ */
+public class TestForChildComponentRendering extends CustomComponent {
+
+    private final VerticalLayout main;
+
+    public TestForChildComponentRendering() {
+
+        main = new VerticalLayout();
+        setCompositionRoot(main);
+        createNewView();
+    }
+
+    public void createNewView() {
+        main.removeAllComponents();
+        main.addComponent(new Label("SDFGFHFHGJGFDSDSSSGFDD"));
+
+        final Link l = new Link();
+        l.setCaption("Siirry Vaadiniin");
+        l.setResource(new ExternalResource("http://www.vaadin.com/"));
+        l.setTargetHeight(200);
+        l.setTargetWidth(500);
+        l.setTargetBorder(Link.TARGET_BORDER_MINIMAL);
+        main.addComponent(l);
+
+        final Select se = new Select();
+        se.setCaption("VALITSET TÄSTÄ");
+        se.addItem("valinta1");
+        se.addItem("Valinta 2");
+
+        Button b = new Button("refresh view", this, "createNewView");
+        main.addComponent(b);
+
+        b = new Button("reorder view", this, "randomReorder");
+        main.addComponent(b);
+
+        b = new Button("remove randomly one component", this,
+                "removeRandomComponent");
+        main.addComponent(b);
+
+    }
+
+    public void randomReorder() {
+        final Iterator<Component> it = main.getComponentIterator();
+        final ArrayList<Component> components = new ArrayList<Component>();
+        while (it.hasNext()) {
+            components.add(it.next());
+        }
+
+        final VerticalLayout v = main;
+        v.removeAllComponents();
+
+        for (int i = components.size(); i > 0; i--) {
+            final int index = (int) (Math.random() * i);
+            v.addComponent(components.get(index));
+            components.remove(index);
+        }
+    }
+
+    public void removeRandomComponent() {
+        final Iterator<Component> it = main.getComponentIterator();
+        final ArrayList<Component> components = new ArrayList<Component>();
+        while (it.hasNext()) {
+            components.add(it.next());
+        }
+        final int size = components.size();
+        final int index = (int) (Math.random() * size);
+        main.removeComponent(components.get(index));
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestForContainerFilterable.java b/tests/testbench/com/vaadin/tests/TestForContainerFilterable.java
new file mode 100644
index 0000000000..7b5124b4f3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForContainerFilterable.java
@@ -0,0 +1,94 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class TestForContainerFilterable extends CustomComponent {
+
+    VerticalLayout lo = new VerticalLayout();
+    IndexedContainer ic = new IndexedContainer();
+    Table t = new Table();
+    private static String parts[] = { "Neo", "Sa", "rem", "the", "adi", "za",
+            "tre", "day", "Ca", "re", "cen", "ter", "mi", "nal" };
+    TextField fooFilter = new TextField("foo-filter");
+    TextField barFilter = new TextField("bar-filter");
+    Button filterButton = new Button("Filter");
+    Label count = new Label();
+
+    public TestForContainerFilterable() {
+        setCompositionRoot(lo);
+
+        // Init datasource
+        ic.addContainerProperty("foo", String.class, "");
+        ic.addContainerProperty("bar", String.class, "");
+        for (int i = 0; i < 1000; i++) {
+            final Object id = ic.addItem();
+            ic.getContainerProperty(id, "foo").setValue(randomWord());
+            ic.getContainerProperty(id, "bar").setValue(randomWord());
+        }
+
+        // Init filtering view
+        final Panel filterPanel = new Panel("Filter", new HorizontalLayout());
+        filterPanel.setWidth(100, Panel.UNITS_PERCENTAGE);
+        lo.addComponent(filterPanel);
+        filterPanel.addComponent(fooFilter);
+        filterPanel.addComponent(barFilter);
+        filterPanel.addComponent(filterButton);
+        fooFilter
+                .setDescription("Filters foo column in case-sensitive contains manner.");
+        barFilter
+                .setDescription("Filters bar column in case-insensitive prefix manner.");
+        filterPanel.addComponent(count);
+
+        // Table
+        lo.addComponent(t);
+        t.setPageLength(12);
+        t.setWidth(100, Table.UNITS_PERCENTAGE);
+        t.setContainerDataSource(ic);
+
+        // Handler
+        filterButton.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                ic.removeAllContainerFilters();
+                if (fooFilter.toString().length() > 0) {
+                    ic.addContainerFilter("foo", fooFilter.toString(), false,
+                            false);
+                }
+                if (barFilter.toString().length() > 0) {
+                    ic.addContainerFilter("bar", barFilter.toString(), true,
+                            true);
+                }
+                count.setValue("Rows in table: " + ic.size());
+            }
+        });
+
+        // Resetbutton
+        lo.addComponent(new Button("Rebind table datasource",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        t.setContainerDataSource(ic);
+                    }
+                }));
+    }
+
+    private String randomWord() {
+        int len = (int) (Math.random() * 4);
+        final StringBuffer buf = new StringBuffer();
+        while (len-- >= 0) {
+            buf.append(parts[(int) (Math.random() * parts.length)]);
+        }
+        return buf.toString();
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/TestForGridLayoutChildComponentRendering.java b/tests/testbench/com/vaadin/tests/TestForGridLayoutChildComponentRendering.java
new file mode 100644
index 0000000000..5c121dd3d3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForGridLayoutChildComponentRendering.java
@@ -0,0 +1,103 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Select;
+
+/**
+ * 
+ * This Component contains some simple test to see that component updates its
+ * contents propertly.
+ * 
+ * @author IT Mill Ltd.
+ */
+public class TestForGridLayoutChildComponentRendering extends CustomComponent {
+
+    private final GridLayout main = new GridLayout(2, 3);
+
+    public TestForGridLayoutChildComponentRendering() {
+
+        setCompositionRoot(main);
+        createNewView();
+    }
+
+    public void createNewView() {
+        main.removeAllComponents();
+        main.addComponent(new Label("SDFGFHFHGJGFDSDSSSGFDD"));
+
+        final Link l = new Link();
+        l.setCaption("Siirry Vaadiniin");
+        l.setResource(new ExternalResource("http://www.vaadin.com/"));
+        l.setTargetHeight(200);
+        l.setTargetWidth(500);
+        l.setTargetBorder(Link.TARGET_BORDER_MINIMAL);
+        main.addComponent(l);
+
+        final Select se = new Select("Tästä valitaan");
+        se.setCaption("Whattaa select");
+        se.addItem("valinta1");
+        se.addItem("Valinta 2");
+
+        main.addComponent(se, 0, 1, 1, 1);
+
+        Button b = new Button("refresh view", this, "createNewView");
+        main.addComponent(b);
+
+        b = new Button("reorder view", this, "randomReorder");
+        main.addComponent(b);
+
+        b = new Button("remove randomly one component", this,
+                "removeRandomComponent");
+        main.addComponent(b);
+
+    }
+
+    public void randomReorder() {
+        final Iterator<Component> it = main.getComponentIterator();
+        final ArrayList<Component> components = new ArrayList<Component>();
+        while (it.hasNext()) {
+            components.add(it.next());
+        }
+
+        main.removeAllComponents();
+
+        final int size = components.size();
+        final int colspanIndex = ((int) (Math.random() * size) / 2) * 2 + 2;
+
+        for (int i = components.size(); i > 0; i--) {
+            final int index = (int) (Math.random() * i);
+            if (i == colspanIndex) {
+                main.addComponent(components.get(index), 0, (size - i) / 2, 1,
+                        (size - i) / 2);
+            } else {
+                main.addComponent(components.get(index));
+            }
+            components.remove(index);
+        }
+    }
+
+    public void removeRandomComponent() {
+        final Iterator<Component> it = main.getComponentIterator();
+        final ArrayList<Component> components = new ArrayList<Component>();
+        while (it.hasNext()) {
+            components.add(it.next());
+        }
+        final int size = components.size();
+        final int index = (int) (Math.random() * size);
+        main.removeComponent(components.get(index));
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestForMultipleStyleNames.java b/tests/testbench/com/vaadin/tests/TestForMultipleStyleNames.java
new file mode 100644
index 0000000000..7bad629913
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForMultipleStyleNames.java
@@ -0,0 +1,97 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TwinColSelect;
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * TODO: Note you need to add Theme under WebContent/VAADIN/Themes/mytheme in
+ * order to see actual visible results on the browser. Currently changes are
+ * visible only by inspecting DOM.
+ * 
+ * @author IT Mill Ltd.
+ */
+public class TestForMultipleStyleNames extends CustomComponent implements
+        ValueChangeListener {
+
+    private final VerticalLayout main = new VerticalLayout();
+
+    private Label l;
+
+    private final TwinColSelect s = new TwinColSelect();
+
+    private ArrayList<String> styleNames2;
+
+    public TestForMultipleStyleNames() {
+        setCompositionRoot(main);
+        createNewView();
+    }
+
+    public void createNewView() {
+        main.removeAllComponents();
+        main.addComponent(new Label(
+                "TK5 supports multiple stylenames for components."));
+        main.addComponent(new Label("Note you need to add Theme under"
+                + " WebContent/VAADIN/Themes/mytheme"
+                + " in order to see actual visible results"
+                + " on the browser. Currently changes are"
+                + " visible only by inspecting DOM."));
+
+        styleNames2 = new ArrayList<String>();
+
+        styleNames2.add("red");
+        styleNames2.add("bold");
+        styleNames2.add("italic");
+
+        s.setContainerDataSource(new IndexedContainer(styleNames2));
+        s.addListener(this);
+        s.setImmediate(true);
+        main.addComponent(s);
+
+        l = new Label("Test labele");
+        main.addComponent(l);
+
+    }
+
+    public void valueChange(ValueChangeEvent event) {
+
+        final String currentStyle = l.getStyleName();
+        final String[] tmp = currentStyle.split(" ");
+        final ArrayList<String> curStyles = new ArrayList<String>();
+        for (int i = 0; i < tmp.length; i++) {
+            if (tmp[i] != "") {
+                curStyles.add(tmp[i]);
+            }
+        }
+
+        final Collection<?> styles = (Collection<?>) s.getValue();
+
+        for (final Iterator<?> iterator = styles.iterator(); iterator.hasNext();) {
+            final String styleName = (String) iterator.next();
+            if (curStyles.contains(styleName)) {
+                // already added
+                curStyles.remove(styleName);
+            } else {
+                l.addStyleName(styleName);
+            }
+        }
+        for (final Iterator<String> iterator2 = curStyles.iterator(); iterator2
+                .hasNext();) {
+            final String object = iterator2.next();
+            l.removeStyleName(object);
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestForNativeWindowing.java b/tests/testbench/com/vaadin/tests/TestForNativeWindowing.java
new file mode 100644
index 0000000000..38fbb42aa2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForNativeWindowing.java
@@ -0,0 +1,127 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class TestForNativeWindowing extends Application {
+
+    Window main = new Window("Windowing test");
+
+    @Override
+    public void init() {
+
+        setMainWindow(main);
+
+        main.addComponent(new Button("Add new subwindow",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        final Window w = new Window("sw "
+                                + System.currentTimeMillis());
+                        main.addWindow(w);
+                        w.setPositionX(100);
+                        w.setPositionY(100);
+                        w.setWidth("200px");
+                        w.setHeight("200px");
+
+                        w.setWidth("100px");
+                        w.setHeight("400px");
+
+                        final Button closebutton = new Button("Close "
+                                + w.getCaption(), new Button.ClickListener() {
+                            public void buttonClick(ClickEvent event) {
+                                main.removeWindow(w);
+                            }
+
+                        });
+                        w.addComponent(closebutton);
+
+                        w.addComponent(new Label(
+                                "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>",
+                                Label.CONTENT_XHTML));
+
+                    }
+                }));
+
+        main.addComponent(new Button(
+                "Open a currently uncreated application level window",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        try {
+                            main.open(
+                                    new com.vaadin.terminal.ExternalResource(
+                                            new URL(
+                                                    getURL(),
+                                                    "mainwin-"
+                                                            + System.currentTimeMillis()
+                                                            + "/")), null);
+                        } catch (final MalformedURLException e) {
+                        }
+                    }
+                }));
+
+        main.addComponent(new Button(
+                "Commit (saves window state: size, place, scrollpos)"));
+    }
+
+    @Override
+    public Window getWindow(String name) {
+
+        final Window w = super.getWindow(name);
+        if (w != null) {
+            return w;
+        }
+
+        if (name != null && name.startsWith("mainwin-")) {
+            final String postfix = name.substring("mainwin-".length());
+            final Window ww = new Window("Window: " + postfix);
+            ww.setName(name);
+            ww.addComponent(new Label(
+                    "This is a application-level window opened with name: "
+                            + name));
+            ww.addComponent(new Button("Click me", new Button.ClickListener() {
+                int state = 0;
+
+                public void buttonClick(ClickEvent event) {
+                    ww.addComponent(new Label("Button clicked " + (++state)
+                            + " times"));
+                }
+            }));
+            addWindow(ww);
+            return ww;
+        }
+
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestForPreconfiguredComponents.java b/tests/testbench/com/vaadin/tests/TestForPreconfiguredComponents.java
new file mode 100644
index 0000000000..e009489683
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForPreconfiguredComponents.java
@@ -0,0 +1,184 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.event.Action;
+import com.vaadin.event.Action.Handler;
+import com.vaadin.ui.AbstractSelect;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.OptionGroup;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.TwinColSelect;
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * @author IT Mill Ltd.
+ */
+public class TestForPreconfiguredComponents extends CustomComponent implements
+        Handler {
+
+    private static final String[] firstnames = new String[] { "John", "Mary",
+            "Joe", "Sarah", "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" };
+
+    private static final String[] lastnames = new String[] { "Torvalds",
+            "Smith", "Jones", "Beck", "Sheridan", "Picard", "Hill", "Fielding",
+            "Einstein" };
+
+    private final VerticalLayout main = new VerticalLayout();
+
+    private final Action[] actions = new Action[] { new Action("edit"),
+            new Action("delete") };
+
+    private Panel al;
+
+    private Tree contextTree;
+
+    public TestForPreconfiguredComponents() {
+
+        setCompositionRoot(main);
+        createNewView();
+    }
+
+    public void createNewView() {
+        main.removeAllComponents();
+        main.addComponent(new Label(
+                "In Toolkit 5 we introduce new components. Previously we"
+                        + " usually used setStyle or some other methods on possibly "
+                        + "multiple steps to configure component for ones needs. These new "
+                        + "server side components are mostly just classes that in constructor "
+                        + "set base class to state that programmer wants."));
+
+        main.addComponent(new Button("commit"));
+
+        Panel test = createTestBench(new CheckBox());
+        test.setCaption("CheckBox (configured from button)");
+        main.addComponent(test);
+
+        AbstractSelect s = new TwinColSelect();
+        fillSelect(s, 20);
+        test = createTestBench(s);
+        test.setCaption("TwinColSelect (configured from select)");
+        main.addComponent(test);
+
+        s = new NativeSelect();
+        fillSelect(s, 20);
+        test = createTestBench(s);
+        test.setCaption("Native (configured from select)");
+        main.addComponent(test);
+
+        s = new OptionGroup();
+        fillSelect(s, 20);
+        test = createTestBench(s);
+        test.setCaption("OptionGroup (configured from select)");
+        main.addComponent(test);
+
+        s = new OptionGroup();
+        fillSelect(s, 20);
+        s.setMultiSelect(true);
+        test = createTestBench(s);
+        test.setCaption("OptionGroup + multiselect manually (configured from select)");
+        main.addComponent(test);
+
+        final Button b = new Button("refresh view", this, "createNewView");
+        main.addComponent(b);
+
+    }
+
+    public static void fillSelect(AbstractSelect s, int items) {
+        for (int i = 0; i < items; i++) {
+            final String name = firstnames[(int) (Math.random() * (firstnames.length - 1))]
+                    + " "
+                    + lastnames[(int) (Math.random() * (lastnames.length - 1))];
+            s.addItem(name);
+        }
+    }
+
+    public Tree createTestTree() {
+        Tree t = new Tree("Tree");
+        final String[] names = new String[100];
+        for (int i = 0; i < names.length; i++) {
+            names[i] = firstnames[(int) (Math.random() * (firstnames.length - 1))]
+                    + " "
+                    + lastnames[(int) (Math.random() * (lastnames.length - 1))];
+        }
+
+        // Create tree
+        t = new Tree("Organization Structure");
+        for (int i = 0; i < 100; i++) {
+            t.addItem(names[i]);
+            final String parent = names[(int) (Math.random() * (names.length - 1))];
+            if (t.containsId(parent)) {
+                t.setParent(names[i], parent);
+            }
+        }
+
+        // Forbid childless people to have children (makes them leaves)
+        for (int i = 0; i < 100; i++) {
+            if (!t.hasChildren(names[i])) {
+                t.setChildrenAllowed(names[i], false);
+            }
+        }
+        return t;
+    }
+
+    public Panel createTestBench(Component t) {
+        final Panel ol = new Panel();
+        ol.setContent(new HorizontalLayout());
+
+        ol.addComponent(t);
+
+        final HorizontalLayout ol2 = new HorizontalLayout();
+        final Panel status = new Panel("Events");
+        final Button clear = new Button("clear event log");
+        clear.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                status.removeAllComponents();
+                status.addComponent(ol2);
+            }
+        });
+        ol2.addComponent(clear);
+        final Button commit = new Button("commit changes");
+        ol2.addComponent(commit);
+        status.addComponent(ol2);
+
+        status.setHeight("300px");
+        status.setWidth("400px");
+
+        ol.addComponent(status);
+
+        t.addListener(new Listener() {
+            public void componentEvent(Event event) {
+                status.addComponent(new Label(event.getClass().getName()));
+                status.addComponent(new Label("selected: "
+                        + event.getSource().toString()));
+            }
+        });
+
+        return ol;
+    }
+
+    public Action[] getActions(Object target, Object sender) {
+        return actions;
+    }
+
+    public void handleAction(Action action, Object sender, Object target) {
+        if (action == actions[1]) {
+            al.addComponent(new Label("Delete selected on " + target));
+            contextTree.removeItem(target);
+
+        } else {
+            al.addComponent(new Label("Edit selected on " + target));
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/TestForRichTextEditor.java b/tests/testbench/com/vaadin/tests/TestForRichTextEditor.java
new file mode 100644
index 0000000000..50b7be91ef
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForRichTextEditor.java
@@ -0,0 +1,66 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.RichTextArea;
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * 
+ * @author IT Mill Ltd.
+ */
+public class TestForRichTextEditor extends CustomComponent implements
+        ValueChangeListener {
+
+    private final VerticalLayout main = new VerticalLayout();
+
+    private Label l;
+
+    private RichTextArea rte;
+
+    public TestForRichTextEditor() {
+
+        setCompositionRoot(main);
+        createNewView();
+    }
+
+    public void createNewView() {
+        main.removeAllComponents();
+        main.addComponent(new Label(
+                "RTE uses google richtextArea and their examples toolbar."));
+
+        rte = new RichTextArea();
+        rte.addListener(this);
+
+        main.addComponent(rte);
+
+        main.addComponent(new Button("commit content to label below"));
+
+        l = new Label("", Label.CONTENT_XHTML);
+        main.addComponent(l);
+
+        CheckBox b = new CheckBox("enabled");
+        b.setImmediate(true);
+        b.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                rte.setEnabled(!rte.isEnabled());
+            }
+        });
+        main.addComponent(b);
+
+    }
+
+    public void valueChange(ValueChangeEvent event) {
+        l.setValue(rte.getValue());
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestForStyledUpload.java b/tests/testbench/com/vaadin/tests/TestForStyledUpload.java
new file mode 100644
index 0000000000..6a6ae130e5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForStyledUpload.java
@@ -0,0 +1,286 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.management.ManagementFactory;
+import java.lang.management.MemoryMXBean;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.StreamResource;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.ProgressIndicator;
+import com.vaadin.ui.Upload;
+import com.vaadin.ui.Upload.FailedEvent;
+import com.vaadin.ui.Upload.FailedListener;
+import com.vaadin.ui.Upload.FinishedEvent;
+import com.vaadin.ui.Upload.FinishedListener;
+import com.vaadin.ui.Upload.StartedEvent;
+import com.vaadin.ui.Upload.StartedListener;
+import com.vaadin.ui.Upload.SucceededEvent;
+import com.vaadin.ui.Upload.SucceededListener;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class TestForStyledUpload extends Application implements
+        Upload.FinishedListener, FailedListener, SucceededListener,
+        StartedListener {
+
+    Layout main = new VerticalLayout();
+
+    TmpFileBuffer buffer = new TmpFileBuffer();
+
+    Panel status = new Panel("Uploaded file:");
+
+    private final Upload up;
+
+    private final Label l;
+
+    private final Label transferred = new Label("");
+
+    private final ProgressIndicator pi = new ProgressIndicator();
+
+    private final Label memoryStatus;
+
+    public TestForStyledUpload() {
+        main.addComponent(new Label(
+                "Clicking on button b updates information about upload components status or same with garbage collector."));
+
+        up = new Upload(null, buffer);
+        up.setButtonCaption("Select file");
+        up.setImmediate(true);
+        up.addListener((FinishedListener) this);
+        up.addListener((FailedListener) this);
+        up.addListener((SucceededListener) this);
+        up.addListener((StartedListener) this);
+
+        up.addListener(new Upload.ProgressListener() {
+
+            public void updateProgress(long readBytes, long contentLenght) {
+                pi.setValue(new Float(readBytes / (float) contentLenght));
+
+                refreshMemUsage();
+
+                transferred.setValue("Transferred " + readBytes + " of "
+                        + contentLenght);
+            }
+
+        });
+
+        final Button b = new Button("Update status", this, "readState");
+
+        final Button c = new Button("Update status with gc", this, "gc");
+
+        main.addComponent(up);
+        l = new Label("Idle");
+        main.addComponent(l);
+
+        pi.setVisible(false);
+        pi.setPollingInterval(300);
+        main.addComponent(pi);
+        main.addComponent(transferred);
+
+        memoryStatus = new Label();
+        main.addComponent(memoryStatus);
+
+        status.setVisible(false);
+        main.addComponent(status);
+
+        Button cancel = new Button("Cancel current upload");
+        cancel.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                buffer.cancel();
+            }
+        });
+
+        main.addComponent(cancel);
+
+        final Button restart = new Button("Restart demo application");
+        restart.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                TestForStyledUpload.this.close();
+            }
+        });
+        main.addComponent(restart);
+        main.addComponent(b);
+        main.addComponent(c);
+
+    }
+
+    public void gc() {
+        Runtime.getRuntime().gc();
+        readState();
+    }
+
+    public void readState() {
+        final StringBuffer sb = new StringBuffer();
+
+        if (up.isUploading()) {
+            sb.append("Uploading...");
+            sb.append(up.getBytesRead());
+            sb.append("/");
+            sb.append(up.getUploadSize());
+            sb.append(" ");
+            sb.append(Math.round(100 * up.getBytesRead()
+                    / (double) up.getUploadSize()));
+            sb.append("%");
+        } else {
+            sb.append("Idle");
+        }
+        l.setValue(sb.toString());
+        refreshMemUsage();
+    }
+
+    public void uploadFinished(FinishedEvent event) {
+        status.removeAllComponents();
+        final InputStream stream = buffer.getStream();
+        if (stream == null) {
+            status.addComponent(new Label(
+                    "Upload finished, but output buffer is null!!"));
+        } else {
+            status.addComponent(new Label(
+                    "<b>Name:</b> " + event.getFilename(), Label.CONTENT_XHTML));
+            status.addComponent(new Label("<b>Mimetype:</b> "
+                    + event.getMIMEType(), Label.CONTENT_XHTML));
+            status.addComponent(new Label("<b>Size:</b> " + event.getLength()
+                    + " bytes.", Label.CONTENT_XHTML));
+
+            status.addComponent(new Link("Download " + buffer.getFileName(),
+                    new StreamResource(buffer, buffer.getFileName(), this)));
+
+            status.setVisible(true);
+        }
+    }
+
+    public interface Buffer extends StreamResource.StreamSource,
+            Upload.Receiver {
+
+        String getFileName();
+    }
+
+    public class TmpFileBuffer implements Buffer {
+        String mimeType;
+
+        String fileName;
+
+        private File file;
+
+        private FileInputStream stream;
+
+        public TmpFileBuffer() {
+            final String tempFileName = "upload_tmpfile_"
+                    + System.currentTimeMillis();
+            try {
+                file = File.createTempFile(tempFileName, null);
+            } catch (final IOException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+
+        }
+
+        public void cancel() {
+            up.interruptUpload();
+        }
+
+        public InputStream getStream() {
+            if (file == null) {
+                return null;
+            }
+            try {
+                stream = new FileInputStream(file);
+                return stream;
+            } catch (final FileNotFoundException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+            return null;
+        }
+
+        /**
+         * @see com.vaadin.ui.Upload.Receiver#receiveUpload(String, String)
+         */
+        public OutputStream receiveUpload(String filename, String MIMEType) {
+            fileName = filename;
+            mimeType = MIMEType;
+            try {
+                return new FileOutputStream(file);
+            } catch (final FileNotFoundException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+            return null;
+        }
+
+        /**
+         * Returns the fileName.
+         * 
+         * @return String
+         */
+        public String getFileName() {
+            return fileName;
+        }
+
+        /**
+         * Returns the mimeType.
+         * 
+         * @return String
+         */
+        public String getMimeType() {
+            return mimeType;
+        }
+
+    }
+
+    public void uploadFailed(FailedEvent event) {
+        pi.setVisible(false);
+        l.setValue("Upload was interrupted");
+    }
+
+    public void uploadSucceeded(SucceededEvent event) {
+        pi.setVisible(false);
+        l.setValue("Finished upload, idle");
+        System.out.println(event);
+    }
+
+    private void refreshMemUsage() {
+        // memoryStatus.setValue("Not available in Java 1.4");
+        StringBuffer mem = new StringBuffer();
+        MemoryMXBean mmBean = ManagementFactory.getMemoryMXBean();
+        mem.append("Heap (M):");
+        mem.append(mmBean.getHeapMemoryUsage().getUsed() / 1048576);
+        mem.append(" | Non-Heap (M):");
+        mem.append(mmBean.getNonHeapMemoryUsage().getUsed() / 1048576);
+        memoryStatus.setValue(mem.toString());
+
+    }
+
+    public void uploadStarted(StartedEvent event) {
+        pi.setVisible(true);
+        l.setValue("Started uploading file " + event.getFilename());
+    }
+
+    @Override
+    public void init() {
+        Window w = new Window();
+        w.setTheme("runo");
+        w.addComponent(main);
+        setMainWindow(w);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestForTabSheet.java b/tests/testbench/com/vaadin/tests/TestForTabSheet.java
new file mode 100644
index 0000000000..938bf43115
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForTabSheet.java
@@ -0,0 +1,58 @@
+package com.vaadin.tests;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
+
+public class TestForTabSheet extends CustomComponent implements
+        Button.ClickListener, TabSheet.SelectedTabChangeListener {
+    TabSheet tabsheet = new TabSheet();
+    Button tab1_root = new Button("Push this button");
+    Label tab2_root = new Label("Contents of Second Tab");
+    Label tab3_root = new Label("Contents of Third Tab");
+
+    TestForTabSheet() {
+        setCompositionRoot(tabsheet);
+
+        tabsheet.addListener(this);
+
+        /* Listen for button click events. */
+        tab1_root.addListener(this);
+        tabsheet.addTab(tab1_root, "First Tab", null);
+
+        /* A tab that is initially disabled. */
+        tab2_root.setEnabled(false);
+        tabsheet.addTab(tab2_root, "Second Tab", null);
+
+        /* A tab that is initially disabled. */
+        tab3_root.setEnabled(false);
+        tabsheet.addTab(tab3_root, "Third tab", null);
+    }
+
+    public void buttonClick(ClickEvent event) {
+        System.out.println("tab2=" + tab2_root.isEnabled() + " tab3="
+                + tab3_root.isEnabled());
+        tab2_root.setEnabled(true);
+        tab3_root.setEnabled(true);
+    }
+
+    public void selectedTabChange(SelectedTabChangeEvent event) {
+        /*
+         * Cast to a TabSheet. This isn't really necessary in this example, as
+         * we have only one TabSheet component, but would be useful if there
+         * were multiple TabSheets.
+         */
+        TabSheet source = (TabSheet) event.getSource();
+        if (source == tabsheet) {
+            /* If the first tab was selected. */
+            if (source.getSelectedTab() == tab1_root) {
+                System.out.println("foo");
+                tab2_root.setEnabled(false);
+                tab3_root.setEnabled(false);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/TestForTablesInitialColumnWidthLogicRendering.java b/tests/testbench/com/vaadin/tests/TestForTablesInitialColumnWidthLogicRendering.java
new file mode 100644
index 0000000000..d849ab37a0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForTablesInitialColumnWidthLogicRendering.java
@@ -0,0 +1,158 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.util.Iterator;
+import java.util.Vector;
+
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * 
+ * This Component contains some simple test to see that component updates its
+ * contents propertly.
+ * 
+ * @author IT Mill Ltd.
+ */
+public class TestForTablesInitialColumnWidthLogicRendering extends
+        CustomComponent {
+
+    private final VerticalLayout main = new VerticalLayout();
+
+    public TestForTablesInitialColumnWidthLogicRendering() {
+
+        setCompositionRoot(main);
+        createNewView();
+    }
+
+    public void createNewView() {
+        main.removeAllComponents();
+        main.addComponent(new Label(
+                "Below are same tables that all should render somewhat nice. Also when testing, you might want to try resizing window."));
+
+        Table t;
+
+        Layout lo = new VerticalLayout();
+        lo.setWidth("600px");
+        lo.setHeight("250px");
+
+        t = getTestTable(4, 50);
+        t.setSizeFull();
+        lo.setCaption("Fullsize table insize 400x250px layout");
+        lo.addComponent(t);
+        main.addComponent(lo);
+
+        // t = new Table("Empty table");
+        // main.addComponent(t);
+
+        t = getTestTable(5, 0);
+        t.setCaption("Table with only headers");
+        // main.addComponent(t);
+
+        t = getTestTable(5, 200);
+        t.setCaption("Table with  some cols and lot of rows");
+        main.addComponent(t);
+
+        t = getTestTable(5, 5);
+        t.setCaption("Table with  some cols and rows rows, some col widths fixed");
+
+        Iterator<?> it = t.getContainerPropertyIds().iterator();
+        it.next();
+        it.next();
+        t.setColumnWidth(it.next(), 30);
+        t.setColumnWidth(it.next(), 30);
+        t.setWidth("700px");
+        main.addComponent(t);
+
+        t = getTestTable(12, 4);
+        t.setCaption("Table with  some rows and lot of columns");
+        main.addComponent(t);
+
+        t = getTestTable(3, 40);
+        t.setCaption("Table with some columns and wide explicit width. (Ought to widen columns to use all space)");
+        t.setWidth("1000px");
+        main.addComponent(t);
+
+        t = getTestTable(12, 4);
+        t.setCaption("Table with  some rows and lot of columns, width == 100%");
+        t.setWidth(100, Table.UNITS_PERCENTAGE);
+        main.addComponent(t);
+
+        t = getTestTable(12, 100);
+        t.setCaption("Table with  lot of rows and lot of columns, width == 50%");
+        t.setWidth(50, Table.UNITS_PERCENTAGE);
+        main.addComponent(t);
+
+        t = getTestTable(5, 100);
+        t.setCaption("Table with 40 rows");
+        // main.addComponent(t);
+
+        t = getTestTable(4, 4);
+        t.setCaption("Table with some rows and width = 200px");
+
+        t.setWidth("200px");
+        main.addComponent(t);
+
+        final Button b = new Button("refresh view", this, "createNewView");
+        main.addComponent(b);
+
+    }
+
+    public static Table getTestTable(int cols, int rows) {
+        final Table t = new Table();
+        t.setColumnCollapsingAllowed(true);
+        for (int i = 0; i < cols; i++) {
+            t.addContainerProperty(testString[i], String.class, "");
+        }
+        t.addContainerProperty("button", Button.class, null);
+        for (int i = 0; i < rows; i++) {
+            final Vector<Object> content = new Vector<Object>();
+            for (int j = 0; j < cols; j++) {
+                content.add(rndString());
+            }
+            Button button = new Button("b", new Button.ClickListener() {
+
+                public void buttonClick(ClickEvent event) {
+                    System.out.println("b click");
+
+                }
+            });
+            button.setDescription("Yep yep");
+            button.setComponentError(new UserError("Error"));
+            content.add(button);
+            t.addItem(content.toArray(), "" + i);
+        }
+        return t;
+    }
+
+    static String[] testString = new String[] { "Jacob", "Michael", "Joshua",
+            "Matthew", "Ethan", "Andrew", "Daniel", "Anthony", "Christopher",
+            "Joseph", "William", "Alexander", "Ryan", "David", "Nicholas",
+            "Tyler", "James", "John", "Jonathan", "Nathan", "Samuel",
+            "Christian", "Noah", "Dylan", "Benjamin", "Logan", "Brandon",
+            "Gabriel", "Zachary", "Jose", "Elijah", "Angel", "Kevin", "Jack",
+            "Caleb", "Justin", "Austin", "Evan", "Robert", "Thomas", "Luke",
+            "Mason", "Aidan", "Jackson", "Isaiah", "Jordan", "Gavin", "Connor",
+            "Aiden", "Isaac", "Jason", "Cameron", "Hunter", "Jayden", "Juan",
+            "Charles", "Aaron", "Lucas", "Luis", "Owen", "Landon", "Diego",
+            "Brian", "Adam", "Adrian", "Kyle", "Eric", "Ian", "Nathaniel",
+            "Carlos", "Alex", "Bryan", "Jesus", "Julian", "Sean", "Carter",
+            "Hayden", "Jeremiah", "Cole", "Brayden", "Wyatt", "Chase",
+            "Steven", "Timothy", "Dominic", "Sebastian", "Xavier", "Jaden",
+            "Jesse", "Devin", "Seth", "Antonio", "Richard", "Miguel", "Colin",
+            "Cody", "Alejandro", "Caden", "Blake", "Carson" };
+
+    public static String rndString() {
+        return testString[(int) (Math.random() * testString.length)];
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestForTrees.java b/tests/testbench/com/vaadin/tests/TestForTrees.java
new file mode 100644
index 0000000000..32139511e1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForTrees.java
@@ -0,0 +1,166 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.event.Action;
+import com.vaadin.event.Action.Handler;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * Some test cases for trees. Events panel logs events that happen server side.
+ * 
+ * @author IT Mill Ltd.
+ */
+public class TestForTrees extends CustomComponent implements Handler {
+
+    private static final String[] firstnames = new String[] { "John", "Mary",
+            "Joe", "Sarah", "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" };
+
+    private static final String[] lastnames = new String[] { "Torvalds",
+            "Smith", "Jones", "Beck", "Sheridan", "Picard", "Hill", "Fielding",
+            "Einstein" };
+
+    private final VerticalLayout main = new VerticalLayout();
+
+    private final Action[] actions = new Action[] { new Action("edit"),
+            new Action("delete") };
+
+    private Panel al;
+
+    private Tree contextTree;
+
+    public TestForTrees() {
+
+        setCompositionRoot(main);
+        createNewView();
+    }
+
+    public void createNewView() {
+        main.removeAllComponents();
+        main.addComponent(new Label(
+                "Some test cases for trees. Events panel logs events that happen server side."));
+
+        main.addComponent(new Button("commit"));
+
+        Tree t;
+
+        t = createTestTree();
+        t.setCaption("Default settings");
+        main.addComponent(createTestBench(t));
+
+        t = createTestTree();
+        t.setCaption("Multiselect settings");
+        t.setMultiSelect(true);
+        main.addComponent(createTestBench(t));
+
+        t = createTestTree();
+        t.setCaption("Multiselect and immediate");
+        t.setImmediate(true);
+        t.setMultiSelect(true);
+        main.addComponent(createTestBench(t));
+
+        t = createTestTree();
+        t.setCaption("immediate");
+        t.setImmediate(true);
+        main.addComponent(createTestBench(t));
+
+        t = createTestTree();
+        t.setCaption("with actions");
+        t.setImmediate(true);
+        t.addActionHandler(this);
+        final AbstractOrderedLayout ol = (AbstractOrderedLayout) createTestBench(t);
+        al = new Panel("action log");
+        ol.addComponent(al);
+        main.addComponent(ol);
+        contextTree = t;
+
+        final Button b = new Button("refresh view", this, "createNewView");
+        main.addComponent(b);
+
+    }
+
+    public Tree createTestTree() {
+        Tree t = new Tree("Tree");
+        final String[] names = new String[100];
+        for (int i = 0; i < names.length; i++) {
+            names[i] = firstnames[(int) (Math.random() * (firstnames.length - 1))]
+                    + " "
+                    + lastnames[(int) (Math.random() * (lastnames.length - 1))];
+        }
+
+        // Create tree
+        t = new Tree("Organization Structure");
+        for (int i = 0; i < 100; i++) {
+            t.addItem(names[i]);
+            final String parent = names[(int) (Math.random() * (names.length - 1))];
+            if (t.containsId(parent)) {
+                t.setParent(names[i], parent);
+            }
+        }
+
+        // Forbid childless people to have children (makes them leaves)
+        for (int i = 0; i < 100; i++) {
+            if (!t.hasChildren(names[i])) {
+                t.setChildrenAllowed(names[i], false);
+            }
+        }
+        return t;
+    }
+
+    public Component createTestBench(Tree t) {
+        final HorizontalLayout ol = new HorizontalLayout();
+
+        ol.addComponent(t);
+
+        final Panel status = new Panel("Events");
+        final Button clear = new Button("c");
+        clear.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                status.removeAllComponents();
+                status.addComponent(clear);
+            }
+        });
+        status.addComponent(clear);
+
+        status.setHeight("300px");
+        status.setWidth("400px");
+
+        ol.addComponent(status);
+
+        t.addListener(new Listener() {
+            public void componentEvent(Event event) {
+                status.addComponent(new Label(event.getClass().getName()));
+                status.addComponent(new Label("selected: "
+                        + event.getSource().toString()));
+            }
+        });
+
+        return ol;
+    }
+
+    public Action[] getActions(Object target, Object sender) {
+        return actions;
+    }
+
+    public void handleAction(Action action, Object sender, Object target) {
+        if (action == actions[1]) {
+            al.addComponent(new Label("Delete selected on " + target));
+            contextTree.removeItem(target);
+
+        } else {
+            al.addComponent(new Label("Edit selected on " + target));
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/TestForUpload.java b/tests/testbench/com/vaadin/tests/TestForUpload.java
new file mode 100644
index 0000000000..3fed6b233e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForUpload.java
@@ -0,0 +1,433 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.management.ManagementFactory;
+import java.lang.management.MemoryMXBean;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.terminal.StreamResource;
+import com.vaadin.ui.AbstractField;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.ProgressIndicator;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Upload;
+import com.vaadin.ui.Upload.FinishedEvent;
+import com.vaadin.ui.Upload.StartedEvent;
+import com.vaadin.ui.Upload.StartedListener;
+import com.vaadin.ui.VerticalLayout;
+
+public class TestForUpload extends CustomComponent implements
+        Upload.ProgressListener {
+
+    private static final long serialVersionUID = -3400119871764256575L;
+
+    Layout main = new VerticalLayout();
+
+    Buffer buffer = new MemoryBuffer();
+
+    Panel status = new Panel("Uploaded file:");
+
+    private final Upload up;
+
+    private final Label l;
+
+    private final ProgressIndicator pi = new ProgressIndicator();
+    private final ProgressIndicator pi2 = new ProgressIndicator();
+
+    private final Label memoryStatus;
+
+    private final Select uploadBufferSelector;
+
+    private TextField textField;
+
+    private Label textFieldValue;
+
+    private CheckBox beSluggish = new CheckBox("Be sluggish");
+
+    private CheckBox throwExecption = new CheckBox(
+            "Throw exception in receiver");
+
+    private Button interrupt = new Button("Interrupt upload");
+
+    public TestForUpload() {
+        setCompositionRoot(main);
+        main.addComponent(new Label(
+                "This is a simple test for upload application. "
+                        + "Upload should work with big files and concurrent "
+                        + "requests should not be blocked. Button 'b' reads "
+                        + "current state into label below it. Memory receiver "
+                        + "streams upload contents into memory. You may track"
+                        + "consumption."
+                        + "tempfile receiver writes upload to file and "
+                        + "should have low memory consumption."));
+
+        main.addComponent(new Label(
+                "Clicking on button b updates information about upload components status or same with garbage collector."));
+
+        textField = new TextField("Test field");
+        textFieldValue = new Label();
+        main.addComponent(textField);
+        main.addComponent(textFieldValue);
+
+        up = new Upload("Upload", buffer);
+        up.setImmediate(true);
+        up.addListener(new Listener() {
+            private static final long serialVersionUID = -8319074730512324303L;
+
+            public void componentEvent(Event event) {
+                // print out all events fired by upload for debug purposes
+                System.out.println("Upload fired event | " + event);
+            }
+        });
+
+        up.addListener(new StartedListener() {
+            private static final long serialVersionUID = 5508883803861085154L;
+
+            public void uploadStarted(StartedEvent event) {
+                pi.setVisible(true);
+                pi2.setVisible(true);
+                l.setValue("Started uploading file " + event.getFilename());
+                textFieldValue
+                        .setValue(" TestFields value at the upload start is:"
+                                + textField.getValue());
+            }
+        });
+
+        up.addListener(new Upload.FinishedListener() {
+            private static final long serialVersionUID = -3773034195991947371L;
+
+            public void uploadFinished(FinishedEvent event) {
+                pi.setVisible(false);
+                pi2.setVisible(false);
+                if (event instanceof Upload.FailedEvent) {
+                    Exception reason = ((Upload.FailedEvent) event).getReason();
+                    l.setValue("Finished with failure ( " + reason
+                            + "  ), idle");
+                } else if (event instanceof Upload.SucceededEvent) {
+                    l.setValue("Finished with succes, idle");
+                } else {
+                    l.setValue("Finished with unknow event");
+                }
+
+                status.removeAllComponents();
+                final InputStream stream = buffer.getStream();
+                if (stream == null) {
+                    status.addComponent(new Label(
+                            "Upload finished, but output buffer is null"));
+                } else {
+                    status.addComponent(new Label("<b>Name:</b> "
+                            + event.getFilename(), Label.CONTENT_XHTML));
+                    status.addComponent(new Label("<b>Mimetype:</b> "
+                            + event.getMIMEType(), Label.CONTENT_XHTML));
+                    status.addComponent(new Label("<b>Size:</b> "
+                            + event.getLength() + " bytes.",
+                            Label.CONTENT_XHTML));
+
+                    status.addComponent(new Link("Download "
+                            + buffer.getFileName(), new StreamResource(buffer,
+                            buffer.getFileName(), getApplication())));
+
+                    status.setVisible(true);
+                }
+
+                setBuffer();
+            }
+        });
+
+        up.addListener(new Upload.ProgressListener() {
+
+            public void updateProgress(long readBytes, long contentLenght) {
+                pi2.setValue(new Float(readBytes / (float) contentLenght));
+
+                refreshMemUsage();
+            }
+
+        });
+
+        final Button b = new Button("Reed state from upload", this, "readState");
+
+        final Button c = new Button("Force GC", this, "gc");
+
+        main.addComponent(b);
+        main.addComponent(c);
+        main.addComponent(beSluggish);
+        main.addComponent(throwExecption);
+        main.addComponent(interrupt);
+        interrupt.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                up.interruptUpload();
+            }
+        });
+
+        uploadBufferSelector = new Select("StreamVariable type");
+        uploadBufferSelector.setImmediate(true);
+        uploadBufferSelector.addItem("memory");
+        uploadBufferSelector.setValue("memory");
+        uploadBufferSelector.addItem("tempfile");
+        uploadBufferSelector
+                .addListener(new AbstractField.ValueChangeListener() {
+                    public void valueChange(ValueChangeEvent event) {
+                        setBuffer();
+                    }
+                });
+        main.addComponent(uploadBufferSelector);
+
+        main.addComponent(up);
+        l = new Label("Idle");
+        main.addComponent(l);
+
+        pi.setVisible(false);
+        pi.setPollingInterval(1000);
+        main.addComponent(pi);
+
+        pi2.setVisible(false);
+        pi2.setPollingInterval(1000);
+        main.addComponent(pi2);
+
+        memoryStatus = new Label();
+        main.addComponent(memoryStatus);
+
+        status.setVisible(false);
+        main.addComponent(status);
+
+        final Button restart = new Button("R");
+        restart.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                getApplication().close();
+            }
+        });
+        main.addComponent(restart);
+
+    }
+
+    private void setBuffer() {
+        final String id = (String) uploadBufferSelector.getValue();
+        if ("memory".equals(id)) {
+            buffer = new MemoryBuffer();
+        } else if ("tempfile".equals(id)) {
+            buffer = new TmpFileBuffer();
+        }
+        up.setReceiver(buffer);
+    }
+
+    public void gc() {
+        Runtime.getRuntime().gc();
+    }
+
+    public void readState() {
+        final StringBuffer sb = new StringBuffer();
+
+        if (up.isUploading()) {
+            sb.append("Uploading...");
+            sb.append(up.getBytesRead());
+            sb.append("/");
+            sb.append(up.getUploadSize());
+            sb.append(" ");
+            sb.append(Math.round(100 * up.getBytesRead()
+                    / (double) up.getUploadSize()));
+            sb.append("%");
+        } else {
+            sb.append("Idle");
+        }
+        l.setValue(sb.toString());
+        refreshMemUsage();
+    }
+
+    public interface Buffer extends StreamResource.StreamSource,
+            Upload.Receiver {
+
+        String getFileName();
+    }
+
+    public class MemoryBuffer implements Buffer {
+        ByteArrayOutputStream outputBuffer = null;
+
+        String mimeType;
+
+        String fileName;
+
+        public MemoryBuffer() {
+
+        }
+
+        public InputStream getStream() {
+            if (outputBuffer == null) {
+                return null;
+            }
+            return new ByteArrayInputStream(outputBuffer.toByteArray());
+        }
+
+        /**
+         * @see com.vaadin.ui.Upload.Receiver#receiveUpload(String, String)
+         */
+        public OutputStream receiveUpload(String filename, String MIMEType) {
+            fileName = filename;
+            mimeType = MIMEType;
+            outputBuffer = new ByteArrayOutputStream() {
+                @Override
+                public synchronized void write(byte[] b, int off, int len) {
+                    beSluggish();
+                    throwExecption();
+                    super.write(b, off, len);
+                }
+
+            };
+            return outputBuffer;
+        }
+
+        /**
+         * Returns the fileName.
+         * 
+         * @return String
+         */
+        public String getFileName() {
+            return fileName;
+        }
+
+        /**
+         * Returns the mimeType.
+         * 
+         * @return String
+         */
+        public String getMimeType() {
+            return mimeType;
+        }
+
+    }
+
+    public class TmpFileBuffer implements Buffer {
+        String mimeType;
+
+        String fileName;
+
+        private File file;
+
+        public TmpFileBuffer() {
+            final String tempFileName = "upload_tmpfile_"
+                    + System.currentTimeMillis();
+            try {
+                file = File.createTempFile(tempFileName, null);
+            } catch (final IOException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+
+        }
+
+        public InputStream getStream() {
+            if (file == null) {
+                return null;
+            }
+            try {
+                return new FileInputStream(file);
+            } catch (final FileNotFoundException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+            return null;
+        }
+
+        /**
+         * @see com.vaadin.ui.Upload.Receiver#receiveUpload(String, String)
+         */
+        public OutputStream receiveUpload(String filename, String MIMEType) {
+            fileName = filename;
+            mimeType = MIMEType;
+            try {
+                return new FileOutputStream(file) {
+
+                    @Override
+                    public void write(byte[] b, int off, int len)
+                            throws IOException {
+                        beSluggish();
+                        throwExecption();
+                        super.write(b, off, len);
+                    }
+
+                };
+            } catch (final FileNotFoundException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+            return null;
+        }
+
+        /**
+         * Returns the fileName.
+         * 
+         * @return String
+         */
+        public String getFileName() {
+            return fileName;
+        }
+
+        /**
+         * Returns the mimeType.
+         * 
+         * @return String
+         */
+        public String getMimeType() {
+            return mimeType;
+        }
+
+    }
+
+    public void updateProgress(long readBytes, long contentLenght) {
+        pi.setValue(new Float(readBytes / (float) contentLenght));
+
+        refreshMemUsage();
+    }
+
+    private void refreshMemUsage() {
+        memoryStatus.setValue("Not available in Java 1.4");
+
+        StringBuffer mem = new StringBuffer();
+        MemoryMXBean mmBean = ManagementFactory.getMemoryMXBean();
+        mem.append("Heap (M):");
+        mem.append(mmBean.getHeapMemoryUsage().getUsed() / 1048576);
+        mem.append(" | Non-Heap (M):");
+        mem.append(mmBean.getNonHeapMemoryUsage().getUsed() / 1048576);
+        memoryStatus.setValue(mem.toString());
+
+    }
+
+    private void beSluggish() {
+        if (beSluggish.booleanValue()) {
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+        }
+    }
+
+    private void throwExecption() {
+        if (throwExecption.booleanValue()) {
+            throwExecption.setValue(false);
+            throw new RuntimeException("Test execption in receiver.");
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/TestForWindowOpen.java b/tests/testbench/com/vaadin/tests/TestForWindowOpen.java
new file mode 100644
index 0000000000..74e3af46ea
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForWindowOpen.java
@@ -0,0 +1,59 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.VerticalLayout;
+
+public class TestForWindowOpen extends CustomComponent {
+
+    public TestForWindowOpen() {
+
+        final VerticalLayout main = new VerticalLayout();
+        setCompositionRoot(main);
+
+        main.addComponent(new Button("Open in this window",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        final ExternalResource r = new ExternalResource(
+                                "http://www.google.com");
+                        getApplication().getMainWindow().open(r);
+
+                    }
+
+                }));
+
+        main.addComponent(new Button("Open in target \"mytarget\"",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        final ExternalResource r = new ExternalResource(
+                                "http://www.google.com");
+                        getApplication().getMainWindow().open(r, "mytarget");
+
+                    }
+
+                }));
+
+        main.addComponent(new Button("Open in target \"secondtarget\"",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        final ExternalResource r = new ExternalResource(
+                                "http://www.google.com");
+                        getApplication().getMainWindow()
+                                .open(r, "secondtarget");
+
+                    }
+
+                }));
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestForWindowing.java b/tests/testbench/com/vaadin/tests/TestForWindowing.java
new file mode 100644
index 0000000000..fb7c388567
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestForWindowing.java
@@ -0,0 +1,99 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.ui.AbstractSelect;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.OptionGroup;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.Slider;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class TestForWindowing extends CustomComponent {
+
+    private Select s2;
+
+    public TestForWindowing() {
+
+        final VerticalLayout main = new VerticalLayout();
+
+        main.addComponent(new Label(
+                "Click the button to create a new inline window."));
+
+        final CheckBox asModal = new CheckBox("As modal");
+        main.addComponent(asModal);
+
+        final Button create = new Button("Create a new window",
+                new ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        Window w = new Window("Testing Window");
+
+                        if (((Boolean) asModal.getValue()).booleanValue()) {
+                            w.setModal(true);
+                        }
+
+                        AbstractSelect s1 = new OptionGroup();
+                        s1.setCaption("1. Select output format");
+                        s1.addItem("Excel sheet");
+                        s1.addItem("CSV plain text");
+                        s1.setValue("Excel sheet");
+                        s1.setImmediate(true);
+
+                        s2 = new Select();
+                        s2.addItem("Separate by comma (,)");
+                        s2.addItem("Separate by colon (:)");
+                        s2.addItem("Separate by semicolon (;)");
+                        s2.setEnabled(false);
+
+                        s1.addListener(new ValueChangeListener() {
+
+                            public void valueChange(ValueChangeEvent event) {
+                                String v = (String) event.getProperty()
+                                        .getValue();
+                                if (v.equals("CSV plain text")) {
+                                    s2.setEnabled(true);
+                                } else {
+                                    s2.setEnabled(false);
+                                }
+                            }
+
+                        });
+
+                        w.addComponent(s1);
+                        w.addComponent(s2);
+
+                        Slider s = new Slider();
+                        s.setCaption("Volume");
+                        s.setMax(13);
+                        s.setMin(12);
+                        s.setResolution(2);
+                        s.setImmediate(true);
+                        // s.setOrientation(Slider.ORIENTATION_VERTICAL);
+                        // s.setArrows(false);
+
+                        w.addComponent(s);
+
+                        getApplication().getMainWindow().addWindow(w);
+
+                    }
+
+                });
+
+        main.addComponent(create);
+
+        setCompositionRoot(main);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestIFrames.java b/tests/testbench/com/vaadin/tests/TestIFrames.java
new file mode 100644
index 0000000000..ea93398206
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestIFrames.java
@@ -0,0 +1,37 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+public class TestIFrames extends CustomComponent {
+
+    VerticalLayout main = new VerticalLayout();
+
+    public TestIFrames() {
+        setCompositionRoot(main);
+        createNewView();
+    }
+
+    public void createNewView() {
+        main.removeAllComponents();
+        main.addComponent(createEmbedded("http://demo.vaadin.com/sampler/"));
+        main.addComponent(createEmbedded("../colorpicker"));
+        // main.addComponent(createEmbedded("../TestForNativeWindowing"));
+        main.addComponent(createEmbedded("http://demo.vaadin.com/timeline"));
+        main.addComponent(createEmbedded("http://demo.vaadin.com/colorpicker"));
+    }
+
+    private Label createEmbedded(String URL) {
+        final int width = 600;
+        final int height = 250;
+        final String iFrame = "<iframe height=\"" + height + "\" width=\""
+                + width + "\" src=\"" + URL + "\" />";
+        return new Label(iFrame, Label.CONTENT_XHTML);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestMethodProperty.java b/tests/testbench/com/vaadin/tests/TestMethodProperty.java
new file mode 100644
index 0000000000..49a3c110fa
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestMethodProperty.java
@@ -0,0 +1,48 @@
+package com.vaadin.tests;
+
+import com.vaadin.data.util.MethodProperty;
+
+public class TestMethodProperty {
+
+    /**
+     * @param args
+     */
+    public static void main(String[] args) {
+
+        MyTest myTest = new MyTest();
+
+        MethodProperty<Integer> methodProperty2 = new MethodProperty<Integer>(
+                Integer.TYPE, myTest, "getInt", "setInt", new Object[0],
+                new Object[] { null }, 0);
+
+        methodProperty2.setValue("3");
+
+        System.out.println("Succeeded");
+
+    }
+
+    public static class MyTest {
+
+        int integer;
+
+        public void setInteger(Integer integer) {
+            System.out.println("setInteger");
+            this.integer = integer;
+        }
+
+        public Integer getInteger() {
+            System.out.println("getInteger");
+            return Integer.valueOf(integer);
+        }
+
+        public void setInt(int i) {
+            System.out.println("setInt");
+            integer = i;
+        }
+
+        public int getInt() {
+            System.out.println("getInt");
+            return integer;
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/TestSelectAndDatefieldInDeepLayouts.java b/tests/testbench/com/vaadin/tests/TestSelectAndDatefieldInDeepLayouts.java
new file mode 100644
index 0000000000..5a72a34be9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestSelectAndDatefieldInDeepLayouts.java
@@ -0,0 +1,98 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.util.Collection;
+import java.util.Vector;
+
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * This test has a somewhat deep layout within one page. At the bottom, Select
+ * and Datefield render their popups incorrectly. Popus tend to be "left behind"
+ * from the actual components. When the page is even bigger or longer, the
+ * popups are eventually rendered outside the visual parts of the page.
+ * 
+ * @author Ville Ingman
+ * 
+ */
+public class TestSelectAndDatefieldInDeepLayouts extends CustomComponent {
+
+    public TestSelectAndDatefieldInDeepLayouts() {
+        final AbstractOrderedLayout root = getOrderedLayout();
+        setCompositionRoot(root);
+
+        root.addComponent(getSelect());
+        root.addComponent(getDateField());
+        root.addComponent(getSelect());
+        root.addComponent(getDateField());
+
+        final Panel p1 = getPanel();
+        root.addComponent(p1);
+
+        p1.addComponent(getSelect());
+        p1.addComponent(getDateField());
+        p1.addComponent(getSelect());
+        p1.addComponent(getDateField());
+
+        final AbstractOrderedLayout l1 = getOrderedLayout();
+        p1.addComponent(l1);
+
+        l1.addComponent(getSelect());
+        l1.addComponent(getDateField());
+        l1.addComponent(getSelect());
+        l1.addComponent(getDateField());
+
+        final Panel p2 = getPanel();
+        l1.addComponent(p2);
+
+        p2.addComponent(getSelect());
+        p2.addComponent(getDateField());
+        p2.addComponent(getSelect());
+        p2.addComponent(getDateField());
+
+    }
+
+    VerticalLayout getOrderedLayout() {
+        final VerticalLayout l = new VerticalLayout();
+        l.setCaption(getCaption("orderedlayout"));
+        return l;
+    }
+
+    Panel getPanel() {
+        final Panel panel = new Panel();
+        panel.setCaption(getCaption("panel"));
+        return panel;
+    }
+
+    Component getSelect() {
+        return new Select(getCaption("select"), getSelectOptions());
+    }
+
+    Component getDateField() {
+        return new DateField(getCaption("datefield"));
+    }
+
+    private Collection<String> getSelectOptions() {
+        final Collection<String> opts = new Vector<String>(3);
+        opts.add(getCaption("opt 1"));
+        opts.add(getCaption("opt 2"));
+        opts.add(getCaption("opt 3"));
+        return opts;
+    }
+
+    private String getCaption(String string) {
+        return string + (Math.random() * 99999.9);
+        // This is Java 5 code:
+        // return string + " " + UUID.randomUUID().toString().substring(0, 5);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TestSetVisibleAndCaching.java b/tests/testbench/com/vaadin/tests/TestSetVisibleAndCaching.java
new file mode 100644
index 0000000000..479a7602ef
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestSetVisibleAndCaching.java
@@ -0,0 +1,82 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Window;
+
+public class TestSetVisibleAndCaching extends com.vaadin.Application {
+
+    Panel panelA = new Panel("Panel A");
+    Panel panelB = new Panel("Panel B");
+    Panel panelC = new Panel("Panel C");
+
+    Button buttonNextPanel = new Button("Show next panel");
+
+    int selectedPanel = 0;
+
+    @Override
+    public void init() {
+        final Window mainWindow = new Window("TestSetVisibleAndCaching");
+        setMainWindow(mainWindow);
+
+        panelA.addComponent(new Label(
+                "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"));
+        panelB.addComponent(new Label(
+                "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"));
+        panelC.addComponent(new Label(
+                "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"));
+
+        mainWindow
+                .addComponent(new Label(
+                        "Inspect transfered data from server to "
+                                + "client using firebug (http request / response cycles)."
+                                + " See how widgets are re-used,"
+                                + " after each panel is once shown in GUI then"
+                                + " their contents are not resend."));
+        mainWindow.addComponent(buttonNextPanel);
+        mainWindow.addComponent(panelA);
+        mainWindow.addComponent(panelB);
+        mainWindow.addComponent(panelC);
+
+        selectPanel(selectedPanel);
+
+        buttonNextPanel.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                selectedPanel++;
+                if (selectedPanel > 2) {
+                    selectedPanel = 0;
+                }
+                selectPanel(selectedPanel);
+            }
+        });
+
+    }
+
+    private void selectPanel(int selectedPanel) {
+        System.err.println("Selecting panel " + selectedPanel);
+        switch (selectedPanel) {
+        case 0:
+            panelA.setVisible(true);
+            panelB.setVisible(false);
+            panelC.setVisible(false);
+            break;
+        case 1:
+            panelA.setVisible(false);
+            panelB.setVisible(true);
+            panelC.setVisible(false);
+            break;
+        case 2:
+            panelA.setVisible(false);
+            panelB.setVisible(false);
+            panelC.setVisible(true);
+            break;
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/TestSizeableIncomponents.java b/tests/testbench/com/vaadin/tests/TestSizeableIncomponents.java
new file mode 100644
index 0000000000..5d82c9d0ee
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestSizeableIncomponents.java
@@ -0,0 +1,318 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.vaadin.Application;
+import com.vaadin.data.Container;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.AbstractSelect;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class TestSizeableIncomponents extends Application {
+
+    private IndexedContainer cont;
+    private ComboBox select;
+    private Button prev;
+    private Button next;
+    private Panel testPanel;
+
+    @Override
+    public void init() {
+
+        initComponentList();
+
+        Window w = new Window();
+        setMainWindow(w);
+        w.setTheme("tests-components");
+
+        final VerticalLayout main = new VerticalLayout();
+        w.setContent(main);
+
+        select = new ComboBox();
+        select.setImmediate(true);
+        select.setFilteringMode(ComboBox.FILTERINGMODE_CONTAINS);
+        select.setWidth("400px");
+
+        prev = new Button("<<-|");
+        prev.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                Object cur = select.getValue();
+                Testable prev = (Testable) cont.prevItemId(cur);
+                if (prev == null) {
+                    getMainWindow().showNotification("No more test cases");
+                } else {
+                    getMainWindow().showNotification(
+                            "Selected test:" + prev.getTestableName());
+                    select.setValue(prev);
+                    select.requestRepaint();
+                }
+            }
+        });
+        next = new Button("|->>");
+        next.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                Object cur = select.getValue();
+                Testable next = (Testable) cont.nextItemId(cur);
+                if (next == null) {
+                    getMainWindow().showNotification("No more test cases");
+                } else {
+                    getMainWindow().showNotification(
+                            "Selected test:" + next.getTestableName());
+                    select.setValue(next);
+                    select.requestRepaint();
+                }
+            }
+        });
+
+        HorizontalLayout controllers = new HorizontalLayout();
+        controllers.addComponent(prev);
+        controllers.addComponent(select);
+        controllers.addComponent(next);
+        main.addComponent(controllers);
+
+        select.setContainerDataSource(cont);
+        select.addListener(new ComboBox.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                Testable t = (Testable) select.getValue();
+                if (t != null) {
+                    testPanel.removeAllComponents();
+                    try {
+                        Component c = t.getComponent();
+                        if (c != null) {
+                            testPanel.addComponent(c);
+                        }
+                    } catch (InstantiationException e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    } catch (IllegalAccessException e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+                }
+            }
+        });
+
+        testPanel = new Panel();
+        testPanel.setSizeFull();
+        testPanel.setContent(new VerticalLayout());
+        testPanel.setStyleName("testable");
+        main.addComponent(testPanel);
+        main.setExpandRatio(testPanel, 1);
+
+    }
+
+    private void initComponentList() {
+        cont = new IndexedContainer();
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+
+        URL dir = cl.getResource("com/vaadin/ui");
+
+        String[] list2 = (new File(dir.getFile())).list();
+        for (int i = 0; i < list2.length; i++) {
+            String f = list2[i];
+            if (f.endsWith(".class") && (f.indexOf("CustomComponent") == -1)
+                    && (f.indexOf("Window") == -1)) {
+                f = f.replaceAll(".class", "");
+                String className = "com.vaadin.ui." + f;
+                Class<?> c;
+                try {
+                    c = Class.forName(className);
+                    Object o = c.newInstance();
+                    if (o instanceof Component) {
+                        Testable t = new Testable(c);
+                        cont.addItem(t);
+                        t = new Testable(c);
+                        t.addConfiguration(new Configuration("100px*100px") {
+                            @Override
+                            void configure(Component c) {
+                                c.setWidth("60px");
+                                c.setHeight("60px");
+                            }
+                        });
+                        t = new Testable(c);
+                        t.addConfiguration(new Configuration("Width 50em") {
+                            @Override
+                            void configure(Component c) {
+                                c.setWidth("50em");
+                            }
+                        });
+                        cont.addItem(t);
+                        t = new Testable(c);
+                        t.addConfiguration(new Configuration("Height 7cm") {
+                            @Override
+                            void configure(Component c) {
+                                c.setHeight("7cm");
+                            }
+                        });
+                        cont.addItem(t);
+                        t = new Testable(c) {
+                            @Override
+                            public Component getComponent()
+                                    throws InstantiationException,
+                                    IllegalAccessException {
+
+                                Component c = super.getComponent();
+
+                                Panel p = new Panel(
+                                        "Wrapper panel (400px*400px)");
+                                p.setContent(new VerticalLayout());
+                                p.setWidth("400px");
+                                p.setHeight("400px");
+                                p.addComponent(c);
+                                p.addStyleName("testablew");
+                                p.addStyleName("testable");
+                                return p;
+                            }
+
+                        };
+                        t.addConfiguration(new Configuration("100%*100%") {
+                            @Override
+                            void configure(Component c) {
+                                c.setSizeFull();
+                            }
+
+                        });
+                        cont.addItem(t);
+                    }
+
+                } catch (ClassNotFoundException e) {
+                    // TODO Auto-generated catch block
+                    // e.printStackTrace();
+                } catch (InstantiationException e) {
+                    // TODO Auto-generated catch block
+                    // e.printStackTrace();
+                } catch (IllegalAccessException e) {
+                    // TODO Auto-generated catch block
+                    // e.printStackTrace();
+                }
+            }
+        }
+
+    }
+
+    class Testable {
+
+        private Class<?> classToTest;
+        private ArrayList<Configuration> configurations = new ArrayList<Configuration>();
+
+        Testable(Class<?> c) {
+            classToTest = c;
+        }
+
+        public void addConfiguration(Configuration conf) {
+            configurations.add(conf);
+        }
+
+        public String getTestableName() {
+            StringBuffer sb = new StringBuffer();
+            sb.append(classToTest.getName().replaceAll("com.vaadin.ui.", ""));
+            sb.append("[");
+            for (Iterator<Configuration> i = configurations.iterator(); i
+                    .hasNext();) {
+                sb.append((i.next()).getDescription());
+                if (i.hasNext()) {
+                    sb.append(",");
+                }
+            }
+            sb.append("]");
+
+            return sb.toString();
+        }
+
+        /**
+         * Instantiates and populates component with test data to be ready for
+         * testing.
+         * 
+         * @return
+         * @throws InstantiationException
+         * @throws IllegalAccessException
+         */
+        public Component getComponent() throws InstantiationException,
+                IllegalAccessException {
+            Component c = (Component) classToTest.newInstance();
+
+            if (c instanceof Button) {
+                ((AbstractComponent) c).setCaption("test");
+            }
+            if (AbstractSelect.class.isAssignableFrom(c.getClass())) {
+                if (c instanceof Table) {
+                    Table new_name = (Table) c;
+                    new_name.setContainerDataSource(TestForTablesInitialColumnWidthLogicRendering
+                            .getTestTable(5, 100).getContainerDataSource());
+
+                } else {
+                    AbstractSelect new_name = (AbstractSelect) c;
+                    Container cont = TestForTablesInitialColumnWidthLogicRendering
+                            .getTestTable(2, 8).getContainerDataSource();
+                    new_name.setContainerDataSource(cont);
+                    new_name.setItemCaptionPropertyId(cont
+                            .getContainerPropertyIds().iterator().next());
+
+                }
+            } else if (c instanceof ComponentContainer) {
+                ComponentContainer new_name = (ComponentContainer) c;
+                new_name.addComponent(new Label("component 1 in test container"));
+                new_name.addComponent(new Button("component 2"));
+            } else if (c instanceof Embedded) {
+                Embedded em = (Embedded) c;
+                em.setSource(new ThemeResource("test.png"));
+            } else if (c instanceof Label) {
+                ((Label) c).setValue("Test label");
+            }
+
+            for (Iterator<Configuration> i = configurations.iterator(); i
+                    .hasNext();) {
+                Configuration conf = i.next();
+                conf.configure(c);
+            }
+            return c;
+        }
+
+        @Override
+        public String toString() {
+            return getTestableName();
+        }
+    }
+
+    public abstract class Configuration {
+
+        private String description = "";
+
+        Configuration(String description) {
+            this.description = description;
+        }
+
+        public String getDescription() {
+            return description;
+        }
+
+        abstract void configure(Component c);
+
+        @Override
+        public String toString() {
+            return getDescription();
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/TestSplitPanel.java b/tests/testbench/com/vaadin/tests/TestSplitPanel.java
new file mode 100644
index 0000000000..d2665cc971
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TestSplitPanel.java
@@ -0,0 +1,27 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalSplitPanel;
+import com.vaadin.ui.Window;
+
+public class TestSplitPanel extends com.vaadin.Application {
+
+    VerticalSplitPanel verticalSplit = new VerticalSplitPanel();
+
+    @Override
+    public void init() {
+        final Window mainWindow = new Window("Feature Browser");
+        setMainWindow(mainWindow);
+
+        verticalSplit.setFirstComponent(new Label("vertical first"));
+        verticalSplit.setSecondComponent(new Label("vertical second"));
+
+        mainWindow.setContent(verticalSplit);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TreeFilesystem.java b/tests/testbench/com/vaadin/tests/TreeFilesystem.java
new file mode 100644
index 0000000000..9b05bbce1c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TreeFilesystem.java
@@ -0,0 +1,106 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.io.File;
+
+import com.vaadin.data.Item;
+import com.vaadin.tests.util.SampleDirectory;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Tree.ExpandEvent;
+import com.vaadin.ui.Window;
+
+/**
+ * Browsable file explorer using Vaadin Tree component. Demonstrates: how to add
+ * items hierarchically into <code>com.vaadin.ui.Component.Tree</code>, how to
+ * receive ExpandEvent and implement
+ * <code>com.vaadin.ui.Tree.ExpandListener</code>.
+ * 
+ * @since 4.0.0
+ * 
+ */
+public class TreeFilesystem extends com.vaadin.Application implements
+        Tree.ExpandListener {
+
+    // Filesystem explorer panel and it's components
+    private final Panel explorerPanel = new Panel("Filesystem explorer");
+
+    private final Tree tree = new Tree();
+
+    @Override
+    public void init() {
+        final Window main = new Window("Tree filesystem demo");
+        setMainWindow(main);
+
+        // Main window contains heading and panel
+        main.addComponent(new Label("<h2>Tree demo</h2>", Label.CONTENT_XHTML));
+
+        // configure file structure panel
+        main.addComponent(explorerPanel);
+        explorerPanel.addComponent(tree);
+        explorerPanel.setHeight("400px");
+
+        // "this" handles tree's expand event
+        tree.addListener(this);
+
+        // Get sample directory
+        final File sampleDir = SampleDirectory.getDirectory(this);
+        // populate tree's root node with example directory
+        if (sampleDir != null) {
+            populateNode(sampleDir.getAbsolutePath(), null);
+        }
+    }
+
+    /**
+     * Handle tree expand event, populate expanded node's childs with new files
+     * and directories.
+     */
+    public void nodeExpand(ExpandEvent event) {
+        final Item i = tree.getItem(event.getItemId());
+        if (!tree.hasChildren(i)) {
+            // populate tree's node which was expanded
+            populateNode(event.getItemId().toString(), event.getItemId());
+        }
+    }
+
+    /**
+     * Populates files to tree as items. In this example items are of String
+     * type that consist of file path. New items are added to tree and item's
+     * parent and children properties are updated.
+     * 
+     * @param file
+     *            path which contents are added to tree
+     * @param parent
+     *            for added nodes, if null then new nodes are added to root node
+     */
+    private void populateNode(String file, Object parent) {
+        final File subdir = new File(file);
+        final File[] files = subdir.listFiles();
+        for (int x = 0; x < files.length; x++) {
+            try {
+                // add new item (String) to tree
+                final String path = files[x].getCanonicalPath().toString();
+                tree.addItem(path);
+                // set parent if this item has one
+                if (parent != null) {
+                    tree.setParent(path, parent);
+                }
+                // check if item is a directory and read access exists
+                if (files[x].isDirectory() && files[x].canRead()) {
+                    // yes, childrens therefore exists
+                    tree.setChildrenAllowed(path, true);
+                } else {
+                    // no, childrens therefore do not exists
+                    tree.setChildrenAllowed(path, false);
+                }
+            } catch (final Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/TreeFilesystemContainer.java b/tests/testbench/com/vaadin/tests/TreeFilesystemContainer.java
new file mode 100644
index 0000000000..085abd1666
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/TreeFilesystemContainer.java
@@ -0,0 +1,102 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.io.File;
+
+import com.vaadin.data.util.FilesystemContainer;
+import com.vaadin.data.util.FilesystemContainer.FileItem;
+import com.vaadin.tests.util.SampleDirectory;
+import com.vaadin.ui.Component.Event;
+import com.vaadin.ui.Component.Listener;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+/**
+ * Browsable file explorer using Vaadin Tree component. Demonstrates: how to use
+ * <code>com.vaadin.ui.Component.Tree</code> datasource container, how to create
+ * <code>com.vaadin.data.util.FilesystemContainer</code>, how to read
+ * <code>com.vaadin.ui.Component.Event</code> objects, how to receive and handle
+ * any event by implementing <code>com.vaadin.ui.Component.Listener</code>.
+ * 
+ * @since 4.0.0
+ * 
+ */
+public class TreeFilesystemContainer extends com.vaadin.Application implements
+        Listener {
+
+    // Filesystem explorer panel and it's components
+    private final Panel explorerPanel = new Panel("Filesystem explorer");
+
+    private final Tree filesystem = new Tree();
+
+    // File properties panel and it's components
+    private final Panel propertyPanel = new Panel("File properties");
+
+    private final Label fileProperties = new Label();
+
+    @Override
+    public void init() {
+        final Window w = new Window("Tree FilesystemContainer demo");
+        setMainWindow(w);
+        final VerticalLayout main = new VerticalLayout();
+        w.setContent(main);
+        main.setMargin(true);
+        main.setSpacing(true);
+
+        propertyPanel.setHeight("120px");
+        main.addComponent(propertyPanel);
+        explorerPanel.setHeight("100%");
+        main.addComponent(explorerPanel);
+        main.setExpandRatio(explorerPanel, 1);
+
+        // Explorer panel contains tree
+        explorerPanel.addComponent(filesystem);
+
+        // Property panel contains label
+        propertyPanel.addComponent(fileProperties);
+        fileProperties.setCaption("No file selected.");
+        propertyPanel.setEnabled(false);
+
+        // Get sample directory
+        final File sampleDir = SampleDirectory.getDirectory(this);
+        // Populate tree with FilesystemContainer
+        final FilesystemContainer fsc = new FilesystemContainer(sampleDir, true);
+        filesystem.setContainerDataSource(fsc);
+        // "this" handles all filesystem events
+        // e.g. node clicked, expanded etc.
+        filesystem.addListener(this);
+        // Value changes are immediate
+        filesystem.setImmediate(true);
+    }
+
+    /**
+     * Listener for any component events. This class has been registered as an
+     * listener for component fsTree.
+     */
+    public void componentEvent(Event event) {
+        // Check if event occured at fsTree component
+        if (event.getSource() == filesystem) {
+            // Check if event is about changing value
+            if (event.getClass() == Field.ValueChangeEvent.class) {
+                // Update property panel contents
+                final FileItem fileItem = (FileItem) filesystem
+                        .getItem(filesystem.getValue());
+                fileProperties.setIcon(fileItem.getIcon());
+                fileProperties.setCaption(fileItem.getName() + ", size "
+                        + fileItem.getSize() + " bytes.");
+                propertyPanel.setEnabled(true);
+            }
+            // here we could check for other type of events for filesystem
+            // component
+        }
+        // here we could check for other component's events
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/UpgradingSample.java b/tests/testbench/com/vaadin/tests/UpgradingSample.java
new file mode 100644
index 0000000000..55a17d705b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/UpgradingSample.java
@@ -0,0 +1,171 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+//
+// Millstone imports were replaced
+//
+// import org.millstone.base.Application;
+// import org.millstone.base.ui.*;
+// import org.millstone.base.data.*;
+//
+import com.vaadin.Application;
+import com.vaadin.data.Property;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+/**
+ * <p>
+ * Example application demonstrating simple user login. This example is from
+ * MillStone 3.1.1 examples section. Upgrading from 3.1.1 to 4.0.0 was done by
+ * updating imports, also setTheme("corporate") call was added to application
+ * init method.
+ * </p>
+ * 
+ * @since 3.1.1
+ * @author IT Mill Ltd.
+ */
+public class UpgradingSample extends Application implements
+        Property.ValueChangeListener {
+
+    /* Menu for navigating inside the application. */
+    private final Tree menu = new Tree();
+
+    /* Contents of the website */
+    private final String[][] pages = {
+            { "Welcome", "Welcome to our website..." },
+            { "Products", "Public product information." },
+            { "Contact", "Public contact information." },
+            { "CRM", "CRM Database requiring login." },
+            { "Intranet", "Internal information database." } };
+
+    /* Application layout */
+    private final GridLayout layout = new GridLayout(2, 1);
+
+    /* Initialize the application */
+    @Override
+    public void init() {
+
+        // Create the main window of the application
+        final Window main = new Window("Login example", layout);
+        setMainWindow(main);
+
+        // Add menu and loginbox to the application
+        final VerticalLayout l = new VerticalLayout();
+        layout.addComponent(l, 0, 0);
+        l.addComponent(menu);
+        l.addComponent(new LoginBox());
+
+        // Setup menu
+        menu.setStyleName("menu");
+        menu.addListener(this);
+        menu.setImmediate(true);
+        addToMenu(new String[] { "Welcome", "Products", "Contact" });
+    }
+
+    // Overriding usetUser method is a simple way of updating application
+    // privileges when the user is changed
+    @Override
+    public void setUser(Object user) {
+        super.setUser(user);
+        if (user != null) {
+            addToMenu(new String[] { "CRM", "Intranet" });
+        }
+    }
+
+    public void addToMenu(String[] items) {
+        for (int i = 0; i < items.length; i++) {
+            menu.addItem(items[i]);
+            menu.setChildrenAllowed(items[i], false);
+        }
+        if (menu.getValue() == null) {
+            menu.setValue(items[0]);
+        }
+    }
+
+    // Handle menu selection and update visible page
+    public void valueChange(Property.ValueChangeEvent event) {
+        layout.removeComponent(1, 0);
+        final String title = (String) menu.getValue();
+        for (int i = 0; i < pages.length; i++) {
+            if (pages[i][0].equals(title)) {
+                final Panel p = new Panel(pages[i][0]);
+                p.addComponent(new Label(pages[i][1]));
+                p.setStyleName("strong");
+                layout.addComponent(p, 1, 0);
+            }
+        }
+    }
+
+    // Simple loginbox component for the application
+    public class LoginBox extends CustomComponent implements
+            Application.UserChangeListener {
+
+        // The components this loginbox is composed of
+        private final TextField loginName = new TextField("Name");
+
+        private final Button loginButton = new Button("Enter", this, "login");
+
+        private final Panel loginPanel = new Panel("Login");
+
+        private final Panel statusPanel = new Panel();
+
+        private final Button logoutButton = new Button("Logout",
+                UpgradingSample.this, "close");
+
+        private final Label statusLabel = new Label();
+
+        // Initialize login component
+        public LoginBox() {
+
+            // Initialize the component
+            loginPanel.addComponent(loginName);
+            loginPanel.addComponent(loginButton);
+            loginPanel.setStyleName("strong");
+            loginName.setColumns(8);
+            statusPanel.addComponent(statusLabel);
+            statusPanel.addComponent(logoutButton);
+
+            // Set the status of the loginbox and show correct
+            // components
+            updateStatus();
+
+            // Listen application user change events
+            UpgradingSample.this.addListener(this);
+        }
+
+        // Login into application
+        public void login() {
+            final String name = (String) loginName.getValue();
+            if (name != null && name.length() > 0) {
+                setUser(name);
+            }
+            loginName.setValue("");
+        }
+
+        // Update login status on application user change events
+        public void applicationUserChanged(Application.UserChangeEvent event) {
+            updateStatus();
+        }
+
+        // Update login status of the component by exposing correct
+        // components
+        private void updateStatus() {
+            statusLabel.setValue("User: " + getUser());
+            if (getUser() != null) {
+                setCompositionRoot(statusPanel);
+            } else {
+                setCompositionRoot(loginPanel);
+            }
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/UsingCustomNewItemHandlerInSelect.java b/tests/testbench/com/vaadin/tests/UsingCustomNewItemHandlerInSelect.java
new file mode 100644
index 0000000000..b54bd3d184
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/UsingCustomNewItemHandlerInSelect.java
@@ -0,0 +1,65 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.util.Random;
+
+import com.vaadin.data.Item;
+import com.vaadin.ui.AbstractSelect;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Select;
+
+public class UsingCustomNewItemHandlerInSelect extends CustomComponent {
+
+    private final Select select = new Select();
+
+    public static Random random = new Random(1);
+
+    private static int sequence = 0;
+
+    public UsingCustomNewItemHandlerInSelect() {
+
+        final Panel panel = new Panel("Select demo");
+        panel.addComponent(select);
+
+        select.setCaption("Select component");
+        select.setImmediate(true);
+        select.addContainerProperty("CAPTION", String.class, "");
+        select.setItemCaptionMode(Select.ITEM_CAPTION_MODE_PROPERTY);
+        select.setItemCaptionPropertyId("CAPTION");
+        select.setNewItemsAllowed(true);
+        select.setNewItemHandler(new MyNewItemHandler());
+
+        populateSelect();
+
+        setCompositionRoot(panel);
+    }
+
+    public void populateSelect() {
+        final String[] names = new String[] { "John", "Mary", "Joe", "Sarah",
+                "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" };
+        for (int j = 0; j < 4; j++) {
+            Integer id = new Integer(sequence++);
+            Item item = select.addItem(id);
+            item.getItemProperty("CAPTION").setValue(
+                    id.toString() + ": "
+                            + names[random.nextInt() % names.length]);
+        }
+    }
+
+    public class MyNewItemHandler implements AbstractSelect.NewItemHandler {
+        public void addNewItem(String newItemCaption) {
+            // here could be db insert or other backend operation
+            Integer id = new Integer(sequence++);
+            Item item = select.addItem(id);
+            item.getItemProperty("CAPTION").setValue(
+                    id.toString() + ": " + newItemCaption);
+            select.setValue(id);
+        }
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/UsingObjectsInSelect.java b/tests/testbench/com/vaadin/tests/UsingObjectsInSelect.java
new file mode 100644
index 0000000000..c9b0939eef
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/UsingObjectsInSelect.java
@@ -0,0 +1,115 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests;
+
+import java.util.LinkedList;
+import java.util.Random;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.Window;
+
+public class UsingObjectsInSelect extends com.vaadin.Application implements
+        ValueChangeListener {
+
+    private final Select select = new Select();
+    private final Label selectedTask = new Label("Selected task",
+            Label.CONTENT_XHTML);
+
+    public LinkedList<?> exampleTasks = new LinkedList<Object>();
+
+    public static Random random = new Random(1);
+
+    @Override
+    public void init() {
+        final Window main = new Window("Select demo");
+        setMainWindow(main);
+
+        final Panel panel = new Panel("Select demo");
+        panel.addComponent(select);
+        final Panel panel2 = new Panel("Selection");
+        panel2.addComponent(selectedTask);
+
+        select.setCaption("Select component");
+        select.addListener(this);
+        select.setImmediate(true);
+
+        main.addComponent(panel);
+        main.addComponent(panel2);
+
+        createExampleTasks();
+    }
+
+    public void createExampleTasks() {
+        final String[] assignedTo = new String[] { "John", "Mary", "Joe",
+                "Sarah", "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" };
+        final String[] type = new String[] { "Enhancement", "Bugfix",
+                "Testing", "Task" };
+        for (int j = 0; j < 100; j++) {
+            final Task task = new Task(
+                    type[(int) (random.nextDouble() * (type.length - 1))],
+                    assignedTo[(int) (random.nextDouble() * (assignedTo.length - 1))],
+                    random.nextInt(100));
+            select.addItem(task);
+        }
+    }
+
+    public void valueChange(ValueChangeEvent event) {
+        final Task task = (Task) select.getValue();
+        selectedTask.setValue("<b>Type:</b> " + task.getType()
+                + "<br /><b>Assigned to:</b> " + task.getAssignedTo()
+                + "<br /><b>Estimated hours: </b>" + task.getEstimatedHours());
+    }
+
+    /**
+     * Sample class which is bound to Vaadin components
+     * 
+     */
+    public class Task {
+
+        private String type;
+        private String assignedTo;
+        private int estimatedHours;
+
+        public Task(String type, String assignedTo, int estimatedHours) {
+            this.type = type;
+            this.assignedTo = assignedTo;
+            this.estimatedHours = estimatedHours;
+        }
+
+        @Override
+        public String toString() {
+            return type + ", " + assignedTo;
+        }
+
+        public String getType() {
+            return type;
+        }
+
+        public void setType(String type) {
+            this.type = type;
+        }
+
+        public String getAssignedTo() {
+            return assignedTo;
+        }
+
+        public void setAssignedTo(String assignedTo) {
+            this.assignedTo = assignedTo;
+        }
+
+        public float getEstimatedHours() {
+            return estimatedHours;
+        }
+
+        public void setEstimatedHours(int estimatedHours) {
+            this.estimatedHours = estimatedHours;
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/VaadinClasses.java b/tests/testbench/com/vaadin/tests/VaadinClasses.java
new file mode 100644
index 0000000000..6f826402f4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/VaadinClasses.java
@@ -0,0 +1,210 @@
+package com.vaadin.tests;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Modifier;
+import java.net.JarURLConnection;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.jar.JarEntry;
+
+import com.vaadin.Application;
+import com.vaadin.tests.components.AbstractComponentTest;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.DragAndDropWrapper;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.LoginForm;
+import com.vaadin.ui.PopupView;
+import com.vaadin.ui.SplitPanel;
+import com.vaadin.ui.VerticalSplitPanel;
+import com.vaadin.ui.Window;
+
+@SuppressWarnings("deprecation")
+public class VaadinClasses {
+
+    public static void main(String[] args) {
+        System.out.println("ComponentContainers");
+        System.out.println("===================");
+        for (Class<? extends ComponentContainer> c : getComponentContainers()) {
+            System.out.println(c.getName());
+        }
+        System.out.println();
+        System.out.println("Components");
+        System.out.println("==========");
+        for (Class<? extends Component> c : getComponents()) {
+            System.out.println(c.getName());
+        }
+        System.out.println();
+        System.out.println("Server side classes");
+        System.out.println("===================");
+        for (Class<?> c : getAllServerSideClasses()) {
+            System.out.println(c.getName());
+        }
+    }
+
+    public static List<Class<? extends Component>> getComponents() {
+        try {
+            return findClasses(Component.class, "com.vaadin.ui");
+        } catch (IOException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    public static List<Class<? extends Object>> getAllServerSideClasses() {
+        try {
+            return findClasses(Object.class, "com.vaadin", new String[] {
+                    "com.vaadin.tests", "com.vaadin.terminal.gwt.client" });
+        } catch (IOException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    public static List<Class<? extends ComponentContainer>> getComponentContainers() {
+        try {
+            return findClasses(ComponentContainer.class, "com.vaadin.ui");
+        } catch (IOException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    public static List<Class<? extends ComponentContainer>> getComponentContainersSupportingAddRemoveComponent() {
+        List<Class<? extends ComponentContainer>> classes = getComponentContainers();
+        classes.remove(PopupView.class);
+        classes.remove(CustomComponent.class);
+        classes.remove(DragAndDropWrapper.class);
+        classes.remove(CustomComponent.class);
+        classes.remove(LoginForm.class);
+
+        return classes;
+    }
+
+    public static List<Class<? extends ComponentContainer>> getComponentContainersSupportingUnlimitedNumberOfComponents() {
+        List<Class<? extends ComponentContainer>> classes = getComponentContainersSupportingAddRemoveComponent();
+        classes.remove(SplitPanel.class);
+        classes.remove(VerticalSplitPanel.class);
+        classes.remove(HorizontalSplitPanel.class);
+        classes.remove(Window.class);
+
+        return classes;
+    }
+
+    @SuppressWarnings({ "unchecked", "rawtypes" })
+    public static List<Class<? extends AbstractComponentTest<?>>> getBasicComponentTests() {
+        try {
+            return (List) findClasses(AbstractComponentTest.class,
+                    "com.vaadin.tests.components");
+        } catch (IOException e) {
+            e.printStackTrace();
+            return null;
+        }
+
+    }
+
+    private static <T> List<Class<? extends T>> findClasses(Class<T> baseClass,
+            String basePackage) throws IOException {
+        return findClasses(baseClass, basePackage, new String[] {});
+    }
+
+    private static <T> List<Class<? extends T>> findClasses(Class<T> baseClass,
+            String basePackage, String[] ignoredPackages) throws IOException {
+        List<Class<? extends T>> classes = new ArrayList<Class<? extends T>>();
+        String basePackageDirName = "/" + basePackage.replace('.', '/');
+        URL location = Application.class.getResource(basePackageDirName);
+        if (location.getProtocol().equals("file")) {
+            try {
+                File f = new File(location.toURI());
+                if (!f.exists()) {
+                    throw new IOException("Directory " + f.toString()
+                            + " does not exist");
+                }
+                findPackages(f, basePackage, baseClass, classes,
+                        ignoredPackages);
+            } catch (URISyntaxException e) {
+                throw new IOException(e.getMessage());
+            }
+        } else if (location.getProtocol().equals("jar")) {
+            JarURLConnection juc = (JarURLConnection) location.openConnection();
+            findPackages(juc, basePackage, baseClass, classes);
+        }
+
+        Collections.sort(classes, new Comparator<Class<? extends T>>() {
+
+            public int compare(Class<? extends T> o1, Class<? extends T> o2) {
+                return o1.getName().compareTo(o2.getName());
+            }
+
+        });
+        return classes;
+
+    }
+
+    private static <T> void findPackages(JarURLConnection juc,
+            String javaPackage, Class<T> baseClass,
+            Collection<Class<? extends T>> result) throws IOException {
+        String prefix = "com/vaadin/ui";
+        Enumeration<JarEntry> ent = juc.getJarFile().entries();
+        while (ent.hasMoreElements()) {
+            JarEntry e = ent.nextElement();
+            if (e.getName().endsWith(".class")
+                    && e.getName().startsWith(prefix)) {
+                String fullyQualifiedClassName = e.getName().replace('/', '.')
+                        .replace(".class", "");
+                addClassIfMatches(result, fullyQualifiedClassName, baseClass);
+            }
+        }
+    }
+
+    private static <T> void findPackages(File parent, String javaPackage,
+            Class<T> baseClass, Collection<Class<? extends T>> result,
+            String[] ignoredPackages) {
+        for (String ignoredPackage : ignoredPackages) {
+            if (javaPackage.equals(ignoredPackage)) {
+                return;
+            }
+        }
+
+        for (File file : parent.listFiles()) {
+            if (file.isDirectory()) {
+                findPackages(file, javaPackage + "." + file.getName(),
+                        baseClass, result, ignoredPackages);
+            } else if (file.getName().endsWith(".class")) {
+                String fullyQualifiedClassName = javaPackage + "."
+                        + file.getName().replace(".class", "");
+                addClassIfMatches(result, fullyQualifiedClassName, baseClass);
+            }
+        }
+
+    }
+
+    @SuppressWarnings("unchecked")
+    private static <T> void addClassIfMatches(
+            Collection<Class<? extends T>> result,
+            String fullyQualifiedClassName, Class<T> baseClass) {
+        try {
+            // Try to load the class
+
+            Class<?> c = Class.forName(fullyQualifiedClassName);
+            if (baseClass.isAssignableFrom(c)
+                    && !Modifier.isAbstract(c.getModifiers())) {
+                result.add((Class<? extends T>) c);
+            }
+        } catch (Exception e) {
+            // Could ignore that class cannot be loaded
+            e.printStackTrace();
+        } catch (LinkageError e) {
+            // Ignore. Client side classes will at least throw LinkageErrors
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/appengine/GAESyncTest.java b/tests/testbench/com/vaadin/tests/appengine/GAESyncTest.java
new file mode 100644
index 0000000000..2b6656f11a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/appengine/GAESyncTest.java
@@ -0,0 +1,152 @@
+package com.vaadin.tests.appengine;
+
+import com.google.apphosting.api.DeadlineExceededException;
+import com.vaadin.Application;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.terminal.ClassResource;
+import com.vaadin.terminal.DownloadStream;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.Notification;
+
+public class GAESyncTest extends Application {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -3724319151122707926l;
+
+    @Override
+    public void init() {
+        setMainWindow(new IntrWindow(this));
+
+    }
+
+    @Override
+    public void terminalError(com.vaadin.terminal.Terminal.ErrorEvent event) {
+        Throwable t = event.getThrowable();
+        // Was this caused by a GAE timeout?
+        while (t != null) {
+            if (t instanceof DeadlineExceededException) {
+                getMainWindow().showNotification("Bugger!",
+                        "Deadline Exceeded", Notification.TYPE_ERROR_MESSAGE);
+                return;
+            }
+            t = t.getCause();
+        }
+
+        super.terminalError(event);
+
+    }
+
+    private class IntrWindow extends Window {
+        private int n = 0;
+        private static final long serialVersionUID = -6521351715072191625l;
+        TextField tf;
+        Label l;
+        Application app;
+        GridLayout gl;
+
+        private IntrWindow(Application app) {
+
+            this.app = app;
+            tf = new TextField("Echo thingie");
+            tf.setImmediate(true);
+            tf.addListener(new Property.ValueChangeListener() {
+                public void valueChange(ValueChangeEvent event) {
+                    IntrWindow.this.showNotification((String) event
+                            .getProperty().getValue());
+
+                }
+
+            });
+            addComponent(tf);
+
+            l = new Label("" + n);
+            addComponent(l);
+
+            {
+                Button b = new Button("Slow", new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        try {
+                            Thread.sleep(15000);
+                        } catch (InterruptedException e) {
+                            // TODO Auto-generated catch block
+                            e.printStackTrace();
+                        }
+                    }
+
+                });
+                addComponent(b);
+            }
+
+            {
+                Button b = new Button("Add", new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        if (getWindow() == getApplication().getMainWindow()) {
+                            getWindow().showNotification("main");
+                            try {
+                                Thread.sleep((5000));
+                            } catch (InterruptedException e) {
+                                // TODO Auto-generated catch block
+                                e.printStackTrace();
+                            }
+                        }
+                        addImage();
+                    }
+
+                });
+                addComponent(b);
+            }
+
+            gl = new GridLayout(30, 50);
+            addComponent(gl);
+
+        }
+
+        private void addImage() {
+            ClassResource res = new ClassResource("img1.png", app) {
+
+                private static final long serialVersionUID = 1L;
+
+                @Override
+                public DownloadStream getStream() {
+                    try {
+                        Thread.sleep((long) (Math.random() * 5000));
+                    } catch (InterruptedException e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+                    return super.getStream();
+                }
+
+            };
+            res.setCacheTime(0);
+            Embedded emb = new Embedded("" + n, res);
+            emb.setWidth("30px");
+            emb.setHeight("5px");
+            gl.addComponent(emb);
+            l.setValue("" + n++);
+        }
+
+    }
+
+    @Override
+    public Window getWindow(String name) {
+        Window w = super.getWindow(name);
+        if (w == null) {
+            w = new IntrWindow(this);
+            addWindow(w);
+        }
+        return w;
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/appengine/img1.png b/tests/testbench/com/vaadin/tests/appengine/img1.png
new file mode 100644
index 0000000000..d249324e0c
Binary files /dev/null and b/tests/testbench/com/vaadin/tests/appengine/img1.png differ
diff --git a/tests/testbench/com/vaadin/tests/application/ApplicationCloseTest.java b/tests/testbench/com/vaadin/tests/application/ApplicationCloseTest.java
new file mode 100644
index 0000000000..b10752d26c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/application/ApplicationCloseTest.java
@@ -0,0 +1,70 @@
+package com.vaadin.tests.application;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.gwt.server.WebApplicationContext;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+
+public class ApplicationCloseTest extends TestBase {
+
+    private String memoryConsumer;
+
+    @Override
+    protected void setup() {
+        Label applications = new Label("Applications in session: <br/>",
+                Label.CONTENT_XHTML);
+        for (Application a : ((WebApplicationContext) getContext())
+                .getApplications()) {
+            applications.setValue(applications.getValue() + "App: " + a
+                    + "<br/>");
+        }
+        applications.setValue(applications.getValue() + "<br/><br/>");
+
+        addComponent(applications);
+        Label thisApp = new Label("This applications: " + this);
+        Button close = new Button("Close this", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                event.getButton().getApplication().close();
+            }
+        });
+
+        StringBuilder sb = new StringBuilder();
+
+        // 100 bytes
+        String str = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
+
+        int MB = 5;
+        for (int i = 0; i < MB * 10000; i++) {
+            sb.append(str);
+        }
+
+        memoryConsumer = sb.toString();
+        long totalUsage = Runtime.getRuntime().totalMemory();
+        String totalUsageString = totalUsage / 1000 / 1000 + "MiB";
+        Label memoryUsage = new Label(
+                "Using about "
+                        + memoryConsumer.length()
+                        / 1000
+                        / 1000
+                        + "MiB memory for this application.<br/>Total memory usage reported as "
+                        + totalUsageString + "<br/>", Label.CONTENT_XHTML);
+
+        addComponent(thisApp);
+        addComponent(memoryUsage);
+        addComponent(close);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Click close to close the application and open a new one";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3732;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/application/ErrorInUnloadEvent.html b/tests/testbench/com/vaadin/tests/application/ErrorInUnloadEvent.html
new file mode 100644
index 0000000000..ee200d7f5c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/application/ErrorInUnloadEvent.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.application.ErrorInUnloadEvent?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestsapplicationErrorInUnloadEvent::PID_Suser</td>
+	<td>66,14</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestsapplicationErrorInUnloadEvent::PID_Suser</td>
+	<td>a</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestsapplicationErrorInUnloadEvent::PID_Spwd</td>
+	<td>73,16</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestsapplicationErrorInUnloadEvent::PID_Spwd</td>
+	<td>d</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestsapplicationErrorInUnloadEvent::PID_Spwd</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.application.ErrorInUnloadEvent</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestsapplicationErrorInUnloadEvent::/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>...Title...</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/application/ErrorInUnloadEvent.java b/tests/testbench/com/vaadin/tests/application/ErrorInUnloadEvent.java
new file mode 100644
index 0000000000..f212e74ca3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/application/ErrorInUnloadEvent.java
@@ -0,0 +1,103 @@
+package com.vaadin.tests.application;
+
+import com.vaadin.event.ShortcutAction.KeyCode;
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class ErrorInUnloadEvent extends AbstractTestCase {
+
+    private Window mainWindow;
+
+    @Override
+    public void init() {
+        if (getUser() == null) {
+            showLoginWindow();
+        } else {
+            showMainWindow();
+        }
+    }
+
+    private void showLoginWindow() {
+        if (mainWindow == null) {
+            mainWindow = new Window();
+        } else {
+            mainWindow.removeAllComponents();
+        }
+        mainWindow.setCaption("Please login");
+
+        FormLayout formLayout = new FormLayout();
+        final TextField userField = new TextField("Username");
+        userField.setDebugId("user");
+        final TextField passwordField = new TextField("Password");
+        passwordField.setDebugId("pwd");
+        passwordField.setSecret(true);
+        Button login = new Button("login");
+        login.setDebugId("loginButton");
+        login.setClickShortcut(KeyCode.ENTER);
+        formLayout.addComponent(userField);
+        formLayout.addComponent(passwordField);
+        formLayout.addComponent(login);
+        mainWindow.setContent(formLayout);
+
+        login.addListener(new ClickListener() {
+            public void buttonClick(final ClickEvent event) {
+                String username = (String) userField.getValue();
+                String password = (String) passwordField.getValue();
+
+                setUser(username);
+                showMainWindow();
+            }
+        });
+
+        setMainWindow(mainWindow);
+    }
+
+    private void showMainWindow() {
+        if (mainWindow == null) {
+            mainWindow = new Window();
+        } else {
+            mainWindow.removeAllComponents();
+        }
+        VerticalLayout root = new VerticalLayout();
+        root.addComponent(createHeader());
+
+        mainWindow.addComponent(root);
+    }
+
+    private Component createHeader() {
+        HorizontalLayout header = new HorizontalLayout();
+        header.addStyleName("header-background");
+        Label title = new Label("...Title...");
+        title.addStyleName("header-title");
+        header.addComponent(title);
+        Button logout = new Button("Logout");
+        logout.addListener(new ClickListener() {
+            public void buttonClick(final ClickEvent event) {
+                setUser(null);
+                showLoginWindow();
+            }
+
+        });
+        header.addComponent(logout);
+        return header;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Enter a text in the password field and press enter. Then reload the page. No error message should be printed about ignoring a variable change.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6316;
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/application/WebBrowserTest.html b/tests/testbench/com/vaadin/tests/application/WebBrowserTest.html
new file mode 100644
index 0000000000..75cd03dce1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/application/WebBrowserTest.html
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+    <td>open</td>
+    <td>/run/com.vaadin.tests.application.WebBrowserTest?restartApplication</td>
+    <td></td>
+</tr>
+<tr>
+    <td>click</td>
+    <td>vaadin=runcomvaadintestsapplicationWebBrowserTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+    <td></td>
+</tr>
+<!-- Raw offset -->
+<tr>
+    <td>assertText</td>
+    <td>vaadin=runcomvaadintestsapplicationWebBrowserTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VLabel[0]</td>
+    <td>7200000</td>
+</tr>
+<!-- offset to Helsinki -->
+<tr>
+    <td>assertText</td>
+    <td>vaadin=runcomvaadintestsapplicationWebBrowserTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[6]/VLabel[0]</td>
+    <td>0</td>
+</tr>
+<!-- in Helsinki? -->
+<tr>
+    <td>assertText</td>
+    <td>vaadin=runcomvaadintestsapplicationWebBrowserTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VLabel[0]</td>
+    <td>Yes</td>
+</tr>
+<!-- DST active? -->
+<tr>
+    <td>assertText</td>
+    <td>vaadin=runcomvaadintestsapplicationWebBrowserTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VLabel[0]</td>
+    <td>Yes</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/application/WebBrowserTest.java b/tests/testbench/com/vaadin/tests/application/WebBrowserTest.java
new file mode 100644
index 0000000000..08c9061d45
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/application/WebBrowserTest.java
@@ -0,0 +1,98 @@
+package com.vaadin.tests.application;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.TimeZone;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+
+public class WebBrowserTest extends TestBase {
+
+    @Override
+    protected void setup() {
+
+        final Label offsetLabel = new Label("n/a");
+        offsetLabel.setCaption("Browser offset");
+
+        final Label rawOffsetLabel = new Label("n/a");
+        rawOffsetLabel.setCaption("Browser raw offset");
+
+        final Label dstDiffLabel = new Label("n/a");
+        dstDiffLabel.setCaption("Difference between raw offset and DST");
+
+        final Label dstInEffectLabel = new Label("n/a");
+        dstInEffectLabel.setCaption("Is DST currently active?");
+
+        final Label curDateLabel = new Label("n/a");
+        curDateLabel.setCaption("Current date in the browser");
+
+        final Label diffLabel = new Label("n/a");
+        diffLabel.setCaption("Browser to Europe/Helsinki offset difference");
+
+        final Label containsLabel = new Label("n/a");
+        containsLabel.setCaption("Browser could be in Helsinki");
+
+        final Button update = new Button("Get TimeZone from browser",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        TimeZone hkiTZ = TimeZone
+                                .getTimeZone("Europe/Helsinki");
+                        int hkiOffset = hkiTZ.getOffset(new Date().getTime());
+
+                        int browserOffset = getBrowser().getTimezoneOffset();
+                        int browserRawOffset = getBrowser()
+                                .getRawTimezoneOffset();
+                        String[] tzs = TimeZone
+                                .getAvailableIDs(browserRawOffset);
+
+                        boolean contains = Arrays.asList(tzs).contains(
+                                hkiTZ.getID());
+
+                        offsetLabel.setValue(String.valueOf(browserOffset));
+
+                        rawOffsetLabel.setValue(String
+                                .valueOf(browserRawOffset));
+
+                        diffLabel.setValue(String.valueOf(browserOffset
+                                - hkiOffset));
+
+                        containsLabel.setValue(contains ? "Yes" : "No");
+
+                        dstDiffLabel.setValue(String.valueOf(getBrowser()
+                                .getDSTSavings()));
+
+                        dstInEffectLabel
+                                .setValue(getBrowser().isDSTInEffect() ? "Yes"
+                                        : "No");
+
+                        curDateLabel.setValue(getBrowser().getCurrentDate()
+                                .toString());
+                    }
+                });
+
+        addComponent(update);
+        addComponent(offsetLabel);
+        addComponent(rawOffsetLabel);
+        addComponent(dstDiffLabel);
+        addComponent(dstInEffectLabel);
+        addComponent(curDateLabel);
+        addComponent(diffLabel);
+        addComponent(containsLabel);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Verifies that browser TimeZone offset works - should be same as server in our case (NOTE assumes server+browser in same TZ)";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6691;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/applicationcontext/ChangeSessionId.html b/tests/testbench/com/vaadin/tests/applicationcontext/ChangeSessionId.html
new file mode 100644
index 0000000000..6d028f1fea
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/applicationcontext/ChangeSessionId.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
+<title>ChangeSessionId</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ChangeSessionId</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.applicationcontext.ChangeSessionId?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestsapplicationcontextChangeSessionId::/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestsapplicationcontextChangeSessionId::/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestsapplicationcontextChangeSessionId::PID_SLog_row_1</td>
+	<td>2. Session id changed successfully from * to *</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/applicationcontext/ChangeSessionId.java b/tests/testbench/com/vaadin/tests/applicationcontext/ChangeSessionId.java
new file mode 100644
index 0000000000..ddbbc49e68
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/applicationcontext/ChangeSessionId.java
@@ -0,0 +1,69 @@
+package com.vaadin.tests.applicationcontext;
+
+import com.vaadin.terminal.gwt.server.WebApplicationContext;
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Window;
+
+public class ChangeSessionId extends AbstractTestCase {
+
+    private Log log = new Log(5);
+    Button loginButton = new Button("Change session");
+    boolean requestSessionSwitch = false;
+
+    @Override
+    public void init() {
+        Window mainWindow = new Window("Sestest Application");
+        mainWindow.addComponent(log);
+        mainWindow.addComponent(loginButton);
+        mainWindow.addComponent(new Button("Show session id",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        logSessionId();
+                    }
+                }));
+        setMainWindow(mainWindow);
+
+        loginButton.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                WebApplicationContext context = ((WebApplicationContext) getContext());
+
+                String oldSessionId = context.getHttpSession().getId();
+                context.reinitializeSession();
+                String newSessionId = context.getHttpSession().getId();
+                if (oldSessionId.equals(newSessionId)) {
+                    log.log("FAILED! Both old and new session id is "
+                            + newSessionId);
+                } else {
+                    log.log("Session id changed successfully from "
+                            + oldSessionId + " to " + newSessionId);
+                }
+
+            }
+        });
+        logSessionId();
+    }
+
+    private void logSessionId() {
+        log.log("Session id: " + getSessionId());
+    }
+
+    protected String getSessionId() {
+        return ((WebApplicationContext) getContext()).getHttpSession().getId();
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tests that the session id can be changed to prevent session fixation attacks";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6094;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/applicationcontext/RemoveTransactionListener.java b/tests/testbench/com/vaadin/tests/applicationcontext/RemoveTransactionListener.java
new file mode 100644
index 0000000000..8723e23a2a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/applicationcontext/RemoveTransactionListener.java
@@ -0,0 +1,78 @@
+package com.vaadin.tests.applicationcontext;
+
+import com.vaadin.Application;
+import com.vaadin.service.ApplicationContext;
+import com.vaadin.service.ApplicationContext.TransactionListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+
+public class RemoveTransactionListener extends TestBase {
+
+    private final Log log = new Log(10);
+
+    @Override
+    protected void setup() {
+        // Add one listener that will remove itself from within transactionEnd
+        getMainWindow().getApplication().getContext()
+                .addTransactionListener(new TransactionListener() {
+                    public void transactionStart(Application application,
+                            Object transactionData) {
+                    }
+
+                    public void transactionEnd(Application application,
+                            Object transactionData) {
+                        removeListener(this);
+                        log.log("Listener removed in transactionEnd");
+                    }
+                });
+
+        // Add one listener that will remove itself from within transactionStart
+        getMainWindow().getApplication().getContext()
+                .addTransactionListener(new TransactionListener() {
+                    public void transactionStart(Application application,
+                            Object transactionData) {
+                        removeListener(this);
+                        log.log("Listener removed in transactionStart");
+                    }
+
+                    public void transactionEnd(Application application,
+                            Object transactionData) {
+                    }
+                });
+
+        // Add one listener to verify that all listeners are called, as thrown
+        // ConcurrentModificationException causes subsequent listeners to be
+        // ignored
+        getMainWindow().getApplication().getContext()
+                .addTransactionListener(new TransactionListener() {
+                    public void transactionStart(Application application,
+                            Object transactionData) {
+                        log.log("transactionStart from last listener");
+                    }
+
+                    public void transactionEnd(Application application,
+                            Object transactionData) {
+                        log.log("transactionEnd from last listener");
+                    }
+                });
+
+        addComponent(log);
+    }
+
+    private void removeListener(TransactionListener l) {
+        ApplicationContext context = getMainWindow().getApplication()
+                .getContext();
+        context.removeTransactionListener(l);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tests that a transaction listener can be removed from within the listener.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return Integer.valueOf(7065);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/applicationservlet/NoMainWindow.java b/tests/testbench/com/vaadin/tests/applicationservlet/NoMainWindow.java
new file mode 100644
index 0000000000..9097274236
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/applicationservlet/NoMainWindow.java
@@ -0,0 +1,22 @@
+package com.vaadin.tests.applicationservlet;
+
+import com.vaadin.tests.components.AbstractTestCase;
+
+public class NoMainWindow extends AbstractTestCase {
+
+    @Override
+    protected String getDescription() {
+        return "This should produce an stack trace with \"No window found. Did you remember to setMainWindow()?\"";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3349;
+    }
+
+    @Override
+    public void init() {
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/AbstractComponentContainerTest.java b/tests/testbench/com/vaadin/tests/components/AbstractComponentContainerTest.java
new file mode 100644
index 0000000000..0c9c9c4ae2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/AbstractComponentContainerTest.java
@@ -0,0 +1,356 @@
+package com.vaadin.tests.components;
+
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+
+import com.vaadin.ui.AbstractComponentContainer;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.ComponentContainer.ComponentAttachEvent;
+import com.vaadin.ui.ComponentContainer.ComponentAttachListener;
+import com.vaadin.ui.ComponentContainer.ComponentDetachEvent;
+import com.vaadin.ui.ComponentContainer.ComponentDetachListener;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.InlineDateField;
+import com.vaadin.ui.NativeButton;
+import com.vaadin.ui.PopupDateField;
+import com.vaadin.ui.RichTextArea;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalSplitPanel;
+
+public abstract class AbstractComponentContainerTest<T extends AbstractComponentContainer>
+        extends AbstractComponentTest<T> implements ComponentAttachListener,
+        ComponentDetachListener {
+
+    private String CATEGORY_COMPONENT_CONTAINER_FEATURES = "Component container features";
+    private Command<T, ComponentSize> addButtonCommand = new Command<T, ComponentSize>() {
+
+        public void execute(T c, ComponentSize size, Object data) {
+            Button b = new Button("A button");
+            c.addComponent(b);
+            size.apply(b);
+        }
+    };
+
+    private Command<T, ComponentSize> addNativeButtonCommand = new Command<T, ComponentSize>() {
+
+        public void execute(T c, ComponentSize size, Object data) {
+            NativeButton b = new NativeButton("Native button");
+            c.addComponent(b);
+            size.apply(b);
+        }
+    };
+
+    private Command<T, ComponentSize> addTextAreaCommand = new Command<T, ComponentSize>() {
+        public void execute(T c, ComponentSize size, Object data) {
+            TextArea ta = new TextArea();
+            c.addComponent(ta);
+            size.apply(ta);
+        }
+    };
+
+    private Command<T, ComponentSize> addRichTextAreaCommand = new Command<T, ComponentSize>() {
+        public void execute(T c, ComponentSize size, Object data) {
+            RichTextArea ta = new RichTextArea();
+            c.addComponent(ta);
+            size.apply(ta);
+        }
+    };
+
+    private Command<T, ComponentSize> addTextFieldCommand = new Command<T, ComponentSize>() {
+        public void execute(T c, ComponentSize size, Object data) {
+            TextField tf = new TextField();
+            c.addComponent(tf);
+            size.apply(tf);
+        }
+    };
+
+    private Command<T, ComponentSize> addInlineDateFieldCommand = new Command<T, ComponentSize>() {
+        public void execute(T c, ComponentSize size, Object data) {
+            InlineDateField tf = new InlineDateField();
+            c.addComponent(tf);
+            size.apply(tf);
+        }
+    };
+    private Command<T, ComponentSize> addPopupDateFieldCommand = new Command<T, ComponentSize>() {
+        public void execute(T c, ComponentSize size, Object data) {
+            PopupDateField tf = new PopupDateField();
+            c.addComponent(tf);
+            size.apply(tf);
+        }
+    };
+
+    private Command<T, ComponentSize> addVerticalSplitPanelCommand = new Command<T, ComponentSize>() {
+        public void execute(T c, ComponentSize size, Object data) {
+            VerticalSplitPanel vsp = new VerticalSplitPanel();
+            c.addComponent(vsp);
+            size.apply(vsp);
+        }
+    };
+
+    private Command<T, ComponentSize> addHorizontalSplitPanelCommand = new Command<T, ComponentSize>() {
+        public void execute(T c, ComponentSize size, Object data) {
+            HorizontalSplitPanel vsp = new HorizontalSplitPanel();
+            c.addComponent(vsp);
+            size.apply(vsp);
+        }
+    };
+
+    private Command<T, ComponentSize> addTabSheetCommand = new Command<T, ComponentSize>() {
+        public void execute(T c, ComponentSize size, Object data) {
+            TabSheet ts = createTabSheet();
+            c.addComponent(ts);
+            size.apply(ts);
+        }
+    };
+
+    private Command<T, ComponentSize> addTableCommand = new Command<T, ComponentSize>() {
+
+        public void execute(T c, ComponentSize size, Object data) {
+            Table t = createTable();
+            c.addComponent(t);
+            size.apply(t);
+        }
+    };
+    private Command<T, Object> removeAllComponentsCommand = new Command<T, Object>() {
+        public void execute(T c, Object value, Object data) {
+            c.removeAllComponents();
+        }
+    };
+    private Command<T, Integer> removeComponentByIndexCommand = new Command<T, Integer>() {
+
+        public void execute(T c, Integer value, Object data) {
+            Component child = getComponentAtIndex(c, value);
+            c.removeComponent(child);
+
+        }
+    };
+    private Command<T, Boolean> componentAttachListenerCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((ComponentAttachListener) AbstractComponentContainerTest.this);
+            } else {
+                c.removeListener((ComponentAttachListener) AbstractComponentContainerTest.this);
+            }
+        }
+    };
+
+    private Command<T, Boolean> componentDetachListenerCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((ComponentDetachListener) AbstractComponentContainerTest.this);
+            } else {
+                c.removeListener((ComponentDetachListener) AbstractComponentContainerTest.this);
+            }
+        }
+    };
+
+    private Command<T, Integer> setComponentHeight = new Command<T, Integer>() {
+
+        public void execute(T c, Integer value, Object data) {
+            Component child = getComponentAtIndex(c, value);
+            child.setHeight((String) data);
+
+        }
+    };
+
+    private Command<T, Integer> setComponentWidth = new Command<T, Integer>() {
+
+        public void execute(T c, Integer value, Object data) {
+            Component child = getComponentAtIndex(c, value);
+            child.setWidth((String) data);
+
+        }
+    };
+
+    protected static class ComponentSize {
+        private String width, height;
+
+        public ComponentSize(String width, String height) {
+            this.width = width;
+            this.height = height;
+        }
+
+        public void apply(Component target) {
+            target.setWidth(width);
+            target.setHeight(height);
+        }
+
+        public String getWidth() {
+            return width;
+        }
+
+        public String getHeight() {
+            return height;
+        }
+
+        @Override
+        public String toString() {
+            String s = "";
+            s += width == null ? "auto" : width;
+            s += " x ";
+            s += height == null ? "auto" : height;
+            return s;
+        }
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+
+        createAddComponentActions(CATEGORY_COMPONENT_CONTAINER_FEATURES);
+        createRemoveComponentActions(CATEGORY_COMPONENT_CONTAINER_FEATURES);
+        createChangeComponentSizeActions(CATEGORY_COMPONENT_CONTAINER_FEATURES);
+        createComponentAttachListener(CATEGORY_LISTENERS);
+        createComponentDetachListener(CATEGORY_LISTENERS);
+    }
+
+    protected Component getComponentAtIndex(T container, int value) {
+        Iterator<Component> iter = container.getComponentIterator();
+        for (int i = 0; i < value; i++) {
+            iter.next();
+        }
+
+        return iter.next();
+    }
+
+    protected Table createTable() {
+        Table t = new Table();
+        t.addContainerProperty("property 1", String.class, "");
+        t.addContainerProperty("property 2", String.class, "");
+        t.addContainerProperty("property 3", String.class, "");
+        for (int i = 1; i < 10; i++) {
+            t.addItem(new Object[] { "row/col " + i + "/1",
+                    "row/col " + i + "/2", "row/col " + i + "/3" },
+                    String.valueOf(i));
+        }
+        return t;
+    }
+
+    protected TabSheet createTabSheet() {
+        TabSheet ts = new TabSheet();
+        Table t = createTable();
+        t.setSizeFull();
+        ts.addTab(t, "Size full Table", ICON_16_USER_PNG_UNCACHEABLE);
+        ts.addTab(new Button("A button"), "Button", null);
+        return ts;
+    }
+
+    private void createComponentAttachListener(String category) {
+        createBooleanAction("Component attach listener", category, false,
+                componentAttachListenerCommand);
+
+    }
+
+    private void createComponentDetachListener(String category) {
+        createBooleanAction("Component detach listener", category, false,
+                componentDetachListenerCommand);
+
+    }
+
+    private void createRemoveComponentActions(String category) {
+        String subCategory = "Remove component";
+        String byIndexCategory = "By index";
+
+        createCategory(subCategory, category);
+        createCategory(byIndexCategory, subCategory);
+        createClickAction("Remove all components", subCategory,
+                removeAllComponentsCommand, null);
+        for (int i = 0; i < 20; i++) {
+            createClickAction("Remove component " + i, byIndexCategory,
+                    removeComponentByIndexCommand, Integer.valueOf(i));
+        }
+
+    }
+
+    private void createAddComponentActions(String category) {
+        String subCategory = "Add component";
+        createCategory(subCategory, category);
+
+        LinkedHashMap<String, Command<T, ComponentSize>> addCommands = new LinkedHashMap<String, AbstractComponentTestCase.Command<T, ComponentSize>>();
+        addCommands.put("Button", addButtonCommand);
+        addCommands.put("NativeButton", addNativeButtonCommand);
+        addCommands.put("TextField", addTextFieldCommand);
+        addCommands.put("TextArea", addTextAreaCommand);
+        addCommands.put("RichTextArea", addRichTextAreaCommand);
+        addCommands.put("TabSheet", addTabSheetCommand);
+        addCommands.put("Table", addTableCommand);
+        addCommands.put("InlineDateField", addInlineDateFieldCommand);
+        addCommands.put("PopupDateField", addPopupDateFieldCommand);
+        addCommands.put("VerticalSplitPanel", addVerticalSplitPanelCommand);
+        addCommands.put("HorizontalSplitPanel", addHorizontalSplitPanelCommand);
+        // addCommands.put("AbsoluteLayout", addAbsoluteLayoutCommand);
+        // addCommands.put("HorizontalLayout", addHorizontalLayoutCommand);
+        // addCommands.put("VerticalLayout", addVerticalLayoutCommand);
+
+        ComponentSize[] sizes = new ComponentSize[] {
+                new ComponentSize(null, null),
+                new ComponentSize("200px", null),
+                new ComponentSize("100%", null),
+                new ComponentSize(null, "200px"),
+                new ComponentSize(null, "100%"),
+                new ComponentSize("300px", "300px"),
+                new ComponentSize("100%", "100%"),
+
+        };
+
+        for (String componentCategory : addCommands.keySet()) {
+            createCategory(componentCategory, subCategory);
+
+            for (ComponentSize size : sizes) {
+                createClickAction(size.toString(), componentCategory,
+                        addCommands.get(componentCategory), size);
+            }
+        }
+
+    }
+
+    private void createChangeComponentSizeActions(String category) {
+        String widthCategory = "Change component width";
+        createCategory(widthCategory, category);
+        String heightCategory = "Change component height";
+        createCategory(heightCategory, category);
+
+        String[] options = new String[] { "100px", "200px", "50%", "100%" };
+        for (int i = 0; i < 20; i++) {
+            String componentWidthCategory = "Component " + i + " width";
+            String componentHeightCategory = "Component " + i + " height";
+            createCategory(componentWidthCategory, widthCategory);
+            createCategory(componentHeightCategory, heightCategory);
+
+            createClickAction("auto", componentHeightCategory,
+                    setComponentHeight, Integer.valueOf(i), null);
+            createClickAction("auto", componentWidthCategory,
+                    setComponentWidth, Integer.valueOf(i), null);
+            for (String option : options) {
+                createClickAction(option, componentHeightCategory,
+                        setComponentHeight, Integer.valueOf(i), option);
+                createClickAction(option, componentWidthCategory,
+                        setComponentWidth, Integer.valueOf(i), option);
+            }
+
+        }
+
+    }
+
+    public void componentDetachedFromContainer(ComponentDetachEvent event) {
+        log(event.getClass().getSimpleName() + ": "
+                + event.getDetachedComponent().getClass().getSimpleName()
+                + " detached from "
+                + event.getContainer().getClass().getSimpleName());
+    }
+
+    public void componentAttachedToContainer(ComponentAttachEvent event) {
+        log(event.getClass().getSimpleName() + ": "
+                + event.getAttachedComponent().getClass().getSimpleName()
+                + " attached to "
+                + event.getContainer().getClass().getSimpleName());
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/AbstractComponentTest.java b/tests/testbench/com/vaadin/tests/components/AbstractComponentTest.java
new file mode 100644
index 0000000000..8344ed216a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/AbstractComponentTest.java
@@ -0,0 +1,671 @@
+package com.vaadin.tests.components;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.util.Log;
+import com.vaadin.tests.util.LoremIpsum;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.MenuBar;
+import com.vaadin.ui.MenuBar.MenuItem;
+
+public abstract class AbstractComponentTest<T extends AbstractComponent>
+        extends AbstractComponentTestCase<T> {
+
+    protected static final String TEXT_SHORT = "Short";
+    protected static final String TEXT_MEDIUM = "This is a semi-long text that might wrap.";
+    protected static final String TEXT_LONG = "This is a long text. "
+            + LoremIpsum.get(500);
+    protected static final String TEXT_VERY_LONG = "This is a very, very long text. "
+            + LoremIpsum.get(5000);
+
+    private static final Resource SELECTED_ICON = new ThemeResource(
+            "../runo/icons/16/ok.png");
+
+    private static final LinkedHashMap<String, String> sizeOptions = new LinkedHashMap<String, String>();
+    static {
+        sizeOptions.put("auto", null);
+        sizeOptions.put("50%", "50%");
+        sizeOptions.put("100%", "100%");
+        for (int w = 200; w < 1000; w += 100) {
+            sizeOptions.put(w + "px", w + "px");
+        }
+    }
+
+    // Menu related
+
+    private MenuItem mainMenu;
+
+    private MenuBar menu;
+
+    private MenuItem settingsMenu;
+
+    private T component;
+
+    // Used to determine if a menuItem should be selected and the other
+    // unselected on click
+    private Set<MenuItem> parentOfSelectableMenuItem = new HashSet<MenuItem>();
+
+    /**
+     * Maps the category name to a menu item
+     */
+    private Map<String, MenuItem> categoryToMenuItem = new HashMap<String, MenuItem>();
+    private Map<MenuItem, String> menuItemToCategory = new HashMap<MenuItem, String>();
+
+    // Logging
+    private Log log;
+
+    protected static final String CATEGORY_STATE = "State";
+    protected static final String CATEGORY_SIZE = "Size";
+    protected static final String CATEGORY_SELECTION = "Selection";
+    protected static final String CATEGORY_LISTENERS = "Listeners";
+    protected static final String CATEGORY_FEATURES = "Features";
+    protected static final String CATEGORY_ACTIONS = "Actions";
+    protected static final String CATEGORY_DECORATIONS = "Decorations";
+
+    @Override
+    protected final void setup() {
+        setTheme("tests-components");
+
+        // Create menu here so it appears before the components
+        addComponent(createMainMenu());
+
+        getLayout().setSizeFull();
+        createLog();
+        super.setup();
+
+        // Create menu actions and trigger default actions
+        createActions();
+
+        // Clear initialization log messages
+        log.clear();
+    }
+
+    private MenuBar createMainMenu() {
+        menu = new MenuBar();
+        menu.setDebugId("menu");
+        mainMenu = menu.addItem("Component", null);
+        settingsMenu = menu.addItem("Settings", null);
+        populateSettingsMenu(settingsMenu);
+
+        return menu;
+    }
+
+    /**
+     * Override to add items to the "settings" menu.
+     * 
+     * NOTE, Call super class first to preserve current order. If you override
+     * this in a class and another class overrides it you might break tests
+     * because the wrong items will be selected.
+     * 
+     * @param settingsMenu
+     */
+    protected void populateSettingsMenu(MenuItem settingsMenu) {
+
+        MenuItem showEventLog = settingsMenu.addItem("Show event log",
+                new MenuBar.Command() {
+
+                    public void menuSelected(MenuItem selectedItem) {
+                        boolean selected = !isSelected(selectedItem);
+                        setLogVisible(selected);
+                        setSelected(selectedItem, selected);
+                    }
+
+                });
+        setSelected(showEventLog, true);
+
+        settingsMenu.addItem("Clear log", new MenuBar.Command() {
+
+            public void menuSelected(MenuItem selectedItem) {
+                log.clear();
+            }
+        });
+        MenuItem layoutSize = settingsMenu.addItem("Parent layout size", null);
+        MenuItem layoutWidth = layoutSize.addItem("Width", null);
+        MenuItem layoutHeight = layoutSize.addItem("Height", null);
+        for (final String name : sizeOptions.keySet()) {
+            layoutWidth.addItem(name, new MenuBar.Command() {
+                public void menuSelected(MenuItem selectedItem) {
+                    getTestComponents().get(0).getParent()
+                            .setWidth(sizeOptions.get(name));
+                    log("Parent layout width set to " + name);
+                }
+            });
+            layoutHeight.addItem(name, new MenuBar.Command() {
+                public void menuSelected(MenuItem selectedItem) {
+                    getTestComponents().get(0).getParent()
+                            .setHeight(sizeOptions.get(name));
+                    log("Parent layout height set to " + name);
+                }
+            });
+        }
+
+    }
+
+    protected void setLogVisible(boolean visible) {
+        log.setVisible(visible);
+    }
+
+    private void createLog() {
+        log = new Log(5).setNumberLogRows(true);
+        getLayout().addComponent(log, 1);
+    }
+
+    /**
+     * By default initializes just one instance of {@link #getTestClass()} using
+     * {@link #constructComponent()}.
+     */
+    @Override
+    protected void initializeComponents() {
+        component = constructComponent();
+        component.setDebugId("testComponent");
+        addTestComponent(component);
+    }
+
+    public T getComponent() {
+        return component;
+    }
+
+    @Override
+    protected void addTestComponent(T c) {
+        super.addTestComponent(c);
+        getLayout().setExpandRatio(c, 1);
+
+    };
+
+    /**
+     * Construct the component that is to be tested. This method uses a no-arg
+     * constructor by default. Override to customize.
+     * 
+     * @return Instance of the component that is to be tested.
+     * @throws IllegalAccessException
+     * @throws InstantiationException
+     */
+    protected T constructComponent() {
+        try {
+            return getTestClass().newInstance();
+        } catch (Exception e) {
+            throw new RuntimeException("Failed to instantiate "
+                    + getTestClass(), e);
+        }
+    }
+
+    /**
+     * Create actions for the component. Remember to call super.createActions()
+     * when overriding.
+     */
+    protected void createActions() {
+        createBooleanAction("Immediate", CATEGORY_STATE, true, immediateCommand);
+        createBooleanAction("Enabled", CATEGORY_STATE, true, enabledCommand);
+        createBooleanAction("Readonly", CATEGORY_STATE, false, readonlyCommand);
+        createBooleanAction("Visible", CATEGORY_STATE, true, visibleCommand);
+        createBooleanAction("Error indicator", CATEGORY_STATE, false,
+                errorIndicatorCommand);
+        createLocaleSelect(CATEGORY_STATE);
+        createErrorMessageSelect(CATEGORY_DECORATIONS);
+
+        createDescriptionSelect(CATEGORY_DECORATIONS);
+        createCaptionSelect(CATEGORY_DECORATIONS);
+        createIconSelect(CATEGORY_DECORATIONS);
+
+        createWidthAndHeightActions(CATEGORY_SIZE);
+
+        createStyleNameSelect(CATEGORY_DECORATIONS);
+
+    }
+
+    private void createStyleNameSelect(String category) {
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+        options.put("-", null);
+        options.put("Light blue background (background-lightblue)",
+                "background-lightblue");
+        options.put("1px red border (border-red-1px)", "border-red-1px");
+        options.put("2px blue border (border-blue-2px)", "border-blue-2px");
+        createComponentStyleNames(options);
+        createSelectAction("Style name", category, options, "-",
+                styleNameCommand);
+
+    }
+
+    protected void createComponentStyleNames(
+            LinkedHashMap<String, String> options) {
+
+    }
+
+    private void createErrorMessageSelect(String category) {
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+        options.put("-", null);
+        options.put(TEXT_SHORT, TEXT_SHORT);
+        options.put("Medium", TEXT_MEDIUM);
+        options.put("Long", TEXT_LONG);
+        options.put("Very long", TEXT_VERY_LONG);
+        createSelectAction("Error message", category, options, "-",
+                errorMessageCommand);
+
+    }
+
+    private void createDescriptionSelect(String category) {
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+        options.put("-", null);
+        options.put(TEXT_SHORT, TEXT_SHORT);
+        options.put("Medium", TEXT_MEDIUM);
+        options.put("Long", TEXT_LONG);
+        options.put("Very long", TEXT_VERY_LONG);
+        createSelectAction("Description / tooltip", category, options, "-",
+                descriptionCommand);
+
+    }
+
+    private void createCaptionSelect(String category) {
+        createSelectAction("Caption", category, createCaptionOptions(),
+                "Short", captionCommand);
+
+    }
+
+    protected LinkedHashMap<String, String> createCaptionOptions() {
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+        options.put("-", null);
+        options.put("Short", TEXT_SHORT);
+        options.put("Medium", TEXT_MEDIUM);
+        options.put("Long", TEXT_LONG);
+        options.put("Very long", TEXT_VERY_LONG);
+        return options;
+    }
+
+    private void createWidthAndHeightActions(String category) {
+        String widthCategory = "Width";
+        String heightCategory = "Height";
+
+        createCategory(widthCategory, category);
+        createCategory(heightCategory, category);
+
+        for (String name : sizeOptions.keySet()) {
+            createClickAction(name, widthCategory, widthCommand,
+                    sizeOptions.get(name));
+            createClickAction(name, heightCategory, heightCommand,
+                    sizeOptions.get(name));
+        }
+
+        // Default to undefined size
+        for (T c : getTestComponents()) {
+            c.setWidth(null);
+            c.setHeight(null);
+        }
+    }
+
+    private void createIconSelect(String category) {
+        LinkedHashMap<String, Resource> options = new LinkedHashMap<String, Resource>();
+        options.put("-", null);
+        options.put("16x16", ICON_16_USER_PNG_CACHEABLE);
+        options.put("32x32", ICON_32_ATTENTION_PNG_CACHEABLE);
+        options.put("64x64", ICON_64_EMAIL_REPLY_PNG_CACHEABLE);
+
+        createSelectAction("Icon", category, options, "-", iconCommand, null);
+    }
+
+    private void createLocaleSelect(String category) {
+        LinkedHashMap<String, Locale> options = new LinkedHashMap<String, Locale>();
+        options.put("-", null);
+        options.put("fi_FI", new Locale("fi", "FI"));
+        options.put("en_US", Locale.US);
+        options.put("zh_CN", Locale.SIMPLIFIED_CHINESE);
+        options.put("fr_FR", Locale.FRANCE);
+
+        createSelectAction("Locale", category, options, "en_US", localeCommand,
+                null);
+    }
+
+    protected void createBooleanAction(String caption, String category,
+            boolean initialState, final Command<T, Boolean> command) {
+        createBooleanAction(caption, category, initialState, command, null);
+    }
+
+    protected <DATATYPE> void createBooleanAction(String caption,
+            String category, boolean initialState,
+            final Command<T, Boolean> command, Object data) {
+        MenuItem categoryItem = getCategoryMenuItem(category);
+        MenuItem item = categoryItem.addItem(caption,
+                menuBooleanCommand(command, data));
+        setSelected(item, initialState);
+        doCommand(caption, command, initialState, data);
+    }
+
+    protected <DATATYPE> void createClickAction(String caption,
+            String category, final Command<T, DATATYPE> command, DATATYPE value) {
+        createClickAction(caption, category, command, value, null);
+    }
+
+    protected <DATATYPE> void createClickAction(String caption,
+            String category, final Command<T, DATATYPE> command,
+            DATATYPE value, Object data) {
+        MenuItem categoryItem = getCategoryMenuItem(category);
+        categoryItem.addItem(caption, menuClickCommand(command, value, data));
+    }
+
+    private MenuItem getCategoryMenuItem(String category) {
+        if (category == null) {
+            return getCategoryMenuItem("Misc");
+        }
+
+        MenuItem item = categoryToMenuItem.get(category);
+        if (item != null) {
+            return item;
+        }
+
+        return createCategory(category, null);
+    }
+
+    /**
+     * Creates category named "category" with id "categoryId" in parent category
+     * "parentCategory". Each categoryId must be globally unique.
+     * 
+     * @param category
+     * @param categoryId
+     * @param parentCategory
+     * @return
+     */
+    protected MenuItem createCategory(String category, String parentCategory) {
+        if (hasCategory(category)) {
+            return categoryToMenuItem.get(category);
+        }
+        MenuItem item;
+        if (parentCategory == null) {
+            item = mainMenu.addItem(category, null);
+        } else {
+            item = getCategoryMenuItem(parentCategory).addItem(category, null);
+        }
+        categoryToMenuItem.put(category, item);
+        menuItemToCategory.put(item, category);
+        return item;
+    }
+
+    protected boolean hasCategory(String categoryId) {
+        return categoryToMenuItem.containsKey(categoryId);
+    }
+
+    protected void removeCategory(String categoryId) {
+        if (!hasCategory(categoryId)) {
+            throw new IllegalArgumentException("Category '" + categoryId
+                    + "' does not exist");
+        }
+
+        MenuItem item = getCategoryMenuItem(categoryId);
+        Object[] children = item.getChildren().toArray();
+        for (Object child : children) {
+            if (menuItemToCategory.containsKey(child)) {
+                removeCategory(menuItemToCategory.get(child));
+            }
+        }
+        // Detach from parent
+        item.getParent().removeChild(item);
+        // Clean mappings
+        categoryToMenuItem.remove(categoryId);
+        menuItemToCategory.remove(item);
+
+    }
+
+    private MenuBar.Command menuBooleanCommand(
+            final com.vaadin.tests.components.ComponentTestCase.Command<T, Boolean> booleanCommand,
+            final Object data) {
+
+        return new MenuBar.Command() {
+            public void menuSelected(MenuItem selectedItem) {
+                boolean selected = !isSelected(selectedItem);
+                doCommand(getText(selectedItem), booleanCommand, selected, data);
+                setSelected(selectedItem, selected);
+            }
+
+        };
+    }
+
+    private <DATATYPE> MenuBar.Command menuClickCommand(
+            final com.vaadin.tests.components.ComponentTestCase.Command<T, DATATYPE> command,
+            final DATATYPE value, final Object data) {
+
+        return new MenuBar.Command() {
+            public void menuSelected(MenuItem selectedItem) {
+                doCommand(getText(selectedItem), command, value, data);
+            }
+
+        };
+    }
+
+    protected void setSelected(MenuItem item, boolean selected) {
+        if (selected) {
+            item.setIcon(SELECTED_ICON);
+        } else {
+            item.setIcon(null);
+        }
+    }
+
+    protected boolean isSelected(MenuItem item) {
+        return (item.getIcon() != null);
+    }
+
+    private <VALUETYPE> MenuBar.Command singleSelectMenuCommand(
+            final com.vaadin.tests.components.ComponentTestCase.Command<T, VALUETYPE> cmd,
+            final VALUETYPE object, final Object data) {
+        return new MenuBar.Command() {
+            public void menuSelected(MenuItem selectedItem) {
+                doCommand(getText(selectedItem), cmd, object, data);
+
+                if (parentOfSelectableMenuItem.contains(selectedItem
+                        .getParent())) {
+                    unselectChildren(selectedItem.getParent());
+                    setSelected(selectedItem, true);
+                }
+            }
+
+        };
+
+    }
+
+    /**
+     * Unselect all child menu items
+     * 
+     * @param parent
+     */
+    protected void unselectChildren(MenuItem parent) {
+        List<MenuItem> children = parent.getChildren();
+        if (children == null) {
+            return;
+        }
+
+        for (MenuItem child : children) {
+            setSelected(child, false);
+        }
+    }
+
+    protected String getText(MenuItem item) {
+        String path = "";
+        MenuItem parent = item.getParent();
+        while (!isCategory(parent)) {
+            path = parent.getText() + "/" + path;
+            parent = parent.getParent();
+        }
+
+        return path + "/" + item.getText();
+    }
+
+    private boolean isCategory(MenuItem item) {
+        return item.getParent() == mainMenu;
+    }
+
+    protected <TYPE> void createSelectAction(
+            String caption,
+            String category,
+            LinkedHashMap<String, TYPE> options,
+            String initialValue,
+            com.vaadin.tests.components.ComponentTestCase.Command<T, TYPE> command) {
+        createSelectAction(caption, category, options, initialValue, command,
+                null);
+
+    }
+
+    protected <TYPE> void createMultiClickAction(
+            String caption,
+            String category,
+            LinkedHashMap<String, TYPE> options,
+            com.vaadin.tests.components.ComponentTestCase.Command<T, TYPE> command,
+            Object data) {
+
+        MenuItem categoryItem = getCategoryMenuItem(category);
+        MenuItem mainItem = categoryItem.addItem(caption, null);
+
+        for (String option : options.keySet()) {
+            MenuBar.Command cmd = menuClickCommand(command,
+                    options.get(option), data);
+            mainItem.addItem(option, cmd);
+        }
+    }
+
+    protected <TYPE> void createMultiToggleAction(
+            String caption,
+            String category,
+            LinkedHashMap<String, TYPE> options,
+            com.vaadin.tests.components.ComponentTestCase.Command<T, Boolean> command,
+            boolean defaultValue) {
+
+        LinkedHashMap<String, Boolean> defaultValues = new LinkedHashMap<String, Boolean>();
+
+        for (String option : options.keySet()) {
+            defaultValues.put(option, defaultValue);
+        }
+
+        createMultiToggleAction(caption, category, options, command,
+                defaultValues);
+    }
+
+    protected <TYPE> void createMultiToggleAction(
+            String caption,
+            String category,
+            LinkedHashMap<String, TYPE> options,
+            com.vaadin.tests.components.ComponentTestCase.Command<T, Boolean> command,
+            LinkedHashMap<String, Boolean> defaultValues) {
+
+        createCategory(caption, category);
+
+        for (String option : options.keySet()) {
+            createBooleanAction(option, caption, defaultValues.get(option),
+                    command, options.get(option));
+
+        }
+    }
+
+    protected <TYPE> void createSelectAction(
+            String caption,
+            String category,
+            LinkedHashMap<String, TYPE> options,
+            String initialValue,
+            com.vaadin.tests.components.ComponentTestCase.Command<T, TYPE> command,
+            Object data) {
+
+        MenuItem parentItem = getCategoryMenuItem(category);
+        MenuItem mainItem = parentItem.addItem(caption, null);
+
+        parentOfSelectableMenuItem.add(mainItem);
+        for (String option : options.keySet()) {
+            MenuBar.Command cmd = singleSelectMenuCommand(command,
+                    options.get(option), data);
+            MenuItem item = mainItem.addItem(option, cmd);
+            if (option.equals(initialValue)) {
+                cmd.menuSelected(item);
+            }
+        }
+    }
+
+    protected LinkedHashMap<String, Integer> createIntegerOptions(int max) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        for (int i = 0; i <= 9 && i <= max; i++) {
+            options.put(String.valueOf(i), i);
+        }
+        for (int i = 10; i <= max; i *= 10) {
+            options.put(String.valueOf(i), i);
+            if (2 * i <= max) {
+                options.put(String.valueOf(2 * i), 2 * i);
+            }
+            if (5 * i <= max) {
+                options.put(String.valueOf(5 * i), 5 * i);
+            }
+        }
+
+        return options;
+    }
+
+    protected LinkedHashMap<String, Double> createDoubleOptions(double max) {
+        LinkedHashMap<String, Double> options = new LinkedHashMap<String, Double>();
+        for (double d = 0; d <= max && d < 10; d += 0.5) {
+            options.put(String.valueOf(d), d);
+        }
+        for (double d = 10; d <= max; d *= 10) {
+            options.put(String.valueOf(d), d);
+            if (2.5 * d <= max) {
+                options.put(String.valueOf(2 * d), 2 * d);
+            }
+            if (5 * d <= max) {
+                options.put(String.valueOf(5 * d), 5 * d);
+            }
+        }
+
+        return options;
+    }
+
+    protected LinkedHashMap<String, Resource> createIconOptions(
+            boolean cacheable) {
+        LinkedHashMap<String, Resource> options = new LinkedHashMap<String, Resource>();
+        options.put("-", null);
+        if (cacheable) {
+            options.put("16x16", ICON_16_USER_PNG_CACHEABLE);
+            options.put("32x32", ICON_32_ATTENTION_PNG_CACHEABLE);
+            options.put("64x64", ICON_64_EMAIL_REPLY_PNG_CACHEABLE);
+        } else {
+            options.put("16x16", ICON_16_USER_PNG_UNCACHEABLE);
+            options.put("32x32", ICON_32_ATTENTION_PNG_UNCACHEABLE);
+            options.put("64x64", ICON_64_EMAIL_REPLY_PNG_UNCACHEABLE);
+
+        }
+        return options;
+    }
+
+    protected void log(String msg) {
+        log.log(msg);
+    }
+
+    protected boolean hasLog() {
+        return log != null;
+    }
+
+    @Override
+    protected <VALUET> void doCommand(String commandName,
+            AbstractComponentTestCase.Command<T, VALUET> command, VALUET value,
+            Object data) {
+        if (hasLog()) {
+            log("Command: " + commandName + "(" + value + ")");
+        }
+        super.doCommand(commandName, command, value, data);
+    }
+
+    @Override
+    public void terminalError(com.vaadin.terminal.Terminal.ErrorEvent event) {
+        String logMsg = "Exception occured, "
+                + event.getThrowable().getClass().getName();
+
+        String exceptionMsg = event.getThrowable().getMessage();
+        if (exceptionMsg != null && exceptionMsg.length() > 0) {
+            logMsg += exceptionMsg;
+        }
+        log.log(logMsg);
+        final Throwable t = event.getThrowable();
+        if (t != null) {
+            t.printStackTrace();
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/AbstractComponentTestCase.java b/tests/testbench/com/vaadin/tests/components/AbstractComponentTestCase.java
new file mode 100644
index 0000000000..1b04198da0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/AbstractComponentTestCase.java
@@ -0,0 +1,219 @@
+package com.vaadin.tests.components;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Layout.SpacingHandler;
+
+public abstract class AbstractComponentTestCase<T extends AbstractComponent>
+        extends TestBase {
+
+    protected static final ThemeResource ICON_16_HELP_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/16/help.png");
+    protected static final ThemeResource ICON_16_FOLDER_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/16/folder.png");
+    protected static final ThemeResource ICON_16_ERROR_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/16/error.png");
+    protected static final ThemeResource ICON_16_USER_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/16/user.png");
+    protected static final ThemeResource ICON_16_USER_PNG_UNCACHEABLE = uncacheableThemeResource("../runo/icons/16/user.png");
+    protected static final ThemeResource ICON_32_ATTENTION_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/32/attention.png");
+    protected static final ThemeResource ICON_32_ATTENTION_PNG_UNCACHEABLE = uncacheableThemeResource("../runo/icons/32/attention.png");
+    protected static final ThemeResource ICON_64_EMAIL_REPLY_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/64/email-reply.png");
+    protected static final ThemeResource ICON_64_EMAIL_REPLY_PNG_UNCACHEABLE = uncacheableThemeResource("../runo/icons/64/email-reply.png");
+
+    private List<T> testComponents = new ArrayList<T>();
+
+    abstract protected Class<T> getTestClass();
+
+    protected static ThemeResource uncacheableThemeResource(
+            String resourceLocation) {
+        return new ThemeResource(resourceLocation + "?" + new Date().getTime());
+    }
+
+    protected static ThemeResource cacheableThemeResource(
+            String resourceLocation) {
+        return new ThemeResource(resourceLocation);
+    }
+
+    abstract protected void initializeComponents();
+
+    @Override
+    protected void setup() {
+        ((SpacingHandler) getLayout()).setSpacing(true);
+
+        // Create Components
+        initializeComponents();
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+    protected void addTestComponent(T c) {
+        testComponents.add(c);
+        addComponent(c);
+    }
+
+    protected List<T> getTestComponents() {
+        return testComponents;
+    }
+
+    public interface Command<T, VALUETYPE extends Object> {
+        public void execute(T c, VALUETYPE value, Object data);
+    }
+
+    /* COMMANDS */
+
+    protected Command<T, String> widthCommand = new Command<T, String>() {
+
+        public void execute(T t, String value, Object data) {
+            t.setWidth(value);
+        }
+    };
+    protected Command<T, String> heightCommand = new Command<T, String>() {
+
+        public void execute(T t, String value, Object data) {
+            t.setHeight(value);
+        }
+    };
+
+    protected Command<T, Boolean> enabledCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean enabled, Object data) {
+            c.setEnabled(enabled);
+        }
+    };
+
+    protected Command<T, Boolean> immediateCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean immediate, Object data) {
+            c.setImmediate(immediate);
+        }
+    };
+
+    protected Command<T, Boolean> errorIndicatorCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean enabled, Object data) {
+            if (enabled) {
+                c.setComponentError(new UserError(errorMessage));
+            } else {
+                c.setComponentError(null);
+
+            }
+        }
+    };
+    private String errorMessage = null;
+
+    protected Command<T, String> errorMessageCommand = new Command<T, String>() {
+
+        public void execute(T c, String value, Object data) {
+            errorMessage = value;
+            if (c.getComponentError() != null) {
+                errorIndicatorCommand.execute(c, true, null);
+            }
+
+        }
+
+    };
+
+    // TODO Move to AbstractFieldTestCase
+    protected Command<T, Boolean> requiredCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean enabled, Object data) {
+            if (c instanceof Field) {
+                ((Field) c).setRequired(enabled);
+            } else {
+                throw new IllegalArgumentException(c.getClass().getName()
+                        + " is not a field and cannot be set to required");
+            }
+        }
+    };
+    protected Command<T, String> requiredErrorMessageCommand = new Command<T, String>() {
+
+        public void execute(T c, String value, Object data) {
+            ((Field) c).setRequiredError(value);
+        }
+
+    };
+
+    protected Command<T, String> descriptionCommand = new Command<T, String>() {
+        public void execute(T c, String value, Object data) {
+            c.setDescription(value);
+        }
+    };
+
+    protected Command<T, Boolean> readonlyCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean enabled, Object data) {
+            c.setReadOnly(enabled);
+        }
+    };
+
+    protected Command<T, Boolean> visibleCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean enabled, Object data) {
+            c.setVisible(enabled);
+        }
+    };
+
+    protected Command<T, Resource> iconCommand = new Command<T, Resource>() {
+
+        public void execute(T c, Resource value, Object data) {
+            c.setIcon(value);
+        }
+
+    };
+    protected Command<T, String> captionCommand = new Command<T, String>() {
+
+        public void execute(T c, String value, Object data) {
+            c.setCaption(value);
+        }
+
+    };
+
+    protected Command<T, Locale> localeCommand = new Command<T, Locale>() {
+
+        public void execute(T c, Locale value, Object data) {
+            c.setLocale(value);
+        }
+
+    };
+
+    protected <VALUET> void doCommand(Command<T, VALUET> command, VALUET value) {
+        doCommand(command, value, null);
+    }
+
+    protected <VALUET> void doCommand(Command<T, VALUET> command, VALUET value,
+            Object data) {
+        for (T c : getTestComponents()) {
+            command.execute(c, value, data);
+        }
+    }
+
+    protected <VALUET> void doCommand(String commandName,
+            Command<T, VALUET> command, VALUET value) {
+        doCommand(commandName, command, value, null);
+    }
+
+    protected <VALUET> void doCommand(String commandName,
+            Command<T, VALUET> command, VALUET value, Object data) {
+        doCommand(command, value, data);
+    }
+
+    protected Command<T, String> styleNameCommand = new Command<T, String>() {
+        public void execute(T c, String value, Object data) {
+            c.setStyleName(value);
+        }
+    };
+
+    @Override
+    protected String getDescription() {
+        return "Generic test case for " + getTestClass().getSimpleName();
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/AbstractLayoutTest.java b/tests/testbench/com/vaadin/tests/components/AbstractLayoutTest.java
new file mode 100644
index 0000000000..f6b979c698
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/AbstractLayoutTest.java
@@ -0,0 +1,100 @@
+package com.vaadin.tests.components;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.ui.AbstractLayout;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Layout.AlignmentHandler;
+import com.vaadin.ui.Layout.MarginInfo;
+import com.vaadin.ui.Layout.SpacingHandler;
+
+public abstract class AbstractLayoutTest<T extends AbstractLayout> extends
+        AbstractComponentContainerTest<T> {
+
+    protected static final String CATEGORY_LAYOUT_FEATURES = "Layout features";
+    private Command<T, MarginInfo> marginCommand = new Command<T, MarginInfo>() {
+
+        public void execute(T c, MarginInfo value, Object data) {
+            c.setMargin(value);
+
+        }
+    };
+
+    protected Command<T, Boolean> spacingCommand = new Command<T, Boolean>() {
+        public void execute(T c, Boolean value, Object data) {
+            ((SpacingHandler) c).setSpacing(value);
+        }
+    };
+
+    private Command<T, Integer> setComponentAlignment = new Command<T, Integer>() {
+
+        public void execute(T c, Integer value, Object alignment) {
+            Component child = getComponentAtIndex(c, value);
+            ((AlignmentHandler) c).setComponentAlignment(child,
+                    (Alignment) alignment);
+        }
+    };
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+        createMarginsSelect(CATEGORY_LAYOUT_FEATURES);
+        if (SpacingHandler.class.isAssignableFrom(getTestClass())) {
+            createSpacingSelect(CATEGORY_LAYOUT_FEATURES);
+        }
+        if (AlignmentHandler.class.isAssignableFrom(getTestClass())) {
+            createChangeComponentAlignmentAction(CATEGORY_LAYOUT_FEATURES);
+        }
+
+    }
+
+    private void createMarginsSelect(String category) {
+        LinkedHashMap<String, MarginInfo> options = new LinkedHashMap<String, MarginInfo>();
+        options.put("off", new MarginInfo(false));
+        options.put("all", new MarginInfo(true));
+        options.put("left", new MarginInfo(false, false, false, true));
+        options.put("right", new MarginInfo(false, true, false, false));
+        options.put("top", new MarginInfo(true, false, false, false));
+        options.put("bottom", new MarginInfo(false, false, true, false));
+        options.put("left-right", new MarginInfo(false, true, false, true));
+        options.put("top-bottom", new MarginInfo(true, false, true, false));
+
+        createSelectAction("Margins", category, options, "off", marginCommand);
+    }
+
+    private void createSpacingSelect(String category) {
+        createBooleanAction("Spacing", category, false, spacingCommand);
+    }
+
+    private void createChangeComponentAlignmentAction(String category) {
+        String alignmentCategory = "Component alignment";
+        createCategory(alignmentCategory, category);
+
+        LinkedHashMap<String, Alignment> options = new LinkedHashMap<String, Alignment>();
+        options.put("Top left", Alignment.TOP_LEFT);
+        options.put("Top center", Alignment.TOP_CENTER);
+        options.put("Top right", Alignment.TOP_RIGHT);
+
+        options.put("Middle left", Alignment.MIDDLE_LEFT);
+        options.put("Middle center", Alignment.MIDDLE_CENTER);
+        options.put("Middle right", Alignment.MIDDLE_RIGHT);
+
+        options.put("Bottom left", Alignment.BOTTOM_LEFT);
+        options.put("Bottom center", Alignment.BOTTOM_CENTER);
+        options.put("Bottom right", Alignment.BOTTOM_RIGHT);
+
+        for (int i = 0; i < 20; i++) {
+            String componentAlignmentCategory = "Component " + i + " alignment";
+            createCategory(componentAlignmentCategory, alignmentCategory);
+
+            for (String option : options.keySet()) {
+                createClickAction(option, componentAlignmentCategory,
+                        setComponentAlignment, Integer.valueOf(i),
+                        options.get(option));
+            }
+
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/AbstractOrderedLayoutTest.java b/tests/testbench/com/vaadin/tests/components/AbstractOrderedLayoutTest.java
new file mode 100644
index 0000000000..d6cbe8590d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/AbstractOrderedLayoutTest.java
@@ -0,0 +1,85 @@
+package com.vaadin.tests.components;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.event.LayoutEvents.LayoutClickEvent;
+import com.vaadin.event.LayoutEvents.LayoutClickListener;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Component;
+
+public abstract class AbstractOrderedLayoutTest<T extends AbstractOrderedLayout>
+        extends AbstractLayoutTest<T> implements LayoutClickListener {
+
+    private Command<T, Boolean> layoutClickListenerCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((LayoutClickListener) AbstractOrderedLayoutTest.this);
+            } else {
+
+            }
+
+        }
+    };
+
+    private Command<T, Integer> setComponentExpandRatio = new Command<T, Integer>() {
+
+        public void execute(T c, Integer value, Object ratio) {
+            Component child = getComponentAtIndex(c, value);
+            c.setExpandRatio(child, (Float) ratio);
+        }
+    };
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+
+        createLayoutClickListenerAction(CATEGORY_LISTENERS);
+        createChangeComponentExpandRatioAction(CATEGORY_LAYOUT_FEATURES);
+        // Set a root style so we can see the component. Can be overridden by
+        // setting the style name in the UI
+        for (T c : getTestComponents()) {
+            c.setStyleName("background-lightblue");
+        }
+    }
+
+    private void createLayoutClickListenerAction(String category) {
+        createBooleanAction("Layout click listener", category, false,
+                layoutClickListenerCommand);
+    }
+
+    private void createChangeComponentExpandRatioAction(String category) {
+        String expandRatioCategory = "Component expand ratio";
+        createCategory(expandRatioCategory, category);
+
+        LinkedHashMap<String, Float> options = new LinkedHashMap<String, Float>();
+        options.put("0", 0f);
+        options.put("0.5", 0.5f);
+        for (float f = 1; f <= 5; f++) {
+            options.put(String.valueOf(f), f);
+        }
+
+        for (int i = 0; i < 20; i++) {
+            String componentExpandRatioCategory = "Component " + i
+                    + " expand ratio";
+            createCategory(componentExpandRatioCategory, expandRatioCategory);
+
+            for (String option : options.keySet()) {
+                createClickAction(option, componentExpandRatioCategory,
+                        setComponentExpandRatio, Integer.valueOf(i),
+                        options.get(option));
+            }
+
+        }
+
+    }
+
+    public void layoutClick(LayoutClickEvent event) {
+        log(event.getClass().getSimpleName() + ": button="
+                + event.getButtonName() + ", childComponent="
+                + event.getChildComponent().getClass().getSimpleName()
+                + ", relativeX=" + event.getRelativeX() + ", relativeY="
+                + event.getRelativeY());
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/AbstractTestCase.java b/tests/testbench/com/vaadin/tests/components/AbstractTestCase.java
new file mode 100644
index 0000000000..ded579f58c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/AbstractTestCase.java
@@ -0,0 +1,24 @@
+package com.vaadin.tests.components;
+
+import com.vaadin.Application;
+import com.vaadin.service.ApplicationContext;
+import com.vaadin.terminal.gwt.server.AbstractWebApplicationContext;
+import com.vaadin.terminal.gwt.server.WebBrowser;
+
+public abstract class AbstractTestCase extends Application {
+
+    protected abstract String getDescription();
+
+    protected abstract Integer getTicketNumber();
+
+    protected WebBrowser getBrowser() {
+        ApplicationContext context = getContext();
+        if (context instanceof AbstractWebApplicationContext) {
+            WebBrowser webBrowser = ((AbstractWebApplicationContext) context)
+                    .getBrowser();
+            return webBrowser;
+        }
+
+        return null;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/ComponentTestCase.java b/tests/testbench/com/vaadin/tests/components/ComponentTestCase.java
new file mode 100644
index 0000000000..1e15f7a47b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/ComponentTestCase.java
@@ -0,0 +1,189 @@
+package com.vaadin.tests.components;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.NativeSelect;
+
+public abstract class ComponentTestCase<T extends AbstractComponent> extends
+        AbstractComponentTestCase<T> {
+
+    protected static final Object CAPTION = "caption";
+
+    private HorizontalLayout actionLayout;
+
+    @Override
+    protected final void setup() {
+        // Create action layout so it appears before the components
+        actionLayout = createActionLayout();
+        addComponent(actionLayout);
+
+        super.setup();
+
+        // Create actions and add to layout
+        populateActionLayout();
+    }
+
+    protected void populateActionLayout() {
+        for (Component c : createActions()) {
+            addAction(c);
+        }
+
+    }
+
+    private void addAction(Component c) {
+        actionLayout.addComponent(c);
+        actionLayout.setComponentAlignment(c, Alignment.BOTTOM_LEFT);
+    }
+
+    /**
+     * Override to provide custom actions for the test case.
+     * 
+     * @param actions
+     *            Array with default actions. Add custom actions to this. Never
+     *            null.
+     */
+    protected void createCustomActions(List<Component> actions) {
+
+    }
+
+    /**
+     * Method that creates the "actions" shown in the upper part of the screen.
+     * Override this only if you do not want the default actions. Custom actions
+     * can be added through #createCustomActions();
+     * 
+     * @return A List with actions to which more actions can be added.
+     */
+    protected List<Component> createActions() {
+        ArrayList<Component> actions = new ArrayList<Component>();
+
+        actions.add(createEnabledAction(true));
+        actions.add(createReadonlyAction(false));
+
+        actions.add(createErrorIndicatorAction(false));
+        if (Field.class.isAssignableFrom(getTestClass())) {
+            actions.add(createRequiredAction(false));
+        }
+
+        createCustomActions(actions);
+
+        return actions;
+    }
+
+    private HorizontalLayout createActionLayout() {
+        HorizontalLayout actionLayout = new HorizontalLayout();
+        actionLayout.setSpacing(true);
+        actionLayout.setMargin(true);
+
+        return actionLayout;
+    }
+
+    protected Component createErrorIndicatorAction(boolean initialState) {
+        return createBooleanAction("Error indicators", initialState,
+                errorIndicatorCommand);
+    }
+
+    protected Component createEnabledAction(boolean initialState) {
+        return createBooleanAction("Enabled", initialState, enabledCommand);
+    }
+
+    protected Component createReadonlyAction(boolean initialState) {
+        return createBooleanAction("Readonly", initialState, readonlyCommand);
+    }
+
+    protected Component createRequiredAction(boolean initialState) {
+        return createBooleanAction("Required", initialState, requiredCommand);
+    }
+
+    protected Component createBooleanAction(String caption,
+            boolean initialState, final Command<T, Boolean> command) {
+
+        CheckBox checkBox = new CheckBox(caption);
+        checkBox.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                boolean enabled = (Boolean) event.getButton().getValue();
+                doCommand(command, enabled);
+            }
+        });
+
+        checkBox.setValue(initialState);
+        checkBox.setImmediate(true);
+
+        checkBox.setDebugId("checkboxaction-" + caption);
+        // Set default value for all components
+        doCommand(command, initialState);
+
+        return checkBox;
+    }
+
+    protected Component createButtonAction(String caption,
+            final Command<T, Boolean> command) {
+
+        Button button = new Button(caption);
+        button.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                boolean enabled = (Boolean) event.getButton().getValue();
+                doCommand(command, enabled);
+            }
+        });
+
+        button.setDebugId("buttonaction-" + caption);
+        button.setImmediate(true);
+
+        return button;
+    }
+
+    protected <TYPE> Component createSelectAction(String caption,
+            LinkedHashMap<String, TYPE> options, String initialValue,
+            final Command<T, TYPE> command) {
+        final String CAPTION = "caption";
+        final String VALUE = "value";
+
+        final NativeSelect select = new NativeSelect(caption);
+        select.addContainerProperty(CAPTION, String.class, "");
+        select.addContainerProperty(VALUE, Object.class, "");
+        select.setItemCaptionPropertyId(CAPTION);
+        select.setNullSelectionAllowed(false);
+        select.addListener(new Property.ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                Object itemId = event.getProperty().getValue();
+                Item item = select.getItem(itemId);
+                @SuppressWarnings("unchecked")
+                TYPE value = (TYPE) item.getItemProperty(VALUE).getValue();
+                doCommand(command, value);
+
+            }
+        });
+
+        for (String itemCaption : options.keySet()) {
+            Object itemId = new Object();
+            Item i = select.addItem(itemId);
+            i.getItemProperty(CAPTION).setValue(itemCaption);
+            i.getItemProperty(VALUE).setValue(options.get(itemCaption));
+            if (itemCaption.equals(initialValue)) {
+                select.setValue(itemId);
+            }
+
+        }
+
+        select.setDebugId("selectaction-" + caption);
+
+        select.setImmediate(true);
+
+        return select;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/CustomComponentwithUndefinedSize.java b/tests/testbench/com/vaadin/tests/components/CustomComponentwithUndefinedSize.java
new file mode 100644
index 0000000000..57b81ddecc
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/CustomComponentwithUndefinedSize.java
@@ -0,0 +1,83 @@
+package com.vaadin.tests.components;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.VerticalLayout;
+
+public class CustomComponentwithUndefinedSize extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "A custom component with no size definition should not prevent scrollbars from being shown when its contents is larger than its parent";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2459;
+    }
+
+    @Override
+    protected void setup() {
+
+        TabSheet tabs = new TabSheet();
+        tabs.setSizeFull();
+        MyCustomComponent mcc = new MyCustomComponent();
+        mcc.setSizeUndefined();
+
+        // Doesn't work
+        tabs.addTab(mcc, "Doesn't work (CustomComponent)", null);
+
+        // Works:
+        tabs.addTab(mcc.buildLayout(),
+                "Works (no CustomComponent, same layout)", null);
+
+        addComponent(tabs);
+        getLayout().setSizeFull();
+    }
+
+    private int step = 0;
+
+    public class MyCustomComponent extends CustomComponent {
+        public MyCustomComponent() {
+            setCompositionRoot(buildLayout());
+        }
+
+        public Layout buildLayout() {
+            VerticalLayout layout = new VerticalLayout();
+            final Panel widePanel = new Panel("too big");
+            widePanel.setSizeUndefined();
+            widePanel.setWidth("2000px");
+            widePanel.setHeight("200px");
+            layout.addComponent(widePanel);
+            Button button = new Button("Change panel size",
+                    new ClickListener() {
+
+                        public void buttonClick(ClickEvent event) {
+                            switch (step++ % 4) {
+                            case 0:
+                                widePanel.setWidth("200px");
+                                break;
+                            case 1:
+                                widePanel.setHeight("2000px");
+                                break;
+                            case 2:
+                                widePanel.setWidth("2000px");
+                                break;
+                            case 3:
+                                widePanel.setHeight("200px");
+                                break;
+                            }
+
+                        }
+                    });
+            widePanel.addComponent(button);
+            layout.setSizeUndefined();
+            return layout;
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/ErrorMessages.html b/tests/testbench/com/vaadin/tests/components/ErrorMessages.html
new file mode 100644
index 0000000000..a33cb484f9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/ErrorMessages.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.ErrorMessages</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsErrorMessages::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip1</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsErrorMessages::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip2</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsErrorMessages::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip3</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/ErrorMessages.java b/tests/testbench/com/vaadin/tests/components/ErrorMessages.java
new file mode 100644
index 0000000000..d4008a4dfb
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/ErrorMessages.java
@@ -0,0 +1,44 @@
+package com.vaadin.tests.components;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.terminal.CompositeErrorMessage;
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.TextField;
+
+public class ErrorMessages extends TestBase {
+
+    @Override
+    protected void setup() {
+        Button bb = new Button("Button with CompositeError");
+        List<UserError> errors = new ArrayList<UserError>();
+        errors.add(new UserError("Error 1"));
+        errors.add(new UserError("Error 2"));
+        bb.setComponentError(new CompositeErrorMessage(errors));
+        addComponent(bb);
+
+        TextField tf = new TextField("", "Textfield with UserError");
+        tf.setComponentError(new UserError("This is a failure"));
+        addComponent(tf);
+
+        ComboBox cb = new ComboBox("ComboBox with description and UserError");
+        cb.setDescription("This is a combobox");
+        cb.setComponentError(new UserError("This is a failure"));
+        addComponent(cb);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The components all have error messages that should appear when hovering them";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3712;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/FocusAndBlurListeners.java b/tests/testbench/com/vaadin/tests/components/FocusAndBlurListeners.java
new file mode 100644
index 0000000000..267807b16b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/FocusAndBlurListeners.java
@@ -0,0 +1,122 @@
+package com.vaadin.tests.components;
+
+import java.util.Date;
+
+import com.vaadin.event.FieldEvents.BlurEvent;
+import com.vaadin.event.FieldEvents.BlurListener;
+import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.event.FieldEvents.FocusListener;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.NativeButton;
+import com.vaadin.ui.OptionGroup;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class FocusAndBlurListeners extends TestBase {
+
+    private FocusListener focusListener = new FocusListener() {
+
+        public void focus(FocusEvent event) {
+            Label msg = new Label(new Date() + " Focused "
+                    + event.getComponent().getCaption());
+            messages.addComponentAsFirst(msg);
+        }
+    };
+    private BlurListener blurListener = new BlurListener() {
+
+        public void blur(BlurEvent event) {
+            Label msg = new Label(new Date() + " Blurred "
+                    + event.getComponent().getCaption());
+            messages.addComponentAsFirst(msg);
+
+        }
+    };
+    private VerticalLayout messages = new VerticalLayout();
+
+    @Override
+    protected void setup() {
+        Layout l = getLayout();
+
+        TextField tf = new TextField("TextField");
+        l.addComponent(tf);
+
+        DateField df = new DateField("DateField");
+        l.addComponent(df);
+
+        ComboBox cb = new ComboBox("ComboBox");
+        l.addComponent(cb);
+
+        Button btn = new Button("Button");
+        l.addComponent(btn);
+
+        NativeButton nbtn = new NativeButton("NativeButton");
+        l.addComponent(nbtn);
+
+        CheckBox chkb = new CheckBox("CheckBox");
+        l.addComponent(chkb);
+
+        OptionGroup og = createOptionGroup("OptionGroup");
+        og.setMultiSelect(false);
+        l.addComponent(og);
+
+        final OptionGroup ogm = createOptionGroup("OptionGroup (multiselect)");
+        ogm.setMultiSelect(true);
+        l.addComponent(ogm);
+
+        btn.addListener(new ClickListener() {
+
+            private int i;
+
+            public void buttonClick(ClickEvent event) {
+                ogm.addItem("newItem" + i++);
+
+            }
+        });
+
+        tf.addListener(focusListener);
+        tf.addListener(blurListener);
+        df.addListener(focusListener);
+        df.addListener(blurListener);
+        cb.addListener(focusListener);
+        cb.addListener(blurListener);
+        btn.addListener(focusListener);
+        btn.addListener(blurListener);
+        nbtn.addListener(focusListener);
+        nbtn.addListener(blurListener);
+        chkb.addListener(focusListener);
+        chkb.addListener(blurListener);
+        og.addListener(focusListener);
+        og.addListener(blurListener);
+        ogm.addListener(focusListener);
+        ogm.addListener(blurListener);
+
+        l.addComponent(messages);
+
+    }
+
+    private OptionGroup createOptionGroup(String caption) {
+        OptionGroup og = new OptionGroup(caption);
+        og.addItem("Option 0");
+        og.addItem("Option 1");
+        og.addItem("Option 2");
+        return og;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Testing blur and focus listeners added in 6.2";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/FocusFromShortcutAction.java b/tests/testbench/com/vaadin/tests/components/FocusFromShortcutAction.java
new file mode 100644
index 0000000000..124f2b9cdf
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/FocusFromShortcutAction.java
@@ -0,0 +1,50 @@
+package com.vaadin.tests.components;
+
+import java.util.Arrays;
+
+import com.vaadin.event.ShortcutAction.KeyCode;
+import com.vaadin.event.ShortcutAction.ModifierKey;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.TextField;
+
+public class FocusFromShortcutAction extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Select select = new Select("Select", Arrays.asList("Option 1",
+                "Option 2"));
+        final TextField text = new TextField("Text");
+
+        addComponent(select);
+        addComponent(text);
+        Button focusText = new Button("Focus text", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                text.focus();
+            }
+        });
+        focusText.setClickShortcut(KeyCode.T, ModifierKey.ALT);
+
+        addComponent(focusText);
+        Button focusSelect = new Button("Focus select",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        select.focus();
+                    }
+                });
+        focusSelect.setClickShortcut(KeyCode.S, ModifierKey.ALT);
+        addComponent(focusSelect);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The option drop down of the Focus select should not be opened when the \"Focus select\" button is triggered by clicking it with the mouse or with the associated shortcut key Alt + S";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return Integer.valueOf(7539);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/HierarchicalContainerSorting.java b/tests/testbench/com/vaadin/tests/components/HierarchicalContainerSorting.java
new file mode 100644
index 0000000000..1f0f1bd923
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/HierarchicalContainerSorting.java
@@ -0,0 +1,109 @@
+package com.vaadin.tests.components;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Tree;
+
+public class HierarchicalContainerSorting extends TestBase {
+    IndexedContainer hierarchicalContainer = new HierarchicalContainer();
+
+    IndexedContainer indexedContainer = new IndexedContainer();
+
+    @Override
+    public void setup() {
+
+        populateContainer(indexedContainer);
+        populateContainer(hierarchicalContainer);
+
+        sort(indexedContainer);
+        sort(hierarchicalContainer);
+
+        HorizontalLayout hl = new HorizontalLayout();
+
+        Tree tree1 = new Tree("Tree with IndexedContainer");
+        tree1.setContainerDataSource(indexedContainer);
+        tree1.setItemCaptionPropertyId("name");
+        hl.addComponent(tree1);
+
+        Tree tree2 = new Tree("Tree with HierarchicalContainer");
+        tree2.setContainerDataSource(hierarchicalContainer);
+        tree2.setItemCaptionPropertyId("name");
+        for (Object id : tree2.rootItemIds()) {
+            tree2.expandItemsRecursively(id);
+        }
+        hl.addComponent(tree2);
+
+        addComponent(hl);
+    }
+
+    private static void sort(IndexedContainer container) {
+        Object[] properties = new Object[1];
+        properties[0] = "name";
+
+        boolean[] ascending = new boolean[1];
+        ascending[0] = true;
+
+        container.sort(properties, ascending);
+    }
+
+    private static void populateContainer(IndexedContainer container) {
+        container.addContainerProperty("name", String.class, null);
+
+        addItem(container, "Games", null);
+        addItem(container, "Call of Duty", "Games");
+        addItem(container, "Might and Magic", "Games");
+        addItem(container, "Fallout", "Games");
+        addItem(container, "Red Alert", "Games");
+
+        addItem(container, "Cars", null);
+        addItem(container, "Toyota", "Cars");
+        addItem(container, "Volvo", "Cars");
+        addItem(container, "Audi", "Cars");
+        addItem(container, "Ford", "Cars");
+
+        addItem(container, "Natural languages", null);
+        addItem(container, "Swedish", "Natural languages");
+        addItem(container, "English", "Natural languages");
+        addItem(container, "Finnish", "Natural languages");
+
+        addItem(container, "Programming languages", null);
+        addItem(container, "C++", "Programming languages");
+        addItem(container, "PHP", "Programming languages");
+        addItem(container, "Java", "Programming languages");
+        addItem(container, "Python", "Programming languages");
+
+    }
+
+    private static int index = 0;
+    private static Map<String, Integer> nameToId = new HashMap<String, Integer>();
+
+    public static void addItem(IndexedContainer container, String string,
+            String parent) {
+        nameToId.put(string, index);
+        Item item = container.addItem(index);
+        item.getItemProperty("name").setValue(string);
+
+        if (parent != null && container instanceof HierarchicalContainer) {
+            ((HierarchicalContainer) container).setParent(index,
+                    nameToId.get(parent));
+        }
+
+        index++;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The two trees contain the same data, one uses IndexedContainer, one uses HierarchicalContainer. Both should be sorted, both the root nodes and the children.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3095;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/LayoutAttachListenerInfo.html b/tests/testbench/com/vaadin/tests/components/LayoutAttachListenerInfo.html
new file mode 100644
index 0000000000..10dd21d240
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/LayoutAttachListenerInfo.html
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.LayoutAttachListenerInfo?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsLayoutAttachListenerInfo::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>Top50pxLeft50px</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsLayoutAttachListenerInfo::Root/VNotification[0]/HTML[0]/domChild[0]</td>
+	<td>351,23</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>1000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsLayoutAttachListenerInfo::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VOptionGroup[0]/domChild[1]/domChild[0]</td>
+	<td>8,7</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsLayoutAttachListenerInfo::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>AttachedToIndex0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsLayoutAttachListenerInfo::Root/VNotification[0]/HTML[0]/domChild[0]</td>
+	<td>351,23</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>1000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsLayoutAttachListenerInfo::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VOptionGroup[0]/domChild[2]/domChild[0]</td>
+	<td>3,5</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsLayoutAttachListenerInfo::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>1000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>AttachedTo23</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/LayoutAttachListenerInfo.java b/tests/testbench/com/vaadin/tests/components/LayoutAttachListenerInfo.java
new file mode 100644
index 0000000000..7ed44768fd
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/LayoutAttachListenerInfo.java
@@ -0,0 +1,142 @@
+package com.vaadin.tests.components;
+
+import java.util.Arrays;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.ComponentContainer.ComponentAttachEvent;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.OptionGroup;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window.Notification;
+
+
+public class LayoutAttachListenerInfo extends TestBase {
+
+    private VerticalLayout content = new VerticalLayout();
+
+    @Override
+    protected void setup() {
+
+        OptionGroup layouts = new OptionGroup("Layouts", Arrays.asList(
+                "AbsoluteLayout", "OrderedLayout", "GridLayout"));
+        layouts.select("AbsoluteLayout");
+        layouts.setImmediate(true);
+        layouts.addListener(new ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                if (event.getProperty().getValue().equals("AbsoluteLayout")) {
+                    testAbsoluteLayout();
+                } else if (event.getProperty().getValue()
+                        .equals("OrderedLayout")) {
+                    testOrderedLayout();
+                } else if (event.getProperty().getValue().equals("GridLayout")) {
+                    testGridLayout();
+                }
+            }
+        });
+
+        addComponent(layouts);
+        addComponent(content);
+
+        testAbsoluteLayout();
+    }
+
+    @Override
+    protected String getDescription() {
+        return "When pressing the attach button a Label with the value \"X\" "
+                + "should get added to the selected layout and a notification of the position"
+                + " of the component should be visible";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6368;
+    }
+
+    private void testAbsoluteLayout() {
+        content.removeAllComponents();
+
+        final AbsoluteLayout a = new AbsoluteLayout();
+        a.setWidth("300px");
+        a.setHeight("300px");
+        a.addListener(new ComponentContainer.ComponentAttachListener() {
+            public void componentAttachedToContainer(ComponentAttachEvent event) {
+                AbsoluteLayout layout = (AbsoluteLayout) event.getContainer();
+                AbsoluteLayout.ComponentPosition position = layout
+                        .getPosition(event.getAttachedComponent());
+
+                getMainWindow().showNotification(
+                        "Attached to " + position.getCSSString(),
+                        Notification.TYPE_ERROR_MESSAGE);
+            }
+        });
+        content.addComponent(a);
+
+        content.addComponent(new Button("Attach label to layout",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        a.addComponent(new Label("X"), "top:50px;left:50px");
+                    }
+                }));
+    }
+
+    private void testOrderedLayout(){
+        content.removeAllComponents();
+        
+        final VerticalLayout v = new VerticalLayout();
+        v.setWidth("300px");
+        v.setHeight("300px");
+        v.addListener(new ComponentContainer.ComponentAttachListener() {
+            public void componentAttachedToContainer(ComponentAttachEvent event) {
+                VerticalLayout layout = (VerticalLayout) event.getContainer();
+                getMainWindow().showNotification(
+                        "Attached to index "
+                                + layout.getComponentIndex(event
+                                        .getAttachedComponent()),
+                        Notification.TYPE_ERROR_MESSAGE);
+            }
+        });
+        content.addComponent(v);
+
+        content.addComponent(new Button("Attach label to layout",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        v.addComponent(new Label("X"));
+
+                    }
+                }));
+    }
+
+    private void testGridLayout() {
+        content.removeAllComponents();
+
+        final GridLayout g = new GridLayout(4, 4);
+        g.setWidth("300px");
+        g.setHeight("300px");
+        g.addListener(new ComponentContainer.ComponentAttachListener() {
+            public void componentAttachedToContainer(ComponentAttachEvent event) {
+                GridLayout layout = (GridLayout) event.getContainer();
+                GridLayout.Area area = layout.getComponentArea(event
+                        .getAttachedComponent());
+                getMainWindow().showNotification(
+                        "Attached to " + area.getColumn1() + ","
+                                + area.getRow1(),
+                        Notification.TYPE_ERROR_MESSAGE);
+            }
+        });
+
+        content.addComponent(g);
+
+        content.addComponent(new Button("Attach label to layout",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        g.addComponent(new Label("X"), 2, 3);
+                    }
+                }));
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/LongTooltip.html b/tests/testbench/com/vaadin/tests/components/LongTooltip.html
new file mode 100644
index 0000000000..ac317380b8
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/LongTooltip.html
@@ -0,0 +1,325 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<!--Lower-right-->
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.LongTooltip?restartApplication</td>
+	<td></td>
+</tr>
+<!--Show tooltip, which should be on screen-->
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VTextField[0]</td>
+	<td>0,0</td>
+</tr>
+<!--Wait for tooltip to appear-->
+<tr>
+	<td>waitForVisible</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip-lower-right-1</td>
+</tr>
+<!--Hide tooltip-->
+<tr>
+	<td>mouseOut</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>55,43</td>
+</tr>
+<!--Wait for tooltip to disappear. Cannot for some reason use waitForNotVisible-->
+<tr>
+	<td>pause</td>
+	<td>500</td>
+	<td></td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VTextField[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>waitForVisible</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip-lower-right-2</td>
+</tr>
+<!--Hide tooltip-->
+<tr>
+	<td>mouseOut</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>55,43</td>
+</tr>
+<!--Wait for tooltip to disappear. Cannot for some reason use waitForNotVisible-->
+<tr>
+	<td>pause</td>
+	<td>500</td>
+	<td></td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VTextField[0]</td>
+	<td>100,20</td>
+</tr>
+<tr>
+	<td>waitForVisible</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip-lower-right-3</td>
+</tr>
+<!--Upper-right-->
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.LongTooltip?restartApplication</td>
+	<td></td>
+</tr>
+<!--Show tooltip, which should be on screen-->
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>0,0</td>
+</tr>
+<!--Wait for tooltip to appear-->
+<tr>
+	<td>waitForVisible</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip-upper-right-1</td>
+</tr>
+<!--Hide tooltip-->
+<tr>
+	<td>mouseOut</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>55,43</td>
+</tr>
+<!--Wait for tooltip to disappear. Cannot for some reason use waitForNotVisible-->
+<tr>
+	<td>pause</td>
+	<td>500</td>
+	<td></td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>waitForVisible</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip-upper-right-2</td>
+</tr>
+<!--Hide tooltip-->
+<tr>
+	<td>mouseOut</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>55,43</td>
+</tr>
+<!--Wait for tooltip to disappear. Cannot for some reason use waitForNotVisible-->
+<tr>
+	<td>pause</td>
+	<td>500</td>
+	<td></td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>100,20</td>
+</tr>
+<tr>
+	<td>waitForVisible</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip-upper-right-3</td>
+</tr>
+<!--Lower-left-->
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.LongTooltip?restartApplication</td>
+	<td></td>
+</tr>
+<!--Show tooltip, which should be on screen-->
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[2]/VTextField[0]</td>
+	<td>0,0</td>
+</tr>
+<!--Wait for tooltip to appear-->
+<tr>
+	<td>waitForVisible</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip-lower-left-1</td>
+</tr>
+<!--Hide tooltip-->
+<tr>
+	<td>mouseOut</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>55,43</td>
+</tr>
+<!--Wait for tooltip to disappear. Cannot for some reason use waitForNotVisible-->
+<tr>
+	<td>pause</td>
+	<td>500</td>
+	<td></td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[2]/VTextField[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>waitForVisible</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip-lower-left-2</td>
+</tr>
+<!--Hide tooltip-->
+<tr>
+	<td>mouseOut</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>55,43</td>
+</tr>
+<!--Wait for tooltip to disappear. Cannot for some reason use waitForNotVisible-->
+<tr>
+	<td>pause</td>
+	<td>500</td>
+	<td></td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[2]/VTextField[0]</td>
+	<td>100,20</td>
+</tr>
+<tr>
+	<td>waitForVisible</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip-lower-left-3</td>
+</tr>
+<!--Upper-left-->
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.LongTooltip?restartApplication</td>
+	<td></td>
+</tr>
+<!--Show tooltip, which should be on screen-->
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>0,0</td>
+</tr>
+<!--Wait for tooltip to appear-->
+<tr>
+	<td>waitForVisible</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip-upper-left-1</td>
+</tr>
+<!--Hide tooltip-->
+<tr>
+	<td>mouseOut</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>55,43</td>
+</tr>
+<!--Wait for tooltip to disappear. Cannot for some reason use waitForNotVisible-->
+<tr>
+	<td>pause</td>
+	<td>500</td>
+	<td></td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>waitForVisible</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip-upper-left-2</td>
+</tr>
+<!--Hide tooltip-->
+<tr>
+	<td>mouseOut</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>55,43</td>
+</tr>
+<!--Wait for tooltip to disappear. Cannot for some reason use waitForNotVisible-->
+<tr>
+	<td>pause</td>
+	<td>500</td>
+	<td></td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>100,20</td>
+</tr>
+<tr>
+	<td>waitForVisible</td>
+	<td>vaadin=runcomvaadintestscomponentsLongTooltip::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip-upper-left-3</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/LongTooltip.java b/tests/testbench/com/vaadin/tests/components/LongTooltip.java
new file mode 100644
index 0000000000..87adaa673b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/LongTooltip.java
@@ -0,0 +1,49 @@
+package com.vaadin.tests.components;
+
+import com.vaadin.tests.util.LoremIpsum;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.TextField;
+
+public class LongTooltip extends TestBase {
+
+    @Override
+    public void setup() {
+
+        GridLayout gl = new GridLayout(2, 2);
+        gl.setSizeFull();
+        TextField f1 = createField();
+        TextField f2 = createField();
+        TextField f3 = createField();
+        TextField f4 = createField();
+        gl.addComponent(f1);
+        gl.addComponent(f2);
+        gl.addComponent(f3);
+        gl.addComponent(f4);
+
+        gl.setComponentAlignment(f1, Alignment.TOP_LEFT);
+        gl.setComponentAlignment(f2, Alignment.TOP_RIGHT);
+        gl.setComponentAlignment(f3, Alignment.BOTTOM_LEFT);
+        gl.setComponentAlignment(f4, Alignment.BOTTOM_RIGHT);
+
+        getLayout().setSizeFull();
+        getLayout().addComponent(gl);
+
+    }
+
+    private TextField createField() {
+        final TextField field = new TextField();
+        field.setDescription(LoremIpsum.get(1000));
+        return field;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "For a given cursor position the tooltip should always appear with the same size in the same position. The tooltip should also always be completely on screen and not cause any scrollbars to appear.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 7100;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/MultipleDebugIds.java b/tests/testbench/com/vaadin/tests/components/MultipleDebugIds.java
new file mode 100644
index 0000000000..ebfa29b9e9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/MultipleDebugIds.java
@@ -0,0 +1,35 @@
+package com.vaadin.tests.components;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.TextField;
+
+public class MultipleDebugIds extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "An exception should be thrown if the same debugId is assigned to several components";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2796;
+    }
+
+    @Override
+    protected void setup() {
+        TextField textField = new TextField();
+        TextField textField2 = new TextField();
+        Button button = new Button();
+        Button button2 = new Button();
+        textField.setDebugId("textfield");
+        button.setDebugId("button");
+        textField2.setDebugId("textfield2");
+        button2.setDebugId("textfield");
+
+        addComponent(textField);
+        addComponent(textField2);
+        addComponent(button);
+        addComponent(button2);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/TestBase.java b/tests/testbench/com/vaadin/tests/components/TestBase.java
new file mode 100644
index 0000000000..2156c512ce
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/TestBase.java
@@ -0,0 +1,53 @@
+package com.vaadin.tests.components;
+
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public abstract class TestBase extends AbstractTestCase {
+
+    @Override
+    public final void init() {
+        window = new Window(getClass().getName());
+        setMainWindow(window);
+        window.getContent().setSizeFull();
+
+        Label label = new Label(getDescription(), Label.CONTENT_XHTML);
+        label.setWidth("100%");
+        window.getContent().addComponent(label);
+
+        layout = new VerticalLayout();
+        window.getContent().addComponent(layout);
+        ((VerticalLayout) window.getContent()).setExpandRatio(layout, 1);
+
+        setup();
+    }
+
+    private Window window;
+    private VerticalLayout layout;
+
+    public TestBase() {
+
+    }
+
+    protected VerticalLayout getLayout() {
+        return layout;
+    }
+
+    protected abstract void setup();
+
+    protected void addComponent(Component c) {
+        getLayout().addComponent(c);
+    }
+
+    protected void removeComponent(Component c) {
+        getLayout().removeComponent(c);
+    }
+
+    protected void replaceComponent(Component oldComponent,
+            Component newComponent) {
+        getLayout().replaceComponent(oldComponent, newComponent);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutClipping.html b/tests/testbench/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutClipping.html
new file mode 100644
index 0000000000..ff5c890abf
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutClipping.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>AbsoluteLayoutClipping</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">AbsoluteLayoutClipping</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.absolutelayout.AbsoluteLayoutClipping</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutClipping.java b/tests/testbench/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutClipping.java
new file mode 100644
index 0000000000..f6bff579a3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutClipping.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.components.absolutelayout;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.Label;
+
+public class AbsoluteLayoutClipping extends TestBase {
+
+    @Override
+    protected void setup() {
+        setTheme("tests-tickets");
+        AbsoluteLayout abs = new AbsoluteLayout();
+        abs.setStyleName("borders");
+        abs.setWidth("100px");
+        abs.setHeight("100px");
+
+        Label l = new Label("This should be clipped at 100px");
+        l.setSizeUndefined();
+        abs.addComponent(l, "top:50px;left:50px");
+
+        Label l2 = new Label("This should not be visible");
+        l2.setSizeUndefined();
+        abs.addComponent(l2, "top:80px;left:150px");
+
+        Label l3 = new Label("This should be clipped vertically at 100px");
+        l3.setWidth("50px");
+        abs.addComponent(l3, "top:20px;left:0px");
+
+        addComponent(abs);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "An AbsoluteLayout with fixed size should clip at its borders. Nothing outside the black square should be visible.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2913;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/absolutelayout/MoveComponentFromAbsoluteLayoutToInnerLayout.html b/tests/testbench/com/vaadin/tests/components/absolutelayout/MoveComponentFromAbsoluteLayoutToInnerLayout.html
new file mode 100644
index 0000000000..e1fbf29b37
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/absolutelayout/MoveComponentFromAbsoluteLayoutToInnerLayout.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.absolutelayout.MoveComponentsFromAbsoluteLayoutToInnerLayout?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsabsolutelayoutMoveComponentsFromAbsoluteLayoutToInnerLayout::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VAbsoluteLayout[0]/VAbsoluteLayout$AbsoluteWrapper[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsabsolutelayoutMoveComponentsFromAbsoluteLayoutToInnerLayout::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>buttons-with-captions</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/absolutelayout/MoveComponentsFromAbsoluteLayoutToInnerLayout.java b/tests/testbench/com/vaadin/tests/components/absolutelayout/MoveComponentsFromAbsoluteLayoutToInnerLayout.java
new file mode 100644
index 0000000000..9082842b1c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/absolutelayout/MoveComponentsFromAbsoluteLayoutToInnerLayout.java
@@ -0,0 +1,58 @@
+package com.vaadin.tests.components.absolutelayout;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.VerticalLayout;
+
+public class MoveComponentsFromAbsoluteLayoutToInnerLayout extends TestBase {
+
+    protected Button testButton;
+    private AbsoluteLayout al;
+    protected ComponentContainer vl;
+
+    @Override
+    protected void setup() {
+        al = new AbsoluteLayout();
+        al.setWidth("200px");
+        al.setHeight("200px");
+
+        testButton = new Button("Click to move to inner layout",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        vl.addComponent(testButton);
+                    }
+                });
+
+        al.addComponent(testButton);
+
+        vl = new VerticalLayout();
+        al.addComponent(vl, "top: 100px");
+
+        addComponent(al);
+
+        Button b = new Button("Repaint inner layout",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        vl.requestRepaint();
+                    }
+                });
+
+        addComponent(b);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Click the first button to move it from an outer layout to an inner. Then click the second button to repaint the inner layout.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6061;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/abstractcomponent/EnableState.html b/tests/testbench/com/vaadin/tests/components/abstractcomponent/EnableState.html
new file mode 100644
index 0000000000..f4bebcf859
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/abstractcomponent/EnableState.html
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.abstractcomponent.EnableState</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractcomponentEnableState::/VVerticalLayout[0]/ChildComponentContainer[3]/VCheckBox[0]/domChild[0]</td>
+	<td>58,5</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disable-cascade</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractcomponentEnableState::/VVerticalLayout[0]/ChildComponentContainer[3]/VCheckBox[0]/domChild[0]</td>
+	<td>49,7</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractcomponentEnableState::/VVerticalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
+	<td>55,7</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractcomponentEnableState::/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+	<td>76,8</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractcomponentEnableState::/VVerticalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
+	<td>58,8</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>button-disabled</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/abstractcomponent/EnableState.java b/tests/testbench/com/vaadin/tests/components/abstractcomponent/EnableState.java
new file mode 100644
index 0000000000..5d4f0f2acf
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/abstractcomponent/EnableState.java
@@ -0,0 +1,77 @@
+package com.vaadin.tests.components.abstractcomponent;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Window;
+
+public class EnableState extends AbstractTestCase {
+    @Override
+    public void init() {
+        Window mainWindow = new Window("Helloworld Application");
+
+        final Panel panel = new Panel("Test");
+        final Button button = new Button("ablebutton");
+        panel.addComponent(button);
+
+        CheckBox enable = new CheckBox("Toggle button enabled", true);
+        enable.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                boolean enabled = (Boolean) event.getButton().getValue();
+                button.setEnabled(enabled);
+                // button.requestRepaint();
+            }
+        });
+        enable.setImmediate(true);
+
+        CheckBox caption = new CheckBox("Toggle button caption", true);
+        caption.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                button.setCaption(button.getCaption() + "+");
+            }
+        });
+        caption.setImmediate(true);
+
+        CheckBox visible = new CheckBox("Toggle panel visibility", true);
+        visible.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                boolean visible = (Boolean) event.getButton().getValue();
+
+                panel.setVisible(visible);
+            }
+        });
+        visible.setImmediate(true);
+
+        CheckBox panelEnable = new CheckBox("Toggle panel enabled", true);
+        panelEnable.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                boolean enabled = (Boolean) event.getButton().getValue();
+                panel.setEnabled(enabled);
+            }
+        });
+        panelEnable.setImmediate(true);
+
+        mainWindow.addComponent(enable);
+        mainWindow.addComponent(caption);
+        mainWindow.addComponent(visible);
+        mainWindow.addComponent(panelEnable);
+        mainWindow.addComponent(panel);
+
+        setMainWindow(mainWindow);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "This tests the enabled/disabled propagation and that enabled/disabled state is updated"
+                + " properly even when the parent is invisible. Disabling the Button while the panel is"
+                + " invisible should be reflected on the screen when the panel is set visible"
+                + " again.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3609;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldCommitWithInvalidValues.html b/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldCommitWithInvalidValues.html
new file mode 100644
index 0000000000..6a47032545
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldCommitWithInvalidValues.html
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>AbstractFieldCommitWithInvalidValues</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">AbstractFieldCommitWithInvalidValues</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.abstractfield.AbstractFieldCommitWithInvalidValues</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>focus</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldAbstractFieldCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldAbstractFieldCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAt</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldAbstractFieldCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldAbstractFieldCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>long</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldAbstractFieldCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldCommitWithInvalidValues.java b/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldCommitWithInvalidValues.java
new file mode 100644
index 0000000000..a08f8999a6
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldCommitWithInvalidValues.java
@@ -0,0 +1,67 @@
+package com.vaadin.tests.components.abstractfield;
+
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.data.validator.StringLengthValidator;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window.Notification;
+
+public class AbstractFieldCommitWithInvalidValues extends TestBase {
+
+    private TextField tf;
+
+    @Override
+    protected String getDescription() {
+        return "Commiting a field with invalid values should throw an exception";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2532;
+    }
+
+    @Override
+    protected void setup() {
+        tf = new TextField("A field, must contain 1-2 chars",
+                new ObjectProperty<String>("a"));
+        tf.addValidator(new StringLengthValidator("Invalid length", 1, 2, false));
+        tf.setWriteThrough(false);
+        tf.setRequired(true);
+
+        Button b = new Button("Commit", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                try {
+                    tf.commit();
+                    if (tf.isValid()) {
+                        getMainWindow().showNotification(
+                                "OK! Form validated and no error was thrown",
+                                Notification.TYPE_HUMANIZED_MESSAGE);
+                    } else {
+                        getMainWindow().showNotification(
+                                "Form is invalid but no exception was thrown",
+                                Notification.TYPE_ERROR_MESSAGE);
+                    }
+                } catch (Exception e) {
+                    if (tf.isValid()) {
+                        getMainWindow().showNotification(
+                                "Form is valid but an exception was thrown",
+                                Notification.TYPE_ERROR_MESSAGE);
+                    } else {
+                        getMainWindow().showNotification(
+                                "OK! Error was thrown for an invalid input",
+                                Notification.TYPE_HUMANIZED_MESSAGE);
+
+                    }
+                }
+            }
+
+        });
+
+        addComponent(tf);
+        addComponent(b);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.html b/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.html
new file mode 100644
index 0000000000..f99bdea946
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.html
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/run/com.vaadin.tests.components.abstractfield.AbstractFieldDataSourceReadOnly" />
+<title>AbstractFieldDataSourceReadOnly</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">AbstractFieldDataSourceReadOnly</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.abstractfield.AbstractFieldDataSourceReadOnly</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldAbstractFieldDataSourceReadOnly::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.java b/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.java
new file mode 100644
index 0000000000..2a2fc0153a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.java
@@ -0,0 +1,60 @@
+package com.vaadin.tests.components.abstractfield;
+
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component.Event;
+import com.vaadin.ui.Component.Listener;
+import com.vaadin.ui.TextField;
+
+public class AbstractFieldDataSourceReadOnly extends TestBase {
+
+    private static class StateHolder {
+        private ObjectProperty<String> textField = new ObjectProperty<String>(
+                "");
+
+        public ObjectProperty<String> getTextField() {
+            return textField;
+        }
+
+        @SuppressWarnings("unused")
+        public void setTextField(ObjectProperty<String> textField) {
+            this.textField = textField;
+        }
+
+        public void buttonClicked() {
+            textField.setReadOnly(true);
+        }
+    }
+
+    @Override
+    protected void setup() {
+        final StateHolder stateHolder = new StateHolder();
+
+        // Button
+        Button button = new Button("Make data source read-only");
+        button.addListener(new Listener() {
+            public void componentEvent(Event event) {
+                stateHolder.buttonClicked();
+            }
+        });
+
+        // Input field
+        TextField input = new TextField("Field");
+        input.setPropertyDataSource(stateHolder.getTextField());
+
+        addComponent(button);
+        addComponent(input);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Read-only status changes in data sources are not rendered immediately";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5013;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldTest.java b/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldTest.java
new file mode 100644
index 0000000000..1c8e728908
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractFieldTest.java
@@ -0,0 +1,234 @@
+package com.vaadin.tests.components.abstractfield;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ReadOnlyStatusChangeEvent;
+import com.vaadin.data.Property.ReadOnlyStatusChangeListener;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.event.FieldEvents.BlurEvent;
+import com.vaadin.event.FieldEvents.BlurListener;
+import com.vaadin.event.FieldEvents.BlurNotifier;
+import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.event.FieldEvents.FocusListener;
+import com.vaadin.event.FieldEvents.FocusNotifier;
+import com.vaadin.tests.components.AbstractComponentTest;
+import com.vaadin.ui.AbstractField;
+import com.vaadin.ui.MenuBar;
+import com.vaadin.ui.MenuBar.MenuItem;
+
+public abstract class AbstractFieldTest<T extends AbstractField> extends
+        AbstractComponentTest<T> implements ValueChangeListener,
+        ReadOnlyStatusChangeListener, FocusListener, BlurListener {
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+        createBooleanAction("Required", CATEGORY_STATE, false, requiredCommand);
+        createRequiredErrorSelect(CATEGORY_DECORATIONS);
+
+        createValueChangeListener(CATEGORY_LISTENERS);
+        createReadOnlyStatusChangeListener(CATEGORY_LISTENERS);
+
+        // * invalidcommitted
+        // * commit()
+        // * discard()
+        // * writethrough
+        // * readthrough
+        // * addvalidator
+        // * isvalid
+        // * invalidallowed
+        // * error indicator
+        //
+        // * tabindex
+        // * validation visible
+        // * ShortcutListener
+
+    }
+
+    @Override
+    protected void populateSettingsMenu(MenuItem settingsMenu) {
+        super.populateSettingsMenu(settingsMenu);
+
+        if (AbstractField.class.isAssignableFrom(getTestClass())) {
+            MenuItem abstractField = settingsMenu
+                    .addItem("AbstractField", null);
+            abstractField.addItem("Show value", new MenuBar.Command() {
+
+                public void menuSelected(MenuItem selectedItem) {
+                    for (T a : getTestComponents()) {
+                        log(a.getClass().getSimpleName() + " value: "
+                                + getValue(a));
+                    }
+                }
+            });
+        }
+    }
+
+    private void createRequiredErrorSelect(String category) {
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+        options.put("-", null);
+        options.put(TEXT_SHORT, TEXT_SHORT);
+        options.put("Medium", TEXT_MEDIUM);
+        options.put("Long", TEXT_LONG);
+        options.put("Very long", TEXT_VERY_LONG);
+        createSelectAction("Required error message", category, options, "-",
+                requiredErrorMessageCommand);
+
+        if (FocusNotifier.class.isAssignableFrom(getTestClass())) {
+            createFocusListener(CATEGORY_LISTENERS);
+        }
+
+        if (BlurNotifier.class.isAssignableFrom(getTestClass())) {
+            createBlurListener(CATEGORY_LISTENERS);
+        }
+
+    }
+
+    private void createValueChangeListener(String category) {
+
+        createBooleanAction("Value change listener", category, false,
+                valueChangeListenerCommand);
+    }
+
+    private void createReadOnlyStatusChangeListener(String category) {
+
+        createBooleanAction("Read only status change listener", category,
+                false, readonlyStatusChangeListenerCommand);
+    }
+
+    private void createFocusListener(String category) {
+        createBooleanAction("Focus listener", category, false,
+                focusListenerCommand);
+
+    }
+
+    private void createBlurListener(String category) {
+        createBooleanAction("Blur listener", category, false,
+                blurListenerCommand);
+
+    }
+
+    protected Command<T, Boolean> valueChangeListenerCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((ValueChangeListener) AbstractFieldTest.this);
+            } else {
+                c.removeListener((ValueChangeListener) AbstractFieldTest.this);
+            }
+        }
+    };
+    protected Command<T, Boolean> readonlyStatusChangeListenerCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((ReadOnlyStatusChangeListener) AbstractFieldTest.this);
+            } else {
+                c.removeListener((ReadOnlyStatusChangeListener) AbstractFieldTest.this);
+            }
+        }
+    };
+    protected Command<T, Boolean> focusListenerCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            if (value) {
+                ((FocusNotifier) c).addListener(AbstractFieldTest.this);
+            } else {
+                ((FocusNotifier) c).removeListener(AbstractFieldTest.this);
+            }
+        }
+    };
+    protected Command<T, Boolean> blurListenerCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            if (value) {
+                ((BlurNotifier) c).addListener(AbstractFieldTest.this);
+            } else {
+                ((BlurNotifier) c).removeListener(AbstractFieldTest.this);
+            }
+        }
+    };
+    protected Command<T, Object> setValueCommand = new Command<T, Object>() {
+
+        public void execute(T c, Object value, Object data) {
+            c.setValue(value);
+        }
+    };
+
+    public void valueChange(com.vaadin.data.Property.ValueChangeEvent event) {
+        log(event.getClass().getSimpleName() + ", new value: "
+                + getValue(event.getProperty()));
+    };
+
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    private String getValue(Property property) {
+        Object o = property.getValue();
+        if (o instanceof Collection) {
+            // Sort collections to avoid problems with values printed in
+            // different order
+            try {
+                ArrayList<Comparable> c = new ArrayList<Comparable>(
+                        (Collection) o);
+                Collections.sort(c);
+                o = c;
+            } catch (Exception e) {
+                // continue with unsorted if sorting fails for some reason
+                log("Exception while sorting value: " + e.getMessage());
+            }
+        }
+
+        // Distinguish between null and 'null'
+        String value = "null";
+        if (o != null) {
+            if (o instanceof Date) {
+                Date d = (Date) o;
+                // Dec 31, 2068 23:09:26.531
+                String pattern = "MMM d, yyyy HH:mm:ss.SSS";
+                SimpleDateFormat format = new SimpleDateFormat(pattern,
+                        new Locale("en", "US"));
+                value = format.format(d);
+            } else {
+                value = "'" + o.toString() + "'";
+            }
+        }
+
+        return value;
+
+    }
+
+    public void readOnlyStatusChange(ReadOnlyStatusChangeEvent event) {
+        log(event.getClass().getSimpleName());
+    }
+
+    public void focus(FocusEvent event) {
+        log(event.getClass().getSimpleName());
+    }
+
+    public void blur(BlurEvent event) {
+        log(event.getClass().getSimpleName());
+    }
+
+    protected void createSetTextValueAction(String category) {
+        String subCategory = "Set text value";
+        createCategory(subCategory, category);
+        List<String> values = new ArrayList<String>();
+        values.add("Test");
+        values.add("A little longer value");
+        values.add("A very long value with very much text. All in all it is 74 characters long");
+
+        createClickAction("(empty string)", subCategory, setValueCommand, "");
+        createClickAction("(null)", subCategory, setValueCommand, null);
+        for (String value : values) {
+            createClickAction(value, subCategory, setValueCommand, value);
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractTextFieldTest.java b/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractTextFieldTest.java
new file mode 100644
index 0000000000..eb9adef8d2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/abstractfield/AbstractTextFieldTest.java
@@ -0,0 +1,241 @@
+package com.vaadin.tests.components.abstractfield;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import com.vaadin.event.FieldEvents.TextChangeEvent;
+import com.vaadin.event.FieldEvents.TextChangeListener;
+import com.vaadin.ui.AbstractTextField;
+import com.vaadin.ui.AbstractTextField.TextChangeEventMode;
+
+public abstract class AbstractTextFieldTest<T extends AbstractTextField>
+        extends AbstractFieldTest<T> implements TextChangeListener {
+
+    private Command<T, Integer> maxlengthCommand = new Command<T, Integer>() {
+
+        public void execute(T c, Integer value, Object data) {
+            c.setMaxLength(value);
+        }
+    };
+    private Command<T, Boolean> nullSelectionAllowedCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            c.setNullSettingAllowed(value);
+
+        }
+    };
+    private Command<T, String> nullRepresentationCommand = new Command<T, String>() {
+
+        public void execute(T c, String value, Object data) {
+            c.setNullRepresentation(value);
+        }
+    };
+
+    private Command<T, String> inputPromptCommand = new Command<T, String>() {
+        public void execute(T c, String value, Object data) {
+            c.setInputPrompt(value);
+        }
+    };
+
+    private Command<T, Boolean> textChangeListenerCommand = new Command<T, Boolean>() {
+        public void execute(T c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((TextChangeListener) AbstractTextFieldTest.this);
+            } else {
+                c.removeListener((TextChangeListener) AbstractTextFieldTest.this);
+            }
+        }
+    };
+
+    private Command<T, Integer> colsCommand = new Command<T, Integer>() {
+        public void execute(T c, Integer value, Object data) {
+            c.setColumns(value);
+        }
+    };
+
+    private Command<T, TextChangeEventMode> textChangeEventModeCommand = new Command<T, TextChangeEventMode>() {
+        public void execute(T c, TextChangeEventMode value, Object data) {
+            c.setTextChangeEventMode(value);
+        }
+    };
+
+    private Command<T, Integer> textChangeTimeoutCommand = new Command<T, Integer>() {
+        public void execute(T c, Integer value, Object data) {
+            c.setTextChangeTimeout(value);
+        }
+    };
+
+    private Command<T, Range> selectionRangeCommand = new Command<T, Range>() {
+        public void execute(T c, Range value, Object data) {
+            c.setSelectionRange(value.getStart(),
+                    value.getEnd() - value.getStart());
+
+        }
+    };
+    private Command<T, Object> selectAllCommand = new Command<T, Object>() {
+        public void execute(T c, Object value, Object data) {
+            c.selectAll();
+        }
+    };
+
+    private Command<T, Integer> setCursorPositionCommand = new Command<T, Integer>() {
+
+        public void execute(T c, Integer value, Object data) {
+            c.setCursorPosition(value);
+        }
+    };
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+
+        createSetTextValueAction(CATEGORY_ACTIONS);
+
+        createNullSettingAllowedAction(CATEGORY_FEATURES);
+        createNullRepresentationAction(CATEGORY_FEATURES);
+        createMaxLengthAction(CATEGORY_FEATURES);
+
+        createInputPromptAction(CATEGORY_FEATURES);
+        createColsAction(CATEGORY_STATE);
+
+        createTextChangeListener(CATEGORY_LISTENERS);
+        createTextChangeEventModeAction(CATEGORY_FEATURES);
+        createTextChangeEventTimeoutAction(CATEGORY_FEATURES);
+
+        createSetTextValueAction(CATEGORY_ACTIONS);
+        createCursorPositionAction(CATEGORY_ACTIONS);
+        createSelectionRangeAction(CATEGORY_ACTIONS);
+
+    }
+
+    private void createNullSettingAllowedAction(String category) {
+        createBooleanAction("Null selection allowed", category, true,
+                nullSelectionAllowedCommand);
+    }
+
+    private void createNullRepresentationAction(String category) {
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+        options.put("-", null);
+        options.put("null", "null");
+        options.put("This is empty", "This is empty");
+        options.put("- Nothing -", "- Nothing -");
+        createSelectAction("Null representation", category, options, "null",
+                nullRepresentationCommand);
+    }
+
+    private void createMaxLengthAction(String category) {
+        LinkedHashMap<String, Integer> options = createIntegerOptions(100);
+        options.put("-", -1);
+        createSelectAction("Max length", category, options, "-",
+                maxlengthCommand);
+
+    }
+
+    public class Range {
+        private int start;
+        private int end;
+
+        public Range(int start, int end) {
+            this.start = start;
+            this.end = end;
+        }
+
+        public int getStart() {
+            return start;
+        }
+
+        public int getEnd() {
+            return end;
+        }
+
+        @Override
+        public String toString() {
+            return start + "-" + end;
+        }
+    }
+
+    private void createSelectionRangeAction(String category) {
+        List<Range> options = new ArrayList<Range>();
+        options.add(new Range(0, 10));
+        options.add(new Range(0, 1));
+        options.add(new Range(0, 2));
+        options.add(new Range(1, 2));
+        options.add(new Range(2, 5));
+        options.add(new Range(5, 10));
+
+        createCategory("Select range", category);
+
+        createClickAction("All", "Select range", selectAllCommand, null);
+        for (Range range : options) {
+            createClickAction(range.toString(), "Select range",
+                    selectionRangeCommand, range);
+        }
+
+    }
+
+    private void createCursorPositionAction(String category) {
+        String subCategory = "Set cursor position";
+        createCategory(subCategory, category);
+        for (int i = 0; i < 20; i++) {
+            createClickAction(String.valueOf(i), subCategory,
+                    setCursorPositionCommand, Integer.valueOf(i));
+        }
+
+    }
+
+    private void createTextChangeEventTimeoutAction(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("0", 0);
+        options.put("100ms", 100);
+        options.put("500ms", 500);
+        options.put("1s", 1000);
+        options.put("2s", 2000);
+        options.put("5s", 5000);
+
+        createSelectAction("TextChange timeout", category, options, "0",
+                textChangeTimeoutCommand);
+    }
+
+    private void createTextChangeEventModeAction(String category) {
+        LinkedHashMap<String, TextChangeEventMode> options = new LinkedHashMap<String, AbstractTextField.TextChangeEventMode>();
+        for (TextChangeEventMode m : TextChangeEventMode.values()) {
+            options.put(m.toString(), m);
+        }
+
+        createSelectAction("TextChange event mode", category, options,
+                TextChangeEventMode.EAGER.toString(),
+                textChangeEventModeCommand);
+
+    }
+
+    private void createTextChangeListener(String category) {
+        createBooleanAction("Text change listener", category, false,
+                textChangeListenerCommand);
+
+    }
+
+    private void createColsAction(String category) {
+        LinkedHashMap<String, Integer> options = createIntegerOptions(20);
+        createSelectAction("Columns", category, options, "0", colsCommand);
+    }
+
+    private void createInputPromptAction(String category) {
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+        options.put("-", null);
+        options.put("Enter a value", "Enter a value");
+        options.put("- Click here -", "- Click here -");
+        createSelectAction("Input prompt", category, options, "-",
+                inputPromptCommand);
+
+    }
+
+    public void textChange(TextChangeEvent event) {
+        AbstractTextField tf = (AbstractTextField) event.getComponent();
+        log("TextChangeEvent: text='" + event.getText() + "', cursor position="
+                + event.getCursorPosition() + " (field cursor pos: "
+                + tf.getCursorPosition() + ")");
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/abstractfield/ShortcutAddAndRemove.html b/tests/testbench/com/vaadin/tests/components/abstractfield/ShortcutAddAndRemove.html
new file mode 100644
index 0000000000..e61f227939
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/abstractfield/ShortcutAddAndRemove.html
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.abstractfield.ShortcutAddAndRemove?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
+	<td>316,58</td>
+</tr>
+<!--Enter on background - should cause event-->
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>1. Log button was clicked</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
+	<td>102,51</td>
+</tr>
+<!--Enter in textfield - should cause event-->
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>2. Log button was clicked</td>
+</tr>
+<!--Remove shortcut-->
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
+	<td>110,62</td>
+</tr>
+<!--Enter in field - should not cause event-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
+	<td>97,26</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
+	<td>up</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
+	<td>row1</td>
+</tr>
+<tr>
+	<td>keyPress</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
+	<td>13</td>
+</tr>
+<tr>
+	<td>keyPress</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
+	<td>r</td>
+</tr>
+<tr>
+	<td>keyPress</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
+	<td>o</td>
+</tr>
+<tr>
+	<td>keyPress</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
+	<td>w</td>
+</tr>
+<tr>
+	<td>keyPress</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
+	<td>2</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>2. Log button was clicked</td>
+</tr>
+<!-- Commented out because TestBench does not enter the text correctly using keyPress in any browser except Firefox -->
+<!-- <tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
+	<td>row1<br />row2</td>
+</tr>-->
+<!--Add shortcut again-->
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
+	<td>85,46</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextArea[0]</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. Log button was clicked</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>625,2</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>4. Log button was clicked</td>
+</tr>
+<!--Remove shortcut once more-->
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
+	<td>631,52</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
+	<td>597,57</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsabstractfieldShortcutAddAndRemove::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>4. Log button was clicked</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/abstractfield/ShortcutAddAndRemove.java b/tests/testbench/com/vaadin/tests/components/abstractfield/ShortcutAddAndRemove.java
new file mode 100644
index 0000000000..837256ff65
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/abstractfield/ShortcutAddAndRemove.java
@@ -0,0 +1,64 @@
+package com.vaadin.tests.components.abstractfield;
+
+import com.vaadin.event.ShortcutAction.KeyCode;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.TextArea;
+
+public class ShortcutAddAndRemove extends TestBase {
+
+    private Log log;
+    private TextArea textArea;
+
+    @Override
+    protected void setup() {
+        log = new Log(4);
+
+        final Button logButton = new Button("Log a row (enter shortcut)");
+        logButton.setClickShortcut(KeyCode.ENTER);
+        logButton.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                log.log("Log button was clicked");
+            }
+        });
+
+        final Button removeShortcut = new Button("Remove shortcut");
+        removeShortcut.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                logButton.removeClickShortcut();
+                logButton.setCaption("Log a row (no shortcut)");
+            }
+        });
+        final Button addShortcut = new Button("Add shortcut");
+        addShortcut.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                logButton.setClickShortcut(KeyCode.ENTER);
+                logButton.setCaption("Log a row (enter shortcut)");
+            }
+        });
+        addComponent(log);
+        addComponent(logButton);
+        textArea = new TextArea("Enter key does not break lines ...");
+        textArea.setRows(5);
+        textArea.setColumns(20);
+        addComponent(textArea);
+        addComponent(removeShortcut);
+        addComponent(addShortcut);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return null;
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/accordion/AccordionInactiveTabSize.html b/tests/testbench/com/vaadin/tests/components/accordion/AccordionInactiveTabSize.html
new file mode 100644
index 0000000000..e4bb6c36be
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/accordion/AccordionInactiveTabSize.html
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head profile="http://selenium-ide.openqa.org/profiles/test-case"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><link rel="selenium.base" href="" /><title>com.vaadin.tests.components.accordion.AccordionInactiveTabSize</title></head><body><table cellpadding="1" cellspacing="1" border="1"><thead><tr><td rowspan="1" colspan="3">com.vaadin.tests.components.accordion.AccordionInactiveTabSize</td></tr></thead><tbody><tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.accordion.AccordionInactiveTabSize?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsaccordionAccordionInactiveTabSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VAccordion[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>285,11</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>center-second-tab</td>
+</tr>
+<tr>
+	<td>dragAndDrop</td>
+	<td>vaadin=runcomvaadintestscomponentsaccordionAccordionInactiveTabSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>150,-36</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>splitter-right-second-tab</td>
+</tr>
+<tr>
+	<td>dragAndDrop</td>
+	<td>vaadin=runcomvaadintestscomponentsaccordionAccordionInactiveTabSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>-300,-36</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>splitter-left-second-tab</td>
+</tr>
+
+<!--back to original pos-->
+<tr>
+	<td>dragAndDrop</td>
+	<td>vaadin=runcomvaadintestscomponentsaccordionAccordionInactiveTabSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>150,-36</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>center-second-tab</td>
+</tr>
+</tbody></table></body></html>
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/accordion/AccordionInactiveTabSize.java b/tests/testbench/com/vaadin/tests/components/accordion/AccordionInactiveTabSize.java
new file mode 100644
index 0000000000..387ec7857f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/accordion/AccordionInactiveTabSize.java
@@ -0,0 +1,41 @@
+package com.vaadin.tests.components.accordion;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Accordion;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.TabSheet.Tab;
+import com.vaadin.ui.TextField;
+
+public class AccordionInactiveTabSize extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Select the second tab and move the splitter to the right. Both the inactive and the active tab should be resized.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3065;
+    }
+
+    @Override
+    protected void setup() {
+        HorizontalSplitPanel sp = new HorizontalSplitPanel();
+        sp.setWidth("100%");
+        sp.setHeight("70px");
+
+        Accordion acc = new Accordion();
+
+        Tab tab1 = acc.addTab(new TextField("first field"));
+        tab1.setCaption("First tab");
+
+        Tab tab2 = acc.addTab(new TextField("second field"));
+        tab2.setCaption("Second tab");
+
+        acc.setSizeFull();
+
+        sp.addComponent(acc);
+        addComponent(sp);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/accordion/AccordionTest.java b/tests/testbench/com/vaadin/tests/components/accordion/AccordionTest.java
new file mode 100644
index 0000000000..5c47610ae5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/accordion/AccordionTest.java
@@ -0,0 +1,12 @@
+package com.vaadin.tests.components.accordion;
+
+import com.vaadin.tests.components.tabsheet.TabSheetTest;
+import com.vaadin.ui.Accordion;
+
+public class AccordionTest extends TabSheetTest<Accordion> {
+
+    @Override
+    protected Class<Accordion> getTestClass() {
+        return Accordion.class;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/accordion/RemoveTabs.html b/tests/testbench/com/vaadin/tests/components/accordion/RemoveTabs.html
new file mode 100644
index 0000000000..ec24ade8ce
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/accordion/RemoveTabs.html
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>RemoveTabsTest</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">RemoveTabsTest</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.accordion.RemoveTabs</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsaccordionRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsaccordionRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VAccordion[0]/domChild[2]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsaccordionRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsaccordionRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsaccordionRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsaccordionRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/accordion/RemoveTabs.java b/tests/testbench/com/vaadin/tests/components/accordion/RemoveTabs.java
new file mode 100644
index 0000000000..bc8bea1c56
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/accordion/RemoveTabs.java
@@ -0,0 +1,127 @@
+package com.vaadin.tests.components.accordion;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractComponentContainer;
+import com.vaadin.ui.Accordion;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+
+public class RemoveTabs extends TestBase {
+
+    private Accordion accordion;
+
+    protected Component[] tab = new Component[5];
+
+    private Button closeCurrent;
+    private Button closeFirst;
+    private Button closeLast;
+    private Button reorderTabs;
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2425;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tests the removal of individual tabs from an Accordion. No matter what is done in this test the tab caption \"Tab X\" should always match the content \"Tab X\". Use \"remove first\" and \"remove active\" buttons to remove the first or the active tab. The \"reorder\" button reverses the order by adding and removing all components.";
+    }
+
+    @Override
+    protected void setup() {
+        accordion = new Accordion();
+        for (int i = 1; i <= tab.length; i++) {
+            tab[i - 1] = new Label("This is the contents of tab " + i);
+            tab[i - 1].setCaption("Tab " + i);
+
+            accordion.addComponent(tab[i - 1]);
+        }
+
+        getLayout().addComponent(accordion);
+
+        closeCurrent = new Button("Close current tab");
+        closeCurrent.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                closeCurrentTab();
+
+            }
+        });
+
+        closeFirst = new Button("close first tab");
+        closeFirst.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                closeFirstTab();
+
+            }
+        });
+
+        closeLast = new Button("close last tab");
+        closeLast.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                closeLastTab();
+
+            }
+        });
+
+        reorderTabs = new Button("reorder");
+        reorderTabs.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                reorder();
+
+            }
+        });
+
+        getLayout().addComponent(closeFirst);
+        getLayout().addComponent(closeLast);
+        getLayout().addComponent(closeCurrent);
+        getLayout().addComponent(reorderTabs);
+
+    }
+
+    private void closeCurrentTab() {
+        Component c = accordion.getSelectedTab();
+        if (c != null) {
+            accordion.removeComponent(c);
+        }
+    }
+
+    private void closeFirstTab() {
+        accordion.removeComponent(accordion.getComponentIterator().next());
+    }
+
+    private void closeLastTab() {
+        Iterator<Component> i = accordion.getComponentIterator();
+        Component last = null;
+        while (i.hasNext()) {
+            last = i.next();
+
+        }
+        accordion.removeComponent(last);
+    }
+
+    private void reorder() {
+        AbstractComponentContainer container = accordion;
+
+        if (container != null) {
+            List<Component> c = new ArrayList<Component>();
+            Iterator<Component> i = container.getComponentIterator();
+            while (i.hasNext()) {
+                Component comp = i.next();
+                c.add(comp);
+            }
+            container.removeAllComponents();
+
+            for (int j = c.size() - 1; j >= 0; j--) {
+                container.addComponent(c.get(j));
+            }
+
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerGenerator.java b/tests/testbench/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerGenerator.java
new file mode 100644
index 0000000000..254779f872
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerGenerator.java
@@ -0,0 +1,103 @@
+package com.vaadin.tests.components.beanitemcontainer;
+
+import java.util.Date;
+
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.tests.util.PortableRandom;
+
+public class BeanItemContainerGenerator {
+
+    public static BeanItemContainer<TestBean> createContainer(int size) {
+        return createContainer(size, new Date().getTime());
+    }
+
+    public static BeanItemContainer<TestBean> createContainer(int size,
+            long seed) {
+
+        BeanItemContainer<TestBean> container = new BeanItemContainer<TestBean>(
+                TestBean.class);
+        PortableRandom r = new PortableRandom(seed);
+        for (int i = 0; i < size; i++) {
+            container.addBean(new TestBean(r));
+        }
+
+        return container;
+
+    }
+
+    public static class TestBean {
+        private String name, address, city, country;
+        private int age, shoesize;
+
+        public int getAge() {
+            return age;
+        }
+
+        public void setAge(int age) {
+            this.age = age;
+        }
+
+        public int getShoesize() {
+            return shoesize;
+        }
+
+        public void setShoesize(int shoesize) {
+            this.shoesize = shoesize;
+        }
+
+        public TestBean(PortableRandom r) {
+            age = r.nextInt(100) + 5;
+            shoesize = r.nextInt(10) + 35;
+            name = createRandomString(r, r.nextInt(5) + 5);
+            address = createRandomString(r, r.nextInt(15) + 5) + " "
+                    + r.nextInt(100) + 1;
+            city = createRandomString(r, r.nextInt(7) + 3);
+            if (r.nextBoolean()) {
+                country = createRandomString(r, r.nextInt(4) + 4);
+            }
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getAddress() {
+            return address;
+        }
+
+        public void setAddress(String address) {
+            this.address = address;
+        }
+
+        public String getCity() {
+            return city;
+        }
+
+        public void setCity(String city) {
+            this.city = city;
+        }
+
+        public String getCountry() {
+            return country;
+        }
+
+        public void setCountry(String country) {
+            this.country = country;
+        }
+
+    }
+
+    public static String createRandomString(PortableRandom r, int len) {
+        StringBuilder b = new StringBuilder();
+        for (int i = 0; i < len; i++) {
+            b.append((char) (r.nextInt('z' - 'a') + 'a'));
+        }
+
+        return b.toString();
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.html b/tests/testbench/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.html
new file mode 100644
index 0000000000..e40be7dc15
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.html
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head profile="http://selenium-ide.openqa.org/profiles/test-case"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><link rel="selenium.base" href="" /><title>com.vaadin.tests.components.beanitemcontainer.BeanItemContainerNullValues</title></head><body><table cellpadding="1" cellspacing="1" border="1"><thead><tr><td rowspan="1" colspan="3">com.vaadin.tests.components.beanitemcontainer.BeanItemContainerNullValues</td></tr></thead><tbody><tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.beanitemcontainer.BeanItemContainerNullValues?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>85,9</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[1]</td>
+	<td>40,9</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>sort-country-asc</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[1]</td>
+	<td>29,9</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>sort-country-desc</td>
+</tr>
+<!--  Disable sorting -->
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<!--  Try to sort -->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[1]</td>
+	<td>39,8</td>
+</tr>
+<!--  Enable sorting to get the same screenshot as before -->
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>79,4</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>sort-country-desc</td>
+</tr>
+</tbody></table></body></html>
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.java b/tests/testbench/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.java
new file mode 100644
index 0000000000..9045d18940
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.java
@@ -0,0 +1,47 @@
+package com.vaadin.tests.components.beanitemcontainer;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Table;
+
+public class BeanItemContainerNullValues extends TestBase {
+
+    private Table table;
+
+    @Override
+    protected String getDescription() {
+        return "Null values should be sorted first (ascending sort) in a BeanItemContainer. Sort the 'country' column to see that the empty values come first.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2917;
+    }
+
+    @Override
+    protected void setup() {
+        table = new Table();
+        table.setSortDisabled(false);
+        table.setContainerDataSource(BeanItemContainerGenerator
+                .createContainer(100, 1));
+        table.setColumnCollapsingAllowed(true);
+
+        Button b = new Button("Disable sorting", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                table.setSortDisabled(!table.isSortDisabled());
+                if (table.isSortDisabled()) {
+                    event.getButton().setCaption("Enable sorting");
+                } else {
+                    event.getButton().setCaption("Disable sorting");
+                }
+            }
+
+        });
+
+        addComponent(table);
+        addComponent(b);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/beanitemcontainer/TestBeanItemContainerUsage.html b/tests/testbench/com/vaadin/tests/components/beanitemcontainer/TestBeanItemContainerUsage.html
new file mode 100644
index 0000000000..a37e8ea662
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/beanitemcontainer/TestBeanItemContainerUsage.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TestBeanItemContainerUsage</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TestBeanItemContainerUsage</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.beanitemcontainer.TestBeanItemContainerUsage</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/beanitemcontainer/TestBeanItemContainerUsage.java b/tests/testbench/com/vaadin/tests/components/beanitemcontainer/TestBeanItemContainerUsage.java
new file mode 100644
index 0000000000..20becea974
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/beanitemcontainer/TestBeanItemContainerUsage.java
@@ -0,0 +1,75 @@
+package com.vaadin.tests.components.beanitemcontainer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+
+public class TestBeanItemContainerUsage extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "A test for the BeanItemContainer. The table should contain three persons and show their first and last names and their age.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 1061;
+    }
+
+    @Override
+    protected void setup() {
+        Table t = new Table("Table containing Persons");
+        t.setPageLength(5);
+        t.setWidth("100%");
+        List<Person> persons = new ArrayList<Person>();
+        persons.add(new Person("Jones", "Birchman", 35));
+        persons.add(new Person("Marc", "Smith", 30));
+        persons.add(new Person("Greg", "Sandman", 75));
+
+        BeanItemContainer<Person> bic = new BeanItemContainer<Person>(persons);
+        t.setContainerDataSource(bic);
+
+        addComponent(t);
+    }
+
+    public static class Person {
+        private String firstName;
+        private String lastName;
+        private int age;
+
+        public String getFirstName() {
+            return firstName;
+        }
+
+        public void setFirstName(String firstName) {
+            this.firstName = firstName;
+        }
+
+        public String getLastName() {
+            return lastName;
+        }
+
+        public void setLastName(String lastName) {
+            this.lastName = lastName;
+        }
+
+        public int getAge() {
+            return age;
+        }
+
+        public void setAge(int age) {
+            this.age = age;
+        }
+
+        public Person(String firstName, String lastName, int age) {
+            super();
+            this.firstName = firstName;
+            this.lastName = lastName;
+            this.age = age;
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/button/ButtonDisableOnClick.html b/tests/testbench/com/vaadin/tests/components/button/ButtonDisableOnClick.html
new file mode 100644
index 0000000000..850d553b5b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/button/ButtonDisableOnClick.html
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.button.Buttons2?restartApplication</td>
+	<td></td>
+</tr>
+<!--value change listener-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_Smenu#item0</td>
+	<td>37,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>28,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>35,8</td>
+</tr>
+<!--disable on click-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_Smenu#item0</td>
+	<td>39,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>33,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>22,4</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_SLog_row_0</td>
+	<td>1. Command: /Disable on click(true)</td>
+</tr>
+<!--click button-->
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_StestComponent/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_StestComponent</td>
+	<td>v-disabled</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_SLog_row_0</td>
+	<td>2. ClickEvent</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_StestComponent/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_SLog_row_0</td>
+	<td>2. ClickEvent</td>
+</tr>
+<!--re-enable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_Smenu#item0</td>
+	<td>35,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>34,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>15,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_Smenu#item0</td>
+	<td>43,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>37,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>33,6</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_SLog_row_0</td>
+	<td>4. Command: /Enabled(true)</td>
+</tr>
+<tr>
+	<td>assertNotCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_StestComponent</td>
+	<td>v-disabled</td>
+</tr>
+<!--no longer disable on click-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_Smenu#item0</td>
+	<td>25,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>39,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>36,3</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_StestComponent/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_SLog_row_0</td>
+	<td>6. ClickEvent</td>
+</tr>
+<tr>
+	<td>assertNotCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtons2::PID_StestComponent</td>
+	<td>v-disabled</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/button/ButtonErrorMessage.java b/tests/testbench/com/vaadin/tests/components/button/ButtonErrorMessage.java
new file mode 100644
index 0000000000..b543c69c51
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/button/ButtonErrorMessage.java
@@ -0,0 +1,31 @@
+package com.vaadin.tests.components.button;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+
+public class ButtonErrorMessage extends TestBase {
+
+    @Override
+    protected void setup() {
+        Button b = new Button("Click for error");
+        b.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                throw new NullPointerException();
+            }
+        });
+        addComponent(b);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Click the button for an exception. The exception should not contain any extra ',' characters";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3303;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/button/ButtonMouseDetails.java b/tests/testbench/com/vaadin/tests/components/button/ButtonMouseDetails.java
new file mode 100644
index 0000000000..40caf620a8
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/button/ButtonMouseDetails.java
@@ -0,0 +1,66 @@
+package com.vaadin.tests.components.button;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Label;
+
+public class ButtonMouseDetails extends TestBase {
+
+    private Label out = new Label("", Label.CONTENT_PREFORMATTED);
+
+    private int clickCounter = 1;
+
+    private Button.ClickListener clickListener = new Button.ClickListener() {
+
+        public void buttonClick(ClickEvent event) {
+            StringBuilder str = new StringBuilder(out.getValue().toString());
+            str.append(clickCounter + ":\t");
+
+            // Modifier keys
+            str.append("ctrl=" + event.isCtrlKey() + ",\t");
+            str.append("alt=" + event.isAltKey() + ",\t");
+            str.append("meta=" + event.isMetaKey() + ",\t");
+            str.append("shift=" + event.isShiftKey() + ",\t");
+
+            // Coordinates
+            str.append("X=" + event.getRelativeX() + ",\t");
+            str.append("Y=" + event.getRelativeY() + ",\t");
+            str.append("clientX=" + event.getClientX() + ",\t");
+            str.append("clientY=" + event.getClientY());
+
+            str.append("\n");
+
+            out.setValue(str.toString());
+            clickCounter++;
+        }
+    };
+
+    @Override
+    protected void setup() {
+
+        getLayout().setSpacing(true);
+
+        Button button = new Button("CLICK ME!", clickListener);
+        button.setImmediate(true);
+        addComponent(button);
+
+        CheckBox cb = new CheckBox("CHECK ME!", clickListener);
+        cb.setImmediate(true);
+        addComponent(cb);
+
+        addComponent(out);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Clicking a button should returns some additional information about the click";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6605;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/button/ButtonUndefinedWidth.html b/tests/testbench/com/vaadin/tests/components/button/ButtonUndefinedWidth.html
new file mode 100644
index 0000000000..28fe12f5a2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/button/ButtonUndefinedWidth.html
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>ButtonUndefinedWidth</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ButtonUndefinedWidth</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.button.ButtonUndefinedWidth</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtonUndefinedWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtonUndefinedWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeButton[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtonUndefinedWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtonUndefinedWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VNativeButton[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsbuttonButtonUndefinedWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
+	<td>636,149</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>1</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/button/ButtonUndefinedWidth.java b/tests/testbench/com/vaadin/tests/components/button/ButtonUndefinedWidth.java
new file mode 100644
index 0000000000..852e41bd05
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/button/ButtonUndefinedWidth.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.components.button;
+
+import com.vaadin.data.Item;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.NativeButton;
+import com.vaadin.ui.Table;
+
+public class ButtonUndefinedWidth extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Both the button outside the table and inside the table should be only as wide as necessary. There should be empty space in the table to the right of the button.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3257;
+    }
+
+    @Override
+    protected void setup() {
+        Button b = new Button("Undefined wide");
+        addComponent(b);
+        NativeButton b2 = new NativeButton("Undefined wide");
+        addComponent(b2);
+
+        Table t = new Table();
+        t.addContainerProperty("A", Button.class, null);
+        t.setWidth("500px");
+
+        Item i = t.addItem("1");
+        i.getItemProperty("A").setValue(new Button("Undef wide"));
+        Item i2 = t.addItem("2");
+        i2.getItemProperty("A").setValue(new NativeButton("Undef wide"));
+
+        addComponent(t);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/button/Buttons.html b/tests/testbench/com/vaadin/tests/components/button/Buttons.html
new file mode 100644
index 0000000000..43e554bec5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/button/Buttons.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>com.vaadin.tests.components.button.Buttons</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">com.vaadin.tests.components.button.Buttons</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.button.Buttons</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/button/Buttons.java b/tests/testbench/com/vaadin/tests/components/button/Buttons.java
new file mode 100644
index 0000000000..afbc90d197
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/button/Buttons.java
@@ -0,0 +1,76 @@
+package com.vaadin.tests.components.button;
+
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.tests.util.LoremIpsum;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.NativeButton;
+
+public class Buttons extends ComponentTestCase<Button> {
+
+    @Override
+    protected Class<Button> getTestClass() {
+        return Button.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+
+        Button l;
+        for (boolean nat : new boolean[] { false, true }) {
+            l = createButton("This is an undefined wide button", nat);
+            l.setWidth(null);
+            addTestComponent(l);
+
+            l = createButton(
+                    "This is an undefined wide button with fixed 100px height",
+                    nat);
+            l.setWidth(null);
+            l.setHeight("100px");
+            addTestComponent(l);
+
+            l = createButton(
+                    "This is a 200px wide simple button with a much longer caption",
+                    nat);
+            l.setWidth("200px");
+            addTestComponent(l);
+
+            l = createButton(
+                    "This is a 100% wide simple button " + LoremIpsum.get(1500),
+                    nat);
+            l.setWidth("100%");
+            addTestComponent(l);
+
+            l = createButton(
+                    "This is a 100% wide button with fixed 65px height. "
+                            + LoremIpsum.get(5000), nat);
+            l.setWidth("100%");
+            l.setHeight("65px");
+
+            boolean ie6 = (getBrowser().isIE() && getBrowser()
+                    .getBrowserMajorVersion() == 6);
+            if (!ie6 || !nat) {
+                // Skip this NativeButton for IE6 as it can't decide how to
+                // render it
+                addTestComponent(l);
+            }
+        }
+
+    }
+
+    private Button createButton(String text, boolean nativeButton) {
+        Button b;
+        if (nativeButton) {
+            b = new NativeButton(text);
+        } else {
+            b = new Button(text);
+        }
+
+        return b;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A generic test for Buttons in different configurations";
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/button/Buttons2.java b/tests/testbench/com/vaadin/tests/components/button/Buttons2.java
new file mode 100644
index 0000000000..c18e736082
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/button/Buttons2.java
@@ -0,0 +1,74 @@
+package com.vaadin.tests.components.button;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.tests.components.abstractfield.AbstractFieldTest;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.themes.Reindeer;
+
+public class Buttons2<T extends Button> extends AbstractFieldTest<T> implements
+        ClickListener {
+
+    private Command<T, Boolean> switchModeCommand = new Command<T, Boolean>() {
+
+        @SuppressWarnings("deprecation")
+        public void execute(T c, Boolean value, Object data) {
+            c.setSwitchMode(value);
+        }
+    };
+
+    private Command<T, Boolean> disableOnClickCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            c.setDisableOnClick(value);
+        }
+    };
+
+    private Command<T, Boolean> clickListenerCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((Button.ClickListener) Buttons2.this);
+            } else {
+                c.removeListener((Button.ClickListener) Buttons2.this);
+            }
+
+        }
+    };
+
+    @Override
+    protected Class<T> getTestClass() {
+        return (Class<T>) Button.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+
+        createBooleanAction("Switch mode", CATEGORY_FEATURES, false,
+                switchModeCommand);
+        createBooleanAction("Disable on click", CATEGORY_FEATURES, false,
+                disableOnClickCommand);
+        addClickListener(CATEGORY_LISTENERS);
+    }
+
+    @Override
+    protected void createComponentStyleNames(
+            LinkedHashMap<String, String> options) {
+        options.put("Reindeer default", Reindeer.BUTTON_DEFAULT);
+        options.put("Reindeer small", Reindeer.BUTTON_SMALL);
+        options.put("Reindeer link", Reindeer.BUTTON_LINK);
+    }
+
+    private void addClickListener(String category) {
+        createBooleanAction("Click listener", category, false,
+                clickListenerCommand);
+
+    }
+
+    public void buttonClick(ClickEvent event) {
+        log(event.getClass().getSimpleName());
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/button/DisabledButtons.html b/tests/testbench/com/vaadin/tests/components/button/DisabledButtons.html
new file mode 100644
index 0000000000..65584fd4d0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/button/DisabledButtons.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>DisabledButtons</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">DisabledButtons</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.button.DisabledButtons</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/button/DisabledButtons.java b/tests/testbench/com/vaadin/tests/components/button/DisabledButtons.java
new file mode 100644
index 0000000000..3e438a5d5b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/button/DisabledButtons.java
@@ -0,0 +1,60 @@
+package com.vaadin.tests.components.button;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.VerticalLayout;
+
+public class DisabledButtons extends TestBase {
+
+    private static final ThemeResource ICON = new ThemeResource(
+            "../runo/icons/16/ok.png");
+    private String CAPTION = "Caption";
+
+    @Override
+    protected String getDescription() {
+        return "The disabled buttons should be identical to the enabled buttons but grayed out.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3110;
+    }
+
+    @Override
+    protected void setup() {
+        HorizontalLayout hl = new HorizontalLayout();
+        hl.addComponent(createButtons(true));
+        hl.addComponent(createButtons(false));
+
+        addComponent(hl);
+
+    }
+
+    private Component createButtons(boolean enabled) {
+        VerticalLayout vl = new VerticalLayout();
+        Button b;
+
+        // Button w/ text
+        b = new Button(CAPTION);
+        b.setEnabled(enabled);
+        vl.addComponent(b);
+
+        // Button w/ text, icon
+        b = new Button(CAPTION);
+        b.setEnabled(enabled);
+        b.setIcon(ICON);
+        vl.addComponent(b);
+
+        // Button w/ icon
+        b = new Button();
+        b.setEnabled(enabled);
+        b.setIcon(ICON);
+        vl.addComponent(b);
+
+        return vl;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/button/IE7ButtonWithIcon.html b/tests/testbench/com/vaadin/tests/components/button/IE7ButtonWithIcon.html
new file mode 100644
index 0000000000..a05b439759
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/button/IE7ButtonWithIcon.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>IE7ButtonWithIcon</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">IE7ButtonWithIcon</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.button.IE7ButtonWithIcon</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/button/IE7ButtonWithIcon.java b/tests/testbench/com/vaadin/tests/components/button/IE7ButtonWithIcon.java
new file mode 100644
index 0000000000..c6a0ae96a9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/button/IE7ButtonWithIcon.java
@@ -0,0 +1,27 @@
+package com.vaadin.tests.components.button;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+
+public class IE7ButtonWithIcon extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The button should contain the text \"Normal\" and an 16x16 icon and have padding to the left and the right";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3031;
+    }
+
+    @Override
+    protected void setup() {
+        Button b = new Button("Normal");
+        b.setIcon(new ThemeResource("../runo/icons/16/ok.png"));
+
+        addComponent(b);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/button/ShortCutListenerModification.java b/tests/testbench/com/vaadin/tests/components/button/ShortCutListenerModification.java
new file mode 100644
index 0000000000..3d4dfeda04
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/button/ShortCutListenerModification.java
@@ -0,0 +1,71 @@
+package com.vaadin.tests.components.button;
+
+import com.vaadin.event.ShortcutAction.KeyCode;
+import com.vaadin.event.ShortcutAction.ModifierKey;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.Notification;
+
+@SuppressWarnings("serial")
+public class ShortCutListenerModification extends TestBase implements
+        ClickListener {
+
+    @Override
+    protected String getDescription() {
+        return "Modifiying listeners in shortcuthandler should succeed. Hitting CTRL-C should close windows one by one.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5350;
+    }
+
+    @Override
+    protected void setup() {
+
+        Button prev = null;
+
+        for (int j = 0; j < 20; j++) {
+
+            Window window = new Window();
+            getMainWindow().addWindow(window);
+
+            Button button1 = new Button("b1 (CTRL-C)");
+            Button button2 = new Button("b2 (CTRL-V)");
+
+            button1.addListener(this);
+            button2.addListener(this);
+
+            button1.setClickShortcut(KeyCode.C, ModifierKey.CTRL);
+            button2.setClickShortcut(KeyCode.V, ModifierKey.CTRL);
+
+            window.addComponent(button1);
+            window.addComponent(button2);
+            button1.focus();
+            button1.setData(prev);
+            prev = button1;
+        }
+
+    }
+
+    @Override
+    public void terminalError(com.vaadin.terminal.Terminal.ErrorEvent event) {
+        super.terminalError(event);
+        getMainWindow().showNotification("Failed!",
+                Notification.TYPE_ERROR_MESSAGE);
+
+    }
+
+    public void buttonClick(ClickEvent event) {
+        Window window2 = event.getButton().getWindow();
+        window2.getParent().removeWindow(window2);
+        Button prev = (Button) event.getButton().getData();
+        if (prev != null) {
+            prev.focus();
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/button/TooltipForDisabledButton.java b/tests/testbench/com/vaadin/tests/components/button/TooltipForDisabledButton.java
new file mode 100644
index 0000000000..3fed5b9c02
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/button/TooltipForDisabledButton.java
@@ -0,0 +1,48 @@
+package com.vaadin.tests.components.button;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+
+public class TooltipForDisabledButton extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "A disabled button should show a tooltip when hovering it";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2085;
+    }
+
+    @Override
+    protected void setup() {
+        Button buttonEnabled = new Button("This is an enabled button");
+        Button buttonDisabled = new Button("This is an disabled button");
+        buttonDisabled.setEnabled(false);
+
+        buttonEnabled.setDescription("Tooltip for enabled");
+        buttonDisabled.setDescription("Tooltip for disabled");
+
+        buttonDisabled.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                getMainWindow().showNotification("Clicked Disabled");
+            }
+
+        });
+
+        buttonEnabled.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                getMainWindow().showNotification("Clicked Enabled");
+            }
+
+        });
+
+        addComponent(buttonEnabled);
+        addComponent(buttonDisabled);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/caption/EmptyCaptions.html b/tests/testbench/com/vaadin/tests/components/caption/EmptyCaptions.html
new file mode 100644
index 0000000000..dc98bbacbb
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/caption/EmptyCaptions.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>EmptyCaptions</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">EmptyCaptions</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.caption.EmptyCaptions</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/caption/EmptyCaptions.java b/tests/testbench/com/vaadin/tests/components/caption/EmptyCaptions.java
new file mode 100644
index 0000000000..86f0bd6b9d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/caption/EmptyCaptions.java
@@ -0,0 +1,56 @@
+package com.vaadin.tests.components.caption;
+
+import com.vaadin.terminal.UserError;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.TextField;
+
+public class EmptyCaptions extends TestBase {
+
+    @Override
+    protected void setup() {
+        TextField tf;
+
+        tf = new TextField(null, "Null caption");
+        addComponent(tf);
+
+        tf = new TextField("", "Empty caption");
+        addComponent(tf);
+
+        tf = new TextField(" ", "Space as caption");
+        addComponent(tf);
+
+        tf = new TextField(null, "Null caption, required");
+        tf.setRequired(true);
+        addComponent(tf);
+        tf = new TextField("", "Empty caption, required");
+        tf.setRequired(true);
+        addComponent(tf);
+        tf = new TextField(" ", "Space as caption, required");
+        tf.setRequired(true);
+        addComponent(tf);
+
+        tf = new TextField(null, "Null caption, error");
+        tf.setComponentError(new UserError("error"));
+        addComponent(tf);
+
+        tf = new TextField("", "Empty caption, error");
+        tf.setComponentError(new UserError("error"));
+        addComponent(tf);
+
+        tf = new TextField(" ", "Space as caption, error");
+        tf.setComponentError(new UserError("error"));
+        addComponent(tf);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Null caption should never use space while a non-null caption always should use space.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3846;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/caption/IconsInCaption.java b/tests/testbench/com/vaadin/tests/components/caption/IconsInCaption.java
new file mode 100644
index 0000000000..926088ff48
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/caption/IconsInCaption.java
@@ -0,0 +1,136 @@
+package com.vaadin.tests.components.caption;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.VaadinClasses;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+public class IconsInCaption extends TestBase {
+
+    private static final String TYPE_EMBEDDED = "Embedded";
+    private static final String TYPE_CAPTION = "In caption";
+
+    private static final String[] icons = new String[] { "arrow-down.png",
+            "arrow-left.png", "arrow-right.png", "arrow-up.png",
+            "attention.png", "calendar.png", "cancel.png", "document.png",
+            "document-add.png", "document-delete.png", "document-doc.png",
+            "document-image.png", "document-pdf.png", "document-ppt.png",
+            "document-txt.png", "document-web.png", "document-xsl.png",
+            "email.png", "email-reply.png", "email-send.png", "folder.png",
+            "folder-add.png", "folder-delete.png", "globe.png", "help.png",
+            "lock.png", "note.png", "ok.png", "reload.png", "settings.png",
+            "trash.png", "trash-full.png", "user.png", "users.png" };
+
+    private static final String[] sizes = new String[] { "16", "32", "64" };
+
+    private ComponentContainer container = new VerticalLayout();
+
+    private Log log = new Log(5);
+
+    private ComboBox containerSelect;
+
+    private ComboBox iconTypeSelect;
+
+    @Override
+    protected void setup() {
+        iconTypeSelect = new ComboBox("Icon container");
+        iconTypeSelect.addItem(TYPE_EMBEDDED);
+        iconTypeSelect.addItem(TYPE_CAPTION);
+        iconTypeSelect.setImmediate(true);
+        iconTypeSelect.setNullSelectionAllowed(false);
+        iconTypeSelect.addListener(new ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                updateContainer();
+            }
+        });
+
+        containerSelect = new ComboBox("Container");
+        for (Class<? extends ComponentContainer> cc : VaadinClasses
+                .getComponentContainersSupportingUnlimitedNumberOfComponents()) {
+            containerSelect.addItem(cc);
+        }
+        containerSelect.setImmediate(true);
+        containerSelect.addListener(new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                updateContainer();
+
+            }
+        });
+
+        addComponent(log);
+        addComponent(iconTypeSelect);
+        addComponent(containerSelect);
+        addComponent(container);
+
+        iconTypeSelect.setValue(TYPE_CAPTION);
+        containerSelect.setValue(VerticalLayout.class);
+    }
+
+    protected void updateContainer() {
+        Class<? extends ComponentContainer> containerClass = (Class<? extends ComponentContainer>) containerSelect
+                .getValue();
+        if (containerClass == null) {
+            return;
+        }
+
+        Object iconType = iconTypeSelect.getValue();
+        try {
+            ComponentContainer newContainer = createContainer(containerClass,
+                    iconType);
+            replaceComponent(container, newContainer);
+            container = newContainer;
+            log.log("Container changed to " + containerClass.getName() + "/"
+                    + iconType);
+        } catch (Exception e) {
+            log.log("Create container failed for " + containerClass.getName()
+                    + ": " + e.getMessage());
+            e.printStackTrace();
+        }
+
+    }
+
+    private static ComponentContainer createContainer(
+            Class<? extends ComponentContainer> containerClass, Object iconType)
+            throws InstantiationException, IllegalAccessException {
+        ComponentContainer container = containerClass.newInstance();
+        for (String size : sizes) {
+            Label title = new Label("<h3>" + size + "x" + size + "</h3>",
+                    Label.CONTENT_XHTML);
+            container.addComponent(title);
+            for (String icon : icons) {
+                ThemeResource res = new ThemeResource("../runo/icons/" + size
+                        + "/" + icon);
+                if (TYPE_CAPTION.equals(iconType)) {
+                    Label name = new Label();
+                    name.setCaption(icon);
+                    name.setIcon(res);
+                    container.addComponent(name);
+                } else if (TYPE_EMBEDDED.equals(iconType)) {
+                    Embedded e = new Embedded(icon, res);
+                    container.addComponent(e);
+                }
+            }
+        }
+
+        return container;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Test for comparing rendering speed of icons in a caption and in an Embedded component in different component containers.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6578;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/caption/LargeCaptionIcon.html b/tests/testbench/com/vaadin/tests/components/caption/LargeCaptionIcon.html
new file mode 100644
index 0000000000..7c94821e7f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/caption/LargeCaptionIcon.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>LargeCaptionIcon</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">LargeCaptionIcon</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.caption.LargeCaptionIcon</td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>750</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>refresh</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>750</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/caption/LargeCaptionIcon.java b/tests/testbench/com/vaadin/tests/components/caption/LargeCaptionIcon.java
new file mode 100644
index 0000000000..603fdf458b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/caption/LargeCaptionIcon.java
@@ -0,0 +1,31 @@
+package com.vaadin.tests.components.caption;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+
+public class LargeCaptionIcon extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The icon should be completely visible on both initial load and after subsequent refreshes.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2902;
+    }
+
+    @Override
+    protected void setup() {
+        GridLayout gl = new GridLayout();
+        gl.setWidth("100%");
+
+        Label l = new Label("This is a label");
+        l.setCaption("This is its caption, it also has a large icon");
+        l.setIcon(new ThemeResource("../runo/icons/64/ok.png"));
+        gl.addComponent(l);
+        addComponent(gl);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxNullValue.html b/tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxNullValue.html
new file mode 100644
index 0000000000..9717ccec78
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxNullValue.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>CheckBoxNullValue</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">CheckBoxNullValue</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.checkbox.CheckBoxNullValue?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxNullValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>bothnull</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxNullValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+	<td>6,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxNullValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
+	<td>7,4</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxNullValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>bothtrue</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxNullValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
+	<td>6,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxNullValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+	<td>9,9</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxNullValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>bothfalse</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxNullValue.java b/tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxNullValue.java
new file mode 100644
index 0000000000..a961b48426
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxNullValue.java
@@ -0,0 +1,61 @@
+package com.vaadin.tests.components.checkbox;
+
+import com.vaadin.data.Validator.InvalidValueException;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Label;
+
+public class CheckBoxNullValue extends TestBase {
+
+    @Override
+    protected void setup() {
+        // workaround for #6919
+        getLayout().setWidth("100%");
+
+        final CheckBox checkbox = new CheckBox("A checkbox");
+        checkbox.setValue(null);
+        addComponent(checkbox);
+
+        final CheckBox requiredCheckbox = new CheckBox("A required checkbox");
+        requiredCheckbox.setRequired(true);
+        requiredCheckbox.setValue(null);
+        addComponent(requiredCheckbox);
+
+        final Label valueLabel = new Label("");
+
+        final Button button = new Button("Validate");
+        addComponent(button);
+        button.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                checkbox.setComponentError(null);
+                requiredCheckbox.setComponentError(null);
+                try {
+                    checkbox.validate();
+                } catch (InvalidValueException e) {
+                    checkbox.setComponentError(e);
+                }
+                try {
+                    requiredCheckbox.validate();
+                } catch (InvalidValueException e) {
+                    requiredCheckbox.setComponentError(e);
+                }
+                valueLabel.setValue("Checkbox: " + checkbox.getValue()
+                        + "; Required checkbox: " + requiredCheckbox.getValue());
+            }
+        });
+        addComponent(valueLabel);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "CheckBox should support null values.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6918;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxes.html b/tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxes.html
new file mode 100644
index 0000000000..40596a49fd
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxes.html
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.checkbox.CheckBoxes?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Error indicators/domChild[0]</td>
+	<td>31,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-error</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Required/domChild[0]</td>
+	<td>38,13</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-error-required</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Readonly/domChild[0]</td>
+	<td>7,9</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-error-required-readonly</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Error indicators/domChild[0]</td>
+	<td>6,4</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-required-readonly</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Required/domChild[0]</td>
+	<td>8,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-readonly</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Enabled/domChild[0]</td>
+	<td>8,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled-readonly</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Required/domChild[0]</td>
+	<td>12,4</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled-required-readonly</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Error indicators/domChild[0]</td>
+	<td>10,11</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled-error-required-readonly</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Required/domChild[0]</td>
+	<td>6,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled-error-readonly</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Readonly/domChild[0]</td>
+	<td>9,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled-error</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Required/domChild[0]</td>
+	<td>9,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled-error-required</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Error indicators/domChild[0]</td>
+	<td>10,3</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled-required</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscheckboxCheckBoxes::PID_Scheckboxaction-Required/domChild[0]</td>
+	<td>10,7</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxes.java b/tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxes.java
new file mode 100644
index 0000000000..0efa8bc818
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxes.java
@@ -0,0 +1,76 @@
+package com.vaadin.tests.components.checkbox;
+
+import java.util.Date;
+
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.ui.CheckBox;
+
+public class CheckBoxes extends ComponentTestCase<CheckBox> {
+
+    private ThemeResource SMALL_ICON = new ThemeResource(
+            "../runo/icons/16/ok.png");
+    private ThemeResource LARGE_ICON = new ThemeResource(
+            "../runo/icons/64/document.png");
+    private ThemeResource LARGE_ICON_NOCACHE = new ThemeResource(
+            "../runo/icons/64/document.png?" + new Date().getTime());
+
+    @Override
+    protected Class<CheckBox> getTestClass() {
+        return CheckBox.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+
+        setTheme("tests-tickets");
+        CheckBox cb;
+
+        cb = createCheckBox("CheckBox with normal text");
+        addTestComponent(cb);
+
+        cb = createCheckBox("CheckBox with large text");
+        cb.setStyleName("large");
+        addTestComponent(cb);
+
+        cb = createCheckBox("CheckBox with normal text and small icon",
+                SMALL_ICON);
+        addTestComponent(cb);
+        cb = createCheckBox("CheckBox with large text and small icon",
+                SMALL_ICON);
+        cb.setStyleName("large");
+        addTestComponent(cb);
+
+        cb = createCheckBox("CheckBox with normal text and large icon",
+                LARGE_ICON);
+        addTestComponent(cb);
+        cb = createCheckBox("CheckBox with large text and large icon",
+                LARGE_ICON_NOCACHE);
+        cb.setStyleName("large");
+        addTestComponent(cb);
+
+    }
+
+    private CheckBox createCheckBox(String caption, Resource icon) {
+        CheckBox cb = createCheckBox(caption);
+        cb.setIcon(icon);
+
+        return cb;
+    }
+
+    private CheckBox createCheckBox(String caption) {
+        return new CheckBox(caption);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A generic test for CheckBoxes in different configurations";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxes2.java b/tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxes2.java
new file mode 100644
index 0000000000..20f1ece65e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/checkbox/CheckBoxes2.java
@@ -0,0 +1,56 @@
+package com.vaadin.tests.components.checkbox;
+
+import com.vaadin.tests.components.abstractfield.AbstractFieldTest;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CheckBox;
+
+public class CheckBoxes2 extends AbstractFieldTest<CheckBox> implements
+        ClickListener {
+
+    // cannot extend Buttons2 because of Switch mode problems
+
+    @Override
+    protected Class<CheckBox> getTestClass() {
+        return CheckBox.class;
+    }
+
+    private Command<CheckBox, Boolean> switchModeCommand = new Command<CheckBox, Boolean>() {
+
+        @SuppressWarnings("deprecation")
+        public void execute(CheckBox c, Boolean value, Object data) {
+            c.setSwitchMode(value);
+        }
+    };
+
+    private Command<CheckBox, Boolean> clickListenerCommand = new Command<CheckBox, Boolean>() {
+
+        public void execute(CheckBox c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((ClickListener) CheckBoxes2.this);
+            } else {
+                c.removeListener((ClickListener) CheckBoxes2.this);
+            }
+
+        }
+    };
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+
+        createBooleanAction("Switch mode", CATEGORY_FEATURES, true,
+                switchModeCommand);
+        addClickListener(CATEGORY_LISTENERS);
+    }
+
+    private void addClickListener(String category) {
+        createBooleanAction("Click listener", category, false,
+                clickListenerCommand);
+
+    }
+
+    public void buttonClick(ClickEvent event) {
+        log(event.getClass().getSimpleName());
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/checkbox/CheckboxCaptionWrapping.html b/tests/testbench/com/vaadin/tests/components/checkbox/CheckboxCaptionWrapping.html
new file mode 100644
index 0000000000..26ecc95721
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/checkbox/CheckboxCaptionWrapping.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>CheckboxCaptionWrapping</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">CheckboxCaptionWrapping</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.checkbox.CheckboxCaptionWrapping</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/checkbox/CheckboxCaptionWrapping.java b/tests/testbench/com/vaadin/tests/components/checkbox/CheckboxCaptionWrapping.java
new file mode 100644
index 0000000000..540af083c4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/checkbox/CheckboxCaptionWrapping.java
@@ -0,0 +1,39 @@
+package com.vaadin.tests.components.checkbox;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+public class CheckboxCaptionWrapping extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The checkbox caption consists of 10 words which should all be shown. There should be no extra white space between the checkbox caption and the label below it.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3263;
+    }
+
+    @Override
+    protected void setup() {
+        setTheme("tests-tickets");
+        VerticalLayout mainLayout = new VerticalLayout();
+        CheckBox cb = new CheckBox(
+                "Checkbox with some Incididunt ut labore et dolore magna aliqua.");
+        cb.setStyleName("wrap");
+        cb.setWidth("100%");
+        mainLayout.setStyleName("borders");
+        mainLayout.setWidth("300px");
+        mainLayout.addComponent(cb);
+        mainLayout.addComponent(new Label(
+                "Lorem ipsum dolor sit amet, consectetur adipisicing"
+                        + " elit, sed do eiusmod tempor."));
+
+        addComponent(mainLayout);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/checkbox/CheckboxIcon.java b/tests/testbench/com/vaadin/tests/components/checkbox/CheckboxIcon.java
new file mode 100644
index 0000000000..1f96a05084
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/checkbox/CheckboxIcon.java
@@ -0,0 +1,29 @@
+package com.vaadin.tests.components.checkbox;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.CheckBox;
+
+public class CheckboxIcon extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The icon of a Checkbox component should have the same cursor as the text and should be clickable. The tooltip should appear when hovering the checkbox, the icon or the caption.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected void setup() {
+        CheckBox checkbox = new CheckBox("A checkbox");
+        checkbox.setIcon(new ThemeResource("../runo/icons/32/calendar.png"));
+        checkbox.setDescription("Tooltip for checkbox");
+
+        addComponent(checkbox);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxClosePopupRetainText.html b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxClosePopupRetainText.html
new file mode 100644
index 0000000000..9248938b28
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxClosePopupRetainText.html
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title></title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3"></td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.ComboBoxes2?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
+	<td>47,8</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
+	<td>I</td>
+</tr>
+<!--Open popup-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[1]</td>
+	<td>14,10</td>
+</tr>
+<!--Close poup-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[1]</td>
+	<td>14,10</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
+	<td>I</td>
+</tr>
+<!--Select a value-->
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.ComboBoxes2?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[1]</td>
+	<td>14,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item2</td>
+	<td>47,9</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
+	<td>I</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[1]</td>
+	<td>14,10</td>
+</tr>
+<!--Entered value should remain in the text field even though the popup is opened-->
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
+	<td>I</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.html b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.html
new file mode 100644
index 0000000000..1689c7c1fc
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.html
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.ComboBoxCombinedWithEnterShortcut?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxCombinedWithEnterShortcut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
+	<td>81,11</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxCombinedWithEnterShortcut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxCombinedWithEnterShortcut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxCombinedWithEnterShortcut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxCombinedWithEnterShortcut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
+	<td>enter</td>
+</tr>
+<!--Enter in the popup should not send a shortcut event-->
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxCombinedWithEnterShortcut::PID_SLog_row_0</td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxCombinedWithEnterShortcut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
+	<td>enter</td>
+</tr>
+<!--Enter again in the combobox SHOULD send a shortcut event-->
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxCombinedWithEnterShortcut::PID_SLog_row_0</td>
+	<td>1. Button clicked. ComboBox value: Berlin</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.java
new file mode 100644
index 0000000000..88a403b1b6
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.java
@@ -0,0 +1,54 @@
+package com.vaadin.tests.components.combobox;
+
+import com.vaadin.event.ShortcutAction.KeyCode;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.AbstractSelect.Filtering;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.ComboBox;
+
+public class ComboBoxCombinedWithEnterShortcut extends TestBase {
+    final String[] cities = new String[] { "Berlin", "Brussels", "Helsinki",
+            "Madrid", "Oslo", "Paris", "Stockholm" };
+
+    private Log log = new Log(5);
+
+    @Override
+    protected void setup() {
+        final ComboBox l = new ComboBox("Please select a city");
+        for (int i = 0; i < cities.length; i++) {
+            l.addItem(cities[i]);
+        }
+
+        l.setFilteringMode(Filtering.FILTERINGMODE_OFF);
+        l.setImmediate(true);
+        l.setNewItemsAllowed(true);
+
+        Button aButton = new Button("Show Value");
+        aButton.setClickShortcut(KeyCode.ENTER);
+        aButton.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                log.log("Button clicked. ComboBox value: " + l.getValue());
+
+            }
+
+        });
+
+        addComponent(log);
+        addComponent(l);
+        addComponent(aButton);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Button has Enter as click shortcut key. The shortcut should not be triggered when selecting an item in the dropdown";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6686;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxDataSourceChange.html b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxDataSourceChange.html
new file mode 100644
index 0000000000..cab8bbc996
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxDataSourceChange.html
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>ComboBoxDataSourceChange</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ComboBoxDataSourceChange</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.ComboBoxDataSourceChange?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>4,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item4</td>
+	<td>108,0</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>value-should-be-ds1-3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>11,15</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::Root/VFilterSelect$SuggestionPopup[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>84,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/domChild[0]/domChild[0]</td>
+	<td>260,245</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>combo-should-have-ds1-3-text</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>container-changed-value-null</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>12,18</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item3</td>
+	<td>106,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>10,22</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxDataSourceChange::Root/VFilterSelect$SuggestionPopup[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>91,4</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>value-ds2-2</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxDataSourceChange.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxDataSourceChange.java
new file mode 100644
index 0000000000..adeaede187
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxDataSourceChange.java
@@ -0,0 +1,102 @@
+package com.vaadin.tests.components.combobox;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+
+@SuppressWarnings("serial")
+public class ComboBoxDataSourceChange extends TestBase {
+
+    private ComboBox cb2;
+
+    @Override
+    protected void setup() {
+        final IndexedContainer ds1 = new IndexedContainer();
+        // ds1.addContainerProperty("caption", String.class, "");
+        for (int i = 0; i < 32; i++) {
+            ds1.addItem("ds1-" + i);
+        }
+
+        final IndexedContainer ds2 = new IndexedContainer();
+        // ds2.addContainerProperty("caption", String.class, "");
+        for (int i = 0; i < 32; i++) {
+            ds2.addItem("ds2-" + i);
+        }
+
+        HorizontalLayout hl = new HorizontalLayout();
+        hl.setWidth("100%");
+
+        cb2 = new ComboBox();
+        cb2.setImmediate(true);
+        hl.addComponent(cb2);
+        HorizontalLayout state = new HorizontalLayout();
+        state.setSpacing(true);
+        hl.addComponent(state);
+
+        final Label currentValue = new Label();
+        currentValue.setCaption("Current Value:");
+        currentValue.setSizeUndefined();
+        final Label currentDS = new Label();
+        currentDS.setCaption("Current DS:");
+        currentDS.setSizeUndefined();
+        state.addComponent(currentValue);
+        state.addComponent(currentDS);
+
+        Table t = new Table("ds1");
+        t.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+        t.setContainerDataSource(ds1);
+        state.addComponent(t);
+
+        Button b = new Button("Use ds1");
+        b.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                cb2.setContainerDataSource(ds1);
+                currentDS.setValue("ds1");
+            }
+        });
+        state.addComponent(b);
+
+        t = new Table("ds2");
+        t.setContainerDataSource(ds2);
+        t.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+        state.addComponent(t);
+
+        b = new Button("Use ds2");
+        b.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                cb2.setContainerDataSource(ds2);
+                currentDS.setValue("ds2");
+            }
+        });
+        state.addComponent(b);
+
+        addComponent(hl);
+
+        cb2.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                currentValue.setValue(event.getProperty().getValue());
+            }
+        });
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A test for combobox and its container changes.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        // TODO should be list of integers applies for #5279
+        return 4607;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxEnablesComboBox.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxEnablesComboBox.java
new file mode 100644
index 0000000000..6178d25a2a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxEnablesComboBox.java
@@ -0,0 +1,49 @@
+package com.vaadin.tests.components.combobox;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.ComboBox;
+
+public class ComboBoxEnablesComboBox extends TestBase {
+
+    private ComboBox cb2;
+
+    @Override
+    protected void setup() {
+        ComboBox cb = new ComboBox("Always enabled");
+        cb.setImmediate(true);
+        populate(cb);
+        cb.addListener(new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                cb2.setEnabled(true);
+            }
+
+        });
+        cb2 = new ComboBox("Initially disabled");
+        cb2.setImmediate(true);
+        cb2.setEnabled(false);
+        populate(cb2);
+
+        addComponent(cb);
+        addComponent(cb2);
+    }
+
+    private void populate(ComboBox cb) {
+        for (int i = 1; i < 10; i++) {
+            cb.addItem("Item " + i);
+        }
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Selecting an item in the first combobox enables the second.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4632;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxInPopupView.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxInPopupView.java
new file mode 100644
index 0000000000..5a488e5dc5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxInPopupView.java
@@ -0,0 +1,44 @@
+package com.vaadin.tests.components.combobox;
+
+import java.util.Map;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.PopupView;
+
+public class ComboBoxInPopupView extends TestBase {
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2508;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Testcase for ComboBox in PopupView. Make the window narrower than the popup: the focused (2) one wraps button to second row AND seems narrower than (1), the unfocused one (1) works as expected.";
+    }
+
+    @Override
+    protected void setup() {
+        final ComboBox cb1 = new ComboBox();
+        cb1.setWidth("260px");
+        // cb.focus();
+        PopupView pv1 = new PopupView("<u>1. expected (click)</u>", cb1);
+        getLayout().addComponent(pv1);
+
+        final ComboBox cb2 = new ComboBox();
+        cb2.setWidth("260px");
+        PopupView pv2 = new PopupView("<u>2. focused (click)</u>", cb2) {
+            @Override
+            public void changeVariables(Object source,
+                    Map<String, Object> variables) {
+                super.changeVariables(source, variables);
+                cb2.focus();
+            }
+
+        };
+        getLayout().addComponent(pv2);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxInvalidNullSelection.html b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxInvalidNullSelection.html
new file mode 100644
index 0000000000..bbe5d5d717
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxInvalidNullSelection.html
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>ComboBoxInvalidNullSelection</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ComboBoxInvalidNullSelection</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.ComboBoxInvalidNullSelection?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxInvalidNullSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxInvalidNullSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[1]</td>
+	<td>10,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxInvalidNullSelection::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item3</td>
+	<td>101,11</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxInvalidNullSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxInvalidNullSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
+	<td>100,14</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxInvalidNullSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxInvalidNullSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
+	<td>80,11</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxInvalidNullSelection::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. Value is now: Item 3</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxInvalidNullSelection.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxInvalidNullSelection.java
new file mode 100644
index 0000000000..2fcb44d4f2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxInvalidNullSelection.java
@@ -0,0 +1,76 @@
+package com.vaadin.tests.components.combobox;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.ComboBox;
+
+public class ComboBoxInvalidNullSelection extends TestBase {
+
+    private static final Object CAPTION = "C";
+    private IndexedContainer ds1;
+    private IndexedContainer ds2;
+    private ComboBox combo;
+    private Log log = new Log(5);
+
+    @Override
+    protected void setup() {
+
+        createDataSources();
+
+        Button b = new Button("Swap data source");
+        b.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                if (combo.getContainerDataSource() == ds1) {
+                    combo.setContainerDataSource(ds2);
+                } else {
+                    combo.setContainerDataSource(ds1);
+                }
+                combo.setValue("Item 3");
+            }
+        });
+
+        combo = new ComboBox();
+        combo.setImmediate(true);
+        combo.setContainerDataSource(ds1);
+        combo.addListener(new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                log.log("Value is now: " + combo.getValue());
+            }
+        });
+        addComponent(log);
+        addComponent(b);
+        addComponent(combo);
+        addComponent(new Button("Dummy for TestBench"));
+    }
+
+    private void createDataSources() {
+        ds1 = new IndexedContainer();
+        ds1.addContainerProperty(CAPTION, String.class, "");
+        ds1.addItem("Item 1");
+        ds1.addItem("Item 2");
+        ds1.addItem("Item 3");
+        ds1.addItem("Item 4");
+
+        ds2 = new IndexedContainer();
+        ds2.addContainerProperty(CAPTION, String.class, "");
+        ds2.addItem("Item 3");
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Select \"Item 3\" in the ComboBox, change the data source, focus and blur the ComboBox. The value should temporarily change to null when changing data source but not when focusing and blurring the ComboBox";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6170;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxItemIcon.html b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxItemIcon.html
new file mode 100644
index 0000000000..6e6e87bc7e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxItemIcon.html
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>ComboBoxItemIcon</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ComboBoxItemIcon</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.ComboBoxItemIcon?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxItemIcon::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>first-combobox-open</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[2]/td</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>fi-hu-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxItemIcon::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[2]</td>
+	<td>12,17</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>second-combobox-open</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxItemIcon::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item2</td>
+	<td>32,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>fi-au-selected</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxItemIcon.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxItemIcon.java
new file mode 100644
index 0000000000..75325b798f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxItemIcon.java
@@ -0,0 +1,57 @@
+package com.vaadin.tests.components.combobox;
+
+import com.vaadin.data.Item;
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.ComboBox;
+
+public class ComboBoxItemIcon extends TestBase {
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2455;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "All items in the ComboBoxes should have icons.";
+    }
+
+    @Override
+    protected void setup() {
+        {
+            ComboBox cb = new ComboBox();
+            cb.addContainerProperty("icon", Resource.class, null);
+            cb.setItemIconPropertyId("icon");
+
+            Item item = cb.addItem("FI");
+            item.getItemProperty("icon").setValue(
+                    new ThemeResource("../tests-tickets/icons/fi.gif"));
+            item = cb.addItem("SE");
+            item.getItemProperty("icon").setValue(
+                    new ThemeResource("../tests-tickets/icons/se.gif"));
+
+            addComponent(cb);
+        }
+        {
+            ComboBox cb = new ComboBox();
+            cb.addContainerProperty("icon", Resource.class, null);
+            cb.setItemIconPropertyId("icon");
+
+            Item item = cb.addItem("Finland");
+            item.getItemProperty("icon").setValue(
+                    new ThemeResource("../tests-tickets/icons/fi.gif"));
+            item = cb.addItem("Australia");
+            item.getItemProperty("icon").setValue(
+                    new ThemeResource("../tests-tickets/icons/au.gif"));
+            item = cb.addItem("Hungary");
+            item.getItemProperty("icon").setValue(
+                    new ThemeResource("../tests-tickets/icons/hu.gif"));
+
+            cb.setValue("Hungary");
+            addComponent(cb);
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxLargeIcons.html b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxLargeIcons.html
new file mode 100644
index 0000000000..a46f48fcfc
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxLargeIcons.html
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.Comboboxes?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::PID_Sselectaction-Icon/domChild[0]</td>
+	<td>label=16x16</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VFilterSelect[0]/domChild[1]</td>
+	<td>13,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::Root/VFilterSelect$SuggestionPopup[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>116,6</td>
+</tr>
+<!--  Open twice to avoid IE6 css issues -->
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.Comboboxes?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::PID_Sselectaction-Icon/domChild[0]</td>
+	<td>label=16x16</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VFilterSelect[0]/domChild[1]</td>
+	<td>13,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>icons-16x16-page1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::Root/VFilterSelect$SuggestionPopup[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>116,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>icons-16x16-page2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item0</td>
+	<td>378,1</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>icons-16x16-selected-1-3-5-9</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::PID_Sselectaction-Icon/domChild[0]</td>
+	<td>label=32x32</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VFilterSelect[0]/domChild[2]</td>
+	<td>8,13</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>icons-32x32-page2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
+	<td>409,27</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::PID_Sselectaction-Icon/domChild[0]</td>
+	<td>label=64x64</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[9]/VFilterSelect[0]/domChild[1]</td>
+	<td>11,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
+	<td>213,57</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[4]</td>
+	<td>535,43</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[8]/VFilterSelect[0]/domChild[1]</td>
+	<td>7,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
+	<td>158,25</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VFilterSelect[0]/domChild[0]</td>
+	<td>16,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VFilterSelect[0]/domChild[0]</td>
+	<td>80,7</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>icons-64x64-page1-highlight-first</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[6]/domChild[0]</td>
+	<td>510,1</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxLargeIcons.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxLargeIcons.java
new file mode 100644
index 0000000000..0f8124ca20
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxLargeIcons.java
@@ -0,0 +1,43 @@
+package com.vaadin.tests.components.combobox;
+
+import java.util.Date;
+
+import com.vaadin.data.Item;
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.ComboBox;
+
+public class ComboBoxLargeIcons extends TestBase {
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "<p>All items in the Combobox has large icons. The size of the dropdown should fit the contents, also when changing pages. The height of the dropdown shouldn't exceed the browser's viewport, but fewer items should be visible then.</p><p>The size of the shadow behind the dropdown must also be correctly sized.</p><p>Note that the image URL change for every restart to keep the browser from using cached images.</p>";
+    }
+
+    @Override
+    protected void setup() {
+        ComboBox cb = new ComboBox();
+        cb.addContainerProperty("icon", Resource.class, null);
+        cb.setItemIconPropertyId("icon");
+        getLayout().addComponent(cb);
+        cb.setNullSelectionAllowed(false);
+        String[] icons = new String[] { "folder-add", "folder-delete",
+                "arrow-down", "arrow-left", "arrow-right", "arrow-up",
+                "document-add", "document-delete", "document-doc",
+                "document-edit", "document-image", "document-pdf",
+                "document-ppt", "document-txt", "document-web", "document" };
+        for (String icon : icons) {
+            Item item = cb.addItem(icon);
+            item.getItemProperty("icon").setValue(
+                    new ThemeResource("../runo/icons/32/" + icon + ".png?"
+                            + new Date().getTime()));
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxNavigation.html b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxNavigation.html
new file mode 100644
index 0000000000..03de00a6f1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxNavigation.html
@@ -0,0 +1,397 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>ComboBoxNavigation</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ComboBoxNavigation</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.ComboBoxNavigation</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>setSpeed</td>
+	<td>200</td>
+	<td>Needed because of #3409</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>41,10</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>e</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>up</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>up</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>up</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>up</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>up</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>up</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>up</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>up</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>up</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>up</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>up</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>up</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>up</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyValue</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>Item 7</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxNavigation.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxNavigation.java
new file mode 100644
index 0000000000..245fc123df
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxNavigation.java
@@ -0,0 +1,30 @@
+package com.vaadin.tests.components.combobox;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.ComboBox;
+
+public class ComboBoxNavigation extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Entering e in the field and scrolling down with the arrow keys should always select the next item, also when the page changes. Scrolling back up should always select the previous item, also when changing pages.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2214;
+    }
+
+    @Override
+    protected void setup() {
+        ComboBox cb = new ComboBox();
+        for (int i = 1; i < 100; i++) {
+            cb.addItem("Item " + i);
+        }
+
+        cb.setFilteringMode(ComboBox.FILTERINGMODE_CONTAINS);
+        addComponent(cb);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxNoTextInput.html b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxNoTextInput.html
new file mode 100644
index 0000000000..2066da47c1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxNoTextInput.html
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8080/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.ComboBoxes2?restartApplication</td>
+	<td></td>
+</tr>
+<!--Disabled text input-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_Smenu#item0</td>
+	<td>34,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>21,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[1]/VMenuBar[0]#item8</td>
+	<td>52,7</td>
+</tr>
+<!--Check that clicking the text field opens the popup-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
+	<td>37,8</td>
+</tr>
+<tr>
+	<td>assertElementPresent</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item0</td>
+	<td></td>
+</tr>
+<!--Enabled text input again-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_Smenu#item0</td>
+	<td>35,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>14,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[1]/VMenuBar[0]#item8</td>
+	<td>34,6</td>
+</tr>
+<!--Check that clicking the text field does not open the popup-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
+	<td>42,9</td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item0</td>
+	<td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.html b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.html
new file mode 100644
index 0000000000..50b95bfdc2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.html
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>Ticket4607</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Ticket4607</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.ComboBoxReapperingOldValue?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxReapperingOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
+	<td>7,8</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[2]/td</td>
+	<td>176,10</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxReapperingOldValue::/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[1]</td>
+	<td>12,15</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[6]/td</td>
+	<td>163,13</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxReapperingOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
+	<td>7,17</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[3]/td</td>
+	<td>186,5</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxReapperingOldValue::/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[1]</td>
+	<td>10,15</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxReapperingOldValue::/VVerticalLayout[0]</td>
+	<td>10,15</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.java
new file mode 100644
index 0000000000..0e295231c5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.java
@@ -0,0 +1,69 @@
+package com.vaadin.tests.components.combobox;
+
+import com.vaadin.Application;
+import com.vaadin.data.Container;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.ui.AbstractSelect;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+@SuppressWarnings("serial")
+public class ComboBoxReapperingOldValue extends Application implements
+        ValueChangeListener {
+
+    ComboBox cbox1 = new ComboBox();
+    ComboBox cbox2 = new ComboBox();
+
+    @Override
+    public void init() {
+        Window mainWindow = new Window("ComboBoxCacheTest");
+        setMainWindow(mainWindow);
+
+        VerticalLayout layout = new VerticalLayout();
+
+        Label lbl = new Label(
+                "try selecting value 1 from the first combo box, so that the second combo box will be populated. select a value in second combo box."
+                        + "then select a new value from combo box one, after that click on the second combo box. The old selected value appears.");
+        layout.addComponent(lbl);
+
+        cbox1.setCaption("Com Box 1");
+        cbox1.setFilteringMode(AbstractSelect.Filtering.FILTERINGMODE_CONTAINS);
+        cbox1.setContainerDataSource(getContainer());
+        cbox1.setImmediate(true);
+        cbox1.setNullSelectionAllowed(false);
+        cbox1.addListener(this);
+
+        layout.addComponent(cbox1);
+        layout.addComponent(cbox2);
+
+        cbox2.setCaption("Com Box 2");
+        cbox2.setEnabled(false);
+        cbox2.setNullSelectionAllowed(false);
+
+        mainWindow.setContent(layout);
+
+    }
+
+    private Container getContainer() {
+        IndexedContainer container = new IndexedContainer();
+        container.addContainerProperty("na", String.class, null);
+
+        for (int i = 0; i < 10; i++) {
+            container.addItem(i);
+        }
+        return container;
+    }
+
+    public void valueChange(ValueChangeEvent event) {
+        cbox2.removeAllItems();
+        if ("1".equals(event.getProperty().getValue().toString())) {
+            cbox2.setEnabled(true);
+            cbox2.setContainerDataSource(getContainer());
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxRemoveAllItems.html b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxRemoveAllItems.html
new file mode 100644
index 0000000000..eec15d0b40
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxRemoveAllItems.html
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.ComboBoxes2?restartApplication</td>
+	<td></td>
+</tr>
+<!--Disable event log-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_Smenu#item1</td>
+	<td>18,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>49,12</td>
+</tr>
+<!--16x16 icons-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_Smenu#item0</td>
+	<td>46,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>46,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>45,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>31,2</td>
+</tr>
+<!--select item 5-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[1]</td>
+	<td>12,15</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item4</td>
+	<td>64,8</td>
+</tr>
+<!--remove all items from the combobox-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_Smenu#item0</td>
+	<td>11,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>60,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>53,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>62,4</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>no-selection</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxSlowInFF.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxSlowInFF.java
new file mode 100644
index 0000000000..5c1dad4a30
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxSlowInFF.java
@@ -0,0 +1,67 @@
+package com.vaadin.tests.components.combobox;
+
+import com.vaadin.data.Item;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+
+@SuppressWarnings("serial")
+public class ComboBoxSlowInFF extends TestBase {
+
+    @Override
+    protected void setup() {
+        VerticalLayout lo = new VerticalLayout();
+        lo.setSizeFull();
+        final Table t = new Table();
+        t.setSizeFull();
+        for (int i = 0; i < 5; i++) {
+            t.addContainerProperty("test" + i, Component.class, null);
+        }
+
+        Button fill = new Button("fill it");
+        fill.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                t.removeAllItems();
+                for (int i = 0; i < 200; i++) {
+                    Item item = t.addItem(i);
+                    for (int j = 0; j < 5; j++) {
+                        item.getItemProperty("test" + j).setValue(
+                                createComponent(i, j));
+                    }
+                }
+            }
+        });
+        lo.addComponent(fill);
+        lo.addComponent(t);
+        lo.setExpandRatio(t, 1.0F);
+        addComponent(lo);
+    }
+
+    private Component createComponent(int x, int y) {
+        ComboBox box = new ComboBox();
+        // box.setMultiSelect(true);
+        box.addContainerProperty("name", String.class, "");
+        box.setItemCaptionPropertyId("name");
+        for (int ix = 0; ix < 20; ix++) {
+            box.addItem(x + 20 * y + ix).getItemProperty("name")
+                    .setValue("" + x + ", " + y + " " + ix);
+        }
+        box.setValue(x + 20 * y);
+        return box;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "FF is very slow when rendering many ComboBoxes in a table";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3663;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxSuggestionOnDetach.html b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxSuggestionOnDetach.html
new file mode 100644
index 0000000000..ba251e5cc0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxSuggestionOnDetach.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.ComboBoxSuggestionOnDetach?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxSuggestionOnDetach::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>11,12</td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxSuggestionOnDetach::Root/VFilterSelect$SuggestionPopup[0]</td>
+	<td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxSuggestionOnDetach.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxSuggestionOnDetach.java
new file mode 100644
index 0000000000..134e13e49c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxSuggestionOnDetach.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.components.combobox;
+
+import java.util.Arrays;
+
+import com.vaadin.event.FieldEvents;
+import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Window;
+
+public class ComboBoxSuggestionOnDetach extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Window popup = new Window();
+        ComboBox comboBox = new ComboBox("Combo box", Arrays.asList("Option 1",
+                "Option 2", "Option 3"));
+        comboBox.addListener(new FieldEvents.FocusListener() {
+            public void focus(FocusEvent event) {
+                popup.getParent().removeWindow(popup);
+            }
+        });
+        popup.addComponent(comboBox);
+
+        popup.setSizeUndefined();
+        popup.getContent().setSizeUndefined();
+        popup.center();
+
+        getMainWindow().addWindow(popup);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Click the arrow to open the combo box suggestion list. When the box is focused, the window is closed and the suggestion popup of the combo box should also be closed";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return Integer.valueOf(7536);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxTextFieldEventOrder.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxTextFieldEventOrder.java
new file mode 100644
index 0000000000..31979a6a90
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxTextFieldEventOrder.java
@@ -0,0 +1,38 @@
+package com.vaadin.tests.components.combobox;
+import java.util.Arrays;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.TextField;
+
+public class ComboBoxTextFieldEventOrder extends TestBase {
+
+    @Override
+    protected void setup() {
+        TextField textField = new TextField("text field");
+        textField.setImmediate(true);
+        final Select select = new Select("select", Arrays.asList("1", "2", "3",
+                "4"));
+        textField.addListener(new ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                select.addItem(Long.valueOf(select.size() + 1).toString()); // or
+                                                                            // just
+                                                                            // select.requestRepaint();
+            }
+        });
+        addComponent(textField);
+        addComponent(select);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Entering a text in a TextField and then clicking on the button in a ComboBox should cause the TextField value change to be sent first and the ComboBox filtering afterwards. Failure to do so will cause errors if the value change listener modifies the ComboBox";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 7481;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxUndefinedWidthAndIcon.html b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxUndefinedWidthAndIcon.html
new file mode 100644
index 0000000000..ae0dfec828
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxUndefinedWidthAndIcon.html
@@ -0,0 +1,85 @@
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.ComboBoxUndefinedWidthAndIcon?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>13,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
+	<td>32,5</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>item1-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[2]</td>
+	<td>12,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::Root/VFilterSelect$SuggestionPopup[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>81,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>page2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::Root/VFilterSelect$SuggestionPopup[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>78,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>page3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::Root/VFilterSelect$SuggestionPopup[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>78,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>page4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item3</td>
+	<td>68,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>item33-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[2]</td>
+	<td>8,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::Root/VFilterSelect$SuggestionPopup[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>116,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxUndefinedWidthAndIcon::</td>
+	<td>338,241</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>item33-selected-after-popup-opened-and-closed</td>
+</tr>
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxUndefinedWidthAndIcon.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxUndefinedWidthAndIcon.java
new file mode 100644
index 0000000000..fd5f7d47f8
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxUndefinedWidthAndIcon.java
@@ -0,0 +1,36 @@
+package com.vaadin.tests.components.combobox;
+
+import com.vaadin.data.Item;
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.ComboBox;
+
+public class ComboBoxUndefinedWidthAndIcon extends TestBase {
+    @Override
+    protected void setup() {
+        ComboBox cb = new ComboBox();
+        cb.addContainerProperty("caption", String.class, null);
+        cb.addContainerProperty("icon", Resource.class, null);
+        for (int i = 1; i < 200 + 1; i++) {
+            Item item = cb.addItem(i);
+            item.getItemProperty("caption").setValue("Item " + i);
+            item.getItemProperty("icon").setValue(
+                    new ThemeResource("../runo/icons/16/users.png"));
+        }
+        cb.setItemIconPropertyId("icon");
+        cb.setItemCaptionPropertyId("caption");
+
+        addComponent(cb);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The width of the ComboBox should be fixed even though it is set to undefined width. The width should not change when changing pages in the dropdown.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 7013;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxValueInput.html b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxValueInput.html
new file mode 100644
index 0000000000..2aab40f13f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxValueInput.html
@@ -0,0 +1,292 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>ComboBoxValueInput</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ComboBoxValueInput</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.ComboBoxValueInput</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[3]/td</td>
+	<td>58,6</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
+	<td>96,14</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[4]/td/span</td>
+	<td>29,6</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[3]/td</td>
+	<td>99,13</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[1]/td</td>
+	<td>97,14</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
+	<td>68,17</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
+	<td>value</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
+	<td>76,17</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VFilterSelect[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[2]/td</td>
+	<td>71,11</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VFilterSelect[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[1]/td</td>
+	<td>58,9</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VFilterSelect[0]/domChild[0]</td>
+	<td>73,12</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboBoxValueInput::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VFilterSelect[0]/domChild[0]</td>
+	<td>43,7</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxValueInput.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxValueInput.java
new file mode 100644
index 0000000000..177b3542a4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxValueInput.java
@@ -0,0 +1,63 @@
+package com.vaadin.tests.components.combobox;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.ComboBox;
+
+public class ComboBoxValueInput extends TestBase {
+
+    @Override
+    protected void setup() {
+        (getLayout()).setSpacing(true);
+
+        ComboBox cb = getComboBox("A combobox", false);
+        addComponent(cb);
+
+        cb = getComboBox("A combobox with input prompt", false);
+        cb.setInputPrompt("Please select");
+        addComponent(cb);
+
+        cb = getComboBox("A combobox with null item", true);
+        addComponent(cb);
+
+        cb = getComboBox("A combobox with null item and input prompt", true);
+        cb.setInputPrompt("Please select");
+        addComponent(cb);
+
+        cb = getComboBox("A disabled combobox", true);
+        cb.setEnabled(false);
+        addComponent(cb);
+
+        cb = getComboBox("A read-only combobox", true);
+        cb.setReadOnly(true);
+        addComponent(cb);
+
+        cb = getComboBox("A combobox with filteringMode off", false);
+        cb.setFilteringMode(ComboBox.FILTERINGMODE_OFF);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A combobox should always show the selected value when it is not focused. Entering a text when nothing is selected and blurring the combobox should reset the value. The same should happen when a value is selected";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3268;
+    }
+
+    private ComboBox getComboBox(String caption, boolean addNullItem) {
+        ComboBox cb = new ComboBox(caption);
+        cb.setImmediate(true);
+        if (addNullItem) {
+            cb.addItem("Null item");
+            cb.setNullSelectionItemId("Null item");
+        }
+        cb.addItem("Value 1");
+        cb.addItem("Value 2");
+        cb.addItem("Value 3");
+
+        return cb;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxValueUpdate.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxValueUpdate.java
new file mode 100644
index 0000000000..b8f7a9758d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxValueUpdate.java
@@ -0,0 +1,45 @@
+package com.vaadin.tests.components.combobox;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Label;
+
+public class ComboBoxValueUpdate extends TestBase {
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2451;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Testcase for ComboBox. Test especially edge values(of page changes) when selecting items with keyboard only.";
+    }
+
+    @Override
+    protected void setup() {
+        ComboBox select = new ComboBox("");
+        select.setImmediate(true);
+        for (int i = 0; i < 100; i++) {
+            select.addItem("item " + i);
+        }
+
+        final Label value = new Label();
+
+        select.addListener(new ComboBox.ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                System.err
+                        .println("Selected " + event.getProperty().getValue());
+                value.setValue("Selected " + event.getProperty().getValue());
+
+            }
+        });
+
+        getLayout().addComponent(select);
+        getLayout().addComponent(value);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxes2.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxes2.java
new file mode 100644
index 0000000000..8befbb4612
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboBoxes2.java
@@ -0,0 +1,95 @@
+package com.vaadin.tests.components.combobox;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.terminal.Resource;
+import com.vaadin.tests.components.select.SelectTest;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Select;
+
+public class ComboBoxes2 extends SelectTest<ComboBox> {
+
+    private Command<ComboBox, String> inputPromptCommand = new Command<ComboBox, String>() {
+        public void execute(ComboBox c, String value, Object data) {
+            c.setInputPrompt(value);
+        }
+    };
+    private Command<ComboBox, Integer> filteringModeCommand = new Command<ComboBox, Integer>() {
+
+        public void execute(ComboBox c, Integer value, Object data) {
+            c.setFilteringMode(value);
+        }
+    };
+
+    @Override
+    protected Class<ComboBox> getTestClass() {
+        return ComboBox.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+        createItemIconSelect(CATEGORY_DATA_SOURCE);
+        createInputPromptAction(CATEGORY_FEATURES);
+        createFilteringModeAction(CATEGORY_FEATURES);
+        createNewItemsAllowedAction(CATEGORY_STATE);
+        createTextInputAlowedAction(CATEGORY_STATE);
+    }
+
+    private void createTextInputAlowedAction(String category) {
+        createBooleanAction("Text input allowed", category, true,
+                new Command<ComboBox, Boolean>() {
+                    public void execute(ComboBox c, Boolean value, Object data) {
+                        c.setTextInputAllowed(value.booleanValue());
+                    }
+                });
+    }
+
+    private void createNewItemsAllowedAction(String category) {
+        createBooleanAction("New items allowed", category, false,
+                new Command<ComboBox, Boolean>() {
+                    public void execute(ComboBox c, Boolean value, Object data) {
+                        c.setNewItemsAllowed(value.booleanValue());
+                    }
+                });
+    }
+
+    private void createFilteringModeAction(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("Off", Select.FILTERINGMODE_OFF);
+        options.put("Contains", Select.FILTERINGMODE_CONTAINS);
+        options.put("Starts with", Select.FILTERINGMODE_STARTSWITH);
+
+        createSelectAction("Filtering mode", category, options, "Contains",
+                filteringModeCommand);
+
+    }
+
+    private void createInputPromptAction(String category) {
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+        options.put("-", null);
+        options.put("Enter a value", "Enter a value");
+        options.put("- Click here -", "- Click here -");
+        createSelectAction("Input prompt", category, options, "-",
+                inputPromptCommand);
+
+    }
+
+    private void createItemIconSelect(String category) {
+
+        createSelectAction("Icon", category, createIconOptions(false), "-",
+                new Command<ComboBox, Resource>() {
+
+                    public void execute(ComboBox c, Resource value, Object data) {
+                        for (Object id : c.getItemIds()) {
+                            if (value == null) {
+                                c.setItemIcon(id, null);
+                            } else {
+                                c.setItemIcon(id, value);
+                            }
+                        }
+                    }
+                });
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.html b/tests/testbench/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.html
new file mode 100644
index 0000000000..4d91ce7838
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.html
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>ComboFocusBlurEvents</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ComboFocusBlurEvents</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.ComboFocusBlurEvents?restartApplication</td>
+	<td></td>
+</tr>
+<!--Testing selecting several items, the focus should stay on the combo and only one focus event should trigger-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>9,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item4</td>
+	<td>142,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>17,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item7</td>
+	<td>143,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>13,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item3</td>
+	<td>147,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>16,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item5</td>
+	<td>146,4</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VLabel[0]</td>
+	<td>exact:0: Focus event!</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>OneFocusEvent</td>
+</tr>
+<!--Test ended.-->
+<!--Testing keyboard navigation-->
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VLabel[0]</td>
+	<td>exact:0: Focus event!</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>StillOneFocusEvent</td>
+</tr>
+<!--Test ended.-->
+<!--Move focus out with mouse-->
+<tr>
+	<td>focus</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboFocusBlurEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VLabel[0]</td>
+	<td>0: Focus event!<br />1: Blur event!</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>OneFocusOneBlur</td>
+</tr>
+<!--End test.-->
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.java
new file mode 100644
index 0000000000..6681342ea6
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.java
@@ -0,0 +1,74 @@
+package com.vaadin.tests.components.combobox;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.event.FieldEvents;
+import com.vaadin.event.FieldEvents.BlurEvent;
+import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+
+public class ComboFocusBlurEvents extends TestBase {
+
+    private int counter = 0;
+
+    @Override
+    protected void setup() {
+        
+        List<String> list = new ArrayList<String>();
+        for (int i = 0; i < 100; i++) {
+            list.add("Item " + i);
+        }
+        
+        ComboBox cb = new ComboBox("Combobox", list);
+        cb.setImmediate(true);
+        cb.setInputPrompt("Enter text");
+        cb.setDescription("Some Combobox");
+        addComponent(cb);
+                        
+        final ObjectProperty<String> log = new ObjectProperty<String>("");
+
+        cb.addListener(new FieldEvents.FocusListener() {
+            public void focus(FocusEvent event) {
+                log.setValue(log.getValue().toString() + "<br>" + counter
+                        + ": Focus event!");
+                counter++;
+            }
+        });
+
+        cb.addListener(new FieldEvents.BlurListener() {
+            public void blur(BlurEvent event) {
+                log.setValue(log.getValue().toString() + "<br>" + counter
+                        + ": Blur event!");
+                counter++;
+            }
+        });
+        
+        TextField field = new TextField("Some textfield");
+        field.setImmediate(true);
+        addComponent(field);
+
+        Label output = new Label(log);
+        output.setCaption("Events:");
+
+        output.setContentMode(Label.CONTENT_XHTML);
+        addComponent(output);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6536;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/Comboboxes.html b/tests/testbench/com/vaadin/tests/components/combobox/Comboboxes.html
new file mode 100644
index 0000000000..1affc9a8a9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/Comboboxes.html
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>Comboboxes</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Comboboxes</td></tr>
+</thead><tbody>
+<tr>
+	<td>setSpeed</td>
+	<td>200</td>
+	<td>To avoid sporadic failures</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.combobox.Comboboxes?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
+	<td>14,14</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>empty-open</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[1]</td>
+	<td>14,11</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VFilterSelect[0]/domChild[1]</td>
+	<td>10,9</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>undefined-wide-open</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VFilterSelect[0]/domChild[1]</td>
+	<td>12,19</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>undefined-wide-select-wide-popup</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[3]/span</td>
+	<td>163,4</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[3]/span</td>
+	<td>163,4</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>undefined-wide-select-wide-popup-page-3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VFilterSelect[0]/domChild[1]</td>
+	<td>5,11</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[6]/VFilterSelect[0]/domChild[1]</td>
+	<td>9,9</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VFilterSelect[0]/domChild[1]</td>
+	<td>13,10</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[8]/VFilterSelect[0]/domChild[1]</td>
+	<td>11,12</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>fixed-select-wide-popup</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[3]/span</td>
+	<td>184,2</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[3]/span</td>
+	<td>184,2</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>fixed-select-wide-popup-page-3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[8]/VFilterSelect[0]/domChild[1]</td>
+	<td>11,12</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<!--Open pagelength 0 combobox and capture-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[9]/VFilterSelect[0]/domChild[1]</td>
+	<td>9,13</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>pagelength-0-popup-open</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<!--Start testing modes-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::PID_Scheckboxaction-Readonly/domChild[0]</td>
+	<td>23,5</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>readonly</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::PID_Scheckboxaction-Error indicators/domChild[0]</td>
+	<td>35,3</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>readonly-error</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::PID_Scheckboxaction-Readonly/domChild[0]</td>
+	<td>26,10</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>error</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentscomboboxComboboxes::PID_Scheckboxaction-Error indicators/domChild[0]</td>
+	<td>67,8</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/Comboboxes.java b/tests/testbench/com/vaadin/tests/components/combobox/Comboboxes.java
new file mode 100644
index 0000000000..94ab20df43
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/Comboboxes.java
@@ -0,0 +1,151 @@
+package com.vaadin.tests.components.combobox;
+
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Select;
+
+public class Comboboxes extends ComponentTestCase<ComboBox> {
+
+    private static final Object CAPTION = "caption";
+
+    @Override
+    protected Class<ComboBox> getTestClass() {
+        return ComboBox.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+        ComboBox s;
+
+        s = createSelect(null);
+        s.setWidth(null);
+        addTestComponent(s);
+
+        s = createSelect("Undefined wide, empty select");
+        s.setWidth(null);
+        addTestComponent(s);
+
+        s = createSelect("Undefined wide select with 5 items");
+        s.setWidth(null);
+        addItem(s, "The first item");
+        addItem(s, "The second item");
+        addItem(s, "The third item");
+        addItem(s, "The fourth item");
+        addItem(s, "The fifth item");
+        addTestComponent(s);
+
+        s = createSelect("Undefined wide select with 50 items");
+        s.setWidth(null);
+        populate(s, 50);
+        addTestComponent(s);
+
+        s = createSelect(null);
+        s.setWidth("100px");
+        addTestComponent(s);
+
+        s = createSelect("100px wide, empty select");
+        s.setWidth("100px");
+        addTestComponent(s);
+
+        s = createSelect("150px wide select with 5 items");
+        s.setWidth("150px");
+        addItem(s, "The first item");
+        addItem(s, "The second item");
+        addItem(s, "The third item");
+        addItem(s, "The fourth item");
+        addItem(s, "The fifth item");
+        addTestComponent(s);
+
+        s = createSelect("200px wide select with 50 items");
+        s.setWidth("200px");
+        populate(s, 50);
+        addTestComponent(s);
+
+        s = new PageLength0ComboBox();
+        s.setImmediate(true);
+        s.addContainerProperty(CAPTION, String.class, "");
+        s.setItemCaptionPropertyId(CAPTION);
+        s.setCaption("Pagelength 0");
+        populate(s, 15);
+        addTestComponent(s);
+    }
+
+    public class PageLength0ComboBox extends ComboBox {
+        public PageLength0ComboBox() {
+            super();
+            pageLength = 0;
+        }
+    }
+
+    private void populate(Select s, int nr) {
+        String text = " an item ";
+
+        String caption = "";
+        for (int i = 0; i < nr; i++) {
+            if (i % 2 == 0) {
+                caption += text;
+            } else {
+                caption += i;
+            }
+
+            addItem(s, caption);
+        }
+
+    }
+
+    private void addItem(Select s, String string) {
+        Object id = s.addItem();
+        s.getItem(id).getItemProperty(CAPTION).setValue(string);
+
+    }
+
+    private ComboBox createSelect(String caption) {
+        ComboBox cb = new ComboBox();
+        cb.setImmediate(true);
+        cb.addContainerProperty(CAPTION, String.class, "");
+        cb.setItemCaptionPropertyId(CAPTION);
+        cb.setCaption(caption);
+
+        return cb;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A generic test for ComboBoxes in different configurations";
+    }
+
+    @Override
+    protected void createCustomActions(List<Component> actions) {
+        actions.add(createIconSelect());
+    }
+
+    private Component createIconSelect() {
+
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+        options.put("<None>", null);
+        options.put("16x16", "../runo/icons/16/user.png");
+        options.put("32x32", "../runo/icons/32/attention.png");
+        options.put("64x64", "../runo/icons/64/email-reply.png");
+
+        return createSelectAction("Icon", options, "<None>",
+                new Command<ComboBox, String>() {
+
+                    public void execute(ComboBox c, String value, Object data) {
+                        for (Object id : c.getItemIds()) {
+                            if (value == null) {
+                                c.setItemIcon(id, null);
+                            } else {
+                                c.setItemIcon(id, new ThemeResource(value + "?"
+                                        + new Date().getTime()));
+                            }
+                        }
+                    }
+                });
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboxBoxErrorMessage.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboxBoxErrorMessage.java
new file mode 100644
index 0000000000..a6eaf7d3e6
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboxBoxErrorMessage.java
@@ -0,0 +1,26 @@
+package com.vaadin.tests.components.combobox;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.ComboBox;
+
+public class ComboxBoxErrorMessage extends TestBase {
+
+    @Override
+    protected void setup() {
+        ComboBox cb = new ComboBox("");
+        cb.setRequired(true);
+        cb.setRequiredError("You must select something");
+        addComponent(cb);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The ComboBox should show an \"You must select something\" tooltip when the cursor is hovering it. Both when hovering the textfield and the dropdown button.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3345;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/NewItemsESCPress.java b/tests/testbench/com/vaadin/tests/components/combobox/NewItemsESCPress.java
new file mode 100644
index 0000000000..d93db563e3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/combobox/NewItemsESCPress.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.components.combobox;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractSelect.NewItemHandler;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.TextArea;
+
+@SuppressWarnings("serial")
+public class NewItemsESCPress extends TestBase {
+
+    @Override
+    protected void setup() {
+        final TextArea addedItems = new TextArea("Last added items:");
+        addedItems.setRows(10);
+        addComponent(addedItems);
+
+        final ComboBox box = new ComboBox("New items are allowed");
+        box.setNewItemsAllowed(true);
+        box.setNewItemHandler(new NewItemHandler() {
+            public void addNewItem(String newItemCaption) {
+                String value = (String) addedItems.getValue();
+                addedItems.setValue(value + newItemCaption + "\n");
+                box.addItem(newItemCaption);
+            }
+        });
+        box.setImmediate(true);
+        addComponent(box);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Firefox flashes the previously entered value when holding the ESC-key.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5694;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/fi.gif b/tests/testbench/com/vaadin/tests/components/combobox/fi.gif
new file mode 100755
index 0000000000..8d3a191828
Binary files /dev/null and b/tests/testbench/com/vaadin/tests/components/combobox/fi.gif differ
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/se.gif b/tests/testbench/com/vaadin/tests/components/combobox/se.gif
new file mode 100755
index 0000000000..80f6285228
Binary files /dev/null and b/tests/testbench/com/vaadin/tests/components/combobox/se.gif differ
diff --git a/tests/testbench/com/vaadin/tests/components/customcomponent/ClipContent.java b/tests/testbench/com/vaadin/tests/components/customcomponent/ClipContent.java
new file mode 100644
index 0000000000..cc7320ad03
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/customcomponent/ClipContent.java
@@ -0,0 +1,56 @@
+package com.vaadin.tests.components.customcomponent;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+
+public class ClipContent extends TestBase {
+
+    @Override
+    protected void setup() {
+
+        Label text = new Label(
+                "1_long_line_that_should_be_clipped<br/>2_long_line_that_should_be_clipped<br/>3_long_line_that_should_be_clipped<br/>4_long_line_that_should_be_clipped<br/>",
+                Label.CONTENT_XHTML);
+
+        final CustomComponent cc = new CustomComponent(text);
+        cc.setWidth("20px");
+        cc.setHeight("20px");
+
+        final TextField w = new TextField("Width");
+        w.setValue("20px");
+        w.addListener(new TextField.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                cc.setWidth((String) w.getValue());
+            }
+        });
+        addComponent(w);
+        final TextField h = new TextField("Height");
+        h.setValue("20px");
+        h.addListener(new TextField.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                cc.setHeight((String) h.getValue());
+            }
+        });
+        addComponent(h);
+        Button b = new Button("apply");
+        addComponent(b);
+
+        addComponent(cc);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The text in CustomComponent should be clipped if it has size defined.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/customcomponent/CustomComponentGrowingContent.html b/tests/testbench/com/vaadin/tests/components/customcomponent/CustomComponentGrowingContent.html
new file mode 100644
index 0000000000..0a1b7212c9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/customcomponent/CustomComponentGrowingContent.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.customcomponent.CustomComponentGrowingContent?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentscustomcomponentCustomComponentGrowingContent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/customcomponent/CustomComponentGrowingContent.java b/tests/testbench/com/vaadin/tests/components/customcomponent/CustomComponentGrowingContent.java
new file mode 100644
index 0000000000..9a559f7414
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/customcomponent/CustomComponentGrowingContent.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.components.customcomponent;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+
+public class CustomComponentGrowingContent extends TestBase {
+    @Override
+    protected void setup() {
+        final Label label = new Label("Short content");
+        label.setWidth(null);
+
+        addComponent(new CustomComponent() {
+            {
+                GridLayout mainLayout = new GridLayout(1, 1);
+                mainLayout.addComponent(label);
+                mainLayout.setSizeUndefined();
+                setSizeUndefined();
+                setCompositionRoot(mainLayout);
+            }
+        });
+
+        addComponent(new Button("Set long content", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                label.setValue("Longer content that should be fully visible");
+            }
+        }));
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The width of the custom component should increase when its content grows";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return Integer.valueOf(7326);
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/customcomponent/CustomComponentSizeUpdate.java b/tests/testbench/com/vaadin/tests/components/customcomponent/CustomComponentSizeUpdate.java
new file mode 100644
index 0000000000..575a1651e3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/customcomponent/CustomComponentSizeUpdate.java
@@ -0,0 +1,44 @@
+package com.vaadin.tests.components.customcomponent;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.NativeButton;
+
+public class CustomComponentSizeUpdate extends TestBase {
+
+    @Override
+    protected void setup() {
+        NativeButton nb = new NativeButton(
+                "100%x100% button. Click to reduce CustomComponent size");
+        nb.setSizeFull();
+
+        final CustomComponent cc = new CustomComponent(nb);
+        cc.setWidth("500px");
+        cc.setHeight("500px");
+
+        nb.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                cc.setWidth((cc.getWidth() - 20) + "px");
+                cc.setHeight((cc.getHeight() - 20) + "px");
+
+            }
+        });
+
+        addComponent(cc);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Click the button to reduce the size of the parent. The button should be resized to fit the parent.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3705;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/customcomponent/EmbeddedInCustomComponent.html b/tests/testbench/com/vaadin/tests/components/customcomponent/EmbeddedInCustomComponent.html
new file mode 100644
index 0000000000..268d3074f7
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/customcomponent/EmbeddedInCustomComponent.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.customcomponent.EmbeddedInCustomComponent?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.customcomponent.EmbeddedInCustomComponent?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>after-refresh</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/customcomponent/EmbeddedInCustomComponent.java b/tests/testbench/com/vaadin/tests/components/customcomponent/EmbeddedInCustomComponent.java
new file mode 100644
index 0000000000..8a37d85b31
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/customcomponent/EmbeddedInCustomComponent.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.components.customcomponent;
+
+import java.util.Date;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.HorizontalLayout;
+
+public class EmbeddedInCustomComponent extends TestBase {
+
+    @Override
+    protected void setup() {
+        HorizontalLayout hl = new HorizontalLayout();
+
+        hl.addComponent(wrap("An uncached image",
+                "ok.png?random=" + new Date().getTime()));
+        hl.addComponent(wrap("A cached image", "cancel.png"));
+        addComponent(hl);
+    }
+
+    private CustomComponent wrap(String caption, String themeImage) {
+        Embedded image = new Embedded(caption, new ThemeResource(
+                "../runo/icons/64/" + themeImage));
+        CustomComponent cc = new CustomComponent(image);
+        return cc;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Two embedded images are shown below, side-by-side. The first one has a random url so it is not cached, the second one is cached.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6304;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/CommitInvalid.html b/tests/testbench/com/vaadin/tests/components/datefield/CommitInvalid.html
new file mode 100644
index 0000000000..9c498f1df2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/CommitInvalid.html
@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>CommitInvalid</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">CommitInvalid</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.CommitInvalid?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_1</td>
+	<td>2. Date. Field: 2009-04-01 Property: 2009-04-01</td>
+</tr>
+<!--change date, make integer invalid, commit-->
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
+	<td>2.4.2009</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_IF</td>
+	<td>27,12</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_IF</td>
+	<td>42f</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_commit/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_2</td>
+	<td>4. Commit failed : Not an integer</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/domChild[0]/domChild[3]/domChild[0]</td>
+	<td>Not an integer</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_1</td>
+	<td>5. Date. Field: 2009-04-02 Property: 2009-04-01</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_0</td>
+	<td>6. Integer: Field: 42f Property: 42</td>
+</tr>
+<!--set sane value for integer, invalid for date, commit-->
+<tr>
+	<td>drag</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_IF</td>
+	<td></td>
+</tr>
+<tr>
+	<td>drop</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/domChild[0]/domChild[1]/domChild[1]/domChild[0]</td>
+	<td>68,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_IF</td>
+	<td>-15,-2</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_IF</td>
+	<td>22</td>
+</tr>
+<tr>
+	<td>drag</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
+	<td></td>
+</tr>
+<tr>
+	<td>drop</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/domChild[0]/domChild[1]/domChild[0]/domChild[1]</td>
+	<td>7,18</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
+	<td>-5,2</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
+	<td>asdfgh</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_commit</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_2</td>
+	<td>7. Commit failed : Date format not recognized</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_1</td>
+	<td>8. Date. Field: null Property: 2009-04-01</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_0</td>
+	<td>9. Integer: Field: 22 Property: 42</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/domChild[0]/domChild[3]/domChild[0]</td>
+	<td>Date format not recognized</td>
+</tr>
+<!--null date field, commit-->
+<tr>
+	<td>drag</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
+	<td></td>
+</tr>
+<tr>
+	<td>drop</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>47,18</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
+	<td>-36,2</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_commit</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_2</td>
+	<td>10. Commit succeeded</td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>11. Date. Field: null Property: null</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>12. Integer: Field: 22 Property: 22</td>
+	<td></td>
+</tr>
+<!--bad date, validate, correct date, commit-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
+	<td>44,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
+	<td>44,7</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
+	<td>ddd</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_validate</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_2</td>
+	<td>13. Validation failed:Date format not recognized</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_1</td>
+	<td>14. Date. Field: null Property: null</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/domChild[0]/domChild[3]/domChild[0]</td>
+	<td>Date format not recognized</td>
+</tr>
+<tr>
+	<td>drag</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
+	<td></td>
+</tr>
+<tr>
+	<td>drop</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/domChild[0]/domChild[1]/domChild[0]/domChild[1]</td>
+	<td>3,19</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
+	<td>-9,3</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_DF#field</td>
+	<td>7.1.2011</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_S_commit</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_2</td>
+	<td>16. Commit succeeded</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_1</td>
+	<td>17. Date. Field: 2011-01-07 Property: 2011-01-07</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCommitInvalid::PID_SLog_row_0</td>
+	<td>18. Integer: Field: 22 Property: 22</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/CommitInvalid.java b/tests/testbench/com/vaadin/tests/components/datefield/CommitInvalid.java
new file mode 100644
index 0000000000..36ee068af4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/CommitInvalid.java
@@ -0,0 +1,139 @@
+package com.vaadin.tests.components.datefield;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import com.vaadin.data.Validator.InvalidValueException;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.data.validator.IntegerValidator;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.TextField;
+
+public class CommitInvalid extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "DateField with parsing error is committed regardless "
+                + "of the invalidity. Parsing error should be handled"
+                + " as a builtin validator, similar to isRequired()"
+                + " in AbstractField.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5927;
+    }
+
+    ObjectProperty<Date> dateProperty;
+    private DateField dateField;
+    private ObjectProperty<Integer> integerProperty;
+    private TextField integerField;
+    private Log log;
+
+    @Override
+    protected void setup() {
+        /*
+         * Create and configure form.
+         */
+        final Form form = new Form();
+        form.setWriteThrough(false); // set write buffering on
+        form.setImmediate(true); // make form (and especially its fields
+                                 // immediate)
+
+        /*
+         * Create and configure Date Field, the actual component to be tested.
+         */
+        dateProperty = new ObjectProperty<Date>(new Date(2009 - 1900, 4 - 1, 1));
+
+        dateField = new DateField("Year", dateProperty);
+        dateField.setLocale(new Locale("fi", "FI"));
+        dateField.setResolution(DateField.RESOLUTION_DAY);
+        dateField.setDebugId("_DF");
+        form.addField("date", dateField);
+
+        /*
+         * Create a TextField with integer property (and integer validator,
+         * preventing invalid typed values to be pushded to property) as a
+         * reference component.
+         */
+        integerProperty = new ObjectProperty<Integer>(42);
+        integerField = new TextField("Another Field", integerProperty);
+        integerField.addValidator(new IntegerValidator("Not an integer"));
+        integerField.setDebugId("_IF");
+        form.addField("text", integerField);
+
+        /*
+         * Action buttons.
+         */
+        Button validate = new Button("Validate");
+        validate.setDebugId("_validate");
+        validate.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                try {
+                    form.validate();
+                    log.log("Form is valid");
+                } catch (InvalidValueException e) {
+                    log.log("Validation failed:" + e.getLocalizedMessage());
+                } finally {
+                    printState();
+                }
+            }
+        });
+        form.getFooter().addComponent(validate);
+
+        Button commit = new Button("Commit");
+        commit.setDebugId("_commit");
+        commit.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                try {
+                    form.commit();
+                    log.log("Commit succeeded");
+                } catch (InvalidValueException e) {
+                    log.log("Commit failed : " + e.getLocalizedMessage());
+                } finally {
+                    printState();
+                }
+            }
+        });
+
+        form.getFooter().addComponent(commit);
+        Button printState = new Button("printState");
+        printState.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                printState();
+            }
+
+        });
+        form.getFooter().addComponent(printState);
+
+        log = new Log(7);
+        log.log("Test app started");
+        printState();
+
+        addComponent(form);
+        addComponent(log);
+
+    }
+
+    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+
+    private String f(Date date) {
+        if (date == null) {
+            return "null";
+        }
+        return dateFormat.format(date);
+    }
+
+    private void printState() {
+        log.log("Date. Field: " + f((Date) dateField.getValue())
+                + " Property: " + f(dateProperty.getValue()));
+        log.log("Integer: Field: " + integerField.getValue() + " Property: "
+                + integerProperty.getValue());
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/CustomDateFormat.html b/tests/testbench/com/vaadin/tests/components/datefield/CustomDateFormat.html
new file mode 100644
index 0000000000..5561fd37cb
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/CustomDateFormat.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.CustomDateFormat?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormat::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupCalendar[0]/domChild[0]</td>
+	<td>1. tammikuuta 2010 0:00:00 UTC+2</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/CustomDateFormat.java b/tests/testbench/com/vaadin/tests/components/datefield/CustomDateFormat.java
new file mode 100644
index 0000000000..8b4bca5fde
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/CustomDateFormat.java
@@ -0,0 +1,49 @@
+package com.vaadin.tests.components.datefield;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Locale;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.DateField;
+
+public class CustomDateFormat extends TestBase {
+
+    @Override
+    protected void setup() {
+
+        Locale locale = new Locale("fi", "FI");
+        Calendar cal = Calendar.getInstance();
+        cal.set(2010, 0, 1);
+
+        DateField df = new DateField();
+        df.setResolution(DateField.RESOLUTION_DAY);
+        df.setLocale(locale);
+        df.setWidth("300px");
+
+        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,
+                DateFormat.LONG, locale);
+
+        if (dateFormat instanceof SimpleDateFormat) {
+            String pattern = ((SimpleDateFormat) dateFormat).toPattern();
+            df.setDateFormat(pattern);
+        }
+
+        df.setValue(cal.getTime());
+
+        addComponent(df);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Month name should be visible in text box if format pattern includes it";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3490;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/CustomDateFormats.html b/tests/testbench/com/vaadin/tests/components/datefield/CustomDateFormats.html
new file mode 100644
index 0000000000..2c2dc1bd42
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/CustomDateFormats.html
@@ -0,0 +1,524 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.CustomDateFormats?restartApplication</td>
+	<td></td>
+</tr>
+<!--fr_FR-->
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MM yyyy/domChild[0]</td>
+	<td>1 02 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
+	<td>1 févr. 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
+	<td>1 février 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sdd M yyyy/domChild[0]</td>
+	<td>01 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sddd M yyyy/domChild[0]</td>
+	<td>001 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M y/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yy/domChild[0]</td>
+	<td>1 2 10</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyy/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy-/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy-/domChild[0]</td>
+	<td>1 février 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy-/domChild[0]</td>
+	<td>1 févr. 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_SddXMMXyy/domChild[0]</td>
+	<td>01/02/10</td>
+</tr>
+<!--Test parsing-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
+	<td>109,12</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
+	<td>26 sept. 2010</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
+	<td>15,8</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
+	<td>26 septembre 2010</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[1]</td>
+	<td>10,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]</td>
+	<td>10,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[1]</td>
+	<td>9,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]</td>
+	<td>9,12</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
+	<td>26 sept. 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
+	<td>26 septembre 2010</td>
+</tr>
+<!--Parsing for fi_FI-->
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=fi_FI</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
+	<td>109,12</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
+	<td>10 maalis 1999</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
+	<td>15,8</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
+	<td>26 syyskuu 1980</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[11]/VLabel[0]</td>
+	<td>10 maalis 1999</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[15]/VLabel[0]</td>
+	<td>26 syyskuu 1980</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[1]</td>
+	<td>10,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[1]</td>
+	<td>10,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[1]</td>
+	<td>9,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[1]</td>
+	<td>9,12</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
+	<td>10 maalis 1999</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
+	<td>26 syyskuu 1980</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd. MMMM'ta 'yyyy/domChild[0]</td>
+	<td>124,13</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd. MMMM'ta 'yyyy/domChild[0]</td>
+	<td>10. tammikuuta 2011</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[43]/VLabel[0]</td>
+	<td>10. tammikuuta 2011</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd. MMMM'ta 'yyyy/domChild[1]</td>
+	<td>5,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>tammikuu 2011</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]</td>
+	<td>5,10</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd. MMMM'ta 'yyyy/domChild[0]</td>
+	<td>10. tammikuuta 2011</td>
+</tr>
+<!--zh-->
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=zh</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MM yyyy/domChild[0]</td>
+	<td>1 02 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
+	<td>1 二月 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
+	<td>1 二月 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sdd M yyyy/domChild[0]</td>
+	<td>01 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sddd M yyyy/domChild[0]</td>
+	<td>001 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M y/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yy/domChild[0]</td>
+	<td>1 2 10</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyy/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy-/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Syyyy'年'M'月'd'日'/domChild[0]</td>
+	<td>2010年2月1日</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Syyyy-M-d/domChild[0]</td>
+	<td>2010-2-1</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Syy-M-d/domChild[0]</td>
+	<td>10-2-1</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=en_US</td>
+</tr>
+<!--en_US-->
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MM yyyy/domChild[0]</td>
+	<td>1 02 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
+	<td>1 Feb 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
+	<td>1 February 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sdd M yyyy/domChild[0]</td>
+	<td>01 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sddd M yyyy/domChild[0]</td>
+	<td>001 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M y/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yy/domChild[0]</td>
+	<td>1 2 10</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyy/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy-/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_SMMMM d, yyyy/domChild[0]</td>
+	<td>February 1, 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_SMMM d, yyyy/domChild[0]</td>
+	<td>Feb 1, 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_SMXdXyy/domChild[0]</td>
+	<td>2/1/10</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=en_GB</td>
+</tr>
+<!--en_GB-->
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MM yyyy/domChild[0]</td>
+	<td>1 02 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
+	<td>1 Feb 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
+	<td>1 February 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sdd M yyyy/domChild[0]</td>
+	<td>01 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sddd M yyyy/domChild[0]</td>
+	<td>001 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M y/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yy/domChild[0]</td>
+	<td>1 2 10</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyy/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy-/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sdd MMMM yyyy/domChild[0]</td>
+	<td>01 February 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sdd-MMM-yyyy/domChild[0]</td>
+	<td>01-Feb-2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_SddXMMXyy/domChild[0]</td>
+	<td>01/02/10</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=fi_FI</td>
+</tr>
+<!--fi_FI-->
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MM yyyy/domChild[0]</td>
+	<td>1 02 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMM yyyy/domChild[0]</td>
+	<td>1 helmi 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd MMMM yyyy/domChild[0]</td>
+	<td>1 helmikuu 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sdd M yyyy/domChild[0]</td>
+	<td>01 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sddd M yyyy/domChild[0]</td>
+	<td>001 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M y/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yy/domChild[0]</td>
+	<td>1 2 10</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyy/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd M yyyy-/domChild[0]</td>
+	<td>1 2 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd. MMMM'ta 'yyyy/domChild[0]</td>
+	<td>1. helmikuuta 2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd.M.yyyy/domChild[0]</td>
+	<td>1.2.2010</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::PID_Sd.M.yyyy-/domChild[0]</td>
+	<td>1.2.2010</td>
+</tr>
+<!---->
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/CustomDateFormats.java b/tests/testbench/com/vaadin/tests/components/datefield/CustomDateFormats.java
new file mode 100644
index 0000000000..7f67af1adc
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/CustomDateFormats.java
@@ -0,0 +1,207 @@
+package com.vaadin.tests.components.datefield;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.HashSet;
+import java.util.Locale;
+import java.util.Set;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.NativeSelect;
+
+public class CustomDateFormats extends TestBase {
+
+    private static final Object CAPTION = "C";
+
+    private Component customFormats = null;
+
+    @Override
+    protected void setup() {
+        final NativeSelect s = new NativeSelect("Locale");
+        s.setImmediate(true);
+        s.setNullSelectionAllowed(false);
+        s.addContainerProperty(CAPTION, String.class, "");
+        addLocale(Locale.FRANCE, s);
+        addLocale(Locale.CHINESE, s);
+        addLocale(Locale.US, s);
+        addLocale(Locale.UK, s);
+        addLocale(new Locale("fi", "FI"), s);
+
+        s.addListener(new Property.ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                setDateFieldLocale((Locale) s.getValue());
+            }
+        });
+        addComponent(s);
+        s.setValue(Locale.FRANCE);
+    }
+
+    private void addLocale(Locale locale, NativeSelect s) {
+        Item i = s.addItem(locale);
+        i.getItemProperty(CAPTION).setValue(locale.toString());
+
+    }
+
+    protected void setDateFieldLocale(Locale value) {
+        Component n = getCustomFormats(value);
+        if (customFormats == null) {
+            addComponent(n);
+        } else {
+            replaceComponent(customFormats, n);
+        }
+        customFormats = n;
+
+    }
+
+    private GridLayout getCustomFormats(Locale locale) {
+        GridLayout gridLayout = createGridLayout();
+        usedDebugIds.clear();
+        addDateFields(gridLayout, locale);
+
+        return gridLayout;
+    }
+
+    private GridLayout createGridLayout() {
+        GridLayout gridLayout = new GridLayout(4, 4);
+        gridLayout.setMargin(true);
+        gridLayout.addComponent(new Label("FORMAT"));
+        gridLayout.addComponent(new Label("DATEFIELD"));
+        gridLayout.addComponent(new Label("SERVER SIDE VALUE"));
+        gridLayout.addComponent(new Label("EXPECTED"));
+
+        return gridLayout;
+    }
+
+    private void addDateFields(GridLayout gridLayout, Locale locale) {
+        addDateField(gridLayout, "d M yyyy", locale);
+        addDateField(gridLayout, "d MM yyyy", locale);
+        addDateField(gridLayout, "d MMM yyyy", locale);
+        addDateField(gridLayout, "d MMMM yyyy", locale);
+
+        addDateField(gridLayout, "dd M yyyy", locale);
+        addDateField(gridLayout, "ddd M yyyy", locale);
+
+        addDateField(gridLayout, "d M y", locale, "d M yyyy");
+        addDateField(gridLayout, "d M yy", locale);
+        addDateField(gridLayout, "d M yyy", locale, "d M yyyy");
+        addDateField(gridLayout, "d M yyyy", locale);
+
+        addDateField(gridLayout, getDatePattern(locale, DateFormat.FULL),
+                locale);
+        addDateField(gridLayout, getDatePattern(locale, DateFormat.LONG),
+                locale);
+        addDateField(gridLayout, getDatePattern(locale, DateFormat.MEDIUM),
+                locale);
+        addDateField(gridLayout, getDatePattern(locale, DateFormat.SHORT),
+                locale);
+
+    }
+
+    private String getDatePattern(Locale locale, int dateStyle) {
+        DateFormat dateFormat = DateFormat.getDateInstance(dateStyle, locale);
+
+        if (dateFormat instanceof SimpleDateFormat) {
+            String pattern = ((SimpleDateFormat) dateFormat).toPattern();
+            return pattern;
+        }
+        return null;
+
+    }
+
+    public class Data {
+
+        private Label label;
+        private String pattern;
+
+        public Data(Label label, String pattern) {
+            this.label = label;
+            this.pattern = pattern;
+        }
+
+    }
+
+    private Set<String> usedDebugIds = new HashSet<String>();
+
+    private void addDateField(GridLayout gridLayout, String pattern,
+            Locale locale, String expectedDateFormat) {
+        Calendar cal = Calendar.getInstance();
+        cal.set(2010, 1, 1);
+
+        Label serversideValueLabel = new Label();
+
+        DateField df = new DateField();
+        df.setResolution(DateField.RESOLUTION_DAY);
+        df.setLocale(locale);
+        df.setWidth("300px");
+        df.setDateFormat(pattern);
+        df.setImmediate(true);
+        String debugId = pattern.replace('/', 'X');
+        while (usedDebugIds.contains(debugId)) {
+            debugId = debugId + "-";
+        }
+        df.setDebugId(debugId);
+        usedDebugIds.add(debugId);
+
+        df.setData(new Data(serversideValueLabel, pattern));
+        df.setValue(cal.getTime());
+        df.addListener(new Property.ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                updateServerSideLabel((DateField) event.getProperty());
+            }
+        });
+
+        Label patternLabel = new Label(pattern);
+        patternLabel.setWidth(null);
+        SimpleDateFormat expDateFormat = new SimpleDateFormat(
+                expectedDateFormat, locale);
+
+        Label expectedLabel = new Label(expDateFormat.format(cal.getTime()));
+        if (!pattern.equals(expectedDateFormat)) {
+            expectedLabel.setValue(expectedLabel.getValue()
+                    + " (differs from JDK)");
+        }
+        expectedLabel.setWidth(null);
+
+        gridLayout.addComponent(patternLabel);
+        gridLayout.addComponent(df);
+        gridLayout.addComponent(serversideValueLabel);
+        gridLayout.addComponent(expectedLabel);
+
+        updateServerSideLabel(df);
+    }
+
+    private void updateServerSideLabel(DateField df) {
+        Data data = (Data) df.getData();
+        String pattern = data.pattern;
+        Locale locale = df.getLocale();
+        SimpleDateFormat formatter = new SimpleDateFormat(pattern, locale);
+
+        String newValue = formatter.format(df.getValue());
+        data.label.setValue(newValue);
+    }
+
+    private void addDateField(GridLayout gridLayout, String pattern,
+            Locale locale) {
+        addDateField(gridLayout, pattern, locale, pattern);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Test that DateField renders custom date formats the same way as SimpleDateFormat formats them";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5465;
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DateFieldEmptyValid.html b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldEmptyValid.html
new file mode 100644
index 0000000000..751c7ba9bd
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldEmptyValid.html
@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>DateFieldEmptyValid</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">DateFieldEmptyValid</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.DateFieldEmptyValid?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
+	<td>2. isEmpty: false, isValid: true</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
+	<td>1. DateField value is now March 3, 1973 11:46:40 AM</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
+	<td>3.3.1973</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
+	<td>62,12</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VPopupCalendar[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::Root/VOverlay[0]/VCalendarPanel[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::Root/VOverlay[0]/VCalendarPanel[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::Root/VOverlay[0]/VCalendarPanel[0]</td>
+	<td>left</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::Root/VOverlay[0]/VCalendarPanel[0]</td>
+	<td>left</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::Root/VOverlay[0]/VCalendarPanel[0]</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
+	<td>5. isEmpty: false, isValid: true</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
+	<td>4. DateField value is now March 15, 1973 11:46:40 AM</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
+	<td>15.3.1973</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
+	<td>64,13</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
+	<td>15.3.1973d</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>InvalidDateIcon</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
+	<td>208,5</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_Scheck-value/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
+	<td>11. isEmpty: true, isValid: false</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
+	<td>10. DateField value is now null</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
+	<td>64,10</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
+	<td>15.3.1973dd</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
+	<td>186,10</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_Scheck-value/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
+	<td>14. isEmpty: true, isValid: false</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
+	<td>13. DateField value is now null</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_Sclear/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_Scheck-value/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<!--Note, no value change should happen, value was and is null, validity would have changed if the test had the required flag off-->
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
+	<td>17. DateField value is now null</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
+	<td>18. isEmpty: true, isValid: false</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_Sset4.5.1990/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
+	<td>22. isEmpty: false, isValid: true</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
+	<td>21. DateField value is now May 4, 1990 12:00:00 AM</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SDateField#field</td>
+	<td>4.5.1990</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
+	<td>26. isEmpty: false, isValid: true</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
+	<td>25. DateField value is now June 5, 2000 12:00:00 AM</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_Sclear/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
+	<td>30. isEmpty: true, isValid: false</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_Sset-by-ds/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
+	<td>34. isEmpty: false, isValid: true</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
+	<td>33. DateField value is now June 5, 2000 12:00:00 AM</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_Sset-via-ds/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_1</td>
+	<td>40. DateField value is now August 27, 2005 12:00:00 AM</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldEmptyValid::PID_SLog_row_0</td>
+	<td>41. isEmpty: false, isValid: true</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DateFieldEmptyValid.java b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldEmptyValid.java
new file mode 100644
index 0000000000..53b1d253ab
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldEmptyValid.java
@@ -0,0 +1,144 @@
+package com.vaadin.tests.components.datefield;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.PopupDateField;
+
+@SuppressWarnings("serial")
+public class DateFieldEmptyValid extends TestBase {
+
+    private Log log;
+
+    private MyDateField df;
+
+    private SimpleDateFormat formatter = new SimpleDateFormat(
+            "MMMM d, yyyy hh:mm:ss aaa", Locale.US);
+
+    public class MyDateField extends PopupDateField {
+        @Override
+        public boolean isEmpty() {
+            return super.isEmpty();
+        }
+
+    }
+
+    @Override
+    protected void setup() {
+        addComponent(new Label("<br/><br/>", Label.CONTENT_XHTML));
+        log = new Log(8);
+        addComponent(log);
+        df = new MyDateField();
+        df.setDebugId("DateField");
+        df.setRequired(true);
+        df.setLocale(new Locale("fi", "FI"));
+        df.setValue(new Date(100000000000L));
+        df.setImmediate(true);
+        df.setResolution(DateField.RESOLUTION_DAY);
+        df.addListener(new ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                log.log("Value changeEvent");
+                checkEmpty();
+            }
+        });
+        addComponent(df);
+        checkEmpty();
+        Button b = new Button("Clear date");
+        b.setDebugId("clear");
+        b.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                log.log("Clearing date aka setValue(null)");
+                df.setValue(null);
+            }
+        });
+        addComponent(b);
+
+        b = new Button("Set date to 4.5.1990");
+        b.setDebugId("set4.5.1990");
+        b.addListener(new ClickListener() {
+
+            @SuppressWarnings("deprecation")
+            public void buttonClick(ClickEvent event) {
+                log.log("Setting new value to datefield (4.5.1990)");
+                df.setValue(new Date(1990 - 1900, 5 - 1, 4));
+            }
+        });
+        addComponent(b);
+
+        b = new Button("Set date to 5.6.2000 using a property data source");
+        b.addListener(new ClickListener() {
+
+            @SuppressWarnings("deprecation")
+            public void buttonClick(ClickEvent event) {
+                log.log("Setting new object property (5.6.2000) to datefield");
+                ObjectProperty<Date> dfProp = new ObjectProperty<Date>(
+                        new Date(2000 - 1900, 6 - 1, 5), Date.class);
+                df.setPropertyDataSource(dfProp);
+            }
+        });
+        b.setDebugId("set-by-ds");
+        addComponent(b);
+
+        b = new Button(
+                "Set date to 27.8.2005 by changing a new property data source from null, ds attached before value setting.");
+        b.setDebugId("set-via-ds");
+        b.addListener(new ClickListener() {
+
+            @SuppressWarnings("deprecation")
+            public void buttonClick(ClickEvent event) {
+                log.log("Setting object property (with value null) to datefield and set value of property to 27.8.2005");
+                ObjectProperty<Date> dfProp = new ObjectProperty<Date>(null,
+                        Date.class);
+                df.setPropertyDataSource(dfProp);
+                dfProp.setValue(new Date(2005 - 1900, 8 - 1, 27));
+            }
+        });
+        addComponent(b);
+
+        b = new Button("Check value");
+        b.setDebugId("check-value");
+        b.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                log.log("Checking state");
+                checkEmpty();
+            }
+        });
+        addComponent(b);
+    }
+
+    private void checkEmpty() {
+        Object value = df.getValue();
+        if (value instanceof Date) {
+            value = formatter.format(df.getValue());
+        }
+
+        log.log("DateField value is now " + value);
+        // log.log("DateField value is now " + df.getValue());
+        log.log("isEmpty: " + df.isEmpty() + ", isValid: " + df.isValid());
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tests the isEmpty() and isValid() functionality of a DateField. The field is required and has no other validators."
+                + "IsEmpty() should return true when the field is truly empty i.e. contains no text, no matter how the field has been made empty. If the field contains any text, isEmpty() should return false."
+                + "IsValid() should in this case return true if the field is not empty and vice versa.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5277;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DateFieldInSubWindow.html b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldInSubWindow.html
new file mode 100644
index 0000000000..f2ef2123f6
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldInSubWindow.html
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>DateFieldInSubWindow</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">DateFieldInSubWindow</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.DateFieldInSubWindow?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldInSubWindow::/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DateFieldInSubWindow.java b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldInSubWindow.java
new file mode 100644
index 0000000000..18bc719850
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldInSubWindow.java
@@ -0,0 +1,143 @@
+package com.vaadin.tests.components.datefield;
+
+import java.util.Date;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.DefaultFieldFactory;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class DateFieldInSubWindow extends AbstractTestCase {
+
+    @SuppressWarnings("serial")
+    public class TestCaseWindow extends Window {
+
+        public class MyBean {
+            private Date myDate;
+            private String myString;
+
+            public Date getMyDate() {
+                return myDate;
+            }
+
+            public void setMyDate(Date myDate) {
+                this.myDate = myDate;
+            }
+
+            public String getMyString() {
+                return myString;
+            }
+
+            public void setMyString(String myString) {
+                this.myString = myString;
+            }
+
+        }
+
+        private MyBean myBean;
+
+        public TestCaseWindow() {
+            super("Test Case Window");
+            setModal(true);
+            setWidth("400px");
+            myBean = new MyBean();
+
+            initWindow();
+        }
+
+        protected class CustomerFieldFactory extends DefaultFieldFactory {
+
+            public static final String COMMON_FIELD_WIDTH = "12em";
+
+            @Override
+            public Field createField(Item item, Object propertyId,
+                    Component uiContext) {
+                Field f = super.createField(item, propertyId, uiContext);
+
+                if ("myDate".equals(propertyId)) {
+                    ((DateField) f).setResolution(DateField.RESOLUTION_MIN);
+                    ((DateField) f).setCaption("This is my date");
+
+                }
+
+                return f;
+            }
+        }
+
+        protected void initWindow() {
+            VerticalLayout layout = (VerticalLayout) getContent();
+            layout.setMargin(true);
+            layout.setSpacing(true);
+
+            /**
+             * This causes the window to add the .v-readonly style!
+             */
+            setClosable(false);
+
+            CustomerFieldFactory fieldFactory = new CustomerFieldFactory();
+            final Form generalForm = new Form();
+            {
+                generalForm.setCaption("My form");
+                generalForm.setWriteThrough(true);
+                generalForm.setFormFieldFactory(fieldFactory);
+
+                BeanItem<MyBean> myBeanItem = new BeanItem<MyBean>(myBean);
+                generalForm.setItemDataSource(myBeanItem);
+
+                generalForm.setVisibleItemProperties(new String[] { "myDate",
+                        "myString" });
+                generalForm.setValidationVisible(true);
+                addComponent(generalForm);
+            }
+
+            HorizontalLayout buttons = new HorizontalLayout();
+            {
+                buttons.setSpacing(true);
+
+                Button b = new Button("Close", new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        (getParent()).removeWindow(TestCaseWindow.this);
+                    }
+                });
+                buttons.addComponent(b);
+                layout.addComponent(buttons);
+
+            }
+        }
+    }
+
+    @Override
+    public void init() {
+        Window mainWindow = new Window();
+        setMainWindow(mainWindow);
+        Button open = new Button("Open window", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                getMainWindow().addWindow(new TestCaseWindow());
+            }
+        });
+
+        mainWindow.addComponent(open);
+    }
+
+    @Override
+    protected String getDescription() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4582;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DateFieldLocale.java b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldLocale.java
new file mode 100644
index 0000000000..fbeeb872d7
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldLocale.java
@@ -0,0 +1,47 @@
+package com.vaadin.tests.components.datefield;
+
+import java.util.Date;
+import java.util.Locale;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.DateField;
+
+public class DateFieldLocale extends TestBase {
+
+    @Override
+    public void setup() {
+        final DateField dateField = new DateField("DateField");
+        dateField.setLocale(new Locale("fi", "FI"));
+        dateField.setCaption(dateField.getLocale().toString());
+        dateField.setValue(new Date());
+        dateField.setResolution(DateField.RESOLUTION_DAY);
+
+        addComponent(new Button("Change locale", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                if (dateField.getLocale().getCountry().equalsIgnoreCase("fi")) {
+                    dateField.setLocale(new Locale("zh", "CN"));
+                } else {
+                    dateField.setLocale(new Locale("fi", "FI"));
+                }
+                dateField.setCaption(dateField.getLocale().toString());
+            }
+        }));
+
+        addComponent(dateField);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Click change locale to switch between Finnish and Chinese locale for the DateField. The date string should be updated in addition to the caption.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3935;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DateFieldMinResolution.java b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldMinResolution.java
new file mode 100644
index 0000000000..e7c3442060
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldMinResolution.java
@@ -0,0 +1,61 @@
+package com.vaadin.tests.components.datefield;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.InlineDateField;
+import com.vaadin.ui.Label;
+
+public class DateFieldMinResolution extends TestBase {
+
+    @Override
+    protected void setup() {
+
+        final SimpleDateFormat dformat = new SimpleDateFormat(
+                "dd/MM/yyyy HH:mm");
+
+        Calendar cal = Calendar.getInstance();
+        cal.set(2019, 1, 1, 1, 1);
+
+        DateField df = new DateField("foo");
+        df.setResolution(DateField.RESOLUTION_MIN);
+        df.setDateFormat(dformat.toPattern());
+        df.setValue(cal.getTime());
+        df.setImmediate(true);
+
+        addComponent(df);
+
+        final Label lbl = new Label(dformat.format(cal.getTime()));
+        lbl.setCaption("Selected date");
+
+        InlineDateField idf = new InlineDateField("bar");
+        idf.setResolution(DateField.RESOLUTION_MIN);
+        idf.setDateFormat(dformat.toPattern());
+        idf.setValue(cal.getTime());
+        idf.setImmediate(true);
+
+        idf.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                lbl.setValue(dformat.format(event.getProperty().getValue()));
+            }
+        });
+
+        addComponent(idf);
+        addComponent(lbl);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "When the time controls are visible the time should be directed directly to the textfield";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5387;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.html b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.html
new file mode 100644
index 0000000000..6bc285ee72
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.html
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.DateFieldPopupOffScreen</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldPopupOffScreen::/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[2]/VPopupCalendar[0]/domChild[1]</td>
+	<td>10,10</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldPopupOffScreen::/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VPopupCalendar[0]/domChild[1]</td>
+	<td>10,12</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldPopupOffScreen::/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[4]/VPopupCalendar[0]/domChild[1]</td>
+	<td>8,10</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldPopupOffScreen::/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VPopupCalendar[0]/domChild[1]</td>
+	<td>7,13</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldPopupOffScreen::/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VPopupCalendar[0]/domChild[1]</td>
+	<td>11,14</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.java b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.java
new file mode 100644
index 0000000000..cb3fc1f916
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.java
@@ -0,0 +1,62 @@
+package com.vaadin.tests.components.datefield;
+
+import java.sql.Date;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Window;
+
+public class DateFieldPopupOffScreen extends AbstractTestCase {
+
+    @Override
+    protected String getDescription() {
+        return "Test for the popup position from a DateField. The popup should always be on-screen even if the DateField is close the the edge of the browser.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3639;
+    }
+
+    @Override
+    public void init() {
+        Window mainWindow = new Window(getClass().getName());
+
+        GridLayout mainLayout = new GridLayout(3, 3);
+        mainLayout.setSizeFull();
+
+        DateField df;
+
+        df = createDateField();
+        mainLayout.addComponent(df, 2, 0);
+        mainLayout.setComponentAlignment(df, Alignment.TOP_RIGHT);
+
+        df = createDateField();
+        mainLayout.addComponent(df, 2, 1);
+        mainLayout.setComponentAlignment(df, Alignment.MIDDLE_RIGHT);
+
+        df = createDateField();
+        mainLayout.addComponent(df, 2, 2);
+        mainLayout.setComponentAlignment(df, Alignment.BOTTOM_RIGHT);
+
+        df = createDateField();
+        mainLayout.addComponent(df, 0, 2);
+        mainLayout.setComponentAlignment(df, Alignment.BOTTOM_LEFT);
+
+        df = createDateField();
+        mainLayout.addComponent(df, 1, 2);
+        mainLayout.setComponentAlignment(df, Alignment.BOTTOM_CENTER);
+
+        mainWindow.setContent(mainLayout);
+        setMainWindow(mainWindow);
+    }
+
+    private DateField createDateField() {
+        DateField df = new DateField();
+        df.setDescription("This is a long, multiline tooltip.<br/>It should always be on screen so it can be read.");
+        df.setValue(new Date(1000000L));
+        return df;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DateFieldReadOnly.html b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldReadOnly.html
new file mode 100644
index 0000000000..ee19b52324
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldReadOnly.html
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>DateFieldReadOnly</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">DateFieldReadOnly</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.DateFieldReadOnly?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>focus</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldReadOnly::/VVerticalLayout[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>readonly</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldReadOnly::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldReadOnly::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupCalendar[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>focus</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldReadOnly::Root/VOverlay[0]/VCalendarPanel[0]/VCalendarPanel$VTime[0]/ListBox[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>readwrite-popup</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldReadOnly::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>focus</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldReadOnly::/VVerticalLayout[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>readonly</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DateFieldReadOnly.java b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldReadOnly.java
new file mode 100644
index 0000000000..3084eab32b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldReadOnly.java
@@ -0,0 +1,53 @@
+package com.vaadin.tests.components.datefield;
+
+import java.util.Calendar;
+import java.util.Locale;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.DateField;
+
+public class DateFieldReadOnly extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "A read-only DateField should not show the popup button and not be editable.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3163;
+    }
+
+    @Override
+    protected void setup() {
+        final DateField timeField = new DateField("A read-only datefield");
+        timeField.setResolution(DateField.RESOLUTION_SEC);
+        timeField.setDateFormat("HH:mm:ss");
+        timeField.setCaption(null);
+        timeField.setIcon(null);
+        timeField.setWidth("8em");
+        timeField.addStyleName("timeField");
+
+        // Set date so that testing always has same time
+        Calendar c = Calendar.getInstance(Locale.ENGLISH);
+        c.set(2009, 05, 12, 0, 0, 0);
+
+        timeField.setValue(c.getTime());
+        timeField.setReadOnly(true);
+
+        addComponent(timeField);
+
+        Button b = new Button("Switch read-only");
+        b.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                timeField.setReadOnly(!timeField.isReadOnly());
+            }
+        });
+
+        addComponent(b);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DateFieldTest.java b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldTest.java
new file mode 100644
index 0000000000..cf433257bb
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldTest.java
@@ -0,0 +1,137 @@
+package com.vaadin.tests.components.datefield;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.Locale;
+
+import com.vaadin.tests.components.abstractfield.AbstractFieldTest;
+import com.vaadin.ui.DateField;
+
+public class DateFieldTest<T extends DateField> extends AbstractFieldTest<T> {
+
+    @Override
+    protected Class<T> getTestClass() {
+        return (Class<T>) DateField.class;
+    }
+
+    private Command<T, Date> setValue = new Command<T, Date>() {
+
+        public void execute(T c, Date value, Object data) {
+            c.setValue(value);
+        }
+    };
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+        createResolutionSelectAction(CATEGORY_FEATURES);
+        createBooleanAction("Lenient", CATEGORY_FEATURES, false, lenientCommand);
+        createBooleanAction("Show week numbers", CATEGORY_FEATURES, false,
+                weekNumberCommand);
+        createDateFormatSelectAction(CATEGORY_FEATURES);
+        createSetValueAction(CATEGORY_FEATURES);
+
+    };
+
+    private void createSetValueAction(String category) {
+        LinkedHashMap<String, Date> options = new LinkedHashMap<String, Date>();
+        options.put("(null)", null);
+        options.put("(current time)", new Date());
+        Calendar c = Calendar.getInstance(new Locale("fi", "FI"));
+        c.clear();
+        c.set(2010, 12 - 1, 12, 12, 0, 0);
+        c.set(Calendar.MILLISECOND, 0);
+        options.put("2010-12-12 12:00:00.000", c.getTime());
+        c.clear();
+        c.set(2000, 1 - 1, 2, 3, 4, 5);
+        c.set(Calendar.MILLISECOND, 6);
+        options.put("2000-01-02 03:04:05.006", c.getTime());
+        createMultiClickAction("Set value", category, options, setValue, null);
+    }
+
+    private void createDateFormatSelectAction(String category) {
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+
+        options.put("-", null);
+        options.put("d M yyyy", "d M yyyy");
+        options.put("d MM yyyy", "d MM yyyy");
+        options.put("d MMM yyyy", "d MMM yyyy");
+        options.put("d MMMM yyyy", "d MMMM yyyy");
+        options.put("dd M yyyy", "dd M yyyy");
+        options.put("ddd M yyyy", "ddd M yyyy");
+        options.put("d M y", "d M y");
+        options.put("d M yy", "d M yy");
+        options.put("d M yyy", "d M yyy");
+        options.put("d M yyyy", "d M yyyy");
+        options.put("d M 'custom text' yyyy", "d M 'custom text' yyyy");
+        options.put("'day:'d', month:'M', year: 'yyyy",
+                "'day:'d', month:'M', year: 'yyyy");
+        options.put(getDatePattern(new Locale("fi", "FI"), DateFormat.LONG),
+                getDatePattern(new Locale("fi", "FI"), DateFormat.LONG));
+        options.put(getDatePattern(new Locale("fi", "FI"), DateFormat.MEDIUM),
+                getDatePattern(new Locale("fi", "FI"), DateFormat.MEDIUM));
+        options.put(getDatePattern(new Locale("fi", "FI"), DateFormat.SHORT),
+                getDatePattern(new Locale("fi", "FI"), DateFormat.SHORT));
+
+        createSelectAction("Date format", category, options, "-",
+                dateFormatCommand);
+
+    }
+
+    private String getDatePattern(Locale locale, int dateStyle) {
+        DateFormat dateFormat = DateFormat.getDateInstance(dateStyle, locale);
+
+        if (dateFormat instanceof SimpleDateFormat) {
+            String pattern = ((SimpleDateFormat) dateFormat).toPattern();
+            return pattern;
+        }
+        return null;
+
+    }
+
+    private void createResolutionSelectAction(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("Year", DateField.RESOLUTION_YEAR);
+        options.put("Month", DateField.RESOLUTION_MONTH);
+        options.put("Day", DateField.RESOLUTION_DAY);
+        options.put("Hour", DateField.RESOLUTION_HOUR);
+        options.put("Min", DateField.RESOLUTION_MIN);
+        options.put("Sec", DateField.RESOLUTION_SEC);
+        options.put("Msec", DateField.RESOLUTION_MSEC);
+
+        createSelectAction("Resolution", category, options, "Year",
+                resolutionCommand);
+    }
+
+    private Command<T, Integer> resolutionCommand = new Command<T, Integer>() {
+
+        public void execute(T c, Integer value, Object data) {
+            c.setResolution(value);
+
+        }
+    };
+    private Command<T, Boolean> lenientCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            c.setLenient(false);
+
+        }
+    };
+    private Command<T, Boolean> weekNumberCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            c.setShowISOWeekNumbers(value);
+
+        }
+    };
+    private Command<T, String> dateFormatCommand = new Command<T, String>() {
+
+        public void execute(T c, String value, Object data) {
+            c.setDateFormat(value);
+        }
+    };
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DateFieldTimezone.html b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldTimezone.html
new file mode 100644
index 0000000000..ca354dd240
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldTimezone.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>DateFieldTimezone</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">DateFieldTimezone</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.DateFieldTimezone?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldTimezone::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>6,10</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldTimezone::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>Europe/Helsinki (Eastern European Time)</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldTimezone::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td></td>
+	<td>250</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldTimezone::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VPopupCalendar[0]#field</td>
+	<td>1/1/10 02:00:00.000 AM</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldTimezone::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VPopupCalendar[0]#field</td>
+	<td>1/1/10 01:00:00.000 AM</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDateFieldTimezone::PID_SLog_row_0</td>
+	<td>2. Date changed to 12/31/09 11:00:00 PM UTC</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DateFieldTimezone.java b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldTimezone.java
new file mode 100644
index 0000000000..6562e5412e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldTimezone.java
@@ -0,0 +1,99 @@
+package com.vaadin.tests.components.datefield;
+
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.DateField;
+
+public class DateFieldTimezone extends TestBase {
+
+    private static final TimeZone UTC = TimeZone.getTimeZone("UTC");
+    private static final Locale EN = Locale.ENGLISH;
+    private final Log log = new Log(5);
+    private final DateField dateField = new DateField();
+    private static final String nullValue = "";
+
+    @Override
+    protected void setup() {
+        ArrayList<String> timeZoneCodes = new ArrayList<String>();
+        timeZoneCodes.add(nullValue);
+        timeZoneCodes.addAll(Arrays.asList(TimeZone.getAvailableIDs()));
+        ComboBox timezoneSelector = new ComboBox("Select time zone",
+                timeZoneCodes) {
+            @Override
+            public String getItemCaption(Object itemId) {
+                if (itemId == nullValue || itemId == null) {
+                    TimeZone timeZone = TimeZone.getDefault();
+                    return "Default time zone (" + timeZone.getDisplayName()
+                            + ")";
+                } else {
+                    TimeZone timeZone = TimeZone.getTimeZone((String) itemId);
+                    return itemId + " (" + timeZone.getDisplayName() + ")";
+                }
+            }
+        };
+        timezoneSelector.setValue("UTC");
+        timezoneSelector.setImmediate(true);
+        timezoneSelector.setNullSelectionAllowed(true);
+        timezoneSelector.setNullSelectionItemId(nullValue);
+        timezoneSelector.setFilteringMode(ComboBox.FILTERINGMODE_CONTAINS);
+        timezoneSelector.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                Object value = event.getProperty().getValue();
+                TimeZone timeZone;
+                if (value == nullValue || value == null) {
+                    timeZone = null;
+                    log.log("Change to default time zone "
+                            + TimeZone.getDefault().getID());
+                } else {
+                    timeZone = TimeZone.getTimeZone((String) value);
+                    log.log("Changed to time zone " + timeZone.getID());
+                }
+                dateField.setTimeZone(timeZone);
+            }
+        });
+
+        Calendar cal = Calendar.getInstance(UTC);
+        cal.set(2010, 0, 1, 0, 0, 0);
+        cal.set(Calendar.MILLISECOND, 0);
+
+        dateField.setValue(cal.getTime());
+        dateField.setImmediate(true);
+        dateField.setTimeZone(cal.getTimeZone());
+        dateField.setLocale(EN);
+        dateField.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                Date date = (Date) dateField.getValue();
+                DateFormat format = DateFormat.getDateTimeInstance(
+                        DateFormat.SHORT, DateFormat.LONG, EN);
+                format.setTimeZone(UTC);
+                log.log("Date changed to " + format.format(date));
+            }
+        });
+
+        addComponent(timezoneSelector);
+        addComponent(log);
+        addComponent(dateField);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tests the operation of the date field with different time zones";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return Integer.valueOf(6066);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DateFieldUnparsableDate.java b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldUnparsableDate.java
new file mode 100644
index 0000000000..32456e34c5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldUnparsableDate.java
@@ -0,0 +1,101 @@
+package com.vaadin.tests.components.datefield;
+
+import java.util.Date;
+
+import com.vaadin.data.Property;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.DateField;
+
+public class DateFieldUnparsableDate extends TestBase {
+
+    public class MyDateField extends DateField {
+        Date oldDate = null;
+
+        public MyDateField(String caption) {
+            super(caption);
+            addListener(new Property.ValueChangeListener() {
+                public void valueChange(
+                        com.vaadin.data.Property.ValueChangeEvent event) {
+                    oldDate = (Date) getValue();
+                }
+            });
+        }
+
+        @Override
+        protected Date handleUnparsableDateString(String dateString)
+                throws ConversionException {
+            return oldDate;
+        }
+    }
+
+    public class MyDateField2 extends DateField {
+        public MyDateField2(String caption) {
+            super(caption);
+        }
+
+        @Override
+        protected Date handleUnparsableDateString(String dateString)
+                throws ConversionException {
+            return null;
+        }
+    }
+
+    public class MyDateField3 extends DateField {
+        public MyDateField3(String caption) {
+            super(caption);
+        }
+
+        @Override
+        protected Date handleUnparsableDateString(String dateString)
+                throws ConversionException {
+            throw new ConversionException("You should not enter invalid dates!");
+        }
+    }
+
+    public class MyDateField4 extends DateField {
+        public MyDateField4(String caption) {
+            super(caption);
+        }
+
+        @Override
+        protected Date handleUnparsableDateString(String dateString)
+                throws ConversionException {
+            if (dateString != null && dateString.equals("today")) {
+                return new Date();
+            }
+            throw new ConversionException("You should not enter invalid dates!");
+        }
+    }
+
+    @Override
+    protected void setup() {
+        MyDateField df = new MyDateField(
+                "Returns the old value for invalid dates");
+        df.setImmediate(true);
+        addComponent(df);
+
+        MyDateField2 df2 = new MyDateField2("Returns empty for invalid dates");
+        df2.setImmediate(true);
+        addComponent(df2);
+
+        MyDateField3 df3 = new MyDateField3(
+                "Throws an exception for invalid dates");
+        df3.setImmediate(true);
+        addComponent(df3);
+
+        MyDateField4 df4 = new MyDateField4("Can convert 'today'");
+        df4.setImmediate(true);
+        addComponent(df4);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "DateFields in various configurations (according to caption). All handle unparsable dates differently";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4236;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DefaultHandleUnparsableDateField.java b/tests/testbench/com/vaadin/tests/components/datefield/DefaultHandleUnparsableDateField.java
new file mode 100644
index 0000000000..bcdc8260b0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DefaultHandleUnparsableDateField.java
@@ -0,0 +1,43 @@
+package com.vaadin.tests.components.datefield;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.validator.NullValidator;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.DateField;
+
+@SuppressWarnings("serial")
+public class DefaultHandleUnparsableDateField extends TestBase {
+
+    @Override
+    protected void setup() {
+        final DateField date = new DateField("Default DateField");
+        date.setImmediate(true);
+        addComponent(date);
+        date.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                if (date.isValid()) {
+                    getMainWindow().showNotification(date.toString());
+                }
+
+            }
+        });
+
+        final DateField validated = new DateField("Validated Default DateField");
+        validated.setImmediate(true);
+        validated.addValidator(new NullValidator("Validator: Date is NULL",
+                false));
+        addComponent(validated);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "By default the DateField should handle an unparsable date field without throwing an exception";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4311;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DisabledDateFieldWidth b/tests/testbench/com/vaadin/tests/components/datefield/DisabledDateFieldWidth
new file mode 100644
index 0000000000..48b11e1f7c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DisabledDateFieldWidth
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>DisabledDateFieldWidth</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">DisabledDateFieldWidth</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.DisabledDateFieldWidth</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDisabledDateFieldWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldDisabledDateFieldWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DisabledDateFieldWidth.java b/tests/testbench/com/vaadin/tests/components/datefield/DisabledDateFieldWidth.java
new file mode 100644
index 0000000000..33156b9a75
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DisabledDateFieldWidth.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.components.datefield;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.GridLayout;
+
+public class DisabledDateFieldWidth extends TestBase {
+    @Override
+    public void setup() {
+
+        final DateField dateField1 = new DateField("DateField");
+        dateField1.setResolution(DateField.RESOLUTION_YEAR);
+        dateField1.setEnabled(false);
+
+        Button button = new Button("Repaint datefield",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        dateField1.requestRepaint();
+                    }
+                });
+
+        GridLayout gl = new GridLayout(3, 1);
+        gl.addComponent(dateField1);
+        gl.addComponent(button);
+
+        addComponent(gl);
+    }
+
+    @Override
+    protected String getDescription() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/InlineDateFieldResolutionMsec.html b/tests/testbench/com/vaadin/tests/components/datefield/InlineDateFieldResolutionMsec.html
new file mode 100644
index 0000000000..58809a1836
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/InlineDateFieldResolutionMsec.html
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.InlineDateFieldTest?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
+	<td>29,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>51,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>71,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>65,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
+	<td>31,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>33,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>79,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item6</td>
+	<td>29,2</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>December 2010</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[1]/domChild[0]/domChild[0]/domChild[1]/domChild[3]/domChild[1]/domChild[0]</td>
+	<td>v-datefield-calendarpanel-day-selected</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>12</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>00</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[4]</td>
+	<td>00</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[6]</td>
+	<td>000</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[8]</td>
+	<td>PM</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
+	<td>39,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>37,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>41,4</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[8]</td>
+	<td>label=AM</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. ValueChangeEvent, new value: Dec 12, 2010 00:00:00.000</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
+	<td>31,19</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>55,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>57,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+	<td>49,8</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>January 2000</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[1]/domChild[0]/domChild[0]/domChild[1]/domChild[2]/domChild[1]/domChild[0]</td>
+	<td>v-datefield-calendarpanel-day-selected</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>03</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>04</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[4]</td>
+	<td>05</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[6]</td>
+	<td>006</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[8]</td>
+	<td>AM</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[6]</td>
+	<td>label=002</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>6. ValueChangeEvent, new value: Jan 2, 2000 03:04:05.002</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[6]</td>
+	<td>002</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/InlineDateFieldTest.java b/tests/testbench/com/vaadin/tests/components/datefield/InlineDateFieldTest.java
new file mode 100644
index 0000000000..c2384584e2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/InlineDateFieldTest.java
@@ -0,0 +1,12 @@
+package com.vaadin.tests.components.datefield;
+
+import com.vaadin.ui.InlineDateField;
+
+public class InlineDateFieldTest extends DateFieldTest<InlineDateField> {
+
+    @Override
+    protected Class<InlineDateField> getTestClass() {
+        return InlineDateField.class;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/InlineDateFieldValueChange.html b/tests/testbench/com/vaadin/tests/components/datefield/InlineDateFieldValueChange.html
new file mode 100644
index 0000000000..9e6b9ae75e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/InlineDateFieldValueChange.html
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">InlineDateFieldValueChange</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.InlineDateFieldTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--Day resolution-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
+	<td>8,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>30,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>72,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>23,12</td>
+</tr>
+<!--value=2010-12-12 12:00:00-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
+	<td>42,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>46,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>58,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>96,13</td>
+</tr>
+<!--Value change listener-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
+	<td>29,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>43,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>68,2</td>
+</tr>
+<!--Start actual test-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#day14</td>
+	<td>15,11</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog_row_0</td>
+	<td>3. ValueChangeEvent, new value: Dec 14, 2010 12:00:00.000</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#day13</td>
+	<td>20,6</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog_row_0</td>
+	<td>4. ValueChangeEvent, new value: Dec 13, 2010 12:00:00.000</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>11,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#day14</td>
+	<td>18,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog_row_0</td>
+	<td>145,9</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog_row_0</td>
+	<td>5. ValueChangeEvent, new value: Dec 14, 2009 12:00:00.000</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[0]</td>
+	<td>11,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#day12</td>
+	<td>20,9</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog_row_0</td>
+	<td>6. ValueChangeEvent, new value: Jan 12, 2010 12:00:00.000</td>
+</tr>
+<!--Set value to null and ensure nothing is selected-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
+	<td>46,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>49,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>41,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>62,3</td>
+</tr>
+<!--Null should show the current year/month without anything selected but with current day highlighted-->
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>DATE(MMMM YYYY)</td>
+</tr>
+<!--Show value-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item1</td>
+	<td>27,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>65,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>37,10</td>
+</tr>
+<!--assert current year/month/day is selected-->
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog_row_0</td>
+	<td>9. InlineDateField value: null</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#dayDATE(D)</td>
+	<td>v-datefield-calendarpanel-day-today</td>
+</tr>
+<!--select 1st and assert that the value changes (today should still be the same)-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#day1</td>
+	<td>11,10</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#day1</td>
+	<td>v-datefield-calendarpanel-day-selected</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#dayDATE(D)</td>
+	<td>v-datefield-calendarpanel-day-today</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog_row_0</td>
+	<td>10. ValueChangeEvent, new value: DATE(MMM) 1, DATE(YYYY) *</td>
+</tr>
+<!--select 2nd and assert that the value changes (today should still be the same)-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#day2</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#dayDATE(D)</td>
+	<td>v-datefield-calendarpanel-day-today</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/VCalendarPanel[0]#day2</td>
+	<td>v-datefield-calendarpanel-day-selected</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_SLog_row_0</td>
+	<td>11. ValueChangeEvent, new value: DATE(MMM) 2, DATE(YYYY) *</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/InlineDateFields.java b/tests/testbench/com/vaadin/tests/components/datefield/InlineDateFields.java
new file mode 100644
index 0000000000..083e8f0190
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/InlineDateFields.java
@@ -0,0 +1,106 @@
+package com.vaadin.tests.components.datefield;
+
+import java.sql.Date;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
+
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.InlineDateField;
+
+@SuppressWarnings("serial")
+public class InlineDateFields extends ComponentTestCase<InlineDateField> {
+
+    private static final Locale[] LOCALES = new Locale[] { Locale.US,
+            Locale.TAIWAN, new Locale("fi", "FI") };
+
+    @Override
+    protected Class<InlineDateField> getTestClass() {
+        return InlineDateField.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+
+        Locale locale = LOCALES[0];
+
+        InlineDateField pd = createInlineDateField("Undefined width", "-1",
+                locale);
+        pd.setDebugId("Locale-" + locale.toString() + "-undefined-wide");
+        addTestComponent(pd);
+        pd = createInlineDateField("300px width", "300px", locale);
+        pd.setDebugId("Locale-" + locale.toString() + "-300px-wide");
+        addTestComponent(pd);
+        pd = createInlineDateField("Initially empty", "", locale);
+        pd.setValue(null);
+        pd.setDebugId("Locale-" + locale.toString() + "-initially-empty");
+        addTestComponent(pd);
+
+    }
+
+    private InlineDateField createInlineDateField(String caption, String width,
+            Locale locale) {
+        InlineDateField pd = new InlineDateField(caption + "("
+                + locale.toString() + ")");
+        pd.setWidth(width);
+        pd.setValue(new Date(12312312313L));
+        pd.setLocale(locale);
+        pd.setResolution(DateField.RESOLUTION_YEAR);
+
+        return pd;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A generic test for InlineDateFields in different configurations";
+    }
+
+    @Override
+    protected List<Component> createActions() {
+        List<Component> actions = super.createActions();
+        actions.add(createResolutionSelectAction());
+        actions.add(createLocaleSelectAction());
+        return actions;
+    }
+
+    private Component createResolutionSelectAction() {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("Year", DateField.RESOLUTION_YEAR);
+        options.put("Month", DateField.RESOLUTION_MONTH);
+        options.put("Day", DateField.RESOLUTION_DAY);
+        options.put("Hour", DateField.RESOLUTION_HOUR);
+        options.put("Min", DateField.RESOLUTION_MIN);
+        options.put("Sec", DateField.RESOLUTION_SEC);
+        options.put("Msec", DateField.RESOLUTION_MSEC);
+        return createSelectAction("Resolution", options, "Year",
+                new Command<InlineDateField, Integer>() {
+
+                    public void execute(InlineDateField c, Integer value,
+                            Object data) {
+                        c.setResolution(value);
+
+                    }
+                });
+    }
+
+    private Component createLocaleSelectAction() {
+        LinkedHashMap<String, Locale> options = new LinkedHashMap<String, Locale>();
+        for (Locale locale : LOCALES) {
+            options.put(locale.toString(), locale);
+        }
+        return createSelectAction("Locale", options, LOCALES[0].toString(),
+                new Command<InlineDateField, Locale>() {
+
+                    public void execute(InlineDateField c, Locale value,
+                            Object data) {
+                        c.setCaption(c.getCaption().replaceAll(
+                                c.getLocale().toString(), value.toString()));
+                        c.setLocale(value);
+
+                    }
+                });
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/LenientMode.java b/tests/testbench/com/vaadin/tests/components/datefield/LenientMode.java
new file mode 100644
index 0000000000..cbe9ac613f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/LenientMode.java
@@ -0,0 +1,81 @@
+package com.vaadin.tests.components.datefield;
+
+import java.util.Date;
+import java.util.Locale;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.DateField;
+
+public class LenientMode extends TestBase implements ValueChangeListener {
+
+    private static final long serialVersionUID = -9064553409580072387L;
+
+    @Override
+    protected String getDescription() {
+        return "In lenien mode DateField should accept date input from user like '32/12/09'. In normal mode, an exception should be thrown. ";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3175;
+    }
+
+    @Override
+    protected void setup() {
+
+        @SuppressWarnings("deprecation")
+        Date d = new Date(2009 - 1900, 12 - 1, 31, 23, 59, 59);
+
+        DateField df = new DateField("Lenient ");
+        df.setLocale(new Locale("fi"));
+        df.setResolution(DateField.RESOLUTION_DAY);
+        df.setLenient(true);
+        df.setImmediate(true);
+        df.setValue(d);
+
+        DateField df2 = new DateField("Normal ");
+        df2.setLocale(new Locale("fi"));
+        df2.setResolution(DateField.RESOLUTION_DAY);
+        // df2.setLenient(false);
+        df2.setValue(null);
+        df2.setImmediate(true);
+        df2.setValue(d);
+
+        addComponent(df);
+        addComponent(df2);
+
+        df.addListener(this);
+        df2.addListener(this);
+
+        df = new DateField("Lenient with time");
+        df.setLocale(new Locale("fi"));
+        df.setLenient(true);
+        df.setImmediate(true);
+        df.setValue(d);
+
+        df2 = new DateField("Normal with time");
+        df2.setLocale(new Locale("fi"));
+        // df2.setLenient(false);
+        df2.setValue(null);
+        df2.setImmediate(true);
+        df2.setValue(d);
+
+        addComponent(df);
+        addComponent(df2);
+
+        df.addListener(this);
+        df2.addListener(this);
+
+        addComponent(new Button("Visit server"));
+
+    }
+
+    public void valueChange(ValueChangeEvent event) {
+        getMainWindow().showNotification(
+                "New value" + event.getProperty().getValue());
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/LowResolution.java b/tests/testbench/com/vaadin/tests/components/datefield/LowResolution.java
new file mode 100644
index 0000000000..1c1994cbe5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/LowResolution.java
@@ -0,0 +1,78 @@
+package com.vaadin.tests.components.datefield;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.InlineDateField;
+import com.vaadin.ui.PopupDateField;
+
+@SuppressWarnings("serial")
+public class LowResolution extends TestBase {
+
+    @Override
+    protected void setup() {
+        final PopupDateField dateField = new PopupDateField();
+        dateField.setValue(new java.util.Date());
+        dateField.setResolution(PopupDateField.RESOLUTION_MONTH);
+        dateField.addListener(new PopupDateField.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                getMainWindow().showNotification(
+                        "Date now" + event.getProperty());
+            }
+        });
+        dateField.setImmediate(true);
+        getLayout().addComponent(dateField);
+
+        final PopupDateField dateField3 = new PopupDateField();
+        // dateField.setValue(new java.util.Date());
+        dateField3.setResolution(PopupDateField.RESOLUTION_YEAR);
+        dateField3.addListener(new PopupDateField.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                getMainWindow().showNotification(
+                        "Date now" + event.getProperty());
+            }
+        });
+        dateField3.setImmediate(true);
+        getLayout().addComponent(dateField3);
+
+        final InlineDateField dateField2 = new InlineDateField();
+        dateField2.setValue(new java.util.Date());
+        dateField2.setResolution(PopupDateField.RESOLUTION_MONTH);
+        dateField2.addListener(new PopupDateField.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                getMainWindow().showNotification(
+                        "Date now" + event.getProperty());
+            }
+        });
+        dateField2.setImmediate(true);
+        getLayout().addComponent(dateField2);
+
+        CheckBox immediate = new CheckBox(
+                "Immediate (use sync button to change fields) ");
+        immediate.setValue(true);
+        immediate.addListener(new CheckBox.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                boolean immediate = !dateField.isImmediate();
+                dateField.setImmediate(immediate);
+                dateField2.setImmediate(immediate);
+                dateField3.setImmediate(immediate);
+            }
+        });
+
+        getLayout().addComponent(immediate);
+        getLayout().addComponent(new Button("sync"));
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Date field should work and update its value to the server.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5567;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/NarrowPopupDateFieldInTable.html b/tests/testbench/com/vaadin/tests/components/datefield/NarrowPopupDateFieldInTable.html
new file mode 100644
index 0000000000..fe95c2476c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/NarrowPopupDateFieldInTable.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.NarrowPopupDateFieldInTable?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/NarrowPopupDateFieldInTable.java b/tests/testbench/com/vaadin/tests/components/datefield/NarrowPopupDateFieldInTable.java
new file mode 100644
index 0000000000..73ec3b659e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/NarrowPopupDateFieldInTable.java
@@ -0,0 +1,34 @@
+package com.vaadin.tests.components.datefield;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.PopupDateField;
+import com.vaadin.ui.Table;
+
+public class NarrowPopupDateFieldInTable extends TestBase {
+
+    private final Object DATE = "Date";
+
+    @Override
+    public void setup() {
+        PopupDateField df = new PopupDateField();
+        df.setWidth("100%");
+
+        Table t = new Table();
+        t.setWidth("100px");
+        t.addContainerProperty(DATE, Component.class, null);
+        t.addItem(new Object[] { df }, "1");
+        addComponent(t);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Simple test to ensure a narrow PopupDateField can be used in a Table.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6166;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/PopupDateFieldDisabledReadonly.html b/tests/testbench/com/vaadin/tests/components/datefield/PopupDateFieldDisabledReadonly.html
new file mode 100644
index 0000000000..fe7edad28c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/PopupDateFieldDisabledReadonly.html
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.PopupDateFields?restartApplication</td>
+	<td></td>
+</tr>
+<!--Ensure no popups appear when DateField is disabled-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Scheckboxaction-Enabled/domChild[0]</td>
+	<td>6,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide/domChild[1]</td>
+	<td>10,15</td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[4]</td>
+	<td>759,5</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
+	<td>label=Month</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide/domChild[1]</td>
+	<td>15,11</td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>566,9</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
+	<td>label=Day</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide/domChild[1]</td>
+	<td>3,10</td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/FlexTable[0]/domChild[1]/domChild[0]/domChild[3]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[4]</td>
+	<td>699,43</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
+	<td>label=Hour</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide/domChild[1]</td>
+	<td>15,17</td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/VCalendarPanel$VTime[0]/ListBox[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[3]</td>
+	<td>630,30</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
+	<td>label=Min</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide/domChild[1]</td>
+	<td>8,11</td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td></td>
+</tr>
+<!--Ensure no popups appear when DateField is enabled but readonly-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Scheckboxaction-Enabled/domChild[0]</td>
+	<td>3,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Scheckboxaction-Readonly/domChild[0]</td>
+	<td>5,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>readonly</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Scheckboxaction-Enabled/domChild[0]</td>
+	<td>3,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>readonly-disabled</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/PopupDateFieldMonth.html b/tests/testbench/com/vaadin/tests/components/datefield/PopupDateFieldMonth.html
new file mode 100644
index 0000000000..7e27d44dbb
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/PopupDateFieldMonth.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.CustomDateFormats?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=en_US</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[2]/VPopupCalendar[0]/domChild[1]</td>
+	<td>10,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::Root/VOverlay[0]/VCalendarPanel[0]/FlexTable[0]/VCalendarPanel$Day[1]</td>
+	<td>17,11</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[2]/VPopupCalendar[0]/domChild[0]</td>
+	<td>1 1 2010</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[2]/VPopupCalendar[0]/domChild[1]</td>
+	<td>14,13</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldCustomDateFormats::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>January 2010</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/PopupDateFieldResolutions.html b/tests/testbench/com/vaadin/tests/components/datefield/PopupDateFieldResolutions.html
new file mode 100644
index 0000000000..6600adafd2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/PopupDateFieldResolutions.html
@@ -0,0 +1,1093 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.PopupDateFields?restartApplication</td>
+	<td></td>
+</tr>
+<!--Resolution: year-->
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
+	<td>label=Year</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-year</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>9,15</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>1970</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>year-popup-us</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>9,15</td>
+</tr>
+<!--Resolution: month-->
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
+	<td>label=Month</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-month</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>10,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>May 1970</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>month-popup-us</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>10,12</td>
+</tr>
+<!--Resolution: day-->
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
+	<td>label=Day</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-day</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>10,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>May 1970</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day23</td>
+	<td>23</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>day-popup-us</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>10,12</td>
+</tr>
+<!--Resolution: hour-->
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
+	<td>label=Hour</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-hour</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>10,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>May 1970</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day23</td>
+	<td>23</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#h</td>
+	<td>02</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#ampm</td>
+	<td>PM</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[1]</td>
+	<td>exact::00</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>hour-popup-us</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>10,12</td>
+</tr>
+<!--Resolution: min-->
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
+	<td>label=Min</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-min</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>10,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>May 1970</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day23</td>
+	<td>23</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#h</td>
+	<td>02</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#m</td>
+	<td>05</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#ampm</td>
+	<td>PM</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>min-popup-us</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>10,12</td>
+</tr>
+<!--Resolution: sec-->
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
+	<td>label=Sec</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-sec</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>10,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>May 1970</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day23</td>
+	<td>23</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#h</td>
+	<td>02</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#m</td>
+	<td>05</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#s</td>
+	<td>12</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#ampm</td>
+	<td>PM</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>sec-popup-us</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>10,12</td>
+</tr>
+<!--Resolution: msec-->
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
+	<td>label=Msec</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-msec</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>10,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>May 1970</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day23</td>
+	<td>23</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#h</td>
+	<td>02</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#m</td>
+	<td>05</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#s</td>
+	<td>12</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#ms</td>
+	<td>313</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#ampm</td>
+	<td>PM</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>msec-popup-us</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>10,12</td>
+</tr>
+<!--Check resolution year functionality-->
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
+	<td>label=Year</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>11,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>1970</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
+	<td>37,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>1971</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
+	<td>37,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
+	<td>37,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
+	<td>37,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>1974</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>37,12</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>1974</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>38,8</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>2010</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
+	<td>202,40</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>16,11</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>2010</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#prevy</td>
+	<td>37,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>2009</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
+	<td>37,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>2010</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
+	<td>37,12</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>2011</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
+	<td>129,26</td>
+</tr>
+<!--Check resolution month functionality-->
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
+	<td>label=Month</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>5/11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>7,8</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>May 2011</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
+	<td>37,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>June 2011</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
+	<td>37,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>June 2012</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>37,15</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>6/12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>-54,8</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>1/09</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>8,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>January 2009</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
+	<td>37,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>February 2009</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]/domChild[0]</td>
+	<td>174,3</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>2/09</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
+	<td>129,26</td>
+</tr>
+<!--Check resolution day functionality-->
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
+	<td>label=Day</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>5/23/70</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
+	<td>478,1</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>5/23/70</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>11,16</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>May 1970</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day23</td>
+	<td>v-datefield-calendarpanel-day-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
+	<td>37,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>June 1970</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
+	<td>37,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>June 1971</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]/domChild[0]</td>
+	<td>193,12</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>5/23/70</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>12,9</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>May 1970</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
+	<td>37,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
+	<td>12,15</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day30</td>
+	<td>14,12</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>6/30/71</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>5,13</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>June 1971</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day30</td>
+	<td>v-datefield-calendarpanel-day-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#prevmon</td>
+	<td>15,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day31</td>
+	<td>18,8</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>5/31/71</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>11,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#prevmon</td>
+	<td>12,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day30</td>
+	<td>13,14</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>4/30/71</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>12,13</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>April 1971</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day30</td>
+	<td>v-datefield-calendarpanel-day-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
+	<td>8,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day1</td>
+	<td>17,9</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>4/1/72</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>11,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#prevmon</td>
+	<td>10,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day1</td>
+	<td>15,4</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>3/1/72</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>8,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#prevmon</td>
+	<td>10,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day29</td>
+	<td>17,9</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>2/29/72</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>-13,8</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>1/15/02</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>11,14</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>January 2002</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day15</td>
+	<td>v-datefield-calendarpanel-day-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
+	<td>11,8</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>February 2002</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
+	<td>10,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>February 2003</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]/domChild[0]</td>
+	<td>185,8</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#field</td>
+	<td>1/15/02</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-en_US-undefined-wide#popupButton</td>
+	<td>8,7</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>January 2002</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day15</td>
+	<td>v-datefield-calendarpanel-day-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
+	<td>364,32</td>
+</tr>
+<!--Also check finnish locale-->
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-fi_FI-undefined-wide#field</td>
+	<td>23.5.1970</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-fi_FI-undefined-wide#popupButton</td>
+	<td>14,11</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>toukokuu 1970</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day23</td>
+	<td>v-datefield-calendarpanel-day-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
+	<td>15,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[7]/domChild[0]</td>
+	<td>286,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-fi_FI-undefined-wide#field</td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-fi_FI-undefined-wide#popupButton</td>
+	<td>13,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
+	<td>11,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
+	<td>11,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day17</td>
+	<td>13,9</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-fi_FI-undefined-wide#field</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-zh_TW-undefined-wide#field</td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-zh_TW-undefined-wide#popupButton</td>
+	<td>9,14</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#header</td>
+	<td>五月 1970</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day23</td>
+	<td>v-datefield-calendarpanel-day-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
+	<td>8,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day2</td>
+	<td>16,9</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-zh_TW-undefined-wide#field</td>
+	<td></td>
+</tr>
+<!--Back to resolution: s-->
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_Sselectaction-Resolution/domChild[0]</td>
+	<td>label=Sec</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-fi_FI-undefined-wide#field</td>
+	<td>17.7.1970 14:05:12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-fi_FI-undefined-wide#popupButton</td>
+	<td>11,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>heinäkuu 1970</td>
+</tr>
+<tr>
+	<td>assertElementPresent</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#day17</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#h</td>
+	<td>14</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#m</td>
+	<td>05</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#s</td>
+	<td>12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
+	<td>8,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nextmon</td>
+	<td>8,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
+	<td>16,15</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#nexty</td>
+	<td>16,15</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#h</td>
+	<td>label=03</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#m</td>
+	<td>label=04</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::Root/VOverlay[0]/VCalendarPanel[0]#s</td>
+	<td>label=05</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[7]</td>
+	<td>291,3</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFields::PID_SLocale-fi_FI-undefined-wide#field</td>
+	<td>17.7.1970 03:04:05</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/PopupDateFieldTest.java b/tests/testbench/com/vaadin/tests/components/datefield/PopupDateFieldTest.java
new file mode 100644
index 0000000000..ae238b2a91
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/PopupDateFieldTest.java
@@ -0,0 +1,38 @@
+package com.vaadin.tests.components.datefield;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.ui.PopupDateField;
+
+public class PopupDateFieldTest extends DateFieldTest<PopupDateField> {
+
+    @Override
+    protected Class<PopupDateField> getTestClass() {
+        return PopupDateField.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+
+        createInputPromptSelectAction(CATEGORY_FEATURES);
+    }
+
+    private void createInputPromptSelectAction(String category) {
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+        options.put("<none>", null);
+        options.put("Please enter date", "Please enter date");
+        options.put("åäöÅÄÖ", "åäöÅÄÖ");
+
+        createSelectAction("Input prompt", category, options, "<none>",
+                new Command<PopupDateField, String>() {
+
+                    public void execute(PopupDateField c, String value,
+                            Object data) {
+                        c.setInputPrompt(value);
+
+                    }
+                });
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/PopupDateFields.java b/tests/testbench/com/vaadin/tests/components/datefield/PopupDateFields.java
new file mode 100644
index 0000000000..8b9cb68d7b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/PopupDateFields.java
@@ -0,0 +1,105 @@
+package com.vaadin.tests.components.datefield;
+
+import java.sql.Date;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
+
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.PopupDateField;
+
+@SuppressWarnings("serial")
+public class PopupDateFields extends ComponentTestCase<PopupDateField> {
+
+    private static final Locale[] LOCALES = new Locale[] { Locale.US,
+            Locale.TAIWAN, new Locale("fi", "FI") };
+
+    @Override
+    protected Class<PopupDateField> getTestClass() {
+        return PopupDateField.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+
+        for (Locale locale : LOCALES) {
+            PopupDateField pd = createPopupDateField("Undefined width", "-1",
+                    locale);
+            pd.setDebugId("Locale-" + locale.toString() + "-undefined-wide");
+            addTestComponent(pd);
+            pd = createPopupDateField("500px width", "500px", locale);
+            pd.setDebugId("Locale-" + locale.toString() + "-500px-wide");
+            addTestComponent(pd);
+            pd = createPopupDateField("Initially empty", "", locale);
+            pd.setValue(null);
+            pd.setDebugId("Locale-" + locale.toString() + "-initially-empty");
+            addTestComponent(pd);
+        }
+
+    }
+
+    private PopupDateField createPopupDateField(String caption, String width,
+            Locale locale) {
+        PopupDateField pd = new PopupDateField(caption + "("
+                + locale.toString() + ")");
+        pd.setWidth(width);
+        pd.setValue(new Date(12312312313L));
+        pd.setLocale(locale);
+        pd.setResolution(DateField.RESOLUTION_YEAR);
+
+        return pd;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A generic test for PopupDateFields in different configurations";
+    }
+
+    @Override
+    protected List<Component> createActions() {
+        List<Component> actions = super.createActions();
+        actions.add(createResolutionSelectAction());
+        actions.add(createInputPromptSelectAction());
+        return actions;
+    }
+
+    private Component createResolutionSelectAction() {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("Year", DateField.RESOLUTION_YEAR);
+        options.put("Month", DateField.RESOLUTION_MONTH);
+        options.put("Day", DateField.RESOLUTION_DAY);
+        options.put("Hour", DateField.RESOLUTION_HOUR);
+        options.put("Min", DateField.RESOLUTION_MIN);
+        options.put("Sec", DateField.RESOLUTION_SEC);
+        options.put("Msec", DateField.RESOLUTION_MSEC);
+        return createSelectAction("Resolution", options, "Year",
+                new Command<PopupDateField, Integer>() {
+
+                    public void execute(PopupDateField c, Integer value,
+                            Object data) {
+                        c.setResolution(value);
+
+                    }
+                });
+    }
+
+    private Component createInputPromptSelectAction() {
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+        options.put("<none>", null);
+        options.put("Please enter date", "Please enter date");
+        options.put("åäöÅÄÖ", "åäöÅÄÖ");
+
+        return createSelectAction("Input prompt", options, "<none>",
+                new Command<PopupDateField, String>() {
+
+                    public void execute(PopupDateField c, String value,
+                            Object data) {
+                        c.setInputPrompt(value);
+
+                    }
+                });
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/RequiredInvalidDateField.html b/tests/testbench/com/vaadin/tests/components/datefield/RequiredInvalidDateField.html
new file mode 100644
index 0000000000..6dc46e4eec
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/RequiredInvalidDateField.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>RequiredInvalidDateField</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">RequiredInvalidDateField</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.RequiredInvalidDateField?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>validatorFails</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldRequiredInvalidDateField::PID_S_DF1#field</td>
+	<td></td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldRequiredInvalidDateField::PID_S_DF2#field</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>empty</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldRequiredInvalidDateField::PID_S_DF1#field</td>
+	<td>abc</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldRequiredInvalidDateField::PID_S_DF2#field</td>
+	<td>abc</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>invalidDateString</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldRequiredInvalidDateField::PID_S_DF1#field</td>
+	<td>2.9.2011</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldRequiredInvalidDateField::PID_S_DF2#field</td>
+	<td>2.9.2011</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>validated</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/RequiredInvalidDateField.java b/tests/testbench/com/vaadin/tests/components/datefield/RequiredInvalidDateField.java
new file mode 100644
index 0000000000..7176dae48b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/RequiredInvalidDateField.java
@@ -0,0 +1,82 @@
+package com.vaadin.tests.components.datefield;
+
+import java.util.Date;
+import java.util.Locale;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Validator;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.data.validator.AbstractValidator;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.DateField;
+
+public class RequiredInvalidDateField extends TestBase {
+
+    @Override
+    protected void setup() {
+        // StringLengthValidator textValidator = new StringLengthValidator(
+        // "String length must be 2-4");
+        // textValidator.setMinLength(2);
+        // textValidator.setMaxLength(4);
+        //
+        // // not required
+        // TextField tf1 = new TextField();
+        // tf1.addValidator(textValidator);
+        // tf1.setImmediate(true);
+        // addComponent(tf1);
+        //
+        // // required
+        // TextField tf2 = new TextField();
+        // tf2.addValidator(textValidator);
+        // tf2.setRequired(true);
+        // tf2.setImmediate(true);
+        // addComponent(tf2);
+
+        Date date = new Date(2011 - 1900, 9 - 1, 1);
+
+        Validator dateValidator = new AbstractValidator(
+                "Day of month must be an even number") {
+
+            public boolean isValid(Object value) {
+                if (!(value instanceof Date)) {
+                    return false;
+                }
+                Date date = (Date) value;
+                return (date.getDate() % 2 == 0);
+            }
+        };
+
+        // not required
+        Property dateProperty1 = new ObjectProperty<Date>(date);
+        DateField dateField1 = new DateField("Not required", dateProperty1);
+        dateField1.setLocale(new Locale("fi", "FI"));
+        dateField1.setResolution(DateField.RESOLUTION_DAY);
+        dateField1.setDebugId("_DF1");
+        dateField1.setImmediate(true);
+        dateField1.addValidator(dateValidator);
+        addComponent(dateField1);
+
+        // required
+        Property dateProperty2 = new ObjectProperty<Date>(date);
+        DateField dateField2 = new DateField("Required", dateProperty2);
+        dateField2.setLocale(new Locale("fi", "FI"));
+        dateField2.setResolution(DateField.RESOLUTION_DAY);
+        dateField2.setDebugId("_DF2");
+        dateField2.setRequired(true);
+        dateField2.setImmediate(true);
+        dateField2.addValidator(dateValidator);
+        addComponent(dateField2);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Error indicator should be shown for a DateField with an "
+                + "invalid value, also when the field is required";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6770;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.html b/tests/testbench/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.html
new file mode 100644
index 0000000000..df6faa7228
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.html
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.ShowSelectedDateAfterInvalid?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VPopupCalendar[0]/domChild[0]</td>
+	<td>46,8</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VPopupCalendar[0]/domChild[0]</td>
+	<td>test</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VPopupCalendar[0]/domChild[1]</td>
+	<td>9,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::Root/VOverlay[0]/VCalendarPanel[0]#day7</td>
+	<td>19,5</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VPopupCalendar[0]/domChild[0]</td>
+	<td>07/DATE(MM)/DATE(YYYY)</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VLabel[0]</td>
+	<td>Valid!</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldShowSelectedDateAfterInvalid::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VPopupCalendar[0]/domChild[0]</td>
+	<td>07/DATE(MM)/DATE(YYYY)</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.java b/tests/testbench/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.java
new file mode 100644
index 0000000000..fde3d4e56b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.java
@@ -0,0 +1,57 @@
+package com.vaadin.tests.components.datefield;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.PopupDateField;
+
+/**
+ * First entering an invalid date, forcing a server roundtrip and then selecting
+ * a valid date from the popup in a non-immediate {@link PopupDateField} caused
+ * the invalid date string to continue to show.
+ */
+public class ShowSelectedDateAfterInvalid extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Label result = new Label();
+
+        final Form form = new Form();
+
+        PopupDateField datefield = new PopupDateField();
+        datefield.setResolution(PopupDateField.RESOLUTION_DAY);
+        datefield.setDateFormat("dd/MM/yyyy");
+
+        form.addField("datefield", datefield);
+
+        Button button = new Button("Validate");
+
+        button.addListener(new Button.ClickListener() {
+            public void buttonClick(Button.ClickEvent event) {
+                form.setValidationVisible(true);
+                if (form.isValid()) {
+                    result.setValue("Valid!");
+                } else {
+                    result.setValue("Invalid");
+                }
+            }
+
+        });
+
+        addComponent(form);
+        addComponent(button);
+        addComponent(result);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "DateField doesn't show selected value after invalid and then selecting a value";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5369;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/TestDatefieldYear.html b/tests/testbench/com/vaadin/tests/components/datefield/TestDatefieldYear.html
new file mode 100644
index 0000000000..71c246593a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/TestDatefieldYear.html
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TestDatefieldYear</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TestDatefieldYear</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.TestDatefieldYear?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldTestDatefieldYear::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupCalendar[0]/domChild[0]</td>
+	<td>4/09</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldTestDatefieldYear::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupCalendar[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[3]/span</td>
+	<td>April 2009</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[1]/button</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[2]/button</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[2]/button</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[2]/button</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[2]/button</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldTestDatefieldYear::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupCalendar[0]/domChild[0]</td>
+	<td>12/07</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[3]/span</td>
+	<td>December 2007</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[4]/button</td>
+	<td>16,7</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[4]/button</td>
+	<td>-287,-85</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[5]/button</td>
+	<td>10,9</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldTestDatefieldYear::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupCalendar[0]/domChild[0]</td>
+	<td>2/09</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//table[@id='PID_VAADIN_POPUPCAL']/tbody/tr/td[3]/span</td>
+	<td>February 2009</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/TestDatefieldYear.java b/tests/testbench/com/vaadin/tests/components/datefield/TestDatefieldYear.java
new file mode 100644
index 0000000000..4fa7a6811a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/TestDatefieldYear.java
@@ -0,0 +1,31 @@
+package com.vaadin.tests.components.datefield;
+
+import java.util.Date;
+import java.util.Locale;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.DateField;
+
+public class TestDatefieldYear extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "A popup with resolution year or month should update the textfield when browsing. The value displayed in the textfield should always be the same as the popup shows.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2813;
+    }
+
+    @Override
+    protected void setup() {
+        @SuppressWarnings("deprecation")
+        DateField df = new DateField("Year", new Date(2009 - 1900, 4 - 1, 1));
+        df.setLocale(new Locale("en", "US"));
+        df.setResolution(DateField.RESOLUTION_YEAR);
+        df.setResolution(DateField.RESOLUTION_MONTH);
+        addComponent(df);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/TestSettingTimeOnInitiallyNullInlineDateField.html b/tests/testbench/com/vaadin/tests/components/datefield/TestSettingTimeOnInitiallyNullInlineDateField.html
new file mode 100644
index 0000000000..40d50f0328
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/TestSettingTimeOnInitiallyNullInlineDateField.html
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TestSettingTimeOnInitiallyNullInlineDateField</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TestSettingTimeOnInitiallyNullInlineDateField</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.InlineDateFieldTest?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
+	<td>42,20</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
+	<td>42,20</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
+	<td>42,20</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>27,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item5</td>
+	<td>39,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>34,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
+	<td>14,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>33,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>27,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item6</td>
+	<td>27,5</td>
+</tr>
+<tr>
+	<td>scroll</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[6]</td>
+	<td>7539</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
+	<td>49,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>15,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>37,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>12,8</td>
+</tr>
+<tr>
+	<td>scroll</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[6]</td>
+	<td>3542</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_Smenu#item0</td>
+	<td>35,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>38,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>41,3</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>index=0</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>index=0</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[4]</td>
+	<td>index=0</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[6]</td>
+	<td>index=0</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldInlineDateFieldTest::PID_StestComponent/domChild[0]/domChild[1]/domChild[2]/domChild[0]/domChild[0]/domChild[8]</td>
+	<td>index=1</td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>12:00:00.000</td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/TestSettingTimeOnInitiallyNullPopupDateField.html b/tests/testbench/com/vaadin/tests/components/datefield/TestSettingTimeOnInitiallyNullPopupDateField.html
new file mode 100644
index 0000000000..b7f63591f9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/TestSettingTimeOnInitiallyNullPopupDateField.html
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TestSettingTimeOnInitiallyNullPopupDateField</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TestSettingTimeOnInitiallyNullPopupDateField</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.PopupDateFieldTest?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::PID_Smenu#item0</td>
+	<td>32,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::PID_Smenu#item0</td>
+	<td>32,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::PID_Smenu#item0</td>
+	<td>32,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>31,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item5</td>
+	<td>46,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>38,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::PID_Smenu#item0</td>
+	<td>43,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>27,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>11,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::PID_Smenu#item0</td>
+	<td>12,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>27,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>18,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[2]/VMenuBar[0]#item6</td>
+	<td>30,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::PID_StestComponent#popupButton</td>
+	<td>19,15</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[0]/VCalendarPanel[0]#m</td>
+	<td>index=0</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[0]/VCalendarPanel[0]#s</td>
+	<td>index=0</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[0]/VCalendarPanel[0]#ms</td>
+	<td>index=0</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[0]/VCalendarPanel[0]#h</td>
+	<td>index=0</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldPopupDateFieldTest::Root/VOverlay[0]/VCalendarPanel[0]#ampm</td>
+	<td>index=1</td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>12:00:00.000</td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/ValueThroughProperty.html b/tests/testbench/com/vaadin/tests/components/datefield/ValueThroughProperty.html
new file mode 100644
index 0000000000..ce74f8941e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/ValueThroughProperty.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.datefield.ValueThroughProperty?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldValueThroughProperty::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPopupCalendar[0]#field</td>
+	<td>30,7</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldValueThroughProperty::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPopupCalendar[0]#field</td>
+	<td>asdf</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldValueThroughProperty::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
+	<td>246,18</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldValueThroughProperty::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsdatefieldValueThroughProperty::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPopupCalendar[0]#field</td>
+	<td>12/14/10</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/ValueThroughProperty.java b/tests/testbench/com/vaadin/tests/components/datefield/ValueThroughProperty.java
new file mode 100644
index 0000000000..1f9735b543
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/datefield/ValueThroughProperty.java
@@ -0,0 +1,74 @@
+package com.vaadin.tests.components.datefield;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.PopupDateField;
+
+public class ValueThroughProperty extends TestBase {
+    private final Property dateProperty = new ObjectProperty<Date>(null,
+            Date.class);
+
+    @Override
+    protected void setup() {
+        addComponent(new Label(
+                "Try to input an invalid value to the DateField, for example \"asdf\".<br />"
+                        + "Then try to set DateField's value using the first button. It sets the value "
+                        + "correctly (as we can see from the Label) but the client-side is not updated.<br/>"
+                        + "Using second button updates value correctly on the client-side too.",
+                Label.CONTENT_XML));
+
+        final PopupDateField df = new PopupDateField(dateProperty);
+        df.setLocale(new Locale("en", "US"));
+        df.setImmediate(true);
+        df.setResolution(DateField.RESOLUTION_DAY);
+        addComponent(df);
+
+        Label valueLabel = new Label(df.getPropertyDataSource());
+        valueLabel.setCaption("DateField's value");
+        addComponent(valueLabel);
+
+        final Calendar cal = Calendar.getInstance();
+        cal.set(Calendar.YEAR, 2010);
+        cal.set(Calendar.MONTH, 11);
+        cal.set(Calendar.DAY_OF_MONTH, 14);
+        Button setDateButton1 = new Button(
+                "Set value to 12/14/10 using property", new ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        dateProperty.setValue(cal.getTime());
+                    }
+
+                });
+        addComponent(setDateButton1);
+
+        Button setDateButton2 = new Button(
+                "Set value to 12/14/10 using setValue", new ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        df.setValue(cal.getTime());
+                    }
+
+                });
+        addComponent(setDateButton2);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Setting a value through a property should update the"
+                + " client-side even if it contains an invalid value.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5810;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedClickListenerRelativeCoordinates.html b/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedClickListenerRelativeCoordinates.html
new file mode 100644
index 0000000000..3afb322a22
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedClickListenerRelativeCoordinates.html
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>EmbeddedClickListenerRelativeCoordinates</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">EmbeddedClickListenerRelativeCoordinates</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.embedded.EmbeddedClickListenerRelativeCoordinates?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsembeddedEmbeddedClickListenerRelativeCoordinates::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VEmbedded[0]/domChild[0]</td>
+	<td>41,22</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>click-41-22</td>
+</tr>
+<!-- Should really be 41,22 but due to v-view border-top it is not always... <tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsembeddedEmbeddedClickListenerRelativeCoordinates::Root/VNotification[0]/HTML[0]/domChild[0]</td>
+	<td>41, 22</td>
+</tr>-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsembeddedEmbeddedClickListenerRelativeCoordinates::Root/VNotification[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsembeddedEmbeddedClickListenerRelativeCoordinates::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VEmbedded[0]/domChild[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<!-- Should really be 0,0 but due to v-view border-top it is not always... <tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsembeddedEmbeddedClickListenerRelativeCoordinates::Root/VNotification[0]/HTML[0]/domChild[0]</td>
+	<td>0, 0</td>
+</tr>-->
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>click-0-0</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedClickListenerRelativeCoordinates.java b/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedClickListenerRelativeCoordinates.java
new file mode 100644
index 0000000000..96b1d36901
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedClickListenerRelativeCoordinates.java
@@ -0,0 +1,37 @@
+package com.vaadin.tests.components.embedded;
+
+import com.vaadin.event.MouseEvents.ClickEvent;
+import com.vaadin.event.MouseEvents.ClickListener;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Embedded;
+
+public class EmbeddedClickListenerRelativeCoordinates extends TestBase {
+
+    @Override
+    protected void setup() {
+        Embedded e = new Embedded("Embedded caption", new ThemeResource(
+                "../runo/icons/64/ok.png"));
+        e.addListener(new ClickListener() {
+
+            public void click(ClickEvent event) {
+                getMainWindow()
+                        .showNotification(
+                                "" + event.getRelativeX() + ", "
+                                        + event.getRelativeY());
+            }
+        });
+        addComponent(e);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Click the image to get coordinates relative to the top-left corder of the embedded image.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedFlash.java b/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedFlash.java
new file mode 100644
index 0000000000..87e0714545
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedFlash.java
@@ -0,0 +1,34 @@
+package com.vaadin.tests.components.embedded;
+
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Embedded;
+
+public class EmbeddedFlash extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The embedded flash should have the movie parameter set to \"someRandomValue\" and an allowFullScreen parameter set to \"true\".";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3367;
+    }
+
+    @Override
+    public void setup() {
+        Embedded player = new Embedded();
+        player.setType(Embedded.TYPE_OBJECT);
+        player.setWidth("400px");
+        player.setHeight("300px");
+        player.setMimeType("application/x-shockwave-flash");
+        String url = "http://www.youtube.com/v/qQ9N742QB4g&autoplay=1";
+        player.setSource(new ExternalResource(url));
+        player.setParameter("movie", "someRandomValue");
+        player.setParameter("allowFullScreen", "true");
+
+        addComponent(player);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedImageRefresh.java b/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedImageRefresh.java
new file mode 100644
index 0000000000..1a5327c8b9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedImageRefresh.java
@@ -0,0 +1,148 @@
+package com.vaadin.tests.components.embedded;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Date;
+
+import javax.imageio.ImageIO;
+
+import com.vaadin.terminal.StreamResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Embedded;
+
+public class EmbeddedImageRefresh extends TestBase {
+    @Override
+    protected String getDescription() {
+        return "Tests if requestRepaint() makes the browser reload a dynamic resource.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2470;
+    }
+
+    @Override
+    protected void setup() {
+        // Create the embedded.
+        final Embedded embedded = new Embedded();
+        embedded.setDescription("Click on the grid cells to switch them.");
+        addComponent(embedded);
+
+        // Attach it to a resource.
+        final MyImageSource imageSource = new MyImageSource();
+        final StreamResource imageResource = new StreamResource(imageSource,
+                "testimage.png", this);
+        imageResource.setCacheTime(0);
+        embedded.setSource(imageResource);
+
+        // The button requests repainting the embedded.
+        Button button = new Button("refr");
+        button.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                embedded.requestRepaint();
+            }
+        });
+        addComponent(button);
+        button = new Button("refr name");
+        button.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                ((StreamResource) embedded.getSource()).setFilename(new Date()
+                        .getTime() + ".png");
+                embedded.requestRepaint();
+            }
+        });
+        addComponent(button);
+        button = new Button("200x200");
+        button.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                embedded.setWidth("200px");
+                embedded.setHeight("200px");
+            }
+        });
+        addComponent(button);
+        button = new Button("undef");
+        button.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                embedded.setSizeUndefined();
+            }
+        });
+        addComponent(button);
+
+    }
+
+    public class MyImageSource implements StreamResource.StreamSource {
+        public MyImageSource() {
+        }
+
+        int intervalPos(int pos, int resolution, int cells) {
+            return (int) Math.round(pos * resolution / (cells * 1.0));
+        }
+
+        public InputStream getStream() {
+            // Create an image and draw some background on it.
+            BufferedImage image = new BufferedImage(640, 480,
+                    BufferedImage.TYPE_INT_RGB);
+            Graphics drawable = image.getGraphics();
+
+            // Background
+            drawable.setColor(Color.white);
+            drawable.fillRect(0, 0, 640, 480);
+
+            final int rows = 10;
+            final int cols = 10;
+
+            // Grid
+            for (int row = 0; row < rows; row++) {
+                int gridy = intervalPos(row, 480, rows);
+                int gridynext = intervalPos(row + 1, 480, rows);
+
+                // Horizontal grid line
+                if (row > 0) {
+                    drawable.setColor(Color.lightGray);
+                    drawable.drawLine(0, gridy, 640 - 1, gridy);
+                }
+
+                for (int col = 0; col < cols; col++) {
+                    int gridx = intervalPos(col, 640, cols);
+                    int gridxnext = intervalPos(col + 1, 640, cols);
+
+                    // Vertical grid line
+                    if (row == 0 && col > 0) {
+                        drawable.setColor(Color.lightGray);
+                        drawable.drawLine(gridx, 0, gridx, 480 - 1);
+                    }
+
+                    // Cell
+                    if (Math.random() < 0.5f) {
+                        drawable.setColor(Color.white);
+                    } else {
+                        drawable.setColor(Color.black);
+                    }
+                    drawable.fillRect(gridx + 1, gridy + 1, gridxnext - gridx
+                            - 1, gridynext - gridy - 1);
+                }
+            }
+
+            try {
+                // Write the image to a buffer.
+                ByteArrayOutputStream imagebuffer = new ByteArrayOutputStream();
+                ImageIO.write(image, "png", imagebuffer);
+
+                // Return a stream from the buffer.
+                ByteArrayInputStream istream = new ByteArrayInputStream(
+                        imagebuffer.toByteArray());
+                return istream; // new DownloadStream (istream,null,null);
+            } catch (IOException e) {
+                return null;
+            }
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedPdf.java b/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedPdf.java
new file mode 100644
index 0000000000..bea25a2122
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedPdf.java
@@ -0,0 +1,32 @@
+package com.vaadin.tests.components.embedded;
+
+import com.vaadin.terminal.ClassResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.Window;
+
+public class EmbeddedPdf extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The embedded flash should have the movie parameter set to \"someRandomValue\" and an allowFullScreen parameter set to \"true\".";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3367;
+    }
+
+    @Override
+    public void setup() {
+        Embedded player = new Embedded();
+        player.setType(Embedded.TYPE_BROWSER);
+        player.setWidth("400px");
+        player.setHeight("300px");
+        player.setSource(new ClassResource(getClass(), "test.pdf", this));
+        addComponent(player);
+
+        player.getWindow().addWindow(new Window("Testwindow"));
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedTooltip.java b/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedTooltip.java
new file mode 100644
index 0000000000..2ac39c05a0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedTooltip.java
@@ -0,0 +1,27 @@
+package com.vaadin.tests.components.embedded;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Embedded;
+
+public class EmbeddedTooltip extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The tooltip for an Embedded image should be visible also when hovering the image";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2853;
+    }
+
+    @Override
+    protected void setup() {
+        Embedded e = new Embedded("Embedded caption", new ThemeResource(
+                "../runo/icons/64/ok.png"));
+        e.setDescription("Embedded tooltip, only shown on caption, not on the image");
+        addComponent(e);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/embedded/FlashIsVisible.html b/tests/testbench/com/vaadin/tests/components/embedded/FlashIsVisible.html
new file mode 100644
index 0000000000..d3debf3417
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/embedded/FlashIsVisible.html
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.embedded.FlashIsVisible</td>
+	<td></td>
+</tr>
+<!--Allow the flash plugin to load before taking the screenshot-->
+<tr>
+	<td>pause</td>
+	<td>5000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/embedded/FlashIsVisible.java b/tests/testbench/com/vaadin/tests/components/embedded/FlashIsVisible.java
new file mode 100644
index 0000000000..5d626cfc0b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/embedded/FlashIsVisible.java
@@ -0,0 +1,31 @@
+package com.vaadin.tests.components.embedded;
+
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Embedded;
+
+public class FlashIsVisible extends TestBase {
+
+    @Override
+    protected void setup() {
+        Embedded player = new Embedded();
+        player.setType(Embedded.TYPE_OBJECT);
+        player.setMimeType("application/x-shockwave-flash");
+        player.setWidth("400px");
+        player.setHeight("300px");
+        String url = "http://www.youtube.com/v/qQ9N742QB4g&autoplay=0";
+        player.setSource(new ExternalResource(url));
+        addComponent(player);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Flash plugin should load and be visible on all browsers";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6501;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/embedded/test.pdf b/tests/testbench/com/vaadin/tests/components/embedded/test.pdf
new file mode 100644
index 0000000000..e44a87e9ad
Binary files /dev/null and b/tests/testbench/com/vaadin/tests/components/embedded/test.pdf differ
diff --git a/tests/testbench/com/vaadin/tests/components/form/FormCaptionClickFocusing.html b/tests/testbench/com/vaadin/tests/components/form/FormCaptionClickFocusing.html
new file mode 100644
index 0000000000..ab0aa25c44
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/FormCaptionClickFocusing.html
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://192.168.2.78:8080/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.form.FormCaptionClickFocusing</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormCaptionClickFocusing::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFormLayout[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>15,7</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormCaptionClickFocusing::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
+	<td>some text</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormCaptionClickFocusing::/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
+	<td>161,159</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>TextAddedByClickingCaption</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/form/FormCaptionClickFocusing.java b/tests/testbench/com/vaadin/tests/components/form/FormCaptionClickFocusing.java
new file mode 100644
index 0000000000..4afe289825
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/FormCaptionClickFocusing.java
@@ -0,0 +1,29 @@
+package com.vaadin.tests.components.form;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.TextField;
+
+public class FormCaptionClickFocusing extends TestBase {
+
+    @Override
+    protected void setup() {
+        FormLayout layout = new FormLayout();
+
+        TextField field = new TextField("Field 1");
+        layout.addComponent(field);
+
+        addComponent(layout);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Formlayout should focus the field if the layout is clicked and the field is focusable.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4567;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/form/FormClearDatasourceRepaint.html b/tests/testbench/com/vaadin/tests/components/form/FormClearDatasourceRepaint.html
new file mode 100644
index 0000000000..200ddb547d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/FormClearDatasourceRepaint.html
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.form.FormClearDatasourceRepaint?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormClearDatasourceRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>Form0height</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormClearDatasourceRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>FormAutoHeight</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormClearDatasourceRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>Form0height</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormClearDatasourceRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>FormAutoHeight</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/form/FormClearDatasourceRepaint.java b/tests/testbench/com/vaadin/tests/components/form/FormClearDatasourceRepaint.java
new file mode 100644
index 0000000000..39305d5638
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/FormClearDatasourceRepaint.java
@@ -0,0 +1,71 @@
+package com.vaadin.tests.components.form;
+
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Form;
+
+public class FormClearDatasourceRepaint extends TestBase {
+
+    public static class MyBean {
+
+        private String value;
+
+        public String getValue() {
+            return value;
+        }
+
+        public void setValue(String value) {
+            this.value = value;
+        }
+    }
+
+    public static class MySecondBean extends MyBean {
+
+        private String value2;
+
+        public String getValue2() {
+            return value2;
+        }
+
+        public void setValue2(String value) {
+            this.value2 = value;
+        }
+    }
+
+    @Override
+    protected void setup() {
+
+
+        final Form form = new Form();
+        form.setItemDataSource(new BeanItem<MySecondBean>(new MySecondBean()));
+        addComponent(form);
+
+        addComponent(new Button("Clear datasource", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                form.setItemDataSource(null);
+            }
+        }));
+
+        addComponent(new Button("Change data source",
+                new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                        form.setItemDataSource(new BeanItem<MyBean>(
+                                new MyBean()));
+            }
+                }));
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The form should adjust its size when clearing and setting data sources";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 7626;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/form/FormCommitWithInvalidValues.html b/tests/testbench/com/vaadin/tests/components/form/FormCommitWithInvalidValues.html
new file mode 100644
index 0000000000..0d5b435609
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/FormCommitWithInvalidValues.html
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>FormCommitWithInvalidValues</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">FormCommitWithInvalidValues</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.form.FormCommitWithInvalidValues</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>focus</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
+	<td>1</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
+	<td>123</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormCommitWithInvalidValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/form/FormCommitWithInvalidValues.java b/tests/testbench/com/vaadin/tests/components/form/FormCommitWithInvalidValues.java
new file mode 100644
index 0000000000..0a3054b0e4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/FormCommitWithInvalidValues.java
@@ -0,0 +1,69 @@
+package com.vaadin.tests.components.form;
+
+import com.vaadin.data.validator.StringLengthValidator;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window.Notification;
+
+public class FormCommitWithInvalidValues extends TestBase {
+
+    private Form form;
+
+    @Override
+    protected String getDescription() {
+        return "Commiting a form with invalid values should throw an exception";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2466;
+    }
+
+    @Override
+    protected void setup() {
+        form = new Form();
+        TextField tf = new TextField("A field, must contain 1-2 chars");
+        tf.addValidator(new StringLengthValidator("Invalid length", 1, 2, false));
+        tf.setRequired(true);
+
+        form.addField("a", tf);
+
+        Button b = new Button("Commit", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                try {
+                    form.commit();
+                    if (form.isValid()) {
+                        getMainWindow().showNotification(
+                                "OK! Form validated and no error was thrown",
+                                Notification.TYPE_HUMANIZED_MESSAGE);
+                    } else {
+                        getMainWindow().showNotification(
+                                "Form is invalid but no exception was thrown",
+                                Notification.TYPE_ERROR_MESSAGE);
+                    }
+                } catch (Exception e) {
+                    if (form.isValid()) {
+                        getMainWindow().showNotification(
+                                "Form is valid but an exception was thrown",
+                                Notification.TYPE_ERROR_MESSAGE);
+                    } else {
+                        getMainWindow().showNotification(
+                                "OK! Error was thrown for an invalid input",
+                                Notification.TYPE_HUMANIZED_MESSAGE);
+
+                    }
+                }
+            }
+
+        });
+
+        addComponent(form);
+        addComponent(b);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/form/FormDescription.html b/tests/testbench/com/vaadin/tests/components/form/FormDescription.html
new file mode 100644
index 0000000000..a8de9b3ad2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/FormDescription.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8080/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.form.FormDescription?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormDescription::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/domChild[0]/domChild[0]</td>
+	<td>v-form-description</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormDescription::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertNotCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormDescription::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/domChild[0]/domChild[0]</td>
+	<td>v-form-description</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormDescription::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormDescription::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/domChild[0]/domChild[0]</td>
+	<td>v-form-description</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/form/FormDescription.java b/tests/testbench/com/vaadin/tests/components/form/FormDescription.java
new file mode 100644
index 0000000000..d05d179ac8
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/FormDescription.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.components.form;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.TextField;
+
+public class FormDescription extends TestBase {
+
+    @Override
+    protected void setup() {
+       final Form form = new Form();
+       form.setDescription("Some description");
+        form.addField("AAAA", new TextField());
+       addComponent(form);
+       
+        addComponent(new Button("Toggle description",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        if (form.getDescription() == null) {
+                            form.setDescription("Form description");
+                        } else {
+                            form.setDescription(null);
+                        }
+                    }
+                }));
+       
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Description element should be removed from DOM when not used";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3725;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/form/FormFieldCaptions.java b/tests/testbench/com/vaadin/tests/components/form/FormFieldCaptions.java
new file mode 100644
index 0000000000..b4dee985f4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/FormFieldCaptions.java
@@ -0,0 +1,86 @@
+package com.vaadin.tests.components.form;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.HorizontalLayout;
+
+public class FormFieldCaptions extends TestBase {
+
+    @Override
+    protected void setup() {
+        // Method 1
+        Form form1 = new Form();
+        Item item1 = createItem();
+        for (Object propertyId : item1.getItemPropertyIds()) {
+            form1.addItemProperty(propertyId, item1.getItemProperty(propertyId));
+        }
+
+        // Method 2
+
+        Form form2 = new Form();
+        Item item2 = createItem();
+        form2.setItemDataSource(item2);
+
+        // Layout
+        HorizontalLayout hl = new HorizontalLayout();
+        hl.addComponent(form1);
+        hl.addComponent(form2);
+
+        addComponent(hl);
+    }
+
+    private Item createItem() {
+        return new BeanItem<Person>(new Person("John", "Doe", 38));
+    }
+
+    public class Person {
+        private String firstName;
+        private String lastName;
+
+        public Person(String firstName, String lastName, int age) {
+            super();
+            this.firstName = firstName;
+            this.lastName = lastName;
+            this.age = age;
+        }
+
+        public String getFirstName() {
+            return firstName;
+        }
+
+        public void setFirstName(String firstName) {
+            this.firstName = firstName;
+        }
+
+        public String getLastName() {
+            return lastName;
+        }
+
+        public void setLastName(String lastName) {
+            this.lastName = lastName;
+        }
+
+        public int getAge() {
+            return age;
+        }
+
+        public void setAge(int age) {
+            this.age = age;
+        }
+
+        private int age;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The two forms generated using different methods should have the same captions for all fields";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3554;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/form/FormFieldCaptionsStyles.html b/tests/testbench/com/vaadin/tests/components/form/FormFieldCaptionsStyles.html
new file mode 100644
index 0000000000..10ebb37529
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/FormFieldCaptionsStyles.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.form.FormFieldCaptionsStyles</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>FirstFieldRedRestBlue</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/form/FormFieldCaptionsStyles.java b/tests/testbench/com/vaadin/tests/components/form/FormFieldCaptionsStyles.java
new file mode 100644
index 0000000000..863d4b5b80
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/FormFieldCaptionsStyles.java
@@ -0,0 +1,48 @@
+package com.vaadin.tests.components.form;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.TextField;
+
+public class FormFieldCaptionsStyles extends TestBase {
+
+    @Override
+    protected void setup() {
+
+        setTheme("tests-tickets");
+
+        FormLayout layout = new FormLayout();
+
+        TextField field1 = new TextField("Red style");
+        field1.setStyleName("ticket4997-red");
+        layout.addComponent(field1);
+
+        TextField field2 = new TextField("Blue style");
+        field2.setStyleName("ticket4997-blue");
+        layout.addComponent(field2);
+
+        TextField field3 = new TextField("Red-Blue style");
+        field3.addStyleName("ticket4997-red");
+        field3.addStyleName("ticket4997-blue");
+        layout.addComponent(field3);
+
+        TextField field4 = new TextField("Disabled");
+        field4.setEnabled(false);
+        field4.addStyleName("foobar"); // no visible change, but points out
+        // a regression #5377
+        layout.addComponent(field4);
+
+        addComponent(layout);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The field captions should have the same style names as the field";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4997;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/form/FormNotGettingSmaller.java b/tests/testbench/com/vaadin/tests/components/form/FormNotGettingSmaller.java
new file mode 100644
index 0000000000..a47ab944a2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/FormNotGettingSmaller.java
@@ -0,0 +1,52 @@
+package com.vaadin.tests.components.form;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.data.util.PropertysetItem;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+
+public class FormNotGettingSmaller extends TestBase {
+
+    @Override
+    protected void setup() {
+        Item item = new PropertysetItem();
+        item.addItemProperty("name", new ObjectProperty<String>(
+                "Charles Anthony"));
+        item.addItemProperty("city", new ObjectProperty<String>("London"));
+        item.addItemProperty("isTallPerson", new ObjectProperty<Boolean>(
+                Boolean.FALSE));
+
+        Label spacer = new Label();
+        HorizontalLayout buttons = new HorizontalLayout();
+        buttons.setSpacing(true);
+        buttons.setWidth("100%");
+        buttons.addComponent(spacer);
+        buttons.addComponent(new Button("OK"));
+        buttons.addComponent(new Button("Cancel"));
+        buttons.setExpandRatio(spacer, 1f);
+
+        Form form = new Form();
+        form.setDescription("Ooh. Just a demonstration of things, really. Some long lorem ipsum dolor sit amet.Some very long lorem ipsum dolor sit amet.Some very long lorem ipsum dolor sit amet.Some very long lorem ipsum dolor sit amet.");
+
+        form.setItemDataSource(item);
+        form.setFooter(buttons);
+
+        getLayout().addComponent(form);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "When resizing window buttons should stay on "
+                + "right edge of the screent. Form should also get narrower.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3365;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/form/FormRenderingFlicker.java b/tests/testbench/com/vaadin/tests/components/form/FormRenderingFlicker.java
new file mode 100644
index 0000000000..5858366a63
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/FormRenderingFlicker.java
@@ -0,0 +1,65 @@
+package com.vaadin.tests.components.form;
+
+import com.vaadin.data.Item;
+import com.vaadin.event.ItemClickEvent;
+import com.vaadin.event.ItemClickEvent.ItemClickListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+
+public class FormRenderingFlicker extends TestBase {
+
+    private VerticalLayout tableLayout;
+    private Table table;
+    private Panel tablePanel;
+    private Form form;
+
+    @Override
+    protected String getDescription() {
+        return "Clicking on an item in the table will replace the panel (surrounding the table) with a form. This should not cause the table rows to move downwards or cause any other visible flicker";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2816;
+    }
+
+    @Override
+    protected void setup() {
+        createTableLayout();
+        form = new Form();
+
+        tablePanel = new Panel();
+        tablePanel.setContent(tableLayout);
+
+        addComponent(tablePanel);
+    }
+
+    private void createTableLayout() {
+        tableLayout = new VerticalLayout();
+        table = new Table();
+        table.addContainerProperty("name", String.class, "");
+        table.addContainerProperty("age", String.class, "");
+        for (int i = 0; i < 100; i++) {
+            table.addItem(new Object[] { "Name " + i, String.valueOf(i) },
+                    new Object());
+        }
+        table.setImmediate(true);
+        table.addListener(new ItemClickListener() {
+
+            public void itemClick(ItemClickEvent event) {
+                clicked(event.getItem());
+            }
+
+        });
+
+        tableLayout.addComponent(table);
+    }
+
+    protected void clicked(Item item) {
+        getLayout().replaceComponent(tablePanel, form);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/form/FormWithEnterShortCut.java b/tests/testbench/com/vaadin/tests/components/form/FormWithEnterShortCut.java
new file mode 100644
index 0000000000..624d0746e9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/FormWithEnterShortCut.java
@@ -0,0 +1,47 @@
+package com.vaadin.tests.components.form;
+
+import com.vaadin.event.ShortcutAction.KeyCode;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.TextField;
+
+public class FormWithEnterShortCut extends TestBase {
+    private Log log = new Log(2);
+
+    @Override
+    protected void setup() {
+
+        final Form form = new Form();
+        final Field tf = new TextField("Search");
+        form.addField("searchfield", tf);
+
+        Button button = new Button("Go");
+        button.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                log.log("search: " + tf.getValue());
+            }
+        });
+        button.setClickShortcut(KeyCode.ENTER);
+        button.setStyleName("primary");
+
+        form.getFooter().addComponent(button);
+
+        addComponent(log);
+        addComponent(form);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Focusing a button and pressing enter (which is a shortcut for button click) should only produce one click event";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5433;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/form/FormWithEnterShortcut.html b/tests/testbench/com/vaadin/tests/components/form/FormWithEnterShortcut.html
new file mode 100644
index 0000000000..16c5b1cee4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/FormWithEnterShortcut.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.form.FormWithEnterShortCut?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormWithEnterShortCut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
+	<td>70,4</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormWithEnterShortCut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
+	<td>abc</td>
+</tr>
+<tr>
+	<td>focus</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormWithEnterShortCut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VForm[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td>tab</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormWithEnterShortCut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VForm[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsformFormWithEnterShortCut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>1. search: abc</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/form/FormWithRelativelySizedLayout.java b/tests/testbench/com/vaadin/tests/components/form/FormWithRelativelySizedLayout.java
new file mode 100644
index 0000000000..17fe4477c3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/FormWithRelativelySizedLayout.java
@@ -0,0 +1,52 @@
+package com.vaadin.tests.components.form;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.Label;
+
+public class FormWithRelativelySizedLayout extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Forms mainlayouts relative height should be everyting left out from footer and possible borders/paddings. ";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3488;
+    }
+
+    @Override
+    protected void setup() {
+
+        Form f = new Form();
+        f.setCaption("Form, full size");
+
+        f.setWidth("100%");
+        f.setHeight("100%");
+
+        Label l = new Label(
+                "This green label should consume all available space, pushing ok button to bottom of the view");
+        l.setSizeFull();
+
+        CssLayout lo = new CssLayout() {
+            @Override
+            protected String getCss(Component c) {
+                return "background: green;color:red;";
+            }
+        };
+        lo.setSizeFull();
+
+        f.setLayout(lo);
+        lo.addComponent(l);
+
+        f.getFooter().addComponent(new Button("OK button"));
+
+        getLayout().setSizeFull();
+        getLayout().addComponent(f);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/form/UndefinedWideFormWithRelativeWideFooter.html b/tests/testbench/com/vaadin/tests/components/form/UndefinedWideFormWithRelativeWideFooter.html
new file mode 100644
index 0000000000..ade84de312
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/UndefinedWideFormWithRelativeWideFooter.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>UndefinedWideFormWithRelativeWideFooter</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">UndefinedWideFormWithRelativeWideFooter</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.form.UndefinedWideFormWithRelativeWideFooter</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/form/UndefinedWideFormWithRelativeWideFooter.java b/tests/testbench/com/vaadin/tests/components/form/UndefinedWideFormWithRelativeWideFooter.java
new file mode 100644
index 0000000000..cb616d4548
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/form/UndefinedWideFormWithRelativeWideFooter.java
@@ -0,0 +1,36 @@
+package com.vaadin.tests.components.form;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+@SuppressWarnings("serial")
+public class UndefinedWideFormWithRelativeWideFooter extends Application {
+
+    @Override
+    public void init() {
+
+        Window w = new Window("Test");
+        setMainWindow(w);
+
+        final Form f = new Form();
+        w.addComponent(f);
+        f.setSizeUndefined();
+        f.getLayout().setSizeUndefined();
+
+        f.setCaption("Test form with a really long caption");
+        f.addField("foo", new TextField("Foo"));
+        f.addField("bar", new TextField("A bit longer field caption"));
+
+        HorizontalLayout hl = new HorizontalLayout();
+        hl.setWidth("100%");
+        Button b = new Button("right aligned");
+        hl.addComponent(b);
+        hl.setComponentAlignment(b, Alignment.TOP_RIGHT);
+        f.setFooter(hl);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/formlayout/FormLayoutReplaceComponent.html b/tests/testbench/com/vaadin/tests/components/formlayout/FormLayoutReplaceComponent.html
new file mode 100644
index 0000000000..ecac497a1b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/formlayout/FormLayoutReplaceComponent.html
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.formlayout.FormLayoutReplaceComponent?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsformlayoutFormLayoutReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VCheckBox[0]/domChild[0]</td>
+	<td>6,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>textarea-visible</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsformlayoutFormLayoutReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VCheckBox[0]/domChild[0]</td>
+	<td>5,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>textarea-hidden</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/formlayout/FormLayoutReplaceComponent.java b/tests/testbench/com/vaadin/tests/components/formlayout/FormLayoutReplaceComponent.java
new file mode 100644
index 0000000000..e42d64201e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/formlayout/FormLayoutReplaceComponent.java
@@ -0,0 +1,57 @@
+package com.vaadin.tests.components.formlayout;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.TextField;
+
+public class FormLayoutReplaceComponent extends TestBase {
+
+    @Override
+    protected void setup() {
+        addComponent(new FL());
+
+    }
+
+    public class FL extends FormLayout implements ClickListener {
+
+        private TextField messages;
+        private CheckBox control;
+
+        @SuppressWarnings("deprecation")
+        public FL() {
+            setCaption("Test");
+            control = new CheckBox("Messages On/Off");
+            control.addListener(this);
+            control.setImmediate(true);
+            addComponent(control);
+
+            // The bug is in replaceComponent, triggered when VTextField is
+            // replaced by VTextArea so cannot replace this with TextArea.
+            messages = new TextField("Messages");
+            messages.setRows(10);
+            messages.setColumns(40);
+            messages.setVisible(false);
+            messages.setEnabled(false);
+            addComponent(messages);
+        }
+
+        public final void buttonClick(Button.ClickEvent e) {
+            if (e.getButton() == control) {
+                messages.setVisible(control.booleanValue());
+            }
+        }
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Check or uncheck the CheckBox to show/hide the messages field inside the FormLayout.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6308;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.html b/tests/testbench/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.html
new file mode 100644
index 0000000000..8795ad12dc
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.formlayout.TableInFormLayoutCausesScrolling?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsformlayoutTableInFormLayoutCausesScrolling::/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+	<td>12,13</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>should-be-scrolled-up</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.java b/tests/testbench/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.java
new file mode 100644
index 0000000000..157772f8cd
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.java
@@ -0,0 +1,45 @@
+package com.vaadin.tests.components.formlayout;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class TableInFormLayoutCausesScrolling extends AbstractTestCase {
+
+    @Override
+    public void init() {
+        // Window Initialization.
+        final Window window = new Window("Main Window");
+        setMainWindow(window);
+
+        // FormLayout creation
+        final FormLayout fl = new FormLayout();
+        window.setContent(fl);
+
+        // Add 20 TextField
+        for (int i = 20; i-- > 0;) {
+            fl.addComponent(new TextField());
+        }
+
+        // Add 1 selectable table with some items
+        final Table table = new Table();
+        table.setSelectable(true);
+        table.addContainerProperty("item", String.class, "");
+        for (int i = 50; i-- > 0;) {
+            table.addItem(new String[] { "item" + i }, i);
+        }
+        window.addComponent(table);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Clicking in the Table should not cause the page to scroll";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 7309;
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/gridlayout/MoveComponentFromGridLayoutToInnerLayout.html b/tests/testbench/com/vaadin/tests/components/gridlayout/MoveComponentFromGridLayoutToInnerLayout.html
new file mode 100644
index 0000000000..528e3fb379
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/gridlayout/MoveComponentFromGridLayoutToInnerLayout.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.gridlayout.MoveComponentsFromGridLayoutToInnerLayout?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsgridlayoutMoveComponentsFromGridLayoutToInnerLayout::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsgridlayoutMoveComponentsFromGridLayoutToInnerLayout::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>buttons-with-captions</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/gridlayout/MoveComponentsFromGridLayoutToInnerLayout.java b/tests/testbench/com/vaadin/tests/components/gridlayout/MoveComponentsFromGridLayoutToInnerLayout.java
new file mode 100644
index 0000000000..08a37dcd9a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/gridlayout/MoveComponentsFromGridLayoutToInnerLayout.java
@@ -0,0 +1,58 @@
+package com.vaadin.tests.components.gridlayout;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.VerticalLayout;
+
+public class MoveComponentsFromGridLayoutToInnerLayout extends TestBase {
+
+    protected Button testButton;
+    private GridLayout gl;
+    protected ComponentContainer vl;
+
+    @Override
+    protected void setup() {
+        gl = new GridLayout();
+        gl.setWidth("200px");
+        gl.setHeight("200px");
+
+        testButton = new Button("Click to move to inner layout",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        vl.addComponent(testButton);
+                    }
+                });
+
+        gl.addComponent(testButton);
+
+        vl = new VerticalLayout();
+        gl.addComponent(vl);
+
+        addComponent(gl);
+
+        Button b = new Button("Repaint inner layout",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        vl.requestRepaint();
+                    }
+                });
+
+        addComponent(b);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Click the first button to move it from an outer layout to an inner. Then click the second button to repaint the inner layout.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6060;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/label/HundredPercentWideLabelResize.html b/tests/testbench/com/vaadin/tests/components/label/HundredPercentWideLabelResize.html
new file mode 100644
index 0000000000..667f08ba4f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/label/HundredPercentWideLabelResize.html
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>HundredPercentWideLabelResize</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">HundredPercentWideLabelResize</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.label.HundredPercentWideLabelResize</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>1</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentslabelHundredPercentWideLabelResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>2</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentslabelHundredPercentWideLabelResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>1</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/label/HundredPercentWideLabelResize.java b/tests/testbench/com/vaadin/tests/components/label/HundredPercentWideLabelResize.java
new file mode 100644
index 0000000000..1d2fb2a59c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/label/HundredPercentWideLabelResize.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.components.label;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+
+public class HundredPercentWideLabelResize extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "100% wide label re-wrap should cause re-layout; forceLayout fixes this.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2514;
+    }
+
+    @Override
+    protected void setup() {
+        getLayout().setWidth("500px");
+        Label text = new Label(
+                "This is a fairly long text that will wrap if the width of the layout is narrow enough. Directly below the text is a Button - however, when the layout changes size, the Label re-wraps w/o moving the button, causing eiter clipping or a big space.");
+        text.setWidth("100%");
+        getLayout().addComponent(text);
+
+        getLayout().addComponent(
+                new Button("toggle width", new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        if (getLayout().getWidth() == 500) {
+                            getLayout().setWidth("100px");
+                        } else {
+                            getLayout().setWidth("500px");
+                        }
+
+                    }
+
+                }));
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/label/LabelModes.html b/tests/testbench/com/vaadin/tests/components/label/LabelModes.html
new file mode 100644
index 0000000000..356688b456
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/label/LabelModes.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.label.LabelModes?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>labelmodes</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/label/LabelModes.java b/tests/testbench/com/vaadin/tests/components/label/LabelModes.java
new file mode 100644
index 0000000000..4b58794a87
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/label/LabelModes.java
@@ -0,0 +1,58 @@
+package com.vaadin.tests.components.label;
+
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.ui.Label;
+
+public class LabelModes extends ComponentTestCase<Label> {
+
+    @Override
+    protected Class<Label> getTestClass() {
+        return Label.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+
+        Label l;
+        l = createLabel("This is an undefined wide label with default content mode");
+        l.setWidth(null);
+        addTestComponent(l);
+
+        l = createLabel("This label                       contains\nnewlines and spaces\nbut is in\ndefault content mode");
+        l.setWidth(null);
+        addTestComponent(l);
+
+        l = createLabel("This label                       contains\nnewlines and spaces\nand is in\npreformatted mode");
+        l.setContentMode(Label.CONTENT_PREFORMATTED);
+        l.setWidth(null);
+        addTestComponent(l);
+
+        l = createLabel("This label                       contains\nnewlines and spaces\nand is in\nhtml mode");
+        l.setContentMode(Label.CONTENT_XHTML);
+        l.setWidth(null);
+        addTestComponent(l);
+
+        l = createLabel("This label                       contains\nnewlines and spaces\nand is in\nraw mode");
+        l.setContentMode(Label.CONTENT_RAW);
+        l.setWidth(null);
+        addTestComponent(l);
+
+    }
+
+    private Label createLabel(String text, String caption) {
+        Label l = new Label(text);
+        l.setCaption(caption);
+
+        return l;
+    }
+
+    private Label createLabel(String text) {
+        return createLabel(text, null);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A generic test for Labels in different configurations";
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/label/LabelTest.java b/tests/testbench/com/vaadin/tests/components/label/LabelTest.java
new file mode 100644
index 0000000000..38ced67f18
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/label/LabelTest.java
@@ -0,0 +1,100 @@
+package com.vaadin.tests.components.label;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.tests.components.AbstractComponentTest;
+import com.vaadin.ui.Label;
+
+public class LabelTest extends AbstractComponentTest<Label> implements
+        ValueChangeListener {
+
+    private Command<Label, Object> setValueCommand = new Command<Label, Object>() {
+
+        public void execute(Label c, Object value, Object data) {
+            c.setValue(value);
+        }
+    };
+
+    private Command<Label, Boolean> valueChangeListenerCommand = new Command<Label, Boolean>() {
+        public void execute(Label c, Boolean value, Object data) {
+            if (value) {
+                c.addListener(LabelTest.this);
+            } else {
+                c.removeListener(LabelTest.this);
+
+            }
+        }
+    };
+
+    private Command<Label, Integer> contentModeCommand = new Command<Label, Integer>() {
+        public void execute(Label c, Integer value, Object data) {
+            c.setContentMode(value);
+        }
+    };
+
+    @Override
+    protected Class<Label> getTestClass() {
+        return Label.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+
+        createContentModeSelect(CATEGORY_FEATURES);
+        createValueSelect(CATEGORY_FEATURES);
+        createValueChangeListener(CATEGORY_LISTENERS);
+    }
+
+    private void createValueSelect(String category) {
+        String subCategory = "Set text value";
+        createCategory(subCategory, category);
+        List<String> values = new ArrayList<String>();
+        values.add("Test");
+        values.add("A little longer value");
+        values.add("A very long value with very much text. All in all it is 74 characters long");
+        values.add("<b>Bold</b>");
+        values.add("<div style=\"height: 70px; width: 15px; border: 1px dashed red\">With border</div>");
+
+        createClickAction("(empty string)", subCategory, setValueCommand, "");
+        createClickAction("(null)", subCategory, setValueCommand, null);
+        for (String value : values) {
+            createClickAction(value, subCategory, setValueCommand, value);
+        }
+    }
+
+    @SuppressWarnings("deprecation")
+    private void createContentModeSelect(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("Text", Label.CONTENT_TEXT);
+        options.put("Preformatted", Label.CONTENT_PREFORMATTED);
+        options.put("Raw", Label.CONTENT_RAW);
+        options.put("UIDL", Label.CONTENT_UIDL);
+        options.put("XHTML", Label.CONTENT_XHTML);
+        options.put("XML", Label.CONTENT_XML);
+
+        createSelectAction("Content mode", category, options, "Text",
+                contentModeCommand);
+    }
+
+    private void createValueChangeListener(String category) {
+        createBooleanAction("Value change listener", category, false,
+                valueChangeListenerCommand);
+    }
+
+    public void valueChange(com.vaadin.data.Property.ValueChangeEvent event) {
+        Object o = event.getProperty().getValue();
+
+        // Distinguish between null and 'null'
+        String value = "null";
+        if (o != null) {
+            value = "'" + o.toString() + "'";
+        }
+
+        log(event.getClass().getSimpleName() + ", new value: " + value);
+    };
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/label/LabelTooltip.html b/tests/testbench/com/vaadin/tests/components/label/LabelTooltip.html
new file mode 100644
index 0000000000..0fbd3353c9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/label/LabelTooltip.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.label.LabelTooltip?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>noerror-error</td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentslabelLabelTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip-upper</td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentslabelLabelTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VLabel[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip-lower</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/label/LabelTooltip.java b/tests/testbench/com/vaadin/tests/components/label/LabelTooltip.java
new file mode 100644
index 0000000000..aa1b357cad
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/label/LabelTooltip.java
@@ -0,0 +1,53 @@
+package com.vaadin.tests.components.label;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.terminal.UserError;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+
+public class LabelTooltip extends TestBase {
+
+    @Override
+    protected void setup() {
+        addComponent(createLayout());
+    }
+
+    private static Layout createLayout() {
+        GridLayout layout = new GridLayout(2, 1);
+        layout.setCaption("Tooltips");
+        layout.setIcon(new ThemeResource("icons/blue/16/home.png"));
+        layout.setMargin(true);
+        layout.setSpacing(true);
+        layout.setWidth("400px");
+        layout.setColumnExpandRatio(0, 1);
+
+        layout.addComponent(new Label("Default"));
+        Label tooltip = new Label("Hover over me to see the tooltip");
+        tooltip.setSizeUndefined();
+        tooltip.setDescription("Default tooltip content");
+        layout.addComponent(tooltip);
+
+        layout.addComponent(new Label("Default /w error"));
+        tooltip = new Label("Hover over me to see the tooltip");
+        tooltip.setSizeUndefined();
+        tooltip.setDescription("Default tooltip content");
+        tooltip.setComponentError(new UserError(
+                "Error inside tooltip together with the regular tooltip message."));
+        layout.addComponent(tooltip);
+
+        return layout;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The lower label should have an error indicator. The upper should not.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6911;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/label/LabelWrapping.html b/tests/testbench/com/vaadin/tests/components/label/LabelWrapping.html
new file mode 100644
index 0000000000..b8038a75b4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/label/LabelWrapping.html
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>LabelWrapping</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">LabelWrapping</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.label.LabelWrapping</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>1</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentslabelLabelWrapping::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>2</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentslabelLabelWrapping::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>1</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/label/LabelWrapping.java b/tests/testbench/com/vaadin/tests/components/label/LabelWrapping.java
new file mode 100644
index 0000000000..a06d0b1351
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/label/LabelWrapping.java
@@ -0,0 +1,46 @@
+package com.vaadin.tests.components.label;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+
+public class LabelWrapping extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "A label inside a limited HorizontalLayout should strive to be as wide as possible and only wrap when the size of the layout is reached. The label should look the same if it is rendered initially with the layout or updated later on.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2478;
+    }
+
+    @Override
+    protected void setup() {
+        HorizontalLayout hl = new HorizontalLayout();
+        hl.setWidth("250px");
+
+        final String longString = "this is a somewhat long string.";
+        final Label longLabel = new Label(longString);
+
+        Button changeLength = new Button("Change length");
+        changeLength.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                if (longLabel.getValue().equals(longString)) {
+                    longLabel.setValue("");
+                } else {
+                    longLabel.setValue(longString);
+                }
+            }
+        });
+
+        hl.addComponent(longLabel);
+        hl.addComponent(changeLength);
+
+        addComponent(hl);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/label/Labels.html b/tests/testbench/com/vaadin/tests/components/label/Labels.html
new file mode 100644
index 0000000000..46ff066d8c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/label/Labels.html
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>Labels</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Labels</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.label.Labels?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentslabelLabels::PID_Scheckboxaction-Error indicators/domChild[0]</td>
+	<td>9,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentslabelLabels::PID_Scheckboxaction-Readonly/domChild[0]</td>
+	<td>8,2</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>errorindicators</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentslabelLabels::PID_Scheckboxaction-Error indicators/domChild[0]</td>
+	<td>0,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentslabelLabels::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VLabel[0]</td>
+	<td>Some UTF8 characters: äöÄÖ≤≠∉Ġå2²</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentslabelLabels::PID_Scheckboxaction-Readonly/domChild[0]</td>
+	<td>2,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentslabelLabels::PID_Scheckboxaction-Enabled/domChild[0]</td>
+	<td>0,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/label/Labels.java b/tests/testbench/com/vaadin/tests/components/label/Labels.java
new file mode 100644
index 0000000000..ad648e7404
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/label/Labels.java
@@ -0,0 +1,71 @@
+package com.vaadin.tests.components.label;
+
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.tests.util.LoremIpsum;
+import com.vaadin.ui.Label;
+
+public class Labels extends ComponentTestCase<Label> {
+
+    @Override
+    protected Class<Label> getTestClass() {
+        return Label.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+        Label l;
+        l = createLabel("This is an undefined\nwide\nlabel               which do not wrap. It should be clipped at the end of the screen"
+                + LoremIpsum.get(1000));
+        l.setWidth(null);
+        addTestComponent(l);
+
+        l = createLabel("This is a 200px wide simple label which\n\n\nwrap");
+        l.setWidth("200px");
+        addTestComponent(l);
+
+        l = createLabel("This is a 100% wide simple label which should wrap. "
+                + LoremIpsum.get(1500));
+        l.setWidth("100%");
+        addTestComponent(l);
+
+        l = createLabel("This is a\n\n     100%\t\t\t   \twide simple with fixed 65px height. It should wrap. "
+                + LoremIpsum.get(5000));
+        l.setWidth("100%");
+        l.setHeight("65px");
+        addTestComponent(l);
+
+        l = createLabel(
+                "<div style='border: 1px solid red'><h1>Hello\n\n\n</h1><p/><h2>I am a rich Label</h3></div>",
+                "This is an XHTML label with rich content");
+        l.setContentMode(Label.CONTENT_XHTML);
+        addTestComponent(l);
+
+        l = createLabel(
+                "<div style='border: 1px solid blue'><h1>Hello</h1><p/><h2>I am a rich Label</h3></div>",
+                "This is an XHTML label with fixed 200px width and rich content");
+        l.setContentMode(Label.CONTENT_XHTML);
+        l.setWidth("200px");
+        addTestComponent(l);
+
+        l = createLabel("Some UTF8 characters: äöÄÖ≤≠∉Ġå2²");
+        addTestComponent(l);
+
+    }
+
+    private Label createLabel(String text, String caption) {
+        Label l = new Label(text);
+        l.setCaption(caption);
+
+        return l;
+    }
+
+    private Label createLabel(String text) {
+        return createLabel(text, null);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A generic test for Labels in different configurations";
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/link/LinkIcon.java b/tests/testbench/com/vaadin/tests/components/link/LinkIcon.java
new file mode 100644
index 0000000000..372417a45c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/link/LinkIcon.java
@@ -0,0 +1,30 @@
+package com.vaadin.tests.components.link;
+
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Link;
+
+public class LinkIcon extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The icon of a Link component should have the same cursor as the text and should be clickable";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected void setup() {
+        Link l = new Link("www.google.com", new ExternalResource(
+                "http://www.vaadin.com/"));
+        l.setIcon(new ThemeResource("../runo/icons/32/calendar.png"));
+
+        addComponent(l);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/link/LinkTargetSize.java b/tests/testbench/com/vaadin/tests/components/link/LinkTargetSize.java
new file mode 100644
index 0000000000..d5542cab04
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/link/LinkTargetSize.java
@@ -0,0 +1,30 @@
+package com.vaadin.tests.components.link;
+
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Link;
+
+public class LinkTargetSize extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "This link should open a small window w/o decorations";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2524;
+    }
+
+    @Override
+    protected void setup() {
+        Link l = new Link("Try it!", new ExternalResource(
+                "http://www.google.com/m"));
+        l.setTargetName("_blank");
+        l.setTargetWidth(300);
+        l.setTargetHeight(300);
+        l.setTargetBorder(Link.TARGET_BORDER_NONE);
+        addComponent(l);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/link/LinkToPercentage.html b/tests/testbench/com/vaadin/tests/components/link/LinkToPercentage.html
new file mode 100644
index 0000000000..7dff317288
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/link/LinkToPercentage.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>LinkToPercentage</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">LinkToPercentage</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.link.LinkToPercentage?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertAttribute</td>
+	<td>vaadin=runcomvaadintestscomponentslinkLinkToPercentage::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLink[0]/domChild[0]@href</td>
+	<td>*/run/com.vaadin.tests.components.link.LinkToPercentage/APP/1/110%25+Vaadin</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/link/LinkToPercentage.java b/tests/testbench/com/vaadin/tests/components/link/LinkToPercentage.java
new file mode 100644
index 0000000000..ce8626444c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/link/LinkToPercentage.java
@@ -0,0 +1,51 @@
+package com.vaadin.tests.components.link;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import com.vaadin.terminal.ApplicationResource;
+import com.vaadin.terminal.StreamResource;
+import com.vaadin.terminal.StreamResource.StreamSource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Link;
+
+public class LinkToPercentage extends TestBase {
+
+    @Override
+    protected void setup() {
+        String filename = "110% Vaadin";
+        ApplicationResource resource = new StreamResource(new StreamSource() {
+            public InputStream getStream() {
+                return new InputStream() {
+                    boolean first = true;
+
+                    @Override
+                    public int read() throws IOException {
+                        if (first) {
+                            first = false;
+                            return 'a';
+                        } else {
+                            return -1;
+                        }
+                    }
+                };
+            }
+        }, filename, this);
+        addResource(resource);
+
+        Link link = new Link("The link", resource);
+
+        addComponent(link);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tests using links with percentage signs in the address";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return Integer.valueOf(5488);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/listselect/ListSelectSelection.html b/tests/testbench/com/vaadin/tests/components/listselect/ListSelectSelection.html
new file mode 100644
index 0000000000..9820e044f7
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/listselect/ListSelectSelection.html
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.listselect.ListSelects?restartApplication</td>
+	<td></td>
+</tr>
+<!--Value change listener-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_Smenu#item0</td>
+	<td>31,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>48,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>54,6</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
+	<td>label=Item 1</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_SLog_row_0</td>
+	<td>1. ValueChangeEvent, new value: 'Item 1'</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
+	<td>1</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
+	<td>label=Item 5</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_SLog_row_0</td>
+	<td>2. ValueChangeEvent, new value: 'Item 5'</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
+	<td>5</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
+	<td>label=Item 2</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_SLog_row_0</td>
+	<td>3. ValueChangeEvent, new value: 'Item 2'</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
+	<td>2</td>
+</tr>
+<!---> multi select mode-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_Smenu#item0</td>
+	<td>46,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>54,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>22,2</td>
+</tr>
+<!--Value changes from String to Set-->
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_SLog_row_0</td>
+	<td>5. ValueChangeEvent, new value: '[Item 2]'</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
+	<td>2</td>
+</tr>
+<tr>
+	<td>addSelection</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
+	<td>label=Item 1</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_SLog_row_0</td>
+	<td>6. ValueChangeEvent, new value: '[Item 1, Item 2]'</td>
+</tr>
+<tr>
+	<td>removeSelection</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
+	<td>label=Item 1</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_SLog_row_0</td>
+	<td>7. ValueChangeEvent, new value: '[Item 2]'</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
+	<td>2</td>
+</tr>
+<tr>
+	<td>removeSelection</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
+	<td>label=Item 2</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_SLog_row_0</td>
+	<td>7. ValueChangeEvent, new value: '[Item 2]'</td>
+</tr>
+<!--Ensure also that the selection cannot be removed after a reload-->
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.listselect.ListSelects</td>
+	<td></td>
+</tr>
+<tr>
+	<td>removeSelection</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
+	<td>label=Item 2</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_SLog_row_0</td>
+	<td>7. ValueChangeEvent, new value: '[Item 2]'</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentslistselectListSelects::PID_StestComponent/domChild[0]</td>
+	<td>2</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/listselect/ListSelects.java b/tests/testbench/com/vaadin/tests/components/listselect/ListSelects.java
new file mode 100644
index 0000000000..8a04da1bce
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/listselect/ListSelects.java
@@ -0,0 +1,44 @@
+package com.vaadin.tests.components.listselect;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.tests.components.select.AbstractSelectTestCase;
+import com.vaadin.ui.ListSelect;
+
+public class ListSelects extends AbstractSelectTestCase<ListSelect> {
+
+    private Command<ListSelect, Integer> rowsCommand = new Command<ListSelect, Integer>() {
+        public void execute(ListSelect c, Integer value, Object data) {
+            c.setRows(value);
+        }
+    };
+
+    private Command<ListSelect, Integer> colsCommand = new Command<ListSelect, Integer>() {
+        public void execute(ListSelect c, Integer value, Object data) {
+            c.setColumns(value);
+        }
+    };
+
+    @Override
+    protected Class<ListSelect> getTestClass() {
+        return ListSelect.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+        createRowsAction(CATEGORY_FEATURES);
+        createColsAction(CATEGORY_FEATURES);
+    };
+
+    private void createRowsAction(String category) {
+        LinkedHashMap<String, Integer> options = createIntegerOptions(20);
+        createSelectAction("Rows", category, options, "0", rowsCommand);
+    }
+
+    private void createColsAction(String category) {
+        LinkedHashMap<String, Integer> options = createIntegerOptions(20);
+        createSelectAction("Columns", category, options, "0", colsCommand);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/loginform/CustomizedLoginFormTest.html b/tests/testbench/com/vaadin/tests/components/loginform/CustomizedLoginFormTest.html
new file mode 100644
index 0000000000..5a2a0d839a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/loginform/CustomizedLoginFormTest.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>CustomizedLoginFormTest</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">CustomizedLoginFormTest</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.loginform.CustomizedLoginFormTest?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td>300</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>french</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/loginform/CustomizedLoginFormTest.java b/tests/testbench/com/vaadin/tests/components/loginform/CustomizedLoginFormTest.java
new file mode 100644
index 0000000000..3fde281c20
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/loginform/CustomizedLoginFormTest.java
@@ -0,0 +1,24 @@
+package com.vaadin.tests.components.loginform;
+
+public class CustomizedLoginFormTest extends LoginFormTest {
+
+    @Override
+    protected void setup() {
+        super.setup();
+
+        loginForm.setUsernameCaption("Identifiant");
+        loginForm.setPasswordCaption("Mot de passe");
+        loginForm.setLoginButtonCaption("Se connecter");
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Customization of the captions on the LoginForm component. Three login forms should be visible (undefined height, undefined width, defined height and width). Entering a username+password in a login form and clicking 'login' should replace the login form with a label telling the user name as password. Also a logout button should then be shown and pressing that takes the user back to the original screen with the LoginForm";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5226;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/loginform/LoginFormTest.html b/tests/testbench/com/vaadin/tests/components/loginform/LoginFormTest.html
new file mode 100644
index 0000000000..daaefab48c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/loginform/LoginFormTest.html
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>LoginFormTest</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">LoginFormTest</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.loginform.LoginFormTest?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>undefinedsize</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>username</td>
+	<td>username</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>password</td>
+	<td>password</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>//form[@id='loginf']/div[5]/div/span/span</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsloginformLoginFormTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>User 'username', password='password' logged in</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>loggedin</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsloginformLoginFormTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>undefinedsize</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsloginformLoginFormTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>fixed-height</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsloginformLoginFormTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>fixed-size</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsloginformLoginFormTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>fixed-width</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/loginform/LoginFormTest.java b/tests/testbench/com/vaadin/tests/components/loginform/LoginFormTest.java
new file mode 100644
index 0000000000..bbc7d2ca7e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/loginform/LoginFormTest.java
@@ -0,0 +1,117 @@
+package com.vaadin.tests.components.loginform;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.LoginForm;
+import com.vaadin.ui.LoginForm.LoginEvent;
+import com.vaadin.ui.LoginForm.LoginListener;
+import com.vaadin.ui.VerticalLayout;
+
+public class LoginFormTest extends TestBase {
+
+    private HorizontalLayout loginFormLayout;
+    protected LoginForm loginForm;
+
+    @Override
+    protected void setup() {
+        loginFormLayout = new HorizontalLayout();
+
+        loginForm = new LoginForm();
+        loginForm.setSizeUndefined();
+
+        updateCaption();
+        loginForm.addListener(new LoginListener() {
+
+            /**
+             * 
+             */
+            private static final long serialVersionUID = 1L;
+
+            public void onLogin(LoginEvent event) {
+                login((LoginForm) event.getSource(),
+                        event.getLoginParameter("username"),
+                        event.getLoginParameter("password"));
+
+            }
+        });
+
+        loginFormLayout.addComponent(loginForm);
+
+        Button changeWidth = new Button("Change width", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                if (loginForm.getWidth() < 0) {
+                    loginForm.setWidth("300px");
+                } else {
+                    loginForm.setWidth(null);
+                }
+                updateCaption();
+            }
+        });
+
+        Button changeHeight = new Button("Change height", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                if (loginForm.getHeight() < 0) {
+                    loginForm.setHeight("200px");
+                } else {
+                    loginForm.setHeight(null);
+                }
+                updateCaption();
+            }
+        });
+
+        addComponent(loginFormLayout);
+        addComponent(changeWidth);
+        addComponent(changeHeight);
+
+    }
+
+    protected void updateCaption() {
+        float width = loginForm.getWidth();
+        float height = loginForm.getHeight();
+
+        String w = width < 0 ? "auto" : (int) width + "px";
+        String h = height < 0 ? "auto" : (int) height + "px";
+
+        loginForm.setCaption("LoginForm (" + w + "/" + h + ")");
+    }
+
+    protected void login(LoginForm loginForm, String user, String password) {
+        VerticalLayout infoLayout = new VerticalLayout();
+
+        Label info = new Label("User '" + user + "', password='" + password
+                + "' logged in");
+        Button logoutButton = new Button("Log out", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                Button b = event.getButton();
+                loginFormLayout.replaceComponent(b.getParent(),
+                        (LoginForm) b.getData());
+            }
+
+        });
+        logoutButton.setData(loginForm);
+
+        infoLayout.addComponent(info);
+        infoLayout.addComponent(logoutButton);
+
+        loginFormLayout.replaceComponent(loginForm, infoLayout);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Basic test for the LoginForm component. Three login forms should be visible (undefined height, undefined width, defined height and width). Entering a username+password in a login form and clicking 'login' should replace the login form with a label telling the user name as password. Also a logout button should then be shown and pressing that takes the user back to the original screen with the LoginForm";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3597;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/loginform/LoginFormWithMultipleWindows.java b/tests/testbench/com/vaadin/tests/components/loginform/LoginFormWithMultipleWindows.java
new file mode 100644
index 0000000000..341caecc9f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/loginform/LoginFormWithMultipleWindows.java
@@ -0,0 +1,56 @@
+package com.vaadin.tests.components.loginform;
+
+import com.vaadin.Application;
+import com.vaadin.ui.LoginForm;
+import com.vaadin.ui.LoginForm.LoginEvent;
+import com.vaadin.ui.LoginForm.LoginListener;
+import com.vaadin.ui.Window;
+
+@SuppressWarnings("serial")
+public class LoginFormWithMultipleWindows extends Application {
+
+    /**
+     * =======================================================================
+     * Comment out this to make the LoginForm work as expected
+     * =======================================================================
+     */
+    @Override
+    public Window getWindow(String name) {
+        Window w = super.getWindow(name);
+        if (w == null) {
+            w = new LoginFormWindow();
+            w.setName(name);
+            addWindow(w);
+        }
+        return w;
+
+    }
+
+    @Override
+    public void init() {
+        setMainWindow(new LoginFormWindow());
+    }
+
+    public class LoginFormWindow extends Window {
+        public LoginFormWindow() {
+            super();
+
+            LoginForm loginForm = new LoginForm();
+            loginForm.setSizeUndefined();
+
+            loginForm.addListener(new LoginListener() {
+
+                private static final long serialVersionUID = 1L;
+
+                public void onLogin(LoginEvent event) {
+                    showNotification(event.getLoginParameter("username") + ":"
+                            + event.getLoginParameter("password"));
+
+                }
+            });
+
+            addComponent(loginForm);
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/media/Media.java b/tests/testbench/com/vaadin/tests/components/media/Media.java
new file mode 100644
index 0000000000..2df622c35f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/media/Media.java
@@ -0,0 +1,78 @@
+/*
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests.components.media;
+
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Audio;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Video;
+
+public class Media extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Video v = new Video("video");
+        v.setSources(
+                new ExternalResource(
+                        "http://jonatan.virtuallypreinstalled.com/media/big_buck_bunny.mp4"),
+                new ExternalResource(
+                        "http://jonatan.virtuallypreinstalled.com/media/big_buck_bunny.ogv"));
+        v.setWidth("640px");
+        v.setHeight("360px");
+        addComponent(v);
+        addComponent(new Button("Play video", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                v.play();
+            }
+
+        }));
+        addComponent(new Button("Pause video", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                v.pause();
+            }
+
+        }));
+
+        final Audio a = new Audio("audio");
+        a.setSources(
+                new ExternalResource(
+                        "http://jonatan.virtuallypreinstalled.com/media/audio.mp3"),
+                new ExternalResource(
+                        "http://jonatan.virtuallypreinstalled.com/media/audio.ogg"));
+        addComponent(a);
+
+        addComponent(new Button("Play audio", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                a.play();
+            }
+
+        }));
+        addComponent(new Button("Pause audio", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                a.pause();
+            }
+
+        }));
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Video and audio files should play using the HTML5 elements. "
+                + "(Movie is (c) copyright 2008, Blender Foundation / www.bigbuckbunny.org)";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6909;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/HiddenAndDisabledMenus.java b/tests/testbench/com/vaadin/tests/components/menubar/HiddenAndDisabledMenus.java
new file mode 100644
index 0000000000..ef5d5ad395
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/HiddenAndDisabledMenus.java
@@ -0,0 +1,34 @@
+package com.vaadin.tests.components.menubar;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.MenuBar;
+import com.vaadin.ui.MenuBar.MenuItem;
+
+public class HiddenAndDisabledMenus extends TestBase {
+
+    @Override
+    protected void setup() {
+        MenuBar mb = new MenuBar();
+        mb.addItem("Item 1", null);
+        mb.addItem("Item 2 - hidden", null).setVisible(false);
+        MenuItem submenu = mb.addItem("Item 3 - sub menu", null);
+        mb.addItem("Item 4 - hidden", null).setVisible(false);
+        submenu.addItem("Sub item 1 - disabled", null).setEnabled(false);
+        submenu.addItem("Sub item 2 - enabled", null);
+        submenu.addItem("Sub item 3 - visible", null);
+        submenu.addItem("Sub item 4 - hidden", null).setVisible(false);
+
+        addComponent(mb);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The menu contains 4 items, 2 of which are hidden. The sub menu contains 4 items, the last one is hidden";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4528;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/IconsInRootMenuBar.html b/tests/testbench/com/vaadin/tests/components/menubar/IconsInRootMenuBar.html
new file mode 100644
index 0000000000..91539ff359
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/IconsInRootMenuBar.html
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.menubar.MenuBarTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--Hide event log to be able to compare screenshots-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item1</td>
+	<td>30,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>27,3</td>
+</tr>
+<!--No sub menus-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
+	<td>32,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>32,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>45,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>29,4</td>
+</tr>
+<!--50 root items to fill the screen-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
+	<td>44,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>46,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>5,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item12</td>
+	<td>20,7</td>
+</tr>
+<!--Show icons on all items-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
+	<td>13,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>47,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>26,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>39,7</td>
+</tr>
+<!--Set width to 100%-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
+	<td>23,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>36,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>27,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>23,3</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>filled-with-collapse-menu</td>
+</tr>
+<!--Re-set to 50 items to get new, uncached icons-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
+	<td>13,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>68,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>44,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item12</td>
+	<td>6,5</td>
+</tr>
+<!--Compare with previous image. -->
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>filled-with-collapse-menu</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/IconsInSubMenus.html b/tests/testbench/com/vaadin/tests/components/menubar/IconsInSubMenus.html
new file mode 100644
index 0000000000..e1a63789ca
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/IconsInSubMenus.html
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.menubar.MenuBarTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--Hide event log to be able to compare screenshots-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item1</td>
+	<td>30,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>27,3</td>
+</tr>
+<!--Show icons on all items-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
+	<td>13,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>47,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>26,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>39,7</td>
+</tr>
+<!--Set width to 100%-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
+	<td>23,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>36,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>27,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>23,3</td>
+</tr>
+<!--Open sub menu 1-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_StestComponent#item0</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>3000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>submenu-1-with-icons</td>
+</tr>
+<!--Open sub menu 1-1-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>submenu-1-1-with-icons</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/MenuBarHtmlItems.html b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarHtmlItems.html
new file mode 100644
index 0000000000..2878018752
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarHtmlItems.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">MenuBarHtmlItems</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.menubar.MenuBarHtmlItems?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarHtmlItems::PID_Scheckboxaction-Html content allowed/domChild[0]</td>
+	<td>44,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarHtmlItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VMenuBar[0]#item0</td>
+	<td>7,6</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarHtmlItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VMenuBar[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarHtmlItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VMenuBar[0]</td>
+	<td>right</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>html</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarHtmlItems::PID_Scheckboxaction-Html content allowed/domChild[0]</td>
+	<td>37,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarHtmlItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VMenuBar[0]#item0</td>
+	<td>13,6</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarHtmlItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VMenuBar[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarHtmlItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VMenuBar[0]</td>
+	<td>right</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>plain</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/MenuBarHtmlItems.java b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarHtmlItems.java
new file mode 100644
index 0000000000..ba22bcb7a4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarHtmlItems.java
@@ -0,0 +1,63 @@
+package com.vaadin.tests.components.menubar;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.MenuBar;
+import com.vaadin.ui.MenuBar.MenuItem;
+
+public class MenuBarHtmlItems extends ComponentTestCase<MenuBar> {
+
+    @Override
+    protected Class<MenuBar> getTestClass() {
+        return MenuBar.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+        MenuBar m = new MenuBar();
+        MenuItem submenu = m.addItem("Item <u>1</u>", getIcon(), null);
+        MenuItem subsubmenu = submenu.addItem("<b>Bold</b> item", null);
+        subsubmenu.addItem("<i><u>I</u>talic</i> item", getIcon(), null);
+        submenu.addItem(
+                "<span style='font-size: 30px'>Big</span> <span style='font-size: 8px'>disabled</span> item",
+                null).setEnabled(false);
+
+        m.addItem("<span style='font-size: 30px'>Big</span> item", null);
+
+        addTestComponent(m);
+    }
+
+    private Resource getIcon() {
+        return new ThemeResource("../runo/icons/16/user.png");
+    }
+
+    @Override
+    protected List<Component> createActions() {
+        return Arrays.asList(createSwitchHtmlAction());
+    }
+
+    private Component createSwitchHtmlAction() {
+        return createBooleanAction("Html content allowed", false,
+                new Command<MenuBar, Boolean>() {
+                    public void execute(MenuBar c, Boolean value, Object data) {
+                        c.setHtmlContentAllowed(value.booleanValue());
+                    }
+                });
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 7187;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A menu containing items with embedded html. Items should chould either render the html or show it as plain text depending on the setting.";
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/MenuBarInSplitPanel.java b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarInSplitPanel.java
new file mode 100644
index 0000000000..4a41f8d8dc
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarInSplitPanel.java
@@ -0,0 +1,47 @@
+package com.vaadin.tests.components.menubar;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.MenuBar;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class MenuBarInSplitPanel extends AbstractTestCase {
+
+    @Override
+    protected String getDescription() {
+        return "Move the splitter left so that some menu items are collapsed, then back right. The menu bar should always fill the available space.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6590;
+    }
+
+    @Override
+    public void init() {
+        Window mainWindow = new Window("MenuBar in SplitPanel",
+                new HorizontalSplitPanel());
+        VerticalLayout left = new VerticalLayout();
+        mainWindow.addComponent(left);
+        left.setSizeFull();
+        MenuBar menu = new MenuBar();
+        menu.setWidth("100%");
+        menu.addItem("File", null);
+        menu.addItem("Edit", null);
+        menu.addItem("Help", null);
+        left.addComponent(menu);
+        Tree tree = new Tree();
+        for (int i = 0; i < 10; i++) {
+            tree.addItem("Node " + i);
+        }
+        left.addComponent(tree);
+        left.setExpandRatio(tree, 1.0f);
+        Label label = new Label("Right");
+        mainWindow.addComponent(label);
+        setMainWindow(mainWindow);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/MenuBarItemsCheckable.html b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarItemsCheckable.html
new file mode 100644
index 0000000000..ebdfa81f20
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarItemsCheckable.html
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>MenuBarItemsCheckable</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">MenuBarItemsCheckable</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.menubar.MenuBarTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--Hide event log to be able to compare screenshots-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item1</td>
+	<td>30,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>27,3</td>
+</tr>
+<!--Make some items checkable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
+	<td>43,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>47,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>48,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>90,11</td>
+</tr>
+<!--Show icons on some items-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
+	<td>13,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>47,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>26,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+	<td>39,7</td>
+</tr>
+<!--Set width to 100%-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
+	<td>23,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>36,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>27,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>23,3</td>
+</tr>
+<!--Open sub menu 1-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_StestComponent#item0</td>
+	<td>51,10</td>
+</tr>
+<!--Open sub menu 1-1-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>3000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>submenu-1-1-checkable-items</td>
+</tr>
+<!--Select item-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>51,10</td>
+</tr>
+<!--Open sub menu 1-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_StestComponent#item0</td>
+	<td>51,10</td>
+</tr>
+<!--Open sub menu 1-1-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>submenu-1-1-checked-items</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/MenuBarLongMenus.html b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarLongMenus.html
new file mode 100644
index 0000000000..7170a98325
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarLongMenus.html
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8080/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.menubar.MenuBarTest?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
+	<td>26,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>30,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>44,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>27,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
+	<td>24,18</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>33,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>54,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item11</td>
+	<td>18,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_StestComponent#item0</td>
+	<td>35,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item18</td>
+	<td>70,12</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>movedUp</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
+	<td>17,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>28,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>41,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item12</td>
+	<td>17,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_StestComponent#item0</td>
+	<td>32,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>39,11</td>
+</tr>
+<tr>
+	<td>scroll</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]</td>
+	<td>89</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>withScrollbars</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/MenuBarNavigation.java b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarNavigation.java
new file mode 100644
index 0000000000..54b2f986a4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarNavigation.java
@@ -0,0 +1,62 @@
+package com.vaadin.tests.components.menubar;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.MenuBar;
+import com.vaadin.ui.MenuBar.Command;
+import com.vaadin.ui.MenuBar.MenuItem;
+
+public class MenuBarNavigation extends TestBase implements Command {
+
+    private MenuItem edit;
+    private MenuItem file;
+    private Log log;
+    private MenuItem export;
+
+    @Override
+    protected void setup() {
+        MenuBar mb = new MenuBar();
+        file = mb.addItem("File", null);
+        file.addItem("Open", this);
+        file.addItem("Save", this);
+        file.addItem("Save As..", this);
+        file.addSeparator();
+        export = file.addItem("Export..", null);
+        export.addItem("As PDF...", this);
+        file.addSeparator();
+        file.addItem("Exit", this);
+        edit = mb.addItem("Edit", null);
+        edit.addItem("Copy", this);
+        edit.addItem("Cut", this);
+        edit.addItem("Paste", this);
+        mb.addItem("Help", this);
+
+        addComponent(mb);
+
+        log = new Log(5);
+        log.setNumberLogRows(false);
+        addComponent(log);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Test case for mouse and keyboard navigation in MenuBar";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5174;
+    }
+
+    public void menuSelected(MenuItem selectedItem) {
+        log.log("MenuItem " + getName(selectedItem) + " selected");
+    }
+
+    private String getName(MenuItem selectedItem) {
+        String name = "";
+        if (selectedItem.getParent() != null) {
+            name = getName(selectedItem.getParent()) + "/";
+        }
+        return name + selectedItem.getText();
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/MenuBarNavigationKeyboard.html b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarNavigationKeyboard.html
new file mode 100644
index 0000000000..172d203f50
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarNavigationKeyboard.html
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.menubar.MenuBarNavigation?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#menu0</td>
+	<td>3,10</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>right</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>MenuItem File/Export../As PDF... selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#menu0</td>
+	<td>0,7</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>right</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>right</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>right</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>MenuItem Help selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#menu1</td>
+	<td>4,7</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>left</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>MenuItem Edit/Cut selected</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/MenuBarNavigationMouse.html b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarNavigationMouse.html
new file mode 100644
index 0000000000..20840993fa
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarNavigationMouse.html
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.menubar.MenuBarNavigation?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item0</td>
+	<td>13,8</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>41,4</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>32,2</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>MenuItem File/Export../As PDF... selected</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item1</td>
+	<td>13,11</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>18,11</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>MenuItem Edit/Copy selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item2</td>
+	<td>6,5</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>MenuItem Help selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item0</td>
+	<td>8,13</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>18,9</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>MenuItem File/Exit selected</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/MenuBarResize.html b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarResize.html
new file mode 100644
index 0000000000..97006323a2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarResize.html
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.menubar.MenuBarTest?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
+	<td>26,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>71,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>34,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>32,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item1</td>
+	<td>17,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>36,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>22,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item6</td>
+	<td>48,15</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>menubar-100pct-inside-500px</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.menubar.MenuBarTest</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>menubar-100pct-inside-500px-after-refresh</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item1</td>
+	<td>20,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>72,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>4,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item10</td>
+	<td>26,9</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>menubar-100pct-inside-900px</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::PID_Smenu#item0</td>
+	<td>19,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>66,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>6,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarTest::Root/VOverlay[2]/VMenuBar[0]#item10</td>
+	<td>43,3</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>menubar-900px-inside-900px</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/MenuBarRootItemSelectWithKeyboard.html b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarRootItemSelectWithKeyboard.html
new file mode 100644
index 0000000000..a53757a969
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarRootItemSelectWithKeyboard.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.menubar.MenuBarRootItemSelectWithKeyboard?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarRootItemSelectWithKeyboard::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item0</td>
+	<td>22,9</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarRootItemSelectWithKeyboard::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarRootItemSelectWithKeyboard::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>up</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarRootItemSelectWithKeyboard::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>right</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarRootItemSelectWithKeyboard::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>NoItemShouldBeSelected</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/MenuBarRootItemSelectWithKeyboard.java b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarRootItemSelectWithKeyboard.java
new file mode 100644
index 0000000000..f162386336
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarRootItemSelectWithKeyboard.java
@@ -0,0 +1,38 @@
+package com.vaadin.tests.components.menubar;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.MenuBar;
+import com.vaadin.ui.MenuBar.Command;
+import com.vaadin.ui.MenuBar.MenuItem;
+
+public class MenuBarRootItemSelectWithKeyboard extends TestBase {
+
+    @Override
+    protected void setup() {
+        Command c = new Command() {
+            public void menuSelected(MenuItem selectedItem) {
+                getMainWindow().showNotification(selectedItem.getText());
+
+            }
+        };
+
+        MenuBar root = new MenuBar();
+
+        MenuItem submenu = root.addItem("Hello", null);
+        submenu.addItem("World", c);
+
+        root.addItem("World", c);
+        addComponent(root);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "When selecting an root menu item from the menubar with the keyboard (enter) the selection should be removed";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5180;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/MenuBarRunsOutOfBrowser.html b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarRunsOutOfBrowser.html
new file mode 100755
index 0000000000..330a92898c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarRunsOutOfBrowser.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.menubar.MenuBarRunsOutOfBrowser?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>menu-top-right</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/MenuBarRunsOutOfBrowser.java b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarRunsOutOfBrowser.java
new file mode 100644
index 0000000000..314df2c8a4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarRunsOutOfBrowser.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.components.menubar;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.MenuBar;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class MenuBarRunsOutOfBrowser extends AbstractTestCase {
+
+    @Override
+    public void init() {
+        setTheme("runo");
+        Window main = new Window("Test");
+        main.setSizeFull();
+        setMainWindow(main);
+        main.getContent().setSizeFull();
+
+        MenuBar menuBar = new MenuBar();
+        menuBar.addItem("Test", new ThemeResource("icons/16/calendar.png"),
+                null);
+        menuBar.addItem("ABC", new ThemeResource("icons/16/document.png"), null);
+        menuBar.addItem("123", new ThemeResource("icons/16/help.png"), null);
+
+        main.getContent().addComponent(menuBar);
+        ((VerticalLayout) main.getContent()).setComponentAlignment(menuBar,
+                Alignment.TOP_RIGHT);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The menubar should be right aligned but not run out of the browser";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5894;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/MenuBarTest.java b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarTest.java
new file mode 100644
index 0000000000..e41652126d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarTest.java
@@ -0,0 +1,338 @@
+package com.vaadin.tests.components.menubar;
+
+import java.util.Date;
+import java.util.LinkedHashMap;
+
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.AbstractComponentTest;
+import com.vaadin.ui.MenuBar;
+import com.vaadin.ui.MenuBar.MenuItem;
+
+public class MenuBarTest extends AbstractComponentTest<MenuBar> {
+
+    private static final String CATEGORY_MENU_ITEMS = "Menu items";
+    private static final String CATEGORY_MENU_ITEM_STATES = "Menu item states";
+
+    private int rootItems = -1;
+    private int subItems = -1;
+    private int subLevels = -1;
+    private int subMenuDensity = -1;
+    private Integer subMenuSeparatorDensity = null;
+    private Boolean openRootMenuOnHover = false;
+    private int iconInterval = -1;
+    private Integer iconSize;
+    private Integer disabledDensity;
+    private Integer invisibleDensity;
+    private Integer checkableDensity;
+
+    @Override
+    protected Class<MenuBar> getTestClass() {
+        return MenuBar.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+        createRootMenuItemSelect(CATEGORY_MENU_ITEMS);
+        createSubMenuItemSelect(CATEGORY_MENU_ITEMS);
+        createSubMenuLevelsSelect(CATEGORY_MENU_ITEMS);
+        createSubMenuDensitySelect(CATEGORY_MENU_ITEMS);
+        createSubMenuSeparatorDensitySelect(CATEGORY_MENU_ITEMS);
+
+        createBooleanAction("OpenRootMenuOnHover", CATEGORY_FEATURES,
+                openRootMenuOnHover, setOpenRootOnHover);
+
+        createMenuItemIconIntervalSelect(CATEGORY_MENU_ITEM_STATES);
+        createMenuIconsSizeSelect(CATEGORY_MENU_ITEM_STATES);
+        createMenuItemDisabledDensitySelect(CATEGORY_MENU_ITEM_STATES);
+        createMenuItemInvisibleDensitySelect(CATEGORY_MENU_ITEM_STATES);
+        createMenuItemCheckableDensitySelect(CATEGORY_MENU_ITEM_STATES);
+
+    }
+
+    private void createRootMenuItemSelect(String category) {
+        createSelectAction("Root menu items", category,
+                createIntegerOptions(100), "10", createRootMenuItems);
+    }
+
+    private void createSubMenuItemSelect(String category) {
+        createSelectAction("Sub menu items", category,
+                createIntegerOptions(100), "10", createSubMenuItems);
+    }
+
+    private void createSubMenuLevelsSelect(String category) {
+        createSelectAction("Sub menu levels", category,
+                createIntegerOptions(100), "2", setSubMenuLevels);
+    }
+
+    private void createMenuIconsSizeSelect(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("16x16", 16);
+        options.put("32x32", 32);
+        options.put("64x64", 64);
+        createSelectAction("Icon size", category, options, "16x16", selectIcon);
+    }
+
+    private void createMenuItemIconIntervalSelect(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("None", 0);
+        options.put("All", 1);
+        options.put("Every second", 2);
+        options.put("Every third", 3);
+
+        createSelectAction("Icons", category, options, "None", setMenuIcons);
+    }
+
+    private void createSubMenuDensitySelect(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("All", 1);
+        options.put("Every second", 2);
+        options.put("Every third", 3);
+
+        createSelectAction("Sub sub menus", category, options, "Every third",
+                setSubMenuDensity);
+    }
+
+    private void createSubMenuSeparatorDensitySelect(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("No separators", null);
+        options.put("Between all", 1);
+        options.put("Between every second", 2);
+        options.put("Between every third", 3);
+
+        createSelectAction("Sub menu separators", category, options,
+                "No separators", setSubMenuSeparatorDensity);
+    }
+
+    private void createMenuItemDisabledDensitySelect(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("All enabled", null);
+        options.put("All disabled", 1);
+        options.put("Every second", 2);
+        options.put("Every third", 3);
+
+        createSelectAction("Enabled", category, options, "All enabled",
+                setMenuItemDisabledDensity);
+    }
+
+    private void createMenuItemInvisibleDensitySelect(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("All visible", null);
+        options.put("All invisible", 1);
+        options.put("Every second", 2);
+        options.put("Every third", 3);
+
+        createSelectAction("Visible", category, options, "All visible",
+                setMenuItemInvisibleDensity);
+    }
+
+    private void createMenuItemCheckableDensitySelect(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("No items checkable", null);
+        options.put("All checkable", 1);
+        options.put("Every second", 2);
+        options.put("Every third", 3);
+
+        createSelectAction("Checkable", category, options,
+                "No items checkable", setMenuItemCheckableDensity);
+    }
+
+    /* COMMANDS */
+    Command<MenuBar, Integer> createRootMenuItems = new Command<MenuBar, Integer>() {
+
+        public void execute(MenuBar c, Integer value, Object data) {
+            rootItems = value;
+            createRootItems(c);
+        }
+    };
+
+    Command<MenuBar, Integer> createSubMenuItems = new Command<MenuBar, Integer>() {
+
+        public void execute(MenuBar c, Integer value, Object data) {
+            subItems = value;
+            createSubItems(c);
+        }
+    };
+
+    Command<MenuBar, Integer> setSubMenuLevels = new Command<MenuBar, Integer>() {
+
+        public void execute(MenuBar c, Integer value, Object data) {
+            subLevels = value;
+            createSubItems(c);
+        }
+    };
+    private Command<MenuBar, Integer> setMenuIcons = new Command<MenuBar, Integer>() {
+
+        public void execute(MenuBar c, Integer value, Object data) {
+            iconInterval = value;
+            updateIcons(c);
+        }
+    };
+
+    private Command<MenuBar, Integer> setSubMenuDensity = new Command<MenuBar, Integer>() {
+
+        public void execute(MenuBar c, Integer value, Object data) {
+            subMenuDensity = value;
+            createSubItems(c);
+        }
+    };
+
+    private Command<MenuBar, Integer> setMenuItemDisabledDensity = new Command<MenuBar, Integer>() {
+
+        public void execute(MenuBar c, Integer value, Object data) {
+            disabledDensity = value;
+            createRootItems(c);
+        }
+    };
+
+    private Command<MenuBar, Integer> setMenuItemInvisibleDensity = new Command<MenuBar, Integer>() {
+
+        public void execute(MenuBar c, Integer value, Object data) {
+            invisibleDensity = value;
+            createRootItems(c);
+        }
+    };
+
+    private Command<MenuBar, Integer> setMenuItemCheckableDensity = new Command<MenuBar, Integer>() {
+
+        public void execute(MenuBar c, Integer value, Object data) {
+            checkableDensity = value;
+            createRootItems(c);
+        }
+    };
+
+    private Command<MenuBar, Integer> setSubMenuSeparatorDensity = new Command<MenuBar, Integer>() {
+
+        public void execute(MenuBar c, Integer value, Object data) {
+            subMenuSeparatorDensity = value;
+            createSubItems(c);
+        }
+    };
+
+    private Command<MenuBar, Boolean> setOpenRootOnHover = new Command<MenuBar, Boolean>() {
+
+        public void execute(MenuBar c, Boolean value, Object data) {
+            openRootMenuOnHover = value;
+            c.setAutoOpen(value);
+        }
+
+    };
+
+    private Command<MenuBar, Integer> selectIcon = new Command<MenuBar, Integer>() {
+
+        public void execute(MenuBar c, Integer value, Object data) {
+            iconSize = value;
+            updateIcons(c);
+        }
+    };
+
+    /* End of commands */
+
+    private MenuBar.Command menuCommand = new MenuBar.Command() {
+
+        public void menuSelected(MenuItem selectedItem) {
+            log("Menu item '" + selectedItem.getText() + "' selected");
+
+        }
+    };
+
+    protected void createSubItems(MenuBar c) {
+        for (MenuItem rootItem : c.getItems()) {
+            createSubItems(rootItem, 1);
+        }
+        updateIcons(c);
+
+    }
+
+    private void createSubItems(MenuItem parent, int level) {
+        if (level > subLevels) {
+            return;
+        }
+
+        parent.removeChildren();
+        for (int i = 0; i < subItems; i++) {
+            if (subMenuSeparatorDensity != null && i > 0
+                    && i % subMenuSeparatorDensity == 0) {
+                parent.addSeparator();
+            }
+
+            MenuItem subMenuItem = parent.addItem("Sub menu " + parent.getId()
+                    + "/" + (i + 1), menuCommand);
+
+            if (disabledDensity != null && i % disabledDensity == 0) {
+                subMenuItem.setEnabled(false);
+            }
+            if (invisibleDensity != null && i % invisibleDensity == 0) {
+                subMenuItem.setVisible(false);
+            }
+
+            if (i % subMenuDensity == 0 && level < subLevels) {
+                subMenuItem.setCommand(null);
+                createSubItems(subMenuItem, level + 1);
+            }
+
+            if (!subMenuItem.hasChildren() && level > 0
+                    && checkableDensity != null && i % checkableDensity == 0) {
+                subMenuItem.setCheckable(true);
+            }
+        }
+
+    }
+
+    protected void updateIcons(MenuBar c) {
+        int idx = 0;
+        for (MenuItem rootItem : c.getItems()) {
+            updateIcons(rootItem, idx++);
+        }
+    }
+
+    private void updateIcons(MenuItem item, int idx) {
+        if (iconInterval > 0 && idx % iconInterval == 0) {
+            item.setIcon(getIcon());
+        } else {
+            item.setIcon(null);
+        }
+        if (item.getChildren() != null) {
+            int i = 0;
+            for (MenuItem child : item.getChildren()) {
+                updateIcons(child, i++);
+            }
+        }
+    }
+
+    private long iconCacheIndex = new Date().getTime();
+
+    private Resource getIcon() {
+        String resourceID = null;
+        if (iconSize == 16) {
+            resourceID = "../runo/icons/16/user.png";
+        } else if (iconSize == 32) {
+            resourceID = "../runo/icons/32/user.png";
+        } else if (iconSize == 64) {
+            resourceID = "../runo/icons/64/user.png";
+        }
+
+        if (resourceID != null) {
+            return new ThemeResource(resourceID + "?" + iconCacheIndex++);
+        }
+        return null;
+    }
+
+    protected void createRootItems(MenuBar c) {
+        // Remove all existing items
+        c.removeItems();
+        for (int i = 0; i < rootItems; i++) {
+            MenuItem rootItem = c.addItem("Root menu " + (i + 1), null);
+            if (disabledDensity != null && i % disabledDensity == 0) {
+                rootItem.setEnabled(false);
+            }
+            if (invisibleDensity != null && i % invisibleDensity == 0) {
+                rootItem.setVisible(false);
+            }
+        }
+        createSubItems(c);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/MenuBarToolTips.html b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarToolTips.html
new file mode 100644
index 0000000000..28bcc3a221
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarToolTips.html
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.menubar.MenuBarToolTips?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item0</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>1000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>File menu</td>
+</tr>
+<tr>
+	<td>mouseOut</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item0</td>
+	<td>18,11</td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>1000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>File - Foo menu</td>
+</tr>
+<tr>
+	<td>mouseOut</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
+	<td>830,200</td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item1</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>1000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>Edit menu</td>
+</tr>
+<tr>
+	<td>mouseOut</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
+	<td>625,184</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VMenuBar[0]#item1</td>
+	<td>9,6</td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VOverlay[0]/VMenuBar[0]#item1</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>1000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>Edit - Bar menu</td>
+</tr>
+<tr>
+	<td>mouseOut</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenuBarToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/MenuBarToolTips.java b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarToolTips.java
new file mode 100644
index 0000000000..0ef31dc5dc
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/MenuBarToolTips.java
@@ -0,0 +1,50 @@
+package com.vaadin.tests.components.menubar;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.MenuBar;
+import com.vaadin.ui.MenuBar.MenuItem;
+
+public class MenuBarToolTips extends TestBase {
+
+    @Override
+    protected void setup() {
+        MenuBar bar = new MenuBar();
+        bar.setDescription("Root Menu");
+
+        // File
+        final MenuItem file = bar.addItem("File", null);
+        file.setDescription("File menu");
+
+        MenuItem foo = file.addItem("Foo", null);
+        foo.setDescription("File - Foo menu");
+
+        MenuItem foobar = foo.addItem("Foobar", null);
+        foobar.setDescription("File - Foo menu - Foobar menu");
+
+        MenuItem bar2 = file.addItem("Bar", null);
+        bar2.setDescription("File - Bar menu");
+
+        // Edit
+        MenuItem edit = bar.addItem("Edit", null);
+        edit.setDescription("Edit menu");
+
+        MenuItem foo2 = edit.addItem("Foo", null);
+        foo2.setDescription("Edit - Foo menu");
+
+        MenuItem bar3 = edit.addItem("Bar", null);
+        bar3.setDescription("Edit - Bar menu");
+
+        addComponent(bar);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "There should be tooltips on the menubar and its items";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5919;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/Menubars.html b/tests/testbench/com/vaadin/tests/components/menubar/Menubars.html
new file mode 100644
index 0000000000..93d77f9f36
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/Menubars.html
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
+<title>com.vaadin.tests.components.menubar.Menubars</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">com.vaadin.tests.components.menubar.Menubars</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.menubar.Menubars?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenubars::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[6]/VMenuBar[0]#item26</td>
+	<td>16,9</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>more-menu-for-100pct-wide</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenubars::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VMenuBar[0]#item3</td>
+	<td>21,14</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>more-menu-for-200px-wide</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenubars::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VMenuBar[0]#item2</td>
+	<td>27,8</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenubars::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>Sub menu 3/1</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>submenu-item3-undef-wide</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenubars::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+	<td>7,3</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>error</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenubars::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+	<td>52,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenubars::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
+	<td>11,4</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsmenubarMenubars::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VMenuBar[0]#item0</td>
+	<td>18,12</td>
+</tr>
+<!--Ensure the sub menu was not opened-->
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/menubar/Menubars.java b/tests/testbench/com/vaadin/tests/components/menubar/Menubars.java
new file mode 100644
index 0000000000..593b3b7fa5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/menubar/Menubars.java
@@ -0,0 +1,88 @@
+package com.vaadin.tests.components.menubar;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.MenuBar;
+import com.vaadin.ui.MenuBar.MenuItem;
+
+public class Menubars extends ComponentTestCase<MenuBar> {
+
+    @Override
+    protected Class<MenuBar> getTestClass() {
+        return MenuBar.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+
+        MenuBar m;
+        m = createMenuBar("This is an undefined wide menubar with 3 items", 3);
+
+        m.setWidth(null);
+        addTestComponent(m);
+
+        m = createMenuBar(
+                "This is an undefined wide menubar with fixed 100px height (4 items)",
+                4);
+        m.setWidth(null);
+        m.setHeight("100px");
+        addTestComponent(m);
+
+        m = createMenuBar("This is a 200px wide menubar with 10 items", 10);
+        m.setWidth("200px");
+        addTestComponent(m);
+
+        m = createMenuBar("This is a 200px wide menubar with 2 items", 2);
+        m.setWidth("200px");
+        addTestComponent(m);
+
+        m = createMenuBar("This is a 100% wide menubar with 3 items ", 3);
+        m.setWidth("100%");
+        addTestComponent(m);
+
+        m = createMenuBar("This is a 100% wide menubar with 40 items ", 40);
+        m.setWidth("100%");
+        addTestComponent(m);
+
+        m = createMenuBar(
+                "This is a 100% wide menubar with fixed 65px height (5 items). ",
+                5);
+        m.setWidth("100%");
+        m.setHeight("65px");
+
+        addTestComponent(m);
+
+    }
+
+    private MenuBar createMenuBar(String text, int items) {
+        MenuBar m = new MenuBar();
+        m.setCaption(text);
+
+        for (int i = 1; i <= items; i++) {
+            MenuItem mi = m.addItem("Item " + i, null);
+            for (int j = 1; j <= items; j++) {
+                mi.addItem("Sub menu " + i + "/" + j, null);
+            }
+        }
+
+        return m;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A generic test for MenuBars in different configurations";
+    }
+
+    @Override
+    protected List<Component> createActions() {
+        ArrayList<Component> actions = new ArrayList<Component>();
+        actions.add(createErrorIndicatorAction(false));
+        actions.add(createEnabledAction(true));
+
+        return actions;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/nativebutton/NativeButtonDisableOnClick.html b/tests/testbench/com/vaadin/tests/components/nativebutton/NativeButtonDisableOnClick.html
new file mode 100644
index 0000000000..75eab71892
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/nativebutton/NativeButtonDisableOnClick.html
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.nativebutton.NativeButtonTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--value change listener-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_Smenu#item0</td>
+	<td>37,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>28,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>35,8</td>
+</tr>
+<!--disable on click-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_Smenu#item0</td>
+	<td>39,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>33,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>22,4</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_SLog_row_0</td>
+	<td>1. Command: /Disable on click(true)</td>
+</tr>
+<!--click button-->
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_StestComponent</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_StestComponent</td>
+	<td>v-disabled</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_SLog_row_0</td>
+	<td>2. ClickEvent</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_StestComponent</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_SLog_row_0</td>
+	<td>2. ClickEvent</td>
+</tr>
+<!--re-enable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_Smenu#item0</td>
+	<td>35,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>34,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>15,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_Smenu#item0</td>
+	<td>43,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>37,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>33,6</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_SLog_row_0</td>
+	<td>4. Command: /Enabled(true)</td>
+</tr>
+<tr>
+	<td>assertNotCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_StestComponent</td>
+	<td>v-disabled</td>
+</tr>
+<!--no longer disable on click-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_Smenu#item0</td>
+	<td>25,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>39,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>36,3</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_StestComponent</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_SLog_row_0</td>
+	<td>6. ClickEvent</td>
+</tr>
+<tr>
+	<td>assertNotCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentsnativebuttonNativeButtonTest::PID_StestComponent</td>
+	<td>v-disabled</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/nativebutton/NativeButtonTest.java b/tests/testbench/com/vaadin/tests/components/nativebutton/NativeButtonTest.java
new file mode 100644
index 0000000000..d806790f4d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/nativebutton/NativeButtonTest.java
@@ -0,0 +1,12 @@
+package com.vaadin.tests.components.nativebutton;
+
+import com.vaadin.tests.components.button.Buttons2;
+import com.vaadin.ui.NativeButton;
+
+public class NativeButtonTest extends Buttons2<NativeButton> {
+
+    @Override
+    protected Class<NativeButton> getTestClass() {
+        return NativeButton.class;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/nativeselect/NativeSelects.java b/tests/testbench/com/vaadin/tests/components/nativeselect/NativeSelects.java
new file mode 100644
index 0000000000..5f19073e66
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/nativeselect/NativeSelects.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.components.nativeselect;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.tests.components.select.AbstractSelectTestCase;
+import com.vaadin.ui.NativeSelect;
+
+public class NativeSelects extends AbstractSelectTestCase<NativeSelect> {
+
+    @Override
+    protected Class<NativeSelect> getTestClass() {
+        return NativeSelect.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+        createColumnSelectAction();
+    }
+
+    private void createColumnSelectAction() {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("-", 0);
+        for (int i = 1; i <= 10; i++) {
+            options.put(String.valueOf(i), i);
+        }
+        options.put("50", 50);
+        options.put("100", 100);
+        options.put("1000", 1000);
+
+        super.createSelectAction("Columns", CATEGORY_DATA_SOURCE, options, "-",
+                columnsAction);
+
+    }
+
+    private Command<NativeSelect, Integer> columnsAction = new Command<NativeSelect, Integer>() {
+
+        public void execute(NativeSelect c, Integer value, Object data) {
+            c.setColumns(value);
+        }
+    };
+}
diff --git a/tests/testbench/com/vaadin/tests/components/notification/CloseErrorNotificationWithEscape.html b/tests/testbench/com/vaadin/tests/components/notification/CloseErrorNotificationWithEscape.html
new file mode 100644
index 0000000000..288fd65c66
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/notification/CloseErrorNotificationWithEscape.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>CloseErrorNotificationWithEscape</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">CloseErrorNotificationWithEscape</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.notification.Notifications?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=Error</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::Root/VNotification[0]/HTML[0]/domChild[0]</td>
+	<td>Hello world</td>
+</tr>
+<tr>
+	<td>keyDown</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::Root/VNotification[0]/HTML[0]/domChild[0]</td>
+	<td>\\27</td>
+</tr>
+<!-- Fade delay is 400 ms by default - VNotification -->
+<tr>
+	<td>waitForElementNotPresent</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::Root/VNotification[0]</td>
+	<td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/notification/Notifications.html b/tests/testbench/com/vaadin/tests/components/notification/Notifications.html
new file mode 100644
index 0000000000..4157af5450
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/notification/Notifications.html
@@ -0,0 +1,296 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.notification.Notifications?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>focus</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextArea[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=Error</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=Humanized</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>human-hello-world</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[2]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=Error</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>error-hello-world</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[2]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>500</td>
+	<td></td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=Warning</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>warning-hello-world</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[2]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=Tray</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tray-hello-world</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[2]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextArea[0]</td>
+	<td>Hello world&lt;br/&gt;Second row&lt;br/&gt;Third row which is very, very much longer than the other two rows</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=Humanized</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>human-three-rows</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[2]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=Error</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>error-three-rows</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[2]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>500</td>
+	<td></td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=Warning</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>warning-three-rows</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[2]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=Tray</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tray-three-rows</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[2]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextArea[0]</td>
+	<td>82,107</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextArea[0]</td>
+	<td>A very long row that should cause the notification to wrap onto several lines. Still the notification box should only be as wide as needed. Adding even more text here so that the tray notification also wraps...</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=Humanized</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>human-long-wrapped-row</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[2]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=Error</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>error-long-wrapped-row</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[2]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>500</td>
+	<td></td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=Warning</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>warning-long-wrapped-row</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[2]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=Tray</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotifications::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tray-long-wrapped-row</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/notification/Notifications.java b/tests/testbench/com/vaadin/tests/components/notification/Notifications.java
new file mode 100644
index 0000000000..e938495e9f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/notification/Notifications.java
@@ -0,0 +1,58 @@
+package com.vaadin.tests.components.notification;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window.Notification;
+
+public class Notifications extends TestBase implements ClickListener {
+
+    private static final String CAPTION = "CAPTION";
+    private TextField tf;
+    private NativeSelect type;
+
+    @SuppressWarnings("deprecation")
+    @Override
+    protected void setup() {
+        tf = new TextField("Text", "Hello world");
+        tf.setRows(10);
+        addComponent(tf);
+        type = new NativeSelect();
+        type.setNullSelectionAllowed(false);
+        type.addContainerProperty(CAPTION, String.class, "");
+        type.setItemCaptionPropertyId(CAPTION);
+        type.addItem(Notification.TYPE_HUMANIZED_MESSAGE)
+                .getItemProperty(CAPTION).setValue("Humanized");
+        type.addItem(Notification.TYPE_ERROR_MESSAGE).getItemProperty(CAPTION)
+                .setValue("Error");
+        type.addItem(Notification.TYPE_WARNING_MESSAGE)
+                .getItemProperty(CAPTION).setValue("Warning");
+        type.addItem(Notification.TYPE_TRAY_NOTIFICATION)
+                .getItemProperty(CAPTION).setValue("Tray");
+        type.setValue(type.getItemIds().iterator().next());
+        addComponent(type);
+        Button showNotification = new Button("Show notification", this);
+        addComponent(showNotification);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Generic test case for notifications";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void buttonClick(ClickEvent event) {
+        Notification n = new Notification((String) tf.getValue(),
+                (Integer) type.getValue());
+        event.getButton().getWindow().showNotification(n);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/notification/NotificationsHtmlAllowed.html b/tests/testbench/com/vaadin/tests/components/notification/NotificationsHtmlAllowed.html
new file mode 100644
index 0000000000..b4d76edae9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/notification/NotificationsHtmlAllowed.html
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">NotificationsHtmlAllowed</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.notification.NotificationsHtmlAllowed?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotificationsHtmlAllowed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>view-html</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[4]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotificationsHtmlAllowed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
+	<td>60,0</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotificationsHtmlAllowed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>view-plain</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[4]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotificationsHtmlAllowed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VCheckBox[0]/domChild[0]</td>
+	<td>51,7</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotificationsHtmlAllowed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>window-plain</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[4]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotificationsHtmlAllowed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
+	<td>80,2</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsnotificationNotificationsHtmlAllowed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>window-html</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[4]</td>
+	<td>0,0</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/notification/NotificationsHtmlAllowed.java b/tests/testbench/com/vaadin/tests/components/notification/NotificationsHtmlAllowed.java
new file mode 100644
index 0000000000..9157c30174
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/notification/NotificationsHtmlAllowed.java
@@ -0,0 +1,76 @@
+package com.vaadin.tests.components.notification;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.Notification;
+
+public class NotificationsHtmlAllowed extends TestBase implements ClickListener {
+
+    private TextArea messageField;
+    private CheckBox htmlAllowedBox;
+    private TextField captionField;
+    private Window subwindow;
+    private CheckBox showInSubwindow;
+
+    @Override
+    protected void setup() {
+        captionField = new TextField("Caption", "Hello <u>world</u>");
+        addComponent(captionField);
+        captionField.focus();
+
+        messageField = new TextArea("Message",
+                "Hello <i>world</i>\nWith a newline <br/>And a html line break");
+        messageField.setRows(10);
+        addComponent(messageField);
+
+        htmlAllowedBox = new CheckBox("Html content allowed", true);
+        addComponent(htmlAllowedBox);
+
+        showInSubwindow = new CheckBox("Show in subwindow", false);
+        addComponent(showInSubwindow);
+
+        Button showNotification = new Button("Show notification", this);
+        addComponent(showNotification);
+
+        subwindow = new Window("Sub window");
+        subwindow.setPositionX(400);
+        subwindow.setPositionY(0);
+        getMainWindow().addWindow(subwindow);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Test case for htmlAllowed in notifications";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6097;
+    }
+
+    public void buttonClick(ClickEvent event) {
+        Notification n = makeNotification();
+        Window window;
+        if (showInSubwindow.booleanValue()) {
+            window = subwindow;
+        } else {
+            window = event.getButton().getWindow();
+        }
+        window.showNotification(n);
+
+    }
+
+    private Notification makeNotification() {
+        Notification n = new Notification((String) captionField.getValue(),
+                (String) messageField.getValue(),
+                Notification.TYPE_HUMANIZED_MESSAGE,
+                htmlAllowedBox.booleanValue());
+        return n;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/optiongroup/DisabledOptionGroupItems.html b/tests/testbench/com/vaadin/tests/components/optiongroup/DisabledOptionGroupItems.html
new file mode 100644
index 0000000000..01c033e4fa
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/optiongroup/DisabledOptionGroupItems.html
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>DisabledOptionGroupItems</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">DisabledOptionGroupItems</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.optiongroup.DisabledOptionGroupItems?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsoptiongroupDisabledOptionGroupItems::PID_Sbuttonaction-Invert disabled items/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>inverted-disable-state</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsoptiongroupDisabledOptionGroupItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VOptionGroup[0]/domChild[2]/domChild[0]</td>
+	<td>7,5</td>
+</tr>
+<!--Try to select disabled item - should not cause selection to change-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsoptiongroupDisabledOptionGroupItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VOptionGroup[0]/domChild[0]/domChild[0]</td>
+	<td>7,5</td>
+</tr>
+<!--Ensure "Helsinki" is still selected-->
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsoptiongroupDisabledOptionGroupItems::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VOptionGroup[0]/domChild[2]/domChild[0]</td>
+	<td>on</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/optiongroup/DisabledOptionGroupItems.java b/tests/testbench/com/vaadin/tests/components/optiongroup/DisabledOptionGroupItems.java
new file mode 100644
index 0000000000..4668ef5ab8
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/optiongroup/DisabledOptionGroupItems.java
@@ -0,0 +1,91 @@
+package com.vaadin.tests.components.optiongroup;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.OptionGroup;
+
+public class DisabledOptionGroupItems extends ComponentTestCase<OptionGroup> {
+
+    private static final List<String> cities = Arrays.asList(new String[] {
+            "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris",
+            "Stockholm" });
+
+    private static final String NULL_SELECTION_ID = "Berlin";
+
+    @Override
+    protected Class<OptionGroup> getTestClass() {
+        return OptionGroup.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+
+        OptionGroup og = createOptionGroup("");
+        og.setItemEnabled("Helsinki", false);
+        og.setItemEnabled("Paris", false);
+        og.setValue(Arrays.asList("Helsinki"));
+        og.setNullSelectionAllowed(true);
+        og.setNullSelectionItemId(NULL_SELECTION_ID);
+        addTestComponent(og);
+
+        og = createOptionGroup("");
+        og.setMultiSelect(true);
+        og.setValue(Arrays.asList("Helsinki"));
+        og.setNullSelectionAllowed(true);
+        og.setItemEnabled("Helsinki", false);
+        og.setItemEnabled("Paris", false);
+        addTestComponent(og);
+
+    }
+
+    @Override
+    protected void createCustomActions(List<Component> actions) {
+        actions.add(createInvertDisabledItemsAction());
+        actions.add(createToggleSelectionModeAction());
+
+    }
+
+    private Component createToggleSelectionModeAction() {
+        return createButtonAction("Toggle selection mode",
+                new Command<OptionGroup, Boolean>() {
+
+                    public void execute(OptionGroup og, Boolean value,
+                            Object data) {
+                        if (og.isMultiSelect()) {
+                            og.setMultiSelect(false);
+                            og.setNullSelectionItemId(NULL_SELECTION_ID);
+                        } else {
+                            og.setNullSelectionItemId(null);
+                            og.setMultiSelect(true);
+                        }
+                    }
+                });
+    }
+
+    private Component createInvertDisabledItemsAction() {
+        return createButtonAction("Invert disabled items",
+                new Command<OptionGroup, Boolean>() {
+
+                    public void execute(OptionGroup c, Boolean value,
+                            Object data) {
+                        for (Object itemId : c.getItemIds()) {
+                            c.setItemEnabled(itemId, !c.isItemEnabled(itemId));
+                        }
+                    }
+                });
+    }
+
+    private OptionGroup createOptionGroup(String caption) {
+        OptionGroup og = new OptionGroup(caption, cities);
+        og.setImmediate(true);
+        return og;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Test case for disabled items in an OptionGroup";
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/optiongroup/HtmlOptionGroupItems.html b/tests/testbench/com/vaadin/tests/components/optiongroup/HtmlOptionGroupItems.html
new file mode 100644
index 0000000000..d74354299d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/optiongroup/HtmlOptionGroupItems.html
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">HtmlOptionGroupItems</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.optiongroup.HtmlOptionGroupItems?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsoptiongroupHtmlOptionGroupItems::PID_Sbuttonaction-Toggle html mode/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>html-and-text</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsoptiongroupHtmlOptionGroupItems::PID_Sbuttonaction-Toggle html mode/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>text-and-html</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/optiongroup/HtmlOptionGroupItems.java b/tests/testbench/com/vaadin/tests/components/optiongroup/HtmlOptionGroupItems.java
new file mode 100644
index 0000000000..0f6ae8917a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/optiongroup/HtmlOptionGroupItems.java
@@ -0,0 +1,104 @@
+package com.vaadin.tests.components.optiongroup;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.OptionGroup;
+
+public class HtmlOptionGroupItems extends ComponentTestCase<OptionGroup> {
+
+    private static final List<String> cities = Arrays.asList(new String[] {
+            "<i>Berlin</i>", "<b>Brussels</b>", "<u>H</u>elsinki",
+            "<span style='font-size: 20px'>Madrid</span>",
+            "<pre><i>Oslo</i>\nNorway</pre>", "<button>Paris</button>",
+            "<input type='text' value='Stockholm' />" });
+
+    private static final String NULL_SELECTION_ID = cities.get(0);
+
+    @Override
+    protected Class<OptionGroup> getTestClass() {
+        return OptionGroup.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+
+        OptionGroup og = createOptionGroup("");
+        og.setItemEnabled(cities.get(2), false);
+        og.setItemEnabled(cities.get(5), false);
+        og.setValue(Arrays.asList(cities.get(2)));
+        og.setNullSelectionAllowed(true);
+        og.setNullSelectionItemId(NULL_SELECTION_ID);
+        addTestComponent(og);
+
+        og = createOptionGroup("");
+        og.setMultiSelect(true);
+        og.setHtmlContentAllowed(true);
+        og.setValue(Arrays.asList(cities.get(2)));
+        og.setNullSelectionAllowed(true);
+        og.setItemEnabled(cities.get(2), false);
+        og.setItemEnabled(cities.get(5), false);
+        addTestComponent(og);
+
+    }
+
+    @Override
+    protected void createCustomActions(List<Component> actions) {
+        actions.add(createInvertDisabledItemsAction());
+        actions.add(createToggleSelectionModeAction());
+        actions.add(createInvertHtmlItemsAction());
+    }
+
+    private Component createInvertHtmlItemsAction() {
+        return createButtonAction("Toggle html mode",
+                new Command<OptionGroup, Boolean>() {
+                    public void execute(OptionGroup og, Boolean value,
+                            Object data) {
+                        og.setHtmlContentAllowed(!og.isHtmlContentAllowed());
+                    }
+                });
+    }
+
+    private Component createToggleSelectionModeAction() {
+        return createButtonAction("Toggle selection mode",
+                new Command<OptionGroup, Boolean>() {
+
+                    public void execute(OptionGroup og, Boolean value,
+                            Object data) {
+                        if (og.isMultiSelect()) {
+                            og.setMultiSelect(false);
+                            og.setNullSelectionItemId(NULL_SELECTION_ID);
+                        } else {
+                            og.setNullSelectionItemId(null);
+                            og.setMultiSelect(true);
+                        }
+                    }
+                });
+    }
+
+    private Component createInvertDisabledItemsAction() {
+        return createButtonAction("Invert disabled items",
+                new Command<OptionGroup, Boolean>() {
+
+                    public void execute(OptionGroup c, Boolean value,
+                            Object data) {
+                        for (Object itemId : c.getItemIds()) {
+                            c.setItemEnabled(itemId, !c.isItemEnabled(itemId));
+                        }
+                    }
+                });
+    }
+
+    private OptionGroup createOptionGroup(String caption) {
+        OptionGroup og = new OptionGroup(caption, cities);
+        og.setImmediate(true);
+        return og;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Test case for html items in an OptionGroup";
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroupItemIcons.html b/tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroupItemIcons.html
new file mode 100644
index 0000000000..978d911a2d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroupItemIcons.html
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>OptionGroupItemIcons</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">OptionGroupItemIcons</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.optiongroup.OptionGroups?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsoptiongroupOptionGroups::PID_Smenu#item0</td>
+	<td>34,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsoptiongroupOptionGroups::Root/VOverlay[0]/VMenuBar[0]#item1</td>
+	<td>36,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsoptiongroupOptionGroups::Root/VOverlay[1]/VMenuBar[0]#item6</td>
+	<td>45,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsoptiongroupOptionGroups::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>31,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>radio</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsoptiongroupOptionGroups::PID_Smenu#item0</td>
+	<td>44,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsoptiongroupOptionGroups::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>31,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsoptiongroupOptionGroups::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>79,12</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>check</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroupMultipleValueChange.java b/tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroupMultipleValueChange.java
new file mode 100644
index 0000000000..29a81720c7
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroupMultipleValueChange.java
@@ -0,0 +1,41 @@
+package com.vaadin.tests.components.optiongroup;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.OptionGroup;
+
+public class OptionGroupMultipleValueChange extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Clicking on the description of an option should behave exactly like clicking on the radio button. No extra 'null' valuechange event should be sent";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3066;
+    }
+
+    @Override
+    protected void setup() {
+        final OptionGroup og = new OptionGroup();
+        og.addItem("Clicking on the text might cause an extra valuechange event");
+        og.addItem("Second option, same thing");
+        og.setImmediate(true);
+        addComponent(og);
+
+        final Label events = new Label("", Label.CONTENT_PREFORMATTED);
+        events.setWidth(null);
+        addComponent(events);
+
+        og.addListener(new Property.ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                String s = "ValueChange: " + event.getProperty().getValue();
+                events.setValue(events.getValue() + "\n" + s);
+            }
+        });
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroups.java b/tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroups.java
new file mode 100644
index 0000000000..1e752e7c26
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroups.java
@@ -0,0 +1,67 @@
+package com.vaadin.tests.components.optiongroup;
+
+import java.util.Collection;
+import java.util.LinkedHashMap;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.select.AbstractSelectTestCase;
+import com.vaadin.ui.OptionGroup;
+
+public class OptionGroups extends AbstractSelectTestCase<OptionGroup> {
+
+    @Override
+    protected Class<OptionGroup> getTestClass() {
+        return OptionGroup.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+
+        createDisabledItemsMultiToggle("Disabled items");
+        createBooleanAction("HTML content allowed", CATEGORY_STATE, false,
+                new Command<OptionGroup, Boolean>() {
+                    public void execute(OptionGroup og, Boolean value,
+                            Object data) {
+                        og.setHtmlContentAllowed(value.booleanValue());
+                    }
+                });
+        createIconToggle("Item icons");
+    }
+
+    private void createIconToggle(String string) {
+        LinkedHashMap<String, ThemeResource> options = new LinkedHashMap<String, ThemeResource>();
+        options.put("-", null);
+        options.put("16x16", ICON_16_USER_PNG_CACHEABLE);
+        options.put("32x32", ICON_32_ATTENTION_PNG_CACHEABLE);
+        options.put("64x64", ICON_64_EMAIL_REPLY_PNG_CACHEABLE);
+
+        createSelectAction(string, CATEGORY_DECORATIONS, options, options
+                .keySet().iterator().next(),
+                new Command<OptionGroup, ThemeResource>() {
+                    public void execute(OptionGroup c, ThemeResource icon,
+                            Object data) {
+                        Collection<?> itemIds = c.getItemIds();
+                        for (Object itemId : itemIds) {
+                            c.setItemIcon(itemId, icon);
+                        }
+                    }
+                });
+    }
+
+    private void createDisabledItemsMultiToggle(String category) {
+        for (Object id : getComponent().getItemIds()) {
+            createBooleanAction(id.toString() + " - enabled", category, true,
+                    enabledItemCommand, id);
+        }
+    }
+
+    private Command<OptionGroup, Boolean> enabledItemCommand = new Command<OptionGroup, Boolean>() {
+
+        public void execute(OptionGroup c, Boolean value, Object data) {
+            c.setItemEnabled(data, value);
+
+        }
+    };
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/orderedlayout/HorizontalLayoutTest.java b/tests/testbench/com/vaadin/tests/components/orderedlayout/HorizontalLayoutTest.java
new file mode 100644
index 0000000000..b06179efd7
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/orderedlayout/HorizontalLayoutTest.java
@@ -0,0 +1,14 @@
+package com.vaadin.tests.components.orderedlayout;
+
+import com.vaadin.tests.components.AbstractOrderedLayoutTest;
+import com.vaadin.ui.HorizontalLayout;
+
+public class HorizontalLayoutTest extends
+        AbstractOrderedLayoutTest<HorizontalLayout> {
+
+    @Override
+    protected Class<HorizontalLayout> getTestClass() {
+        return HorizontalLayout.class;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/orderedlayout/LayoutClickListenerTest.html b/tests/testbench/com/vaadin/tests/components/orderedlayout/LayoutClickListenerTest.html
new file mode 100644
index 0000000000..6b850fb52a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/orderedlayout/LayoutClickListenerTest.html
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>LayoutClickListenerTest</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">LayoutClickListenerTest</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.orderedlayout.LayoutClickListenerTest?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VLink[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[2]/VFilterSelect[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VTabsheet[0]/VTabsheetPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VTabsheet[0]/VTabsheetPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VTabsheet[0]/VTabsheetPanel[0]/VVerticalLayout[0]/ChildComponentContainer[2]/VLink[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[3]/VTabsheet[0]/VTabsheetPanel[0]/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[4]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[4]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[4]/VVerticalLayout[0]/ChildComponentContainer[2]/VLink[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[4]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsorderedlayoutLayoutClickListenerTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>everything_clicked</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/orderedlayout/LayoutClickListenerTest.java b/tests/testbench/com/vaadin/tests/components/orderedlayout/LayoutClickListenerTest.java
new file mode 100644
index 0000000000..4f4faf15bb
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/orderedlayout/LayoutClickListenerTest.java
@@ -0,0 +1,97 @@
+package com.vaadin.tests.components.orderedlayout;
+
+import java.util.Arrays;
+
+import com.vaadin.event.LayoutEvents.LayoutClickEvent;
+import com.vaadin.event.LayoutEvents.LayoutClickListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class LayoutClickListenerTest extends TestBase {
+
+    @Override
+    protected void setup() {
+
+        // Create a grid layout with click events
+        final GridLayout layout = new GridLayout(3, 2);
+        layout.addStyleName("border");
+        layout.setSpacing(true);
+        layout.setSizeFull();
+
+        // Add some components to the layout
+        layout.addComponent(new TextField(null, "Click here"));
+        layout.addComponent(new Link("Click here", null));
+
+        Select select = new Select(null, Arrays.asList("Click here"));
+        select.select("Click here");
+        layout.addComponent(select);
+
+        // Tab content
+        VerticalLayout l1 = new VerticalLayout();
+        l1.setMargin(true);
+        l1.addComponent(new Label("This is a label."));
+        l1.addComponent(new TextField(null, "Click here"));
+        l1.addComponent(new Link("Click here", null));
+
+        TabSheet t = new TabSheet();
+        t.setHeight("200px");
+        t.addTab(l1, "Tab", null);
+        layout.addComponent(t);
+
+        VerticalLayout nestedLayout = new VerticalLayout();
+        nestedLayout.addComponent(new Label("This is a label."));
+        nestedLayout.addComponent(new TextField(null, "Click here"));
+        nestedLayout.addComponent(new Link("Click here", null));
+
+        HorizontalLayout nestedLayout2 = new HorizontalLayout();
+        nestedLayout2.addComponent(new Label("Deeply nested label"));
+        nestedLayout.addComponent(nestedLayout2);
+
+        layout.addComponent(nestedLayout);
+
+        // Listen for layout click events
+        layout.addListener(new LayoutClickListener() {
+            public void layoutClick(LayoutClickEvent event) {
+
+                // Get the deepest nested component which was clicked
+                Component clickedComponent = event.getClickedComponent();
+
+                if (clickedComponent == null) {
+                    // Not over any child component
+                    LayoutClickListenerTest.this.addComponent(new Label(
+                            "The click was not over any component."));
+                } else {
+                    // Over a child component
+                    String message = "The click was over a "
+                            + clickedComponent.getClass().getCanonicalName()
+                            + " in an immediate child component of type "
+                            + event.getChildComponent().getClass()
+                                    .getCanonicalName();
+                    LayoutClickListenerTest.this
+                            .addComponent(new Label(message));
+                }
+            }
+        });
+
+        addComponent(layout);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Layout click listeners should provide access to the deepest nested component clicked - click anywhere in the layout.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6493;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/orderedlayout/ReplaceComponentNPE.html b/tests/testbench/com/vaadin/tests/components/orderedlayout/ReplaceComponentNPE.html
new file mode 100644
index 0000000000..7a071030dc
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/orderedlayout/ReplaceComponentNPE.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>ReplaceComponentNPE</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ReplaceComponentNPE</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.orderedlayout.ReplaceComponentNPE</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsorderedlayoutReplaceComponentNPE::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/orderedlayout/ReplaceComponentNPE.java b/tests/testbench/com/vaadin/tests/components/orderedlayout/ReplaceComponentNPE.java
new file mode 100644
index 0000000000..555495cc58
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/orderedlayout/ReplaceComponentNPE.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.components.orderedlayout;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.VerticalLayout;
+
+public class ReplaceComponentNPE extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Clicking 'ReplaceComponent' should replace the 'Button' button with a VericalLayout, and move the button inside the verticalLayout. Visually this can be seen by the added margins of the VerticalLayout.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3195;
+    }
+
+    final Button button = new Button("Button");
+    final VerticalLayout outer = new VerticalLayout();
+
+    @Override
+    protected void setup() {
+        outer.setMargin(true);
+
+        Button changer = new Button("ReplaceComponent");
+        changer.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                getLayout().replaceComponent(button, outer);
+                outer.addComponent(button);
+            }
+        });
+
+        getLayout().addComponent(button);
+        getLayout().addComponent(changer);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/orderedlayout/VerticalLayoutTest.java b/tests/testbench/com/vaadin/tests/components/orderedlayout/VerticalLayoutTest.java
new file mode 100644
index 0000000000..20babc8576
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/orderedlayout/VerticalLayoutTest.java
@@ -0,0 +1,14 @@
+package com.vaadin.tests.components.orderedlayout;
+
+import com.vaadin.tests.components.AbstractOrderedLayoutTest;
+import com.vaadin.ui.VerticalLayout;
+
+public class VerticalLayoutTest extends
+        AbstractOrderedLayoutTest<VerticalLayout> {
+
+    @Override
+    protected Class<VerticalLayout> getTestClass() {
+        return VerticalLayout.class;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.html b/tests/testbench/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.html
new file mode 100644
index 0000000000..f0d837d97a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.html
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://artur.virtuallypreinstalled.com/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.orderedlayout.VerticalLayoutWidthCalculation?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsorderedlayoutVerticalLayoutWidthCalculation::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsorderedlayoutVerticalLayoutWidthCalculation::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>window-sized-to-one-textfield</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.java b/tests/testbench/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.java
new file mode 100644
index 0000000000..f59b940353
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.java
@@ -0,0 +1,63 @@
+package com.vaadin.tests.components.orderedlayout;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class VerticalLayoutWidthCalculation extends AbstractTestCase {
+    @Override
+    public void init() {
+        final Window mainWindow = new Window("Vaadintest Application");
+        mainWindow.addWindow(createSubWindow());
+        setMainWindow(mainWindow);
+
+    }
+
+    private Window createSubWindow() {
+        HorizontalLayout hl = new HorizontalLayout();
+
+        VerticalLayout vlTF1 = new VerticalLayout();
+        vlTF1.setSizeUndefined();
+        final TextField tf1 = new TextField("Text1");
+        tf1.setSizeUndefined();
+        vlTF1.addComponent(tf1);
+        hl.addComponent(vlTF1);
+
+        VerticalLayout vlTF2 = new VerticalLayout();
+        vlTF2.setSizeUndefined();
+        final TextField tf2 = new TextField("Text2");
+        tf2.setVisible(false);
+        tf2.setSizeUndefined();
+        vlTF2.addComponent(tf2);
+        hl.addComponent(vlTF2);
+
+        Window wnd = new Window("Test");
+        wnd.getContent().setSizeUndefined();
+        wnd.addComponent(hl);
+        Button btn = new Button("Show/hide");
+        btn.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                tf2.setVisible(!tf2.isVisible());
+            }
+        });
+        wnd.addComponent(btn);
+
+        return wnd;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The second TextField is initially invisible. Make it visible and then hide it again. You should end up with the same result as initially.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 7260;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/panel/PanelClickListenerRelativeCoordinates.html b/tests/testbench/com/vaadin/tests/components/panel/PanelClickListenerRelativeCoordinates.html
new file mode 100644
index 0000000000..eb40765d03
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/panel/PanelClickListenerRelativeCoordinates.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://192.168.2.60:8080/" />
+<title>PanelClickListenerRelativeCoordinates</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">PanelClickListenerRelativeCoordinates</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.panel.PanelClickListenerRelativeCoordinates?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>focus</td>
+	<td>vaadin=runcomvaadintestscomponentspanelPanelClickListenerRelativeCoordinates::/VVerticalLayout[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspanelPanelClickListenerRelativeCoordinates::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]</td>
+	<td>287,25</td>
+</tr>
+<!-- Should really be 287, 25 but due to v-view border-top it is not always... <tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentspanelPanelClickListenerRelativeCoordinates::Root/VNotification[0]/HTML[0]/domChild[0]</td>
+	<td>287, 25</td>
+</tr>-->
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>click-287-25</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspanelPanelClickListenerRelativeCoordinates::Root/VNotification[0]/HTML[0]/domChild[0]</td>
+	<td>63,34</td>
+</tr>
+<!--click on caption-->
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspanelPanelClickListenerRelativeCoordinates::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>10,10</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<!-- Should really be 10,10 but due to v-view border-top it is not always... <tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentspanelPanelClickListenerRelativeCoordinates::Root/VNotification[0]/HTML[0]/domChild[0]</td>
+	<td>10, 10</td>
+</tr>-->
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>click-10-10</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/panel/PanelClickListenerRelativeCoordinates.java b/tests/testbench/com/vaadin/tests/components/panel/PanelClickListenerRelativeCoordinates.java
new file mode 100644
index 0000000000..65a185b160
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/panel/PanelClickListenerRelativeCoordinates.java
@@ -0,0 +1,36 @@
+package com.vaadin.tests.components.panel;
+
+import com.vaadin.event.MouseEvents.ClickEvent;
+import com.vaadin.event.MouseEvents.ClickListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Panel;
+
+public class PanelClickListenerRelativeCoordinates extends TestBase {
+
+    @Override
+    protected void setup() {
+        Panel panel = new Panel("Panel's caption");
+        panel.addListener(new ClickListener() {
+
+            public void click(ClickEvent event) {
+                getMainWindow()
+                        .showNotification(
+                                "" + event.getRelativeX() + ", "
+                                        + event.getRelativeY());
+            }
+        });
+        addComponent(panel);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Click the panel to get coordinates relative to the top-left corder of the panel.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/panel/PanelShouldNotScroll.html b/tests/testbench/com/vaadin/tests/components/panel/PanelShouldNotScroll.html
new file mode 100644
index 0000000000..8b03ca330f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/panel/PanelShouldNotScroll.html
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>CssLayoutRemoveComponent</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">CssLayoutRemoveComponent</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.panel.PanelShouldNotScroll?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentspanelPanelShouldNotScroll::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>scroll</td>
+	<td>vaadin=runcomvaadintestscomponentspanelPanelShouldNotScroll::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/domChild[1]</td>
+	<td>443</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentspanelPanelShouldNotScroll::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/panel/PanelShouldNotScroll.java b/tests/testbench/com/vaadin/tests/components/panel/PanelShouldNotScroll.java
new file mode 100644
index 0000000000..7c537fe710
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/panel/PanelShouldNotScroll.java
@@ -0,0 +1,56 @@
+package com.vaadin.tests.components.panel;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+
+public class PanelShouldNotScroll extends TestBase {
+
+    private Button addMore;
+
+    @Override
+    protected void setup() {
+        final Panel p = new Panel(new CssLayout());
+        p.setScrollable(true);
+        p.setSizeFull();
+        p.setHeight("600px");
+        p.addComponent(foo());
+        addMore = new Button("Add");
+        addMore.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                p.removeComponent(addMore);
+                p.addComponent(foo());
+                p.addComponent(addMore);
+            }
+        });
+        p.addComponent(addMore);
+        addComponent(p);
+        ((VerticalLayout) getMainWindow().getContent()).setSizeFull();
+    }
+
+    private Component foo() {
+        Panel panel = new Panel();
+        panel.addComponent(new Label(
+                "fooooooooo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>"
+                        + "foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>foo<br/>",
+                Label.CONTENT_XHTML));
+        return panel;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "adding a panel to the bottom of the scrolling panel should not scroll up to the top";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 7462;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/panel/PanelShouldRemoveActionHandler.java b/tests/testbench/com/vaadin/tests/components/panel/PanelShouldRemoveActionHandler.java
new file mode 100644
index 0000000000..eec39359aa
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/panel/PanelShouldRemoveActionHandler.java
@@ -0,0 +1,118 @@
+package com.vaadin.tests.components.panel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.event.Action;
+import com.vaadin.event.Action.Handler;
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.event.ShortcutAction.ModifierKey;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TextField;
+
+public class PanelShouldRemoveActionHandler extends TestBase {
+
+    private Panel panel;
+
+    @Override
+    protected String getDescription() {
+        return "Adding action handlers to the panel should make them appear on the client side. Removing the action handlers should remove them also from the client side, also if all action handlers are removed.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2941;
+    }
+
+    @Override
+    protected void setup() {
+        panel = new Panel("A panel");
+        panel.addComponent(new TextField());
+        Button add = new Button("Add an action handler",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        add();
+                    }
+
+                });
+        Button addAnother = new Button("Add another action handler",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        addAnother();
+                    }
+
+                });
+        Button remove = new Button("Remove an action handler",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        remove();
+                    }
+
+                });
+
+        addComponent(panel);
+        addComponent(add);
+        addComponent(addAnother);
+        addComponent(remove);
+    }
+
+    public void remove() {
+        panel.setCaption(panel.getCaption() + " - Removed handler");
+        panel.removeActionHandler(actionHandlers.remove(actionHandlers.size() - 1));
+    }
+
+    private List<Handler> actionHandlers = new ArrayList<Handler>();
+
+    public void add() {
+        panel.setCaption(panel.getCaption() + " - Added handler");
+        Handler actionHandler = new Handler() {
+
+            public Action[] getActions(Object target, Object sender) {
+                return new Action[] { new ShortcutAction("Ctrl+Left",
+                        ShortcutAction.KeyCode.ARROW_LEFT,
+                        new int[] { ModifierKey.CTRL }) };
+            }
+
+            public void handleAction(Action action, Object sender, Object target) {
+                getMainWindow().showNotification(
+                        "Handling action " + action.getCaption());
+            }
+
+        };
+
+        addHandler(actionHandler);
+    }
+
+    public void addAnother() {
+        Handler actionHandler = new Handler() {
+
+            public Action[] getActions(Object target, Object sender) {
+                return new Action[] { new ShortcutAction("Ctrl+Right",
+                        ShortcutAction.KeyCode.ARROW_RIGHT,
+                        new int[] { ModifierKey.CTRL }) };
+            }
+
+            public void handleAction(Action action, Object sender, Object target) {
+                getMainWindow().showNotification(
+                        "Handling action " + action.getCaption());
+            }
+
+        };
+
+        addHandler(actionHandler);
+    }
+
+    private void addHandler(Handler actionHandler) {
+        actionHandlers.add(actionHandler);
+        panel.addActionHandler(actionHandler);
+        panel.setCaption("A panel with " + actionHandlers.size()
+                + " action handlers");
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/panel/PanelTest.java b/tests/testbench/com/vaadin/tests/components/panel/PanelTest.java
new file mode 100644
index 0000000000..29d93ce86c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/panel/PanelTest.java
@@ -0,0 +1,15 @@
+package com.vaadin.tests.components.panel;
+
+import com.vaadin.tests.components.AbstractComponentContainerTest;
+import com.vaadin.ui.Panel;
+
+public class PanelTest<T extends Panel> extends
+        AbstractComponentContainerTest<T> {
+
+    @SuppressWarnings("unchecked")
+    @Override
+    protected Class<T> getTestClass() {
+        return (Class<T>) Panel.class;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/passwordfield/PasswordFieldBasicStates.html b/tests/testbench/com/vaadin/tests/components/passwordfield/PasswordFieldBasicStates.html
new file mode 100644
index 0000000000..70be23541e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/passwordfield/PasswordFieldBasicStates.html
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.passwordfield.PasswordFieldTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--Write "content" -->
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::PID_StestComponent</td>
+	<td>content</td>
+</tr>
+<!--Disable event log-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::PID_Smenu#item1</td>
+	<td>26,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>20,8</td>
+</tr>
+<!-- Enabled state -->
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled</td>
+</tr>
+<!--Disable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::PID_Smenu#item0</td>
+	<td>38,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>31,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>57,13</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled</td>
+</tr>
+<!--Set readonly-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::PID_Smenu#item0</td>
+	<td>6,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>20,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled-readonly</td>
+</tr>
+<!--Enable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::PID_Smenu#item0</td>
+	<td>43,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>42,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>53,5</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>readonly</td>
+</tr>
+<!--Set read-write-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::PID_Smenu#item0</td>
+	<td>6,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>20,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentspasswordfieldPasswordFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/passwordfield/PasswordFieldTest.java b/tests/testbench/com/vaadin/tests/components/passwordfield/PasswordFieldTest.java
new file mode 100644
index 0000000000..86d035e925
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/passwordfield/PasswordFieldTest.java
@@ -0,0 +1,20 @@
+package com.vaadin.tests.components.passwordfield;
+
+import com.vaadin.event.FieldEvents.TextChangeListener;
+import com.vaadin.tests.components.abstractfield.AbstractTextFieldTest;
+import com.vaadin.ui.PasswordField;
+
+public class PasswordFieldTest extends AbstractTextFieldTest<PasswordField>
+        implements TextChangeListener {
+
+    @Override
+    protected Class<PasswordField> getTestClass() {
+        return PasswordField.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/popupview/PopupViewLabelResized.java b/tests/testbench/com/vaadin/tests/components/popupview/PopupViewLabelResized.java
new file mode 100644
index 0000000000..52bdd47790
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/popupview/PopupViewLabelResized.java
@@ -0,0 +1,37 @@
+package com.vaadin.tests.components.popupview;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.PopupView;
+
+public class PopupViewLabelResized extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "When clicking on the popup view on the left, its size should not change.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3483;
+    }
+
+    @Override
+    protected void setup() {
+        GridLayout gl = new GridLayout(3, 1);
+        gl.setSizeFull();
+
+        Label expander = new Label();
+        gl.addComponent(expander, 1, 0);
+        gl.setColumnExpandRatio(1, 1);
+
+        gl.addComponent(
+                new PopupView("Click here to popup", new Label("test")), 0, 0);
+        gl.addComponent(
+                new PopupView("Click here to popup", new Label("test")), 2, 0);
+
+        addComponent(gl);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/popupview/PopupViewNullValues.java b/tests/testbench/com/vaadin/tests/components/popupview/PopupViewNullValues.java
new file mode 100644
index 0000000000..78e66e2db3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/popupview/PopupViewNullValues.java
@@ -0,0 +1,103 @@
+package com.vaadin.tests.components.popupview;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.PopupView;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window.Notification;
+
+public class PopupViewNullValues extends TestBase {
+
+    private PopupView pv[] = new PopupView[4];
+    private Button b[] = new Button[4];
+
+    @Override
+    protected void setup() {
+        try {
+            pv[0] = new PopupView("Popupview 1 - no component", null);
+            addComponent(pv[0]);
+            b[0] = new Button("Open popupview 1", new ClickListener() {
+
+                public void buttonClick(ClickEvent event) {
+                    pv[0].setPopupVisible(true);
+                }
+
+            });
+        } catch (Exception e) {
+            getMainWindow()
+                    .showNotification(
+                            "Error, 'null content' should not throw an exception at this point",
+                            Notification.TYPE_ERROR_MESSAGE);
+        }
+
+        try {
+            pv[1] = new PopupView(null, new TextField(
+                    "Empty html, contains component"));
+            addComponent(pv[1]);
+            b[1] = new Button("Open popupview 2", new ClickListener() {
+
+                public void buttonClick(ClickEvent event) {
+                    pv[1].setPopupVisible(true);
+                }
+
+            });
+        } catch (Exception e) {
+            getMainWindow()
+                    .showNotification(
+                            "Error, 'null html', should not throw an exception at this point",
+                            Notification.TYPE_ERROR_MESSAGE);
+        }
+
+        try {
+            pv[2] = new PopupView(null, null);
+            addComponent(pv[2]);
+            b[2] = new Button("Open popupview 3", new ClickListener() {
+
+                public void buttonClick(ClickEvent event) {
+                    pv[2].setPopupVisible(true);
+                }
+
+            });
+        } catch (Exception e) {
+            getMainWindow()
+                    .showNotification(
+                            "Error, 'null html, null content', should not throw an exception at this point",
+                            Notification.TYPE_ERROR_MESSAGE);
+        }
+        try {
+            pv[3] = new PopupView("Popupview 4 - has component", new TextField(
+                    "This is the content of popupview 4"));
+            addComponent(pv[3]);
+            b[3] = new Button("Open popupview 4", new ClickListener() {
+
+                public void buttonClick(ClickEvent event) {
+                    pv[3].setPopupVisible(true);
+                }
+
+            });
+        } catch (Exception e) {
+            getMainWindow()
+                    .showNotification(
+                            "Error, 'null html, null content', should not throw an exception at this point",
+                            Notification.TYPE_ERROR_MESSAGE);
+        }
+
+        addComponent(b[0]);
+        addComponent(b[1]);
+        addComponent(b[2]);
+        addComponent(b[3]);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "This test case contains 3 popupviews. Only the second and the forth popup views have non-null components and can be opened. 1 and 3 will produce an exception if you try to open them.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3248;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/popupview/PopupViewOffScreen.html b/tests/testbench/com/vaadin/tests/components/popupview/PopupViewOffScreen.html
new file mode 100644
index 0000000000..99ee864179
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/popupview/PopupViewOffScreen.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>PopupViewOffScreen</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">PopupViewOffScreen</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.popupview.PopupViewOffScreen</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentspopupviewPopupViewOffScreen::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/popupview/PopupViewOffScreen.java b/tests/testbench/com/vaadin/tests/components/popupview/PopupViewOffScreen.java
new file mode 100644
index 0000000000..7067281fa2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/popupview/PopupViewOffScreen.java
@@ -0,0 +1,80 @@
+package com.vaadin.tests.components.popupview;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.LoremIpsum;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.PopupView;
+import com.vaadin.ui.VerticalLayout;
+
+public class PopupViewOffScreen extends TestBase {
+
+    private List<PopupView> popupViews = new ArrayList<PopupView>();
+
+    @Override
+    protected String getDescription() {
+        return "A popupview should be displayed on screen. If the popup position is close to a border it should be moved so it is still on screen.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3099;
+    }
+
+    @Override
+    protected void setup() {
+        GridLayout gl = new GridLayout(3, 3);
+        gl.setSizeFull();
+        Label expander = new Label();
+        gl.addComponent(expander, 1, 1);
+        gl.setColumnExpandRatio(1, 1);
+        gl.setRowExpandRatio(1, 1);
+
+        Button showall = new Button("Popup all", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                for (PopupView pv : popupViews) {
+                    pv.setPopupVisible(true);
+                }
+            }
+        });
+        gl.addComponent(showall, 1, 0);
+        gl.addComponent(createPopupView("red"), 0, 0);
+        gl.addComponent(createPopupView("green"), 2, 0);
+        gl.addComponent(createPopupView("blue"), 0, 2);
+        gl.addComponent(createPopupView("yellow"), 2, 2);
+
+        addComponent(gl);
+        gl.getParent().setSizeFull();
+    }
+
+    private Component createPopupView(String bg) {
+        VerticalLayout vl = new VerticalLayout();
+        vl.setSpacing(false);
+        vl.setMargin(false);
+        vl.setSizeFull();
+
+        Panel p = new Panel(vl);
+        p.setWidth("400px");
+        p.setHeight("400px");
+
+        Label l = new Label(
+                "<div style='width: 100%; height: 100%; background: " + bg
+                        + "'>" + LoremIpsum.get(2000) + "</div>",
+                Label.CONTENT_XHTML);
+        l.setSizeFull();
+        p.addComponent(l);
+        PopupView pv = new PopupView("Click here to popup", p);
+
+        popupViews.add(pv);
+        return pv;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/popupview/PopupViewShouldCloseOnTabOut.html b/tests/testbench/com/vaadin/tests/components/popupview/PopupViewShouldCloseOnTabOut.html
new file mode 100644
index 0000000000..fb62215f16
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/popupview/PopupViewShouldCloseOnTabOut.html
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>PopupViewShouldCloseOnTabOut</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">PopupViewShouldCloseOnTabOut</td></tr>
+</thead><tbody>
+<tr>
+    <td>open</td>
+    <td>/run/com.vaadin.tests.components.popupview.PopupViewShouldCloseOnTabOut?restartApplication</td>
+    <td></td>
+</tr>
+<tr>
+    <td>waitForVaadin</td>
+    <td></td>
+    <td></td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentspopupviewPopupViewShouldCloseOnTabOut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupView[0]/domChild[0]</td>
+    <td>16,8</td>
+</tr>
+<tr>
+    <td>waitForVaadin</td>
+    <td></td>
+    <td></td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>//div[1]/div/input</td>
+    <td></td>
+</tr>
+<tr>
+    <td>waitForVaadin</td>
+    <td></td>
+    <td></td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentspopupviewPopupViewShouldCloseOnTabOut::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupView[0]/domChild[0]</td>
+    <td>shift tab</td>
+</tr>
+<tr>
+    <td>waitForVaadin</td>
+    <td></td>
+    <td></td>
+</tr>
+<tr>
+    <td>pause</td>
+    <td>100</td>
+    <td></td>
+</tr>
+<tr>
+    <td>screenCapture</td>
+    <td></td>
+    <td>PopupViewShouldBeClosed</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/popupview/PopupViewShouldCloseOnTabOut.java b/tests/testbench/com/vaadin/tests/components/popupview/PopupViewShouldCloseOnTabOut.java
new file mode 100644
index 0000000000..7e917630c8
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/popupview/PopupViewShouldCloseOnTabOut.java
@@ -0,0 +1,53 @@
+package com.vaadin.tests.components.popupview;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.PopupView;
+import com.vaadin.ui.PopupView.Content;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+@SuppressWarnings("serial")
+public class PopupViewShouldCloseOnTabOut extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The PopupView should close when the user moves focus away from it using the TAB key.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5059;
+    }
+
+    @Override
+    protected void setup() {
+        PopupView pv = new PopupView(new Content() {
+
+            public String getMinimizedValueAsHTML() {
+                return "<b>click me</b>";
+            }
+
+            public Component getPopupComponent() {
+                VerticalLayout vl = new VerticalLayout();
+                TextField field1 = new TextField();
+                field1.setValue("one");
+                field1.focus();
+                vl.addComponent(field1);
+                TextField field2 = new TextField();
+                field2.setValue("two");
+                vl.addComponent(field2);
+                vl.setWidth("600px");
+                return vl;
+            }
+        });
+        addComponent(pv);
+        TextField main = new TextField();
+        main.setValue("main");
+        addComponent(main);
+        TextField main2 = new TextField();
+        main2.setValue("main2");
+        addComponent(main2);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/popupview/PopupViewWithRTE.java b/tests/testbench/com/vaadin/tests/components/popupview/PopupViewWithRTE.java
new file mode 100644
index 0000000000..ea94ee2185
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/popupview/PopupViewWithRTE.java
@@ -0,0 +1,50 @@
+package com.vaadin.tests.components.popupview;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.PopupView;
+import com.vaadin.ui.PopupView.Content;
+import com.vaadin.ui.RichTextArea;
+import com.vaadin.ui.VerticalLayout;
+
+public class PopupViewWithRTE extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Rich text editor should work properly in popupview. Try to edit text below.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3043;
+    }
+
+    @Override
+    protected void setup() {
+        PopupView pv = new PopupView(new Content() {
+
+            RichTextArea rte = new RichTextArea();
+
+            VerticalLayout vl = new VerticalLayout();
+
+            public String getMinimizedValueAsHTML() {
+                Object value = rte.getValue();
+                if (value == null || "".equals(value)) {
+                    value = "Initial <b>content</b> for <h3>rte</h3>.";
+                    rte.setValue(value);
+                    rte.setHeight("150px");
+                    rte.setWidth("100%");
+                    vl.addComponent(rte);
+                    vl.setWidth("600px");
+                }
+                return value.toString();
+            }
+
+            public Component getPopupComponent() {
+                return vl;
+            }
+        });
+        getLayout().addComponent(pv);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/progressindicator/ProgressIndicatorInvisible.java b/tests/testbench/com/vaadin/tests/components/progressindicator/ProgressIndicatorInvisible.java
new file mode 100644
index 0000000000..7e6cfd17ea
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/progressindicator/ProgressIndicatorInvisible.java
@@ -0,0 +1,52 @@
+package com.vaadin.tests.components.progressindicator;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.ProgressIndicator;
+import com.vaadin.ui.VerticalLayout;
+
+public class ProgressIndicatorInvisible extends TestBase {
+
+    @Override
+    protected void setup() {
+        final VerticalLayout lo = new VerticalLayout();
+
+        addComponent(lo);
+
+        final ProgressIndicator pi = new ProgressIndicator();
+        pi.setPollingInterval(400);
+        lo.addComponent(pi);
+
+        final Button b = new Button("Hide container of progress indicator");
+        addComponent(b);
+
+        b.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                // If we skip hiding the layout, hiding the ProgressIndicator
+                // will stop the polling
+                lo.setVisible(!lo.isVisible());
+                // Not even this works
+                pi.setVisible(!lo.isVisible());
+                if (!lo.isVisible()) {
+                    b.setCaption("Still polling");
+                } else {
+                    b.setCaption("Hide container of progress indicator");
+                }
+
+            }
+
+        });
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Progress indicator does not stop polling when its parent layout is made invisible";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4014;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreaSize.html b/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreaSize.html
new file mode 100644
index 0000000000..7708c88e54
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreaSize.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>RichTextAreaSize</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">RichTextAreaSize</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.richtextarea.RichTextAreaSize</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreaSize.java b/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreaSize.java
new file mode 100644
index 0000000000..934f2ed2dd
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreaSize.java
@@ -0,0 +1,44 @@
+package com.vaadin.tests.components.richtextarea;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.RichTextArea;
+import com.vaadin.ui.VerticalLayout;
+
+public class RichTextAreaSize extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Test the size of a rich text area. The first area is 100px*100px wide, the second 100%*100% (of 200x200px), the third one has undefined width and height.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2573;
+    }
+
+    @Override
+    protected void setup() {
+        HorizontalLayout main = new HorizontalLayout();
+        getMainWindow().setContent(main);
+
+        RichTextArea first = new RichTextArea();
+        RichTextArea second = new RichTextArea();
+        RichTextArea third = new RichTextArea();
+
+        first.setWidth("150px");
+        first.setHeight("400px");
+        second.setSizeFull();
+        third.setSizeUndefined();
+
+        VerticalLayout secondLayout = new VerticalLayout();
+        secondLayout.setWidth("200px");
+        secondLayout.setHeight("200px");
+        secondLayout.addComponent(second);
+
+        main.addComponent(first);
+        main.addComponent(secondLayout);
+        main.addComponent(third);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreaTest.java b/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreaTest.java
new file mode 100644
index 0000000000..ad2f82aca6
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreaTest.java
@@ -0,0 +1,54 @@
+package com.vaadin.tests.components.richtextarea;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.tests.components.abstractfield.AbstractFieldTest;
+import com.vaadin.ui.RichTextArea;
+
+public class RichTextAreaTest extends AbstractFieldTest<RichTextArea> {
+
+    @Override
+    protected Class<RichTextArea> getTestClass() {
+        return RichTextArea.class;
+    }
+
+    private Command<RichTextArea, Boolean> nullSelectionAllowedCommand = new Command<RichTextArea, Boolean>() {
+
+        public void execute(RichTextArea c, Boolean value, Object data) {
+            c.setNullSettingAllowed(value);
+
+        }
+    };
+    private Command<RichTextArea, String> nullRepresentationCommand = new Command<RichTextArea, String>() {
+
+        public void execute(RichTextArea c, String value, Object data) {
+            c.setNullRepresentation(value);
+        }
+    };
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+
+        createSetTextValueAction(CATEGORY_ACTIONS);
+
+        createNullSettingAllowedAction(CATEGORY_FEATURES);
+        createNullRepresentationAction(CATEGORY_FEATURES);
+    }
+
+    private void createNullSettingAllowedAction(String category) {
+        createBooleanAction("Null selection allowed", category, true,
+                nullSelectionAllowedCommand);
+    }
+
+    private void createNullRepresentationAction(String category) {
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+        options.put("-", null);
+        options.put("null", "null");
+        options.put("This is empty", "This is empty");
+        options.put("- Nothing -", "- Nothing -");
+        createSelectAction("Null representation", category, options, "null",
+                nullRepresentationCommand);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreaWithKeyboardShortcuts.java b/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreaWithKeyboardShortcuts.java
new file mode 100644
index 0000000000..2e26d3e2c4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreaWithKeyboardShortcuts.java
@@ -0,0 +1,77 @@
+package com.vaadin.tests.components.richtextarea;
+
+import com.vaadin.event.Action;
+import com.vaadin.event.Action.Handler;
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractField;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.RichTextArea;
+import com.vaadin.ui.Window;
+
+@SuppressWarnings("serial")
+public class RichTextAreaWithKeyboardShortcuts extends TestBase {
+
+    private Handler actionHandler = new Handler() {
+
+        ShortcutAction save = new ShortcutAction("^Save");
+        private Action[] actions = new Action[] { save };
+
+        public void handleAction(Action action, Object sender, Object target) {
+            String msg = "Action: " + action.getCaption();
+            msg += " From : " + sender.getClass().getSimpleName() + " '"
+                    + ((Component) sender).getCaption() + "'";
+
+            AbstractField f = (AbstractField) target;
+            msg += " Target:" + target.getClass().getSimpleName() + " '"
+                    + f.getCaption() + "'";
+
+            String string = f.getValue().toString();
+
+            msg += " Value: " + string;
+            f.getWindow().showNotification(msg);
+
+        }
+
+        public Action[] getActions(Object target, Object sender) {
+            return actions;
+        }
+    };
+
+    @Override
+    protected void setup() {
+
+        getLayout().getWindow().addActionHandler(actionHandler);
+        getLayout().addComponent(createRichTextArea("InMainLayout"));
+
+        Panel panel = new Panel("RTA Panel");
+        panel.addActionHandler(actionHandler);
+        panel.getContent().addComponent(createRichTextArea("InPanel"));
+        getLayout().addComponent(panel);
+
+        Window w = new Window("SubWindow");
+        w.addActionHandler(actionHandler);
+        w.addComponent(createRichTextArea("InSubWindow"));
+        w.getContent().setSizeUndefined();
+
+        getLayout().getWindow().addWindow(w);
+
+    }
+
+    private RichTextArea createRichTextArea(String caption) {
+        RichTextArea rta = new RichTextArea(caption);
+        return rta;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "RichTextArea shouls support shortcut actions just like other components do.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4175;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreas.html b/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreas.html
new file mode 100644
index 0000000000..d3e5c42c80
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreas.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.richtextarea.RichTextAreas?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsrichtextareaRichTextAreas::PID_Scheckboxaction-Error indicators/domChild[0]</td>
+	<td>68,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsrichtextareaRichTextAreas::PID_Scheckboxaction-Required/domChild[0]</td>
+	<td>23,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>error-required</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsrichtextareaRichTextAreas::PID_Scheckboxaction-Readonly/domChild[0]</td>
+	<td>34,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>error-required-readonly</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreas.java b/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreas.java
new file mode 100644
index 0000000000..8585d19bc2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/richtextarea/RichTextAreas.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.components.richtextarea;
+
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.ui.RichTextArea;
+
+public class RichTextAreas extends ComponentTestCase<RichTextArea> {
+
+    @Override
+    protected Class<RichTextArea> getTestClass() {
+        return RichTextArea.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+        RichTextArea rta;
+
+        rta = createRichTextArea("TextField 100% wide, 100px high");
+        rta.setWidth("100%");
+        rta.setHeight("100px");
+        addTestComponent(rta);
+
+        rta = createRichTextArea("TextField auto width, auto height");
+        addTestComponent(rta);
+
+        rta = createRichTextArea(null, "500px wide, 120px high textfield");
+        rta.setWidth("500px");
+        rta.setHeight("120px");
+        addTestComponent(rta);
+
+    }
+
+    private RichTextArea createRichTextArea(String caption, String value) {
+        return new RichTextArea(caption, value);
+    }
+
+    private RichTextArea createRichTextArea(String caption) {
+        return new RichTextArea(caption);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/select/AbstractSelectTestCase.java b/tests/testbench/com/vaadin/tests/components/select/AbstractSelectTestCase.java
new file mode 100644
index 0000000000..528fbd7edd
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/AbstractSelectTestCase.java
@@ -0,0 +1,240 @@
+package com.vaadin.tests.components.select;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.event.Action;
+import com.vaadin.event.ItemClickEvent;
+import com.vaadin.event.ItemClickEvent.ItemClickListener;
+import com.vaadin.event.ItemClickEvent.ItemClickNotifier;
+import com.vaadin.terminal.Resource;
+import com.vaadin.tests.components.abstractfield.AbstractFieldTest;
+import com.vaadin.ui.AbstractSelect;
+
+public abstract class AbstractSelectTestCase<T extends AbstractSelect> extends
+        AbstractFieldTest<T> implements ItemClickListener {
+
+    protected static final String CATEGORY_DATA_SOURCE = "Data source";
+
+    private int items = 0;
+    private int properties = 0;
+
+    protected static class ContextMenu {
+
+        private List<Action> items = new ArrayList<Action>();
+
+        public ContextMenu(String caption, Resource icon) {
+            addItem(caption, icon);
+        }
+
+        public ContextMenu() {
+        }
+
+        public void addItem(String caption, Resource icon) {
+            items.add(new Action(caption, icon));
+        }
+
+        public Action[] getActions(Object target, Object sender) {
+            Action[] actions = new Action[items.size()];
+            for (int i = 0; i < items.size(); i++) {
+                actions[i] = items.get(i);
+            }
+
+            return actions;
+        }
+
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+        createNullSelectAllowedCheckbox(CATEGORY_SELECTION);
+        createMultiSelectCheckbox(CATEGORY_SELECTION);
+
+        createPropertiesInContainerSelect(CATEGORY_DATA_SOURCE);
+        createItemsInContainerSelect(CATEGORY_DATA_SOURCE);
+
+    }
+
+    protected void createNullSelectAllowedCheckbox(String category) {
+        createBooleanAction("Null Selection Allowed", category, false,
+                nullSelectionAllowedCommand);
+
+    }
+
+    protected void createMultiSelectCheckbox(String category) {
+        createBooleanAction("Multi select", category, false, multiselectCommand);
+
+    }
+
+    protected void createNullSelectItemId(String category) {
+        LinkedHashMap<String, Object> options = new LinkedHashMap<String, Object>();
+        options.put("- None -", null);
+        for (Object id : (getComponent()).getContainerDataSource()
+                .getContainerPropertyIds()) {
+            options.put(id.toString(), id);
+        }
+        createSelectAction("Null Selection Item Id", category, options,
+                "- None -", nullSelectItemIdCommand);
+    }
+
+    protected Container createContainer(int properties, int items) {
+        return createIndexedContainer(properties, items);
+    }
+
+    private Container createIndexedContainer(int properties, int items) {
+        IndexedContainer c = new IndexedContainer();
+        populateContainer(c, properties, items);
+
+        return c;
+    }
+
+    protected void populateContainer(Container c, int properties, int items) {
+        c.removeAllItems();
+        for (int i = 1; i <= properties; i++) {
+            c.addContainerProperty("Property " + i, String.class, "");
+        }
+        for (int i = 1; i <= items; i++) {
+            Item item = c.addItem("Item " + i);
+            for (int j = 1; j <= properties; j++) {
+                item.getItemProperty("Property " + j).setValue(
+                        "Item " + i + "," + j);
+            }
+        }
+
+    }
+
+    protected void createItemsInContainerSelect(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        for (int i = 0; i <= 10; i++) {
+            options.put(String.valueOf(i), i);
+        }
+        options.put("20", 20);
+        options.put("100", 100);
+        options.put("1000", 1000);
+        options.put("10000", 10000);
+        options.put("100000", 100000);
+
+        createSelectAction("Items in container", category, options, "20",
+                itemsInContainerCommand);
+    }
+
+    protected void createPropertiesInContainerSelect(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("0", 0);
+        for (int i = 0; i <= 10; i++) {
+            options.put(String.valueOf(i), i);
+        }
+        options.put("50", 50);
+        options.put("100", 100);
+        options.put("1000", 1000);
+
+        createSelectAction("Properties in container", category, options, "10",
+                propertiesInContainerCommand);
+    }
+
+    protected void createItemClickListener(String category) {
+        createBooleanAction("Item click listener", category, false,
+                itemClickListenerCommand);
+    }
+
+    /* COMMANDS */
+
+    protected Command<T, Boolean> nullSelectionAllowedCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            (c).setNullSelectionAllowed(value);
+        }
+    };
+
+    protected Command<T, Boolean> multiselectCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            c.setMultiSelect(value);
+        }
+    };
+
+    protected Command<T, Object> nullSelectItemIdCommand = new Command<T, Object>() {
+
+        public void execute(T c, Object value, Object data) {
+            c.setNullSelectionItemId(value);
+        }
+    };
+
+    protected Command<T, Integer> itemsInContainerCommand = new Command<T, Integer>() {
+
+        public void execute(T t, Integer value, Object data) {
+            items = value;
+            updateContainer();
+        }
+    };
+
+    protected Command<T, Integer> propertiesInContainerCommand = new Command<T, Integer>() {
+
+        public void execute(T t, Integer value, Object data) {
+            properties = value;
+            updateContainer();
+        }
+    };
+
+    protected Command<T, Boolean> itemClickListenerCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            if (value) {
+                ((ItemClickNotifier) c)
+                        .addListener(AbstractSelectTestCase.this);
+            } else {
+                ((ItemClickNotifier) c)
+                        .removeListener(AbstractSelectTestCase.this);
+            }
+
+        }
+    };
+
+    protected void setContainer(Container newContainer) {
+        getComponent().setContainerDataSource(newContainer);
+
+    }
+
+    protected void updateContainer() {
+        setContainer(createContainer(properties, items));
+    }
+
+    /* COMMANDS END */
+
+    public void itemClick(ItemClickEvent event) {
+        String type = event.getButtonName();
+        if (event.isDoubleClick()) {
+            type += " double-click";
+        } else {
+            type += " click";
+        }
+
+        String target = "source: " + event.getSource();
+        target += ", client: [" + event.getClientX() + "," + event.getClientY()
+                + "];";
+        target += ", relative: [" + event.getRelativeX() + ","
+                + event.getRelativeY() + "]";
+        target += ", itemId: " + event.getItemId();
+        target += ", propertyId: " + event.getPropertyId();
+
+        String modifierKeys = "";
+        if (event.isCtrlKey()) {
+            modifierKeys += "CTRL ";
+        }
+        if (event.isAltKey()) {
+            modifierKeys += "ALT ";
+        }
+        if (event.isMetaKey()) {
+            modifierKeys += "META ";
+        }
+        if (event.isShiftKey()) {
+            modifierKeys += "SHIFT ";
+        }
+        log(modifierKeys + type + " on " + target);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/select/ComboBoxAddWhileFiltering.java b/tests/testbench/com/vaadin/tests/components/select/ComboBoxAddWhileFiltering.java
new file mode 100644
index 0000000000..931686003a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/ComboBoxAddWhileFiltering.java
@@ -0,0 +1,56 @@
+package com.vaadin.tests.components.select;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.ComboBox;
+
+/**
+ * TODO can't reproduce the issue with this test case, possibly need some
+ * enhancements.
+ * 
+ */
+public class ComboBoxAddWhileFiltering extends TestBase {
+
+    private int i;
+
+    @Override
+    protected void setup() {
+        final ComboBox comboBox = new ComboBox();
+        populate(comboBox);
+
+        Button b = new Button("add item (^N)");
+        b.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                addItem(comboBox);
+            }
+        });
+        addComponent(b);
+        addComponent(comboBox);
+        getMainWindow().addAction(new Button.ClickShortcut(b, "^n"));
+    }
+
+    private void populate(ComboBox comboBox) {
+        for (i = 0; i < 4;) {
+            addItem(comboBox);
+        }
+    }
+
+    private void addItem(ComboBox comboBox) {
+        i++;
+        comboBox.addItem("Item " + i);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Filtered list should be updated when new item is added.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3643;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/select/MultiSelect.java b/tests/testbench/com/vaadin/tests/components/select/MultiSelect.java
new file mode 100644
index 0000000000..b3c15251a1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/MultiSelect.java
@@ -0,0 +1,32 @@
+package com.vaadin.tests.components.select;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Select;
+
+public class MultiSelect extends TestBase {
+
+    @SuppressWarnings("deprecation")
+    @Override
+    protected void setup() {
+        Select selectComponent = new Select();
+        selectComponent.setMultiSelect(true);
+
+        String[] selection = { "One", "Hund", "Three" };
+        for (String word : selection) {
+            selectComponent.addItem(word);
+        }
+
+        addComponent(selectComponent);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The select is in multi select mode and should be rendered as such";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4553;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/select/NativeSelects.html b/tests/testbench/com/vaadin/tests/components/select/NativeSelects.html
new file mode 100644
index 0000000000..f9ab8eb3a0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/NativeSelects.html
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.select.NativeSelects?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=The second item</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=an item 1</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=The second item</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[8]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=an item 1</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-readwrite-noerror</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::PID_Scheckboxaction-Readonly/domChild[0]</td>
+	<td>7,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-readonly-noerror</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::PID_Scheckboxaction-Error indicators/domChild[0]</td>
+	<td>31,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-readonly-error</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::PID_Scheckboxaction-Readonly/domChild[0]</td>
+	<td>3,9</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-readwrite-error</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::PID_Scheckboxaction-Enabled/domChild[0]</td>
+	<td>32,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled-readwrite-error</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::PID_Scheckboxaction-Error indicators/domChild[0]</td>
+	<td>47,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled-readwrite-noerror</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::PID_Scheckboxaction-Readonly/domChild[0]</td>
+	<td>31,11</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled-readonly-noerror</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectNativeSelects::PID_Scheckboxaction-Error indicators/domChild[0]</td>
+	<td>42,4</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled-readonly-error</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/select/NativeSelects.java b/tests/testbench/com/vaadin/tests/components/select/NativeSelects.java
new file mode 100644
index 0000000000..d5577e213c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/NativeSelects.java
@@ -0,0 +1,118 @@
+package com.vaadin.tests.components.select;
+
+import java.util.List;
+
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.NativeSelect;
+
+public class NativeSelects extends ComponentTestCase<NativeSelect> {
+
+    NativeSelect label[] = new NativeSelect[20];
+
+    @Override
+    protected Class<NativeSelect> getTestClass() {
+        return NativeSelect.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+
+        NativeSelect s;
+
+        s = createNativeSelect(null);
+        s.setWidth(null);
+        addTestComponent(s);
+
+        s = createNativeSelect("Undefined wide, empty select");
+        s.setWidth(null);
+        addTestComponent(s);
+
+        s = createNativeSelect("Undefined wide select with 5 items");
+        s.setWidth(null);
+        addItem(s, "The first item");
+        addItem(s, "The second item");
+        addItem(s, "The third item");
+        addItem(s, "The fourth item");
+        addItem(s, "The fifth item");
+        addTestComponent(s);
+
+        s = createNativeSelect("Undefined wide select with 50 items");
+        s.setWidth(null);
+        populate(s, 50);
+        addTestComponent(s);
+
+        s = createNativeSelect(null);
+        s.setWidth("100px");
+        addTestComponent(s);
+
+        s = createNativeSelect("100px wide, empty select");
+        s.setWidth("100px");
+        addTestComponent(s);
+
+        s = createNativeSelect("150px wide select with 5 items");
+        s.setWidth("150px");
+        addItem(s, "The first item");
+        addItem(s, "The second item");
+        addItem(s, "The third item");
+        addItem(s, "The fourth item");
+        addItem(s, "The fifth item");
+        addTestComponent(s);
+
+        s = createNativeSelect("200px wide select with 50 items");
+        s.setWidth("200px");
+        populate(s, 50);
+        addTestComponent(s);
+
+    }
+
+    private void populate(NativeSelect s, int nr) {
+        String text = " an item ";
+
+        String caption = "";
+        for (int i = 0; i < nr; i++) {
+            if (i % 2 == 0) {
+                caption += text;
+            } else {
+                caption += i;
+            }
+
+            addItem(s, caption);
+        }
+
+    }
+
+    private void addItem(NativeSelect s, String string) {
+        Object id = s.addItem();
+        s.getItem(id).getItemProperty(CAPTION).setValue(string);
+
+    }
+
+    private NativeSelect createNativeSelect(String caption) {
+        NativeSelect s = new NativeSelect();
+
+        s.addContainerProperty(CAPTION, String.class, "");
+        s.setItemCaptionPropertyId(CAPTION);
+        s.setCaption(caption);
+        s.setNullSelectionAllowed(false);
+        return s;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A generic test for Labels in different configurations";
+    }
+
+    @Override
+    protected void createCustomActions(List<Component> actions) {
+        actions.add(createBooleanAction("Null selection allowed", false,
+                new Command<NativeSelect, Boolean>() {
+
+                    public void execute(NativeSelect c, Boolean value,
+                            Object data) {
+                        c.setNullSelectionAllowed(value);
+                    }
+                }));
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/select/NullSelectionItemId.java b/tests/testbench/com/vaadin/tests/components/select/NullSelectionItemId.java
new file mode 100644
index 0000000000..4298cfc525
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/NullSelectionItemId.java
@@ -0,0 +1,77 @@
+package com.vaadin.tests.components.select;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Select;
+
+public class NullSelectionItemId extends TestBase implements ClickListener {
+
+    private static final String NULL_ITEM_ID = "Null item id";
+
+    private Select mySelect;
+
+    @Override
+    protected void setup() {
+
+        mySelect = new Select("My Select");
+
+        // add items
+        mySelect.addItem(NULL_ITEM_ID);
+        mySelect.addItem("Another item");
+
+        // allow null and set the null item id
+        mySelect.setNullSelectionAllowed(true);
+        mySelect.setNullSelectionItemId(NULL_ITEM_ID);
+
+        // select the null item
+        mySelect.select(NULL_ITEM_ID);
+
+        Button button = new Button("Show selected value", this);
+
+        addComponent(mySelect);
+        addComponent(button);
+
+        button = new Button(
+                "Select null with select(NULL_ITEM_ID) (should make value null)",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        mySelect.select(NULL_ITEM_ID);
+                    }
+                });
+
+        addComponent(button);
+
+        button = new Button(
+                "Select null with setValue(null) (should make value null)",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        mySelect.setValue(null);
+                    }
+                });
+
+        addComponent(button);
+
+    }
+
+    public void buttonClick(ClickEvent event) {
+        getMainWindow().showNotification(
+                "mySelect.getValue() returns: " + mySelect.getValue());
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Steps to reproduce:<br />"
+                + "<ol><li>Click the button -> value is the item id \"Null item id\" (should be null).</li>"
+                + "<li>Select the \"Another item\".</li>"
+                + "<li>Select back the first item.</li>"
+                + "<li>Click the button -> the value is null (as it should)</li></ol>";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3203;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/select/SelectDisplaysOldValue.html b/tests/testbench/com/vaadin/tests/components/select/SelectDisplaysOldValue.html
new file mode 100644
index 0000000000..e9d5fabb14
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/SelectDisplaysOldValue.html
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.select.SelectDisplaysOldValue?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>7,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
+	<td>76,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
+	<td>4,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item0</td>
+	<td>79,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>20,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item0</td>
+	<td>89,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
+	<td>7,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
+	<td>7,9</td>
+</tr>
+<tr>
+	<td>focus</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>focus</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>704,305</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<!--Master should retain its value after filtering and not selecting any option-->
+<!--Select "Master 3" and "Master 3 - Slave 1"-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>10,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item2</td>
+	<td>96,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
+	<td>87,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
+	<td>98,16</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[0]</td>
+	<td>enter</td>
+</tr>
+<!--Filter master using "test" but do not select anything-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>-70,7</td>
+</tr>
+<tr>
+	<td>focus</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>test</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
+	<td>58,163</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
+	<td>58,163</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectDisplaysOldValue::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[0]</td>
+	<td>Master 3</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/select/SelectDisplaysOldValue.java b/tests/testbench/com/vaadin/tests/components/select/SelectDisplaysOldValue.java
new file mode 100644
index 0000000000..56953e298c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/SelectDisplaysOldValue.java
@@ -0,0 +1,163 @@
+package com.vaadin.tests.components.select;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Select;
+
+public class SelectDisplaysOldValue extends TestBase {
+
+    @Override
+    protected void setup() {
+        addComponent(new DynamicSelectTestCase());
+    }
+
+    public class DynamicSelectTestCase extends HorizontalLayout {
+
+        private static final String CONTROLLER_COMBO_BOX_CAPTION = "Master : ";
+        private static final String SLAVE_COMBO_BOX_CAPTION = "Slave :";
+
+        private Select controllerComboBox;
+        private Select slaveComboBox;
+
+        private Map<Integer, String> controllerOptionMap = new HashMap<Integer, String>();
+
+        private Map<String, List<String>> slaveOptionMapping = new HashMap<String, List<String>>();
+        private final Object NAME_PROPERTY_ID = "name";
+
+        public DynamicSelectTestCase() {
+            populateControllerOptionMapping();
+            populateSlaveOptionMappings();
+            buildDynamicSelectTestCase();
+        }
+
+        private void populateControllerOptionMapping() {
+            for (int i = 1; i <= 3; i++) {
+                controllerOptionMap.put(i, "Master " + i);
+            }
+        }
+
+        private void populateSlaveOptionMappings() {
+            for (String controllerOption : controllerOptionMap.values()) {
+                List<String> slaveOptions = new ArrayList<String>();
+
+                for (int i = 1; i <= 3; i++) {
+                    slaveOptions.add(controllerOption + " - Slave " + i);
+                }
+
+                slaveOptionMapping.put(controllerOption, slaveOptions);
+            }
+        }
+
+        private void buildDynamicSelectTestCase() {
+            setSpacing(true);
+            setMargin(true);
+            buildAndConfigureComboBoxes();
+            addComponent(controllerComboBox);
+            addComponent(slaveComboBox);
+        }
+
+        private void buildAndConfigureComboBoxes() {
+            IndexedContainer masterOptionContainer = initMasterOptionContainer();
+            controllerComboBox = new Select(CONTROLLER_COMBO_BOX_CAPTION,
+                    masterOptionContainer);
+            configureMasterOptionDropdown();
+            controllerComboBox.addListener(new ControllerUpdatedListener());
+
+            buildSlaveDropdown(1);
+        }
+
+        private void buildSlaveDropdown(Integer masterId) {
+            IndexedContainer slaveOptionContainer = initSlaveOptionContainer(masterId);
+            slaveComboBox = new Select(SLAVE_COMBO_BOX_CAPTION,
+                    slaveOptionContainer);
+            configureSlaveOptionDropdown();
+        }
+
+        private IndexedContainer initMasterOptionContainer() {
+            IndexedContainer containerToReturn = new IndexedContainer();
+            Object defaultValue = null;
+            Item itemAdded;
+
+            containerToReturn.addContainerProperty(NAME_PROPERTY_ID,
+                    String.class, defaultValue);
+
+            for (Integer optionId : controllerOptionMap.keySet()) {
+                itemAdded = containerToReturn.addItem(optionId);
+                itemAdded.getItemProperty(NAME_PROPERTY_ID).setValue(
+                        controllerOptionMap.get(optionId));
+            }
+
+            return containerToReturn;
+        }
+
+        private IndexedContainer initSlaveOptionContainer(Integer masterId) {
+            IndexedContainer containerToReturn = new IndexedContainer();
+            Object defaultValue = null;
+            Item itemAdded;
+            List<String> options;
+
+            options = slaveOptionMapping.get(controllerOptionMap.get(masterId));
+            containerToReturn.addContainerProperty(NAME_PROPERTY_ID,
+                    String.class, defaultValue);
+
+            for (String option : options) {
+                itemAdded = containerToReturn.addItem(option);
+                itemAdded.getItemProperty(NAME_PROPERTY_ID).setValue(option);
+            }
+
+            return containerToReturn;
+        }
+
+        private void configureMasterOptionDropdown() {
+            controllerComboBox.setItemCaptionPropertyId(NAME_PROPERTY_ID);
+            controllerComboBox.setNullSelectionAllowed(false);
+            controllerComboBox.setNewItemsAllowed(false);
+            controllerComboBox.setImmediate(true);
+            controllerComboBox.setWriteThrough(false);
+            controllerComboBox.setReadThrough(false);
+
+        }
+
+        private void configureSlaveOptionDropdown() {
+            slaveComboBox.setItemCaptionPropertyId(NAME_PROPERTY_ID);
+            slaveComboBox.setNullSelectionAllowed(false);
+            slaveComboBox.setNewItemsAllowed(false);
+            slaveComboBox.setImmediate(true);
+            slaveComboBox.setWriteThrough(false);
+            slaveComboBox.setReadThrough(false);
+        }
+
+        private void refreshSlaveDropdown(Integer masterId) {
+            slaveComboBox
+                    .setContainerDataSource(initSlaveOptionContainer(masterId));
+            System.out.println("Slave value: " + slaveComboBox.getValue());
+        }
+
+        private class ControllerUpdatedListener implements
+                Property.ValueChangeListener {
+            public void valueChange(Property.ValueChangeEvent valueChangeEvent) {
+                refreshSlaveDropdown((Integer) valueChangeEvent.getProperty()
+                        .getValue());
+            }
+        }
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Select an 'master' item from the first combo box, a slave from the second, select another master and focus+blur the slave combo box and the slave combobox will show a value not in the combo box";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5556;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/select/SelectIconPlacement.html b/tests/testbench/com/vaadin/tests/components/select/SelectIconPlacement.html
new file mode 100644
index 0000000000..90e2e293a3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/SelectIconPlacement.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.select.SelectIconPlacement?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>icon-and-text-initial</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.select.SelectIconPlacement?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>icon-and-text-initial-reload</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[2]</td>
+	<td>16,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
+	<td>277,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[2]</td>
+	<td>9,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
+	<td>99,11</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>icon-and-text-reselected-items</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[2]</td>
+	<td>17,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item0</td>
+	<td>85,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>11,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
+	<td>57,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[2]</td>
+	<td>16,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item0</td>
+	<td>125,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFilterSelect[0]/domChild[1]</td>
+	<td>14,15</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectSelectIconPlacement::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
+	<td>105,12</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>icon-and-text-reselected-items-2</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/select/SelectIconPlacement.java b/tests/testbench/com/vaadin/tests/components/select/SelectIconPlacement.java
new file mode 100644
index 0000000000..51a899a7e6
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/SelectIconPlacement.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.components.select;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Select;
+
+public class SelectIconPlacement extends TestBase {
+    private static final long serialVersionUID = 1L;
+
+    private Select mySelect;
+
+    @Override
+    protected void setup() {
+        for (String width : new String[] { null, "200px" }) {
+            String icon = "error.png";
+            if (width == null) {
+                icon = "bullet.png";
+            }
+            mySelect = new Select("Width: " + (width == null ? "auto" : width));
+            String bar = "Only item";
+            mySelect.addItem(bar);
+            mySelect.setItemIcon(bar, new ThemeResource("common/icons/" + icon
+                    + "?w=" + width));
+            mySelect.select(bar);
+            mySelect.setWidth(width);
+            addComponent(mySelect);
+        }
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A select with item icons pushes the caption of that item to the right to make room for the icon. It works fine in all browsers except IE8.<br/>"
+                + "Upon component render the icon and caption is on top of each others, and it corrects itself when you open the dropdown. <br/><br/>";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3991;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/select/SelectTest.java b/tests/testbench/com/vaadin/tests/components/select/SelectTest.java
new file mode 100644
index 0000000000..cdc30921fa
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/SelectTest.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.components.select;
+
+import com.vaadin.ui.Select;
+
+public class SelectTest<T extends Select> extends AbstractSelectTestCase<T> {
+
+    @SuppressWarnings("unchecked")
+    @Override
+    protected Class<T> getTestClass() {
+        return (Class<T>) Select.class;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/select/TwinColSelectCaptionStyles.html b/tests/testbench/com/vaadin/tests/components/select/TwinColSelectCaptionStyles.html
new file mode 100644
index 0000000000..7fd4908673
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/TwinColSelectCaptionStyles.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.select.TwinColSelectCaptionStyles?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>auto-auto</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectCaptionStyles::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>500px-500px</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/select/TwinColSelectCaptionStyles.java b/tests/testbench/com/vaadin/tests/components/select/TwinColSelectCaptionStyles.java
new file mode 100644
index 0000000000..f3d147e32a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/TwinColSelectCaptionStyles.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.components.select;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.TwinColSelect;
+
+public class TwinColSelectCaptionStyles extends TestBase {
+
+    @Override
+    protected void setup() {
+        setTheme("tests-tickets");
+        final TwinColSelect sel = new TwinColSelect("Component caption");
+        sel.setLeftColumnCaption("Left caption");
+        sel.setRightColumnCaption("Right caption");
+        sel.setStyleName("styled-twincol-captions");
+        sel.setWidth("300px");
+        addComponent(sel);
+
+        Button b = new Button("Set height and width to 500px",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        sel.setHeight("500px");
+                        sel.setWidth("500px");
+
+                    }
+                });
+        addComponent(b);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tests that caption styling for TwinColSelect captions work properly. The left caption should be red and the right caption blue and larger than the left one.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/select/TwinColSelectDualCaptions.html b/tests/testbench/com/vaadin/tests/components/select/TwinColSelectDualCaptions.html
new file mode 100644
index 0000000000..04388cb95a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/TwinColSelectDualCaptions.html
@@ -0,0 +1,430 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://192.168.2.75:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.select.TwinColSelectTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--Hide log-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item1</td>
+	<td>27,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>27,6</td>
+</tr>
+<!--Remove component caption-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
+	<td>25,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item1</td>
+	<td>34,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>69,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>37,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>no-captions</td>
+</tr>
+<!--Add left caption-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
+	<td>39,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>46,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>46,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+	<td>27,4</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>left-caption</td>
+</tr>
+<!--Add right caption-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
+	<td>37,19</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>27,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
+	<td>61,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>29,11</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>dual-captions</td>
+</tr>
+<!--Hide left caption-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
+	<td>27,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>46,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>77,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>18,11</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>right-caption</td>
+</tr>
+<!--Hide right caption-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
+	<td>44,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>46,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
+	<td>75,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>8,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>no-captions</td>
+</tr>
+<!--Show right caption-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
+	<td>29,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>38,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
+	<td>64,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>29,9</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>right-caption</td>
+</tr>
+<!--Hide right caption-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
+	<td>35,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>42,15</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
+	<td>45,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>75,3</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>no-captions</td>
+</tr>
+<!--Set width to fixed (500px)-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
+	<td>37,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>36,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>15,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item6</td>
+	<td>27,8</td>
+</tr>
+<!--Add left caption-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
+	<td>7,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>49,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>50,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+	<td>21,0</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>500px-left-caption</td>
+</tr>
+<!--Add right caption-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
+	<td>53,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>47,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
+	<td>44,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+	<td>46,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>500px-dual-captions</td>
+</tr>
+<!--Change the size of the parent layout to 500px to ensure cached updates work-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item1</td>
+	<td>20,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>53,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>4,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item6</td>
+	<td>27,15</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>500px-dual-captions</td>
+</tr>
+<!--Hide left caption-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
+	<td>27,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>35,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>26,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>4,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
+	<td>32,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>42,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
+	<td>46,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>19,7</td>
+</tr>
+<!--Ensure height setting works correctly-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
+	<td>21,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>23,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>32,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+	<td>28,9</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>height-300px-no-captions</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
+	<td>47,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>37,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>55,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>36,15</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>height-300px-left-caption</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::PID_Smenu#item0</td>
+	<td>36,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>48,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>44,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelectTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>29,12</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>height-300px-no-captions</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/select/TwinColSelectTest.java b/tests/testbench/com/vaadin/tests/components/select/TwinColSelectTest.java
new file mode 100644
index 0000000000..2fb9ed2079
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/TwinColSelectTest.java
@@ -0,0 +1,65 @@
+package com.vaadin.tests.components.select;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.ui.TwinColSelect;
+
+public class TwinColSelectTest extends AbstractSelectTestCase<TwinColSelect> {
+
+    private Command<TwinColSelect, Integer> rowsCommand = new Command<TwinColSelect, Integer>() {
+        public void execute(TwinColSelect c, Integer value, Object data) {
+            c.setRows(value);
+        }
+    };
+
+    private Command<TwinColSelect, Integer> colsCommand = new Command<TwinColSelect, Integer>() {
+        public void execute(TwinColSelect c, Integer value, Object data) {
+            c.setColumns(value);
+        }
+    };
+
+    private Command<TwinColSelect, String> leftColumnCaptionCommand = new Command<TwinColSelect, String>() {
+
+        public void execute(TwinColSelect c, String value, Object data) {
+            c.setLeftColumnCaption(value);
+        }
+    };
+
+    private Command<TwinColSelect, String> rightColumnCaptionCommand = new Command<TwinColSelect, String>() {
+
+        public void execute(TwinColSelect c, String value, Object data) {
+            c.setRightColumnCaption(value);
+        }
+    };
+
+
+    @Override
+    protected Class<TwinColSelect> getTestClass() {
+        return TwinColSelect.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+        createRowsAction(CATEGORY_FEATURES);
+        createColsAction(CATEGORY_FEATURES);
+        createCaptionActions(CATEGORY_FEATURES);
+    }
+
+    private void createRowsAction(String category) {
+        LinkedHashMap<String, Integer> options = createIntegerOptions(20);
+        createSelectAction("Rows", category, options, "0", rowsCommand);
+    }
+
+    private void createColsAction(String category) {
+        LinkedHashMap<String, Integer> options = createIntegerOptions(20);
+        createSelectAction("Columns", category, options, "0", colsCommand);
+    }
+
+    private void createCaptionActions(String category) {
+        createSelectAction("Left column caption", category,
+                createCaptionOptions(), "-", leftColumnCaptionCommand);
+        createSelectAction("Right column caption", category,
+                createCaptionOptions(), "-", rightColumnCaptionCommand);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/select/TwinColSelects.java b/tests/testbench/com/vaadin/tests/components/select/TwinColSelects.java
new file mode 100644
index 0000000000..cf59eaa03b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/TwinColSelects.java
@@ -0,0 +1,48 @@
+package com.vaadin.tests.components.select;
+
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.ui.TwinColSelect;
+
+public class TwinColSelects extends ComponentTestCase<TwinColSelect> {
+
+    @Override
+    protected Class<TwinColSelect> getTestClass() {
+        return TwinColSelect.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+
+        TwinColSelect tws = createTwinColSelect("400x<auto>");
+        tws.setWidth("400px");
+        tws.setHeight("-1px");
+        addTestComponent(tws);
+
+        tws = createTwinColSelect("400x100");
+        tws.setWidth("400px");
+        tws.setHeight("100px");
+        addTestComponent(tws);
+
+        tws = createTwinColSelect("<auto>x100");
+        tws.setWidth("-1px");
+        tws.setHeight("100px");
+        addTestComponent(tws);
+
+        tws = createTwinColSelect("<auto>x<auto>");
+        tws.setSizeUndefined();
+        addTestComponent(tws);
+
+    }
+
+    private TwinColSelect createTwinColSelect(String caption) {
+        TwinColSelect select = new TwinColSelect(caption);
+        select.addContainerProperty(CAPTION, String.class, null);
+        for (int i = 0; i < 20; i++) {
+            select.addItem("" + i).getItemProperty(CAPTION)
+                    .setValue("Item " + i);
+        }
+        select.setImmediate(true);
+        return select;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/select/TwinColSelectsDisabledReadonly.html b/tests/testbench/com/vaadin/tests/components/select/TwinColSelectsDisabledReadonly.html
new file mode 100644
index 0000000000..f403d8b2f5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/select/TwinColSelectsDisabledReadonly.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.select.TwinColSelects?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::PID_Scheckboxaction-Error indicators/domChild[0]</td>
+	<td>7,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::PID_Scheckboxaction-Required/domChild[0]</td>
+	<td>4,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-error-required</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::PID_Scheckboxaction-Error indicators/domChild[0]</td>
+	<td>2,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::PID_Scheckboxaction-Required/domChild[0]</td>
+	<td>0,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::PID_Scheckboxaction-Readonly/domChild[0]</td>
+	<td>9,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled-readonly</td>
+</tr>
+<!--Disable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::PID_Scheckboxaction-Enabled/domChild[0]</td>
+	<td>7,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::PID_Scheckboxaction-Readonly/domChild[0]</td>
+	<td>10,2</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/slider/SliderKeyboardFocus.html b/tests/testbench/com/vaadin/tests/components/slider/SliderKeyboardFocus.html
new file mode 100644
index 0000000000..0521506418
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/slider/SliderKeyboardFocus.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.slider.SliderKeyboardFocus?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>SliderUnfocused</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssliderSliderKeyboardFocus::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VSlider[0]/domChild[2]/domChild[0]</td>
+	<td>2,7</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>SliderFocused0</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentssliderSliderKeyboardFocus::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VSlider[0]</td>
+	<td>right</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentssliderSliderKeyboardFocus::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VSlider[0]</td>
+	<td>right</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentssliderSliderKeyboardFocus::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VSlider[0]</td>
+	<td>right</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>SliderFocused3</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/slider/SliderKeyboardFocus.java b/tests/testbench/com/vaadin/tests/components/slider/SliderKeyboardFocus.java
new file mode 100644
index 0000000000..fe9450a0f0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/slider/SliderKeyboardFocus.java
@@ -0,0 +1,26 @@
+package com.vaadin.tests.components.slider;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Slider;
+
+public class SliderKeyboardFocus extends TestBase {
+
+    @Override
+    protected void setup() {
+        Slider slider = new Slider("The slider", 0, 100);
+        slider.setWidth("300px");
+        addComponent(slider);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tests keyboard navigation with the slider";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5329;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/slider/SliderTest.java b/tests/testbench/com/vaadin/tests/components/slider/SliderTest.java
new file mode 100644
index 0000000000..65a2fdd1b5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/slider/SliderTest.java
@@ -0,0 +1,74 @@
+package com.vaadin.tests.components.slider;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.tests.components.abstractfield.AbstractFieldTest;
+import com.vaadin.ui.Slider;
+
+public class SliderTest extends AbstractFieldTest<Slider> {
+
+    private Command<Slider, Double> minCommand = new Command<Slider, Double>() {
+        public void execute(Slider c, Double value, Object data) {
+            c.setMin(value);
+        }
+    };
+
+    private Command<Slider, Double> maxCommand = new Command<Slider, Double>() {
+        public void execute(Slider c, Double value, Object data) {
+            c.setMax(value);
+        }
+    };
+
+    private Command<Slider, Integer> orientationCommand = new Command<Slider, Integer>() {
+        public void execute(Slider c, Integer value, Object data) {
+            c.setOrientation(value);
+        }
+    };
+    private Command<Slider, Integer> resolutionCommand = new Command<Slider, Integer>() {
+        public void execute(Slider c, Integer value, Object data) {
+            c.setResolution(value);
+        }
+    };
+
+    @Override
+    protected Class<Slider> getTestClass() {
+        return Slider.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+
+        createMinSelect(CATEGORY_FEATURES);
+        createMaxSelect(CATEGORY_FEATURES);
+        createResolutionSelect(CATEGORY_FEATURES);
+        createOrientationSelect(CATEGORY_FEATURES);
+    }
+
+    private void createResolutionSelect(String category) {
+        createSelectAction("Resolution", category, createIntegerOptions(10),
+                "1", resolutionCommand);
+
+    }
+
+    private void createOrientationSelect(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("Horizontal", Slider.ORIENTATION_HORIZONTAL);
+        options.put("Vertical", Slider.ORIENTATION_VERTICAL);
+        createSelectAction("Orientation", category, options, "Horizontal",
+                orientationCommand);
+
+    }
+
+    private void createMaxSelect(String category) {
+        createSelectAction("Max", category, createDoubleOptions(100), "0",
+                maxCommand);
+    }
+
+    private void createMinSelect(String category) {
+        createSelectAction("Min", category, createDoubleOptions(100), "0",
+                minCommand);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/AbstractSplitPanelTest.java b/tests/testbench/com/vaadin/tests/components/splitpanel/AbstractSplitPanelTest.java
new file mode 100644
index 0000000000..0b702db33a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/AbstractSplitPanelTest.java
@@ -0,0 +1,127 @@
+package com.vaadin.tests.components.splitpanel;
+
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.tests.components.AbstractLayoutTest;
+import com.vaadin.ui.AbstractSplitPanel;
+import com.vaadin.ui.AbstractSplitPanel.SplitterClickEvent;
+import com.vaadin.ui.AbstractSplitPanel.SplitterClickListener;
+
+public abstract class AbstractSplitPanelTest<T extends AbstractSplitPanel>
+        extends AbstractLayoutTest<T> implements SplitterClickListener {
+
+    private Command<T, Boolean> splitterClickListenerCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((SplitterClickListener) AbstractSplitPanelTest.this);
+            } else {
+                c.removeListener((SplitterClickListener) AbstractSplitPanelTest.this);
+            }
+
+        }
+    };
+    private Command<T, SplitPosition> setSplitPositionCommand = new Command<T, AbstractSplitPanelTest.SplitPosition>() {
+        public void execute(T c, SplitPosition value, Object data) {
+            value.apply(c);
+        }
+    };
+    private Command<T, Boolean> splitterLockCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            c.setLocked(value);
+        }
+    };
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+        createSetSplitPositionAction(CATEGORY_FEATURES);
+        createSplitterClickListenerAction(CATEGORY_LISTENERS);
+        createSplitterLockAction(CATEGORY_FEATURES);
+
+        // Default to 100% x 100% as SplitPanel does not work as undefined
+        for (T c : getTestComponents()) {
+            c.setSizeFull();
+        }
+    }
+
+    private void createSplitterLockAction(String categoryFeatures) {
+        createBooleanAction("Splitter locked", categoryFeatures, false,
+                splitterLockCommand);
+
+    }
+
+    public static class SplitPosition {
+
+        private boolean reverse = false;
+        private int position;
+        private int unit;
+        private String posString;
+
+        public SplitPosition(String pos) {
+            this.posString = pos;
+            if (pos.startsWith("-")) {
+                reverse = true;
+                pos = pos.substring(1);
+            }
+
+            if (pos.endsWith("px")) {
+                position = Integer.parseInt(pos.substring(0, pos.length() - 2));
+                unit = Sizeable.UNITS_PIXELS;
+            } else if (pos.endsWith("%")) {
+                position = Integer.parseInt(pos.substring(0, pos.length() - 1));
+                unit = Sizeable.UNITS_PERCENTAGE;
+            } else {
+                throw new RuntimeException("Could not parse " + pos);
+            }
+        }
+
+        public void apply(AbstractSplitPanel sp) {
+            sp.setSplitPosition(position, unit, reverse);
+        }
+
+        @Override
+        public String toString() {
+            return posString;
+        }
+    }
+
+    private void createSetSplitPositionAction(String categoryFeatures) {
+        String subCategory = "Set splitter position";
+        createCategory(subCategory, categoryFeatures);
+
+        createClickAction("0px from left/top", subCategory,
+                setSplitPositionCommand, new SplitPosition("0px"));
+        createClickAction("200px from left/top", subCategory,
+                setSplitPositionCommand, new SplitPosition("200px"));
+        createClickAction("0px from right/bottom", subCategory,
+                setSplitPositionCommand, new SplitPosition("-0px"));
+        createClickAction("200px from right/bottom", subCategory,
+                setSplitPositionCommand, new SplitPosition("-200px"));
+
+        createClickAction("0% from left/top", subCategory,
+                setSplitPositionCommand, new SplitPosition("0%"));
+        createClickAction("0% from right/bottom", subCategory,
+                setSplitPositionCommand, new SplitPosition("-0%"));
+        createClickAction("50% from left/top", subCategory,
+                setSplitPositionCommand, new SplitPosition("50%"));
+        createClickAction("50% from right/bottom", subCategory,
+                setSplitPositionCommand, new SplitPosition("-50%"));
+        createClickAction("100% from left/top", subCategory,
+                setSplitPositionCommand, new SplitPosition("100%"));
+        createClickAction("100% from right/bottom", subCategory,
+                setSplitPositionCommand, new SplitPosition("-100%"));
+
+    }
+
+    private void createSplitterClickListenerAction(String category) {
+        createBooleanAction("SplitterClickListener", category, false,
+                splitterClickListenerCommand);
+
+    }
+
+    public void splitterClick(SplitterClickEvent event) {
+        log(event.getClass().getSimpleName() + ": " + event.getButtonName()
+                + " at " + event.getRelativeX() + "," + event.getRelativeY());
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelBasicStates.html b/tests/testbench/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelBasicStates.html
new file mode 100644
index 0000000000..2b1ad7866a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelBasicStates.html
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.splitpanel.HorizontalSplitPanels?restartApplication</td>
+	<td></td>
+</tr>
+<!--Disable event log-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item1</td>
+	<td>26,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>20,8</td>
+</tr>
+<!--set size full-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
+	<td>22,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>72,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>18,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>47,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
+	<td>37,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>35,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>20,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>23,7</td>
+</tr>
+<!--add TextArea + NativeButton (100% x 100%) -->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
+	<td>23,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>86,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>48,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>38,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[3]/VMenuBar[0]#item6</td>
+	<td>69,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
+	<td>18,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>36,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>70,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>28,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[3]/VMenuBar[0]#item6</td>
+	<td>38,0</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled</td>
+</tr>
+<!--Disable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
+	<td>38,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>31,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>57,13</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled</td>
+</tr>
+<!--Set readonly-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
+	<td>6,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>20,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled-readonly</td>
+</tr>
+<!--Enable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
+	<td>43,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>42,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>53,5</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>readonly</td>
+</tr>
+<!--Set read-write-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
+	<td>6,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>20,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelMoveSplitter.html b/tests/testbench/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelMoveSplitter.html
new file mode 100644
index 0000000000..b2deb8e509
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelMoveSplitter.html
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.splitpanel.HorizontalSplitPanels?restartApplication</td>
+	<td></td>
+</tr>
+<!--set size full-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
+	<td>22,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>72,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>18,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>47,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
+	<td>37,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>35,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>20,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>23,7</td>
+</tr>
+<!--add two 100% x 100% components-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
+	<td>23,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>86,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>48,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item6</td>
+	<td>38,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[3]/VMenuBar[0]#item6</td>
+	<td>69,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
+	<td>18,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>36,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>70,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+	<td>28,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[3]/VMenuBar[0]#item6</td>
+	<td>38,0</td>
+</tr>
+<!--move the splitter-->
+<tr>
+	<td>dragAndDrop</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_StestComponent/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>-500,0</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>splitter-left</td>
+</tr>
+<tr>
+	<td>dragAndDrop</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_StestComponent/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>800,0</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>splitter-right</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelSplitterClick.html b/tests/testbench/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelSplitterClick.html
new file mode 100644
index 0000000000..3d3fcc5939
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelSplitterClick.html
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>HorizontalSplitPanelSplitterClick</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">HorizontalSplitPanelSplitterClick</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.splitpanel.HorizontalSplitPanels?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+<!--Add splitter click listener-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
+	<td>9,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>105,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>36,11</td>
+</tr>
+<!--Click splitter-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_StestComponent/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_SLog_row_0</td>
+	<td>1. SplitterClickEvent: left at -1,-1</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>splitterClicked</td>
+</tr>
+<!--Reverse orientation-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_Smenu#item0</td>
+	<td>51,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>73,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>50,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item7</td>
+	<td>92,10</td>
+</tr>
+<!--Click splitter-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_StestComponent/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelHorizontalSplitPanels::PID_SLog_row_0</td>
+	<td>3. SplitterClickEvent: left at -1,-1</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>reverseSplitterClicked</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/HorizontalSplitPanels.java b/tests/testbench/com/vaadin/tests/components/splitpanel/HorizontalSplitPanels.java
new file mode 100644
index 0000000000..a92143963b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/HorizontalSplitPanels.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.components.splitpanel;
+
+import com.vaadin.ui.HorizontalSplitPanel;
+
+public class HorizontalSplitPanels extends
+        AbstractSplitPanelTest<HorizontalSplitPanel> {
+
+    @Override
+    protected Class<HorizontalSplitPanel> getTestClass() {
+        return HorizontalSplitPanel.class;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelExtraScrollbars.html b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelExtraScrollbars.html
new file mode 100644
index 0000000000..e8e7395198
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelExtraScrollbars.html
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>SplitPanelExtraScrollbars</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">SplitPanelExtraScrollbars</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.splitpanel.SplitPanelExtraScrollbars</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelSplitPanelExtraScrollbars::/VSplitPanelHorizontal[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VNativeButton[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelExtraScrollbars.java b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelExtraScrollbars.java
new file mode 100644
index 0000000000..872828c97e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelExtraScrollbars.java
@@ -0,0 +1,68 @@
+package com.vaadin.tests.components.splitpanel;
+
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.NativeButton;
+import com.vaadin.ui.Window;
+
+public class SplitPanelExtraScrollbars extends AbstractTestCase implements
+        ClickListener {
+
+    private HorizontalSplitPanel sp;
+    private HorizontalLayout hl;
+    private Button b;
+
+    @Override
+    public void init() {
+        sp = new HorizontalSplitPanel();
+        sp.setSizeFull();
+        sp.setSplitPosition(0, Sizeable.UNITS_PIXELS);
+
+        hl = new HorizontalLayout();
+        hl.setMargin(true);
+        hl.setWidth("100%");
+        hl.setHeight(null);
+
+        b = createButton("200px");
+        sp.setSecondComponent(hl);
+        hl.addComponent(b);
+
+        Window w = new Window("Test", sp);
+        setMainWindow(w);
+    }
+
+    private Button createButton(String height) {
+        Button b = new NativeButton("A BIG button");
+        b.setHeight(height);
+        b.addListener(this);
+        return b;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Click the button to change its height. Making the button higher than the browser should not cause vertical but not horizontal scrollbars to appear.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3458;
+    }
+
+    public void buttonClick(ClickEvent event) {
+        if (b.getHeight() == 200) {
+            b.setHeight("1200px");
+        } else {
+            b.setHeight("200px");
+        }
+
+        // Sending all changes in one repaint triggers the bug
+        hl.requestRepaint();
+        sp.requestRepaint();
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelInModalWindow.java b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelInModalWindow.java
new file mode 100644
index 0000000000..c06ca5b0b9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelInModalWindow.java
@@ -0,0 +1,36 @@
+package com.vaadin.tests.components.splitpanel;
+
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class SplitPanelInModalWindow extends TestBase {
+
+    @Override
+    public void setup() {
+
+        VerticalLayout vl = new VerticalLayout();
+        final Window modalWindow = new Window("Modeless Window", vl);
+        vl.setWidth(200, Sizeable.UNITS_PIXELS);
+        vl.setHeight(200, Sizeable.UNITS_PIXELS);
+        modalWindow.setModal(true); // This line causes the problem
+        getMainWindow().addWindow(modalWindow);
+
+        HorizontalSplitPanel splitPanel = new HorizontalSplitPanel();
+        splitPanel.setSplitPosition(20);
+        vl.addComponent(splitPanel);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Moving the splitter in the modal window should work as expected and not cause the application to freeze.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4067;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelReversePosition.html b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelReversePosition.html
new file mode 100644
index 0000000000..6bdc9dd5e7
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelReversePosition.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.splitpanel.SplitPanelReversePosition?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>right100pxbottom10percent</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelSplitPanelReversePosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>left100pxbottom10percent</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelSplitPanelReversePosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>left100pxtop10percent</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelSplitPanelReversePosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>right100pxtop10percent</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelReversePosition.java b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelReversePosition.java
new file mode 100644
index 0000000000..107635e989
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelReversePosition.java
@@ -0,0 +1,98 @@
+package com.vaadin.tests.components.splitpanel;
+
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractSplitPanel.SplitterClickEvent;
+import com.vaadin.ui.AbstractSplitPanel.SplitterClickListener;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalSplitPanel;
+
+public class SplitPanelReversePosition extends TestBase {
+
+    private boolean hsplitReversed = true;
+    private boolean vsplitReversed = true;
+
+    @Override
+    protected void setup() {
+        getLayout().setSizeFull();
+        getLayout().setSpacing(true);
+
+        final HorizontalSplitPanel hsplit = new HorizontalSplitPanel();
+        hsplit.setSizeFull();
+        hsplit.setImmediate(true);
+        hsplit.setSplitPosition(100, Sizeable.UNITS_PIXELS, hsplitReversed);
+        hsplit.addListener(new HorizontalSplitPanel.SplitterClickListener() {
+            public void splitterClick(SplitterClickEvent event) {
+                getMainWindow().showNotification("Horizontal Splitter Clicked");
+            }
+        });
+
+        TextField field = new TextField("");
+        field.setSizeFull();
+        hsplit.addComponent(field);
+
+        final VerticalSplitPanel vsplit = new VerticalSplitPanel();
+        vsplit.setSizeFull();
+        vsplit.setImmediate(true);
+        vsplit.setSplitPosition(10, Sizeable.UNITS_PERCENTAGE, vsplitReversed);
+        vsplit.addListener(new SplitterClickListener() {
+            public void splitterClick(SplitterClickEvent event) {
+                getMainWindow().showNotification("Vertical Splitter Clicked");
+            }
+        });
+        hsplit.addComponent(vsplit);
+
+        addComponent(hsplit);
+
+        field = new TextField("");
+        field.setSizeFull();
+        vsplit.addComponent(field);
+
+        field = new TextField("");
+        field.setSizeFull();
+        vsplit.addComponent(field);
+
+        HorizontalLayout buttons = new HorizontalLayout();
+        buttons.setSpacing(true);
+
+        buttons.addComponent(new Button("Swap horizontal positioning",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        hsplitReversed = !hsplitReversed;
+                        hsplit.setSplitPosition(100, Sizeable.UNITS_PIXELS,
+                                hsplitReversed);
+
+                    }
+                }));
+
+        buttons.addComponent(new Button("Swap vertical positioning",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        vsplitReversed = !vsplitReversed;
+                        vsplit.setSplitPosition(10, Sizeable.UNITS_PERCENTAGE,
+                                vsplitReversed);
+                    }
+                }));
+
+        addComponent(buttons);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The horizontal split panel should be splitted "
+                + "100px from the right and the vertical split panel should "
+                + "be splitted 10% from the bottom";
+
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 1588;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelSplitterWidth.java b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelSplitterWidth.java
new file mode 100644
index 0000000000..49a5915999
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelSplitterWidth.java
@@ -0,0 +1,64 @@
+package com.vaadin.tests.components.splitpanel;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalSplitPanel;
+import com.vaadin.ui.Window.Notification;
+
+public class SplitPanelSplitterWidth extends TestBase {
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2510;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "SplitPanel splitter is effectively a 1px wide target after unlocking previously locked splitter.";
+    }
+
+    @Override
+    protected void setup() {
+        final HorizontalSplitPanel split = new HorizontalSplitPanel();
+        split.setWidth("200px");
+        split.setHeight("200px");
+        split.setLocked(true);
+        Panel p = new Panel("Left");
+        p.setSizeFull();
+        split.addComponent(p);
+        p = new Panel("Right");
+        p.setSizeFull();
+        split.addComponent(p);
+
+        final VerticalSplitPanel split2 = new VerticalSplitPanel();
+        split2.setWidth("200px");
+        split2.setHeight("200px");
+        split2.setLocked(true);
+        p = new Panel("Top");
+        p.setSizeFull();
+        split2.addComponent(p);
+        p = new Panel("Bottom");
+        p.setSizeFull();
+        split2.addComponent(p);
+
+        getLayout().addComponent(
+                new Button("Unlock", new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        split.setLocked(false);
+                        split2.setLocked(false);
+                        getMainWindow().showNotification(
+                                "Try moving split. Then reload page.",
+                                Notification.TYPE_WARNING_MESSAGE);
+                        getLayout().removeComponent(event.getButton());
+                    }
+
+                }));
+        getLayout().addComponent(split);
+        getLayout().addComponent(split2);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelSwapComponents.html b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelSwapComponents.html
new file mode 100644
index 0000000000..f84eba7c36
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelSwapComponents.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>SplitPanelSwapComponents</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">SplitPanelSwapComponents</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.splitpanel.SplitPanelSwapComponents?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelSplitPanelSwapComponents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>A label</td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelSwapComponents.java b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelSwapComponents.java
new file mode 100644
index 0000000000..470a47f160
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelSwapComponents.java
@@ -0,0 +1,48 @@
+package com.vaadin.tests.components.splitpanel;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Label;
+
+public class SplitPanelSwapComponents extends TestBase {
+
+    @Override
+    protected void setup() {
+        final HorizontalSplitPanel hsplit = new HorizontalSplitPanel();
+        hsplit.setWidth("300px");
+        hsplit.setHeight("300px");
+        hsplit.setSecondComponent(new Label("A label"));
+        hsplit.setFirstComponent(new Label("Another label"));
+        getLayout().addComponent(hsplit);
+
+        Button swap = new Button("Swap components", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                Component first = hsplit.getFirstComponent();
+                hsplit.removeComponent(first);
+
+                Component second = hsplit.getSecondComponent();
+                hsplit.removeComponent(second);
+
+                hsplit.setFirstComponent(second);
+                hsplit.setSecondComponent(first);
+            }
+        });
+
+        getLayout().addComponent(swap);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Swapping components should work";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6171;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelWidthOnResize.java b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelWidthOnResize.java
new file mode 100644
index 0000000000..8d5256ece7
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelWidthOnResize.java
@@ -0,0 +1,43 @@
+package com.vaadin.tests.components.splitpanel;
+
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.NativeButton;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class SplitPanelWidthOnResize extends AbstractTestCase {
+
+    @Override
+    public void init() {
+        VerticalLayout layout = new VerticalLayout();
+        layout.setSizeFull();
+        Window w = new Window("", layout);
+        setMainWindow(w);
+        HorizontalSplitPanel splitPanel = new HorizontalSplitPanel();
+        Button button = new NativeButton("A huge button");
+        button.setSizeFull();
+        TextField textField = new TextField("A small textfield");
+
+        splitPanel.setFirstComponent(button);
+        splitPanel.setSecondComponent(textField);
+        splitPanel.setSizeFull();
+        splitPanel.setSplitPosition(100, Sizeable.UNITS_PERCENTAGE);
+
+        layout.addComponent(splitPanel);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Make the browser window smaller and then larger again. The huge button should always stay visible and the TextField should never be shown.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3322;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelWithRichTextArea.java b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelWithRichTextArea.java
new file mode 100644
index 0000000000..6b17319509
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanelWithRichTextArea.java
@@ -0,0 +1,37 @@
+package com.vaadin.tests.components.splitpanel;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.RichTextArea;
+import com.vaadin.ui.VerticalSplitPanel;
+
+public class SplitPanelWithRichTextArea extends TestBase {
+
+    @Override
+    protected void setup() {
+        VerticalSplitPanel sp = new VerticalSplitPanel();
+        sp.setSizeFull();
+        RichTextArea rta = new RichTextArea();
+        rta.setSizeFull();
+        Label label = new Label("One side of the panel");
+
+        sp.setFirstComponent(label);
+        sp.setSecondComponent(rta);
+
+        addComponent(sp);
+        sp.setSizeFull();
+        getLayout().setSizeFull();
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Dragging the splitter should work even if the cursor happens to move over the RichTextArea because of slow updates.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3792;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanels.java b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanels.java
new file mode 100644
index 0000000000..ebe94271cc
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/SplitPanels.java
@@ -0,0 +1,37 @@
+package com.vaadin.tests.components.splitpanel;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.ui.SplitPanel;
+
+@SuppressWarnings("deprecation")
+public class SplitPanels extends AbstractSplitPanelTest<SplitPanel> {
+
+    private Command<SplitPanel, Integer> orientationCommand = new Command<SplitPanel, Integer>() {
+
+        public void execute(SplitPanel c, Integer value, Object data) {
+            c.setOrientation(value);
+        }
+    };
+
+    @Override
+    protected Class<SplitPanel> getTestClass() {
+        return SplitPanel.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+        createOrientationSelect(CATEGORY_FEATURES);
+
+    }
+
+    private void createOrientationSelect(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("Horizontal", SplitPanel.ORIENTATION_HORIZONTAL);
+        options.put("Vertical", SplitPanel.ORIENTATION_VERTICAL);
+        createSelectAction("Orientation", category, options, "Horizontal",
+                orientationCommand);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/VerticalSplitPanelBasicStates.html b/tests/testbench/com/vaadin/tests/components/splitpanel/VerticalSplitPanelBasicStates.html
new file mode 100644
index 0000000000..6f9678a54f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/VerticalSplitPanelBasicStates.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.splitpanel.VerticalSplitPanels?restartApplication</td>
+	<td></td>
+</tr>
+<!--Disable event log-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item1</td>
+	<td>26,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>20,8</td>
+</tr>
+<!--set size full-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
+	<td>22,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>72,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>18,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>47,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
+	<td>37,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>35,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>20,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>23,7</td>
+</tr>
+<!--add two 100% x 100% components-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
+	<td>23,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>86,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>48,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>38,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[3]/VMenuBar[0]#item6</td>
+	<td>69,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
+	<td>18,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>36,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>70,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>28,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[3]/VMenuBar[0]#item6</td>
+	<td>38,0</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled</td>
+</tr>
+<!--Disable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
+	<td>38,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>31,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>57,13</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled</td>
+</tr>
+<!--Set readonly-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
+	<td>6,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>20,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled-readonly</td>
+</tr>
+<!--Enable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
+	<td>43,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>42,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>53,5</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>readonly</td>
+</tr>
+<!--Set read-write-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
+	<td>6,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>20,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/VerticalSplitPanelMoveSplitter.html b/tests/testbench/com/vaadin/tests/components/splitpanel/VerticalSplitPanelMoveSplitter.html
new file mode 100644
index 0000000000..0ebde2846d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/VerticalSplitPanelMoveSplitter.html
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.splitpanel.VerticalSplitPanels?restartApplication</td>
+	<td></td>
+</tr>
+<!--set size full-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
+	<td>22,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>72,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>18,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>47,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
+	<td>37,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>35,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>20,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>23,7</td>
+</tr>
+<!--add two 100% x 100% components-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
+	<td>23,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>86,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>48,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item6</td>
+	<td>38,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[3]/VMenuBar[0]#item6</td>
+	<td>69,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
+	<td>18,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>36,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>70,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item5</td>
+	<td>28,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[3]/VMenuBar[0]#item6</td>
+	<td>38,0</td>
+</tr>
+<!--move the splitter-->
+<tr>
+	<td>dragAndDrop</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_StestComponent/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>0,-100</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>splitter-above</td>
+</tr>
+<tr>
+	<td>dragAndDrop</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_StestComponent/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>0,300</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>splitter-below</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/VerticalSplitPanelSplitterClick.html b/tests/testbench/com/vaadin/tests/components/splitpanel/VerticalSplitPanelSplitterClick.html
new file mode 100644
index 0000000000..ed5f191a65
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/VerticalSplitPanelSplitterClick.html
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>VerticalSplitPanelSplitterClick</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">VerticalSplitPanelSplitterClick</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.splitpanel.VerticalSplitPanels?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+<!--Add splitter click listener-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
+	<td>9,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>105,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>36,11</td>
+</tr>
+<!--Click splitter-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_StestComponent/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_SLog_row_0</td>
+	<td>1. SplitterClickEvent: left at -1,-1</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>splitterClicked</td>
+</tr>
+<!--Reverse orientation-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_Smenu#item0</td>
+	<td>51,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>73,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>50,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::Root/VOverlay[2]/VMenuBar[0]#item7</td>
+	<td>92,10</td>
+</tr>
+<!--Click splitter-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_StestComponent/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentssplitpanelVerticalSplitPanels::PID_SLog_row_0</td>
+	<td>3. SplitterClickEvent: left at -1,-1</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>reverseSplitterClicked</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/splitpanel/VerticalSplitPanels.java b/tests/testbench/com/vaadin/tests/components/splitpanel/VerticalSplitPanels.java
new file mode 100644
index 0000000000..4ff0445d71
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/splitpanel/VerticalSplitPanels.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.components.splitpanel;
+
+import com.vaadin.ui.VerticalSplitPanel;
+
+public class VerticalSplitPanels extends
+        AbstractSplitPanelTest<VerticalSplitPanel> {
+
+    @Override
+    protected Class<VerticalSplitPanel> getTestClass() {
+        return VerticalSplitPanel.class;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/ActionsOnTableBackground.html b/tests/testbench/com/vaadin/tests/components/table/ActionsOnTableBackground.html
new file mode 100644
index 0000000000..93037c3da1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ActionsOnTableBackground.html
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>actions-on-table-background</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">actions-on-table-background</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<!--make table higher than number of rows-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>47,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>51,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>32,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item8</td>
+	<td>25,1</td>
+</tr>
+<!--add context menu-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>36,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>60,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>71,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item5</td>
+	<td>57,8</td>
+</tr>
+<!--Context menu for item 1-->
+<tr>
+	<td>contextmenu</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertVisible</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
+	<td>Edit Item 1</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option1</td>
+	<td>Common action</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
+	<td>47,6</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog_row_0</td>
+	<td>2. Action Edit Item 1 performed on Item 1</td>
+</tr>
+<!--Context menu for no item-->
+<tr>
+	<td>contextmenu</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertVisible</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
+	<td>New...</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option1</td>
+	<td>Common action</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
+	<td>47,6</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog_row_0</td>
+	<td>3. Action New... performed on null</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/CellStyleGeneratorTest.java b/tests/testbench/com/vaadin/tests/components/table/CellStyleGeneratorTest.java
new file mode 100644
index 0000000000..08bbd0790f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/CellStyleGeneratorTest.java
@@ -0,0 +1,62 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.TestUtils;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.CellStyleGenerator;
+
+@SuppressWarnings("serial")
+public class CellStyleGeneratorTest extends TestBase {
+
+    @Override
+    protected void setup() {
+        TestUtils
+                .injectCSS(getMainWindow(),
+                        ".v-table-cell-content-red{background:red;}.v-table-row-blue{background:blue;}");
+
+        CellStyleGenerator g = new CellStyleGenerator() {
+
+            public String getStyle(Object itemId, Object propertyId) {
+                if (propertyId != null && propertyId.equals("red")) {
+                    return "red";
+                } else if (itemId.equals("blue") && propertyId == null) {
+                    // row style
+                    return "blue";
+                }
+                return null;
+            }
+
+        };
+
+        Table table = new Table();
+        table.addContainerProperty("foo", String.class, "foo");
+        table.addContainerProperty("red", String.class, "red");
+        table.addItem();
+        table.addItem("blue");
+        table.setCellStyleGenerator(g);
+
+        addComponent(table);
+
+        table = new Table();
+        table.addContainerProperty("foo", String.class, "foo");
+        table.addContainerProperty("red", String.class, "red");
+        table.addItem();
+        table.addItem("blue");
+        table.setCellStyleGenerator(g);
+        table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+
+        addComponent(table);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Cell style generators should work";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/ClippedComponentsInTable.html b/tests/testbench/com/vaadin/tests/components/table/ClippedComponentsInTable.html
new file mode 100644
index 0000000000..4a6ccbbe2d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ClippedComponentsInTable.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>ClippedComponentsInTable</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ClippedComponentsInTable</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.ClippedComponentsInTable</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/ClippedComponentsInTable.java b/tests/testbench/com/vaadin/tests/components/table/ClippedComponentsInTable.java
new file mode 100644
index 0000000000..8b6775cc74
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ClippedComponentsInTable.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+
+public class ClippedComponentsInTable extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The table below should display 3 rows. Each with a textfield containing the row number.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+    @Override
+    protected void setup() {
+        Table t = new Table();
+        addComponent(t);
+
+        t.addContainerProperty("Name", TextField.class, null);
+        t.addContainerProperty("Button", Button.class, null);
+
+        for (int i = 0; i < 3; i++) {
+            Item item = t.addItem(i);
+            TextField tf = new TextField("", String.valueOf(i + 1));
+            tf.setColumns(10);
+            item.getItemProperty("Name").setValue(tf);
+
+            Button b = new Button("OK");
+            item.getItemProperty("Button").setValue(b);
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/CollapseIndicatorOverlapsColumn.html b/tests/testbench/com/vaadin/tests/components/table/CollapseIndicatorOverlapsColumn.html
new file mode 100644
index 0000000000..e3d0821642
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/CollapseIndicatorOverlapsColumn.html
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8080/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.CollapseIndicatorOverlapsColumn?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>RightColumnCaptionVisible</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableCollapseIndicatorOverlapsColumn::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
+	<td>76,11</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>RightColumnCaptionAndSortIndicatorVisible</td>
+</tr>
+<tr>
+	<td>drag</td>
+	<td>vaadin=runcomvaadintestscomponentstableCollapseIndicatorOverlapsColumn::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>Wait to ensure the dragged element is updated by the start of the drag</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td></td>
+	<td>200</td>
+</tr>
+<tr>
+	<td>drop</td>
+	<td>vaadin=runcomvaadintestscomponentstableCollapseIndicatorOverlapsColumn::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>-100,0</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>NoExtraSpacingInCaption</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/CollapseIndicatorOverlapsColumn.java b/tests/testbench/com/vaadin/tests/components/table/CollapseIndicatorOverlapsColumn.java
new file mode 100644
index 0000000000..267b61854f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/CollapseIndicatorOverlapsColumn.java
@@ -0,0 +1,47 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+
+public class CollapseIndicatorOverlapsColumn extends TestBase {
+
+    @Override
+    protected void setup() {
+        Table tbl = createTable();
+        tbl = createTable();
+        tbl.setWidth("400px");
+        addComponent(tbl);
+    }
+
+    private Table createTable() {
+        Table tbl = new Table();
+        tbl.addContainerProperty("COL1", String.class, "Column 1");
+        tbl.addContainerProperty("COL2", String.class, "Column 2");
+
+        // Right align last column
+        tbl.setColumnAlignment("COL2", Table.ALIGN_RIGHT);
+
+        // Allow collapsing
+        tbl.setColumnCollapsingAllowed(true);
+
+        for (int i = 0; i < 5; i++) {
+            Item item = tbl.addItem("Item " + i);
+            for (int j = 1; j <= 2; j++) {
+                item.getItemProperty("COL" + j).setValue("Item " + i + "/" + j);
+            }
+        }
+        return tbl;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The rightmost column should not be covered by the collapse indicator";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6934;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.html b/tests/testbench/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.html
new file mode 100644
index 0000000000..9e529836b6
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.html
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>ColumnCollapsingAndColumnExpansion</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ColumnCollapsingAndColumnExpansion</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.ColumnCollapsingAndColumnExpansion</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<!--Initial state, all 3 columns visible-->
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>col1-col2-col3-visible</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<!--Hide 'col2' through table interface-->
+<tr>
+	<td>click</td>
+	<td>//td[@id='gwt-uid-2']/span/div</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>col2-hidden</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<!--Hide 'Col1' using button-->
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>Col1</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>col1-col2-hidden</td>
+</tr>
+<!--Show 'col2' using action handler-->
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>contextmenu</td>
+	<td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VContextMenu[0]#option0</td>
+	<td>11,6</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>Col2</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>col1-hidden</td>
+</tr>
+<!--Show 'Col1' using button-->
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>Col1</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<!--We should now be back at the initial state, all 3 columns visible-->
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>col1-col2-col3-visible-again</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.java b/tests/testbench/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.java
new file mode 100644
index 0000000000..9bf77f42bd
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.java
@@ -0,0 +1,91 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.event.Action;
+import com.vaadin.event.Action.Handler;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+
+public class ColumnCollapsingAndColumnExpansion extends TestBase {
+
+    private Table table;
+
+    @Override
+    public void setup() {
+
+        table = new Table();
+
+        table.addContainerProperty("Col1", String.class, null);
+        table.addContainerProperty("Col2", String.class, null);
+        table.addContainerProperty("Col3", String.class, null);
+        table.setColumnCollapsingAllowed(true);
+
+        table.addActionHandler(new Handler() {
+
+            final Action H = new Action("Toggle Col2");
+            final Action[] actions = new Action[] { H };
+
+            public Action[] getActions(Object target, Object sender) {
+                return actions;
+            }
+
+            public void handleAction(Action action, Object sender, Object target) {
+                table.setColumnCollapsed("Col2",
+                        !table.isColumnCollapsed("Col2"));
+
+            }
+        });
+
+        table.setSizeFull();
+
+        for (int y = 1; y < 5; y++) {
+            table.addItem(new Object[] { "cell " + 1 + "-" + y,
+                    "cell " + 2 + "-" + y, "cell " + 3 + "-" + y, },
+                    new Object());
+        }
+
+        addComponent(table);
+
+        HorizontalLayout hl = new HorizontalLayout();
+        final TextField tf = new TextField("Column name (ColX)");
+        Button hide = new Button("Collapse", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                table.setColumnCollapsed(tf.getValue(), true);
+            }
+
+        });
+
+        Button show = new Button("Show", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                table.setColumnCollapsed(tf.getValue(), false);
+            }
+
+        });
+
+        hl.addComponent(tf);
+        hl.addComponent(hide);
+        hl.addComponent(show);
+        hl.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
+        hl.setComponentAlignment(hide, Alignment.BOTTOM_LEFT);
+        hl.setComponentAlignment(show, Alignment.BOTTOM_LEFT);
+        addComponent(hl);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "After hiding column 2 the remaining columns (1 and 3) should use all available space in the table";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3246;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/ColumnExpandRatio.html b/tests/testbench/com/vaadin/tests/components/table/ColumnExpandRatio.html
new file mode 100644
index 0000000000..6d5422831e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ColumnExpandRatio.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>ColumnExpandRatio</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ColumnExpandRatio</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.ColumnExpandRatio</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/ColumnExpandRatio.java b/tests/testbench/com/vaadin/tests/components/table/ColumnExpandRatio.java
new file mode 100644
index 0000000000..be176d83fa
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ColumnExpandRatio.java
@@ -0,0 +1,70 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+
+public class ColumnExpandRatio extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Column expand ratios can be used to adjust the way "
+                + "how excess horizontal space is divided among columns.";
+
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2806;
+    }
+
+    private static final int ROWS = 100;
+
+    @Override
+    public void setup() {
+        Table table1 = initTable();
+        addComponent(new Label("Plain table"));
+        addComponent(table1);
+
+    }
+
+    private Table initTable() {
+        Table table = new Table();
+        table.setWidth("100%");
+
+        IndexedContainer idx = new IndexedContainer();
+        idx.addContainerProperty("firstname", String.class, null);
+        idx.addContainerProperty("lastname", String.class, null);
+        Item i = idx.addItem(1);
+        i.getItemProperty("firstname").setValue("John");
+        i.getItemProperty("lastname").setValue("Johnson");
+
+        i = idx.addItem(2);
+        i.getItemProperty("firstname").setValue("Jane");
+        i.getItemProperty("lastname").setValue("Janeine");
+
+        for (int index = 3; index < ROWS; index++) {
+            i = idx.addItem(index);
+            i.getItemProperty("firstname").setValue("Jane");
+            i.getItemProperty("lastname").setValue("Janeine");
+        }
+
+        idx.addContainerProperty("fixed 50px column", String.class, "");
+
+        idx.addContainerProperty("Expanded with 2", String.class, "foobar");
+
+        table.setContainerDataSource(idx);
+
+        table.setColumnHeader("firstname", "FirstName");
+        table.setColumnHeader("lastname", "LastName (1)");
+
+        table.setColumnWidth("fixed 50px column", 50);
+        table.setColumnExpandRatio("Expanded with 2", 2);
+        table.setColumnExpandRatio("lastname", 1);
+
+        return table;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/ColumnExpandWithFixedColumns.html b/tests/testbench/com/vaadin/tests/components/table/ColumnExpandWithFixedColumns.html
new file mode 100644
index 0000000000..eb338c8dde
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ColumnExpandWithFixedColumns.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>ColumnExpandWithFixedColumns</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ColumnExpandWithFixedColumns</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.ColumnExpandWithFixedColumns</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/ColumnExpandWithFixedColumns.java b/tests/testbench/com/vaadin/tests/components/table/ColumnExpandWithFixedColumns.java
new file mode 100644
index 0000000000..198e29be61
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ColumnExpandWithFixedColumns.java
@@ -0,0 +1,45 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+
+public class ColumnExpandWithFixedColumns extends TestBase {
+
+    private Table createTable() {
+        Table t = new Table();
+        t.addContainerProperty("id", Integer.class, null);
+        t.addContainerProperty("txt", Component.class, null);
+        t.addContainerProperty("button", Button.class, null);
+        t.setColumnWidth("id", 30);
+        t.setColumnWidth("button", 200);
+        t.setColumnExpandRatio("txt", 10);// This column should be 400px wide.
+        t.setSelectable(true);
+        t.setSizeFull();
+
+        for (int i = 0; i < 10; i++) {
+            t.addItem(new Object[] { i, new Label("test " + i),
+                    new Button("Button " + i) }, i);
+        }
+
+        return t;
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The second column has expand ratio and should use the maximum available space";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3143;
+    }
+
+    @Override
+    protected void setup() {
+        addComponent(createTable());
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/ColumnGeneratorAddingOrder.java b/tests/testbench/com/vaadin/tests/components/table/ColumnGeneratorAddingOrder.java
new file mode 100644
index 0000000000..d3dfa61ceb
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ColumnGeneratorAddingOrder.java
@@ -0,0 +1,52 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Table;
+
+public class ColumnGeneratorAddingOrder extends TestBase {
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2457;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Column generator must be allowed to be added both before and after data source setting and overriding should work. Bugs in 5.3-rc7 if added after DS.";
+    }
+
+    @Override
+    protected void setup() {
+        Table t = new Table();
+
+        t.addGeneratedColumn("col2", new Table.ColumnGenerator() {
+            public Component generateCell(Table source, Object itemId,
+                    Object columnId) {
+                return new Button("generated b c2");
+            }
+        });
+
+        IndexedContainer c = new IndexedContainer();
+        c.addContainerProperty("col1", String.class, "col1 ds data");
+        c.addContainerProperty("col2", String.class, "col2 ds data");
+        c.addContainerProperty("col3", String.class, "col3 ds data");
+        for (int i = 0; i < 100; i++) {
+            c.addItem();
+        }
+        t.setContainerDataSource(c);
+
+        t.addGeneratedColumn("col1", new Table.ColumnGenerator() {
+            public Component generateCell(Table source, Object itemId,
+                    Object columnId) {
+                return new Button("generated b c1");
+            }
+        });
+
+        getLayout().addComponent(t);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/ColumnHeaderAlignments.java b/tests/testbench/com/vaadin/tests/components/table/ColumnHeaderAlignments.java
new file mode 100644
index 0000000000..0c625f1c5d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ColumnHeaderAlignments.java
@@ -0,0 +1,95 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.Table;
+
+@SuppressWarnings("serial")
+public class ColumnHeaderAlignments extends TestBase {
+
+    private static final String BAZ = "Baz (right)";
+    private static final String BAR = "Bar (center)";
+    private static final String FOO = "Foo (left)";
+    private Table fooTable;
+    private Table barTable;
+    private Table bazTable;
+
+    @Override
+    protected void setup() {
+        Select theme = new Select();
+        theme.addItem("reindeer");
+        theme.addItem("runo");
+        theme.addItem("base");
+        theme.addItem("liferay");
+        theme.setValue("reindeer");
+        theme.setNullSelectionAllowed(false);
+        theme.setImmediate(true);
+        theme.addListener(new ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                setTheme(String.valueOf(event.getProperty().getValue()));
+            }
+        });
+        addComponent(theme);
+        CheckBox footers = new CheckBox("Show footers", new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                fooTable.setFooterVisible((Boolean) event.getButton()
+                        .getValue());
+                barTable.setFooterVisible((Boolean) event.getButton()
+                        .getValue());
+                bazTable.setFooterVisible((Boolean) event.getButton()
+                        .getValue());
+            }
+        });
+        footers.setImmediate(true);
+        addComponent(footers);
+        HorizontalLayout tables = new HorizontalLayout();
+        fooTable = createTable(null);
+        tables.addComponent(fooTable);
+        barTable = createTable("strong");
+        tables.addComponent(barTable);
+        bazTable = createTable("black");
+        tables.addComponent(bazTable);
+        addComponent(tables);
+    }
+
+    private Table createTable(String style) {
+        Table table = new Table();
+        table.addContainerProperty(FOO, String.class, "");
+        table.addContainerProperty(BAR, String.class, "");
+        table.addContainerProperty(BAZ, String.class, "");
+
+        table.setColumnAlignment(FOO, Table.ALIGN_LEFT);
+        table.setColumnAlignment(BAR, Table.ALIGN_CENTER);
+        table.setColumnAlignment(BAZ, Table.ALIGN_RIGHT);
+        if (style != null) {
+            table.setStyleName(style);
+        }
+
+        for (int i = 0; i < 100; i++) {
+            Item item = table.addItem(i);
+            item.getItemProperty(FOO).setValue("foo");
+            item.getItemProperty(BAR).setValue("bar");
+            item.getItemProperty(BAZ).setValue("baz");
+        }
+
+        return table;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Aligned column headers should have style names telling the alignment";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5066;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/ColumnReorderEvent.java b/tests/testbench/com/vaadin/tests/components/table/ColumnReorderEvent.java
new file mode 100644
index 0000000000..4c1fc70e5e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ColumnReorderEvent.java
@@ -0,0 +1,97 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+
+@SuppressWarnings("serial")
+public class ColumnReorderEvent extends TestBase {
+
+    private Label order = new Label("Column order");
+
+    @Override
+    protected void setup() {
+
+        HorizontalLayout widths = new HorizontalLayout();
+        widths.setSpacing(true);
+        widths.setWidth("50%");
+
+        order.setCaption("Column 1 width");
+        widths.addComponent(order);
+
+        addComponent(widths);
+
+        Table table1 = initTable();
+        addComponent(table1);
+
+        order.setValue(aToString(table1.getVisibleColumns()));
+
+    }
+
+    private String aToString(Object[] visibleColumns) {
+        StringBuilder sb = new StringBuilder();
+        for (Object object : visibleColumns) {
+            sb.append(object.toString());
+            sb.append(" | ");
+        }
+        return sb.toString();
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Test ColumnReorderEvents";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6283;
+    }
+
+    private static final int ROWS = 100;
+
+    private Table initTable() {
+        final Table table = new Table();
+        table.setWidth("100%");
+        table.setImmediate(true);
+
+        IndexedContainer idx = new IndexedContainer();
+        idx.addContainerProperty("firstname", String.class, null);
+        idx.addContainerProperty("lastname", String.class, null);
+
+        Item i = idx.addItem(1);
+        i.getItemProperty("firstname").setValue("John");
+        i.getItemProperty("lastname").setValue("Johnson");
+
+        i = idx.addItem(2);
+        i.getItemProperty("firstname").setValue("Jane");
+        i.getItemProperty("lastname").setValue("Janeine");
+
+        for (int index = 3; index < ROWS; index++) {
+            i = idx.addItem(index);
+            i.getItemProperty("firstname").setValue("Jane");
+            i.getItemProperty("lastname").setValue("Janeine");
+        }
+
+        idx.addContainerProperty("property", String.class, "foobar");
+
+        table.setContainerDataSource(idx);
+
+        table.setColumnHeader("firstname", "FirstName");
+        table.setColumnHeader("lastname", "LastName");
+
+        table.addListener(new Table.ColumnReorderListener() {
+            public void columnReorder(
+                    com.vaadin.ui.Table.ColumnReorderEvent event) {
+                order.setValue(aToString(table.getVisibleColumns()));
+            }
+        });
+
+        table.setColumnReorderingAllowed(true);
+
+        return table;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/ColumnResizeEvent.java b/tests/testbench/com/vaadin/tests/components/table/ColumnResizeEvent.java
new file mode 100644
index 0000000000..29131b8d7a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ColumnResizeEvent.java
@@ -0,0 +1,108 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.ColumnResizeListener;
+
+@SuppressWarnings("serial")
+public class ColumnResizeEvent extends TestBase {
+
+    private Label column1Width = new Label("Undefined");
+    private Label column2Width = new Label("Undefined");
+    private Label column3Width = new Label("Undefined");
+
+    @Override
+    protected void setup() {
+
+        HorizontalLayout widths = new HorizontalLayout();
+        widths.setSpacing(true);
+        widths.setWidth("50%");
+
+        column1Width.setCaption("Column 1 width");
+        widths.addComponent(column1Width);
+
+        column2Width.setCaption("Column 2 width");
+        widths.addComponent(column2Width);
+
+        column3Width.setCaption("Column 3 width");
+        widths.addComponent(column3Width);
+
+        addComponent(widths);
+
+        Table table1 = initTable();
+        addComponent(table1);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Table should update column size back to server";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2807;
+    }
+
+    private static final int ROWS = 100;
+
+    private Table initTable() {
+        Table table = new Table();
+        table.setWidth("100%");
+        table.setImmediate(true);
+
+        IndexedContainer idx = new IndexedContainer();
+        idx.addContainerProperty("firstname", String.class, null);
+        idx.addContainerProperty("lastname", String.class, null);
+
+        Item i = idx.addItem(1);
+        i.getItemProperty("firstname").setValue("John");
+        i.getItemProperty("lastname").setValue("Johnson");
+
+        i = idx.addItem(2);
+        i.getItemProperty("firstname").setValue("Jane");
+        i.getItemProperty("lastname").setValue("Janeine");
+
+        for (int index = 3; index < ROWS; index++) {
+            i = idx.addItem(index);
+            i.getItemProperty("firstname").setValue("Jane");
+            i.getItemProperty("lastname").setValue("Janeine");
+        }
+
+        idx.addContainerProperty("150pxfixedCol", String.class, "foobar");
+
+        table.setContainerDataSource(idx);
+
+        table.setColumnHeader("firstname", "FirstName");
+        table.setColumnHeader("lastname", "LastName with long header");
+
+        table.setColumnWidth("150pxfixedCol", 150);
+        column3Width.setValue(table.getColumnWidth("150pxfixedCol") + "px");
+
+        table.addListener(new ColumnResizeListener() {
+            public void columnResize(com.vaadin.ui.Table.ColumnResizeEvent event) {
+
+                if (event.getPropertyId().equals("firstname")) {
+                    column1Width.setValue(event.getCurrentWidth()
+                            + "px (previously " + event.getPreviousWidth()
+                            + "px)");
+                } else if (event.getPropertyId().equals("lastname")) {
+                    column2Width.setValue(event.getCurrentWidth()
+                            + "px (previously " + event.getPreviousWidth()
+                            + "px)");
+                } else if (event.getPropertyId().equals("150pxfixedCol")) {
+                    column3Width.setValue(event.getCurrentWidth()
+                            + "px (previously " + event.getPreviousWidth()
+                            + "px)");
+                }
+            }
+        });
+
+        return table;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/ColumnWidths.java b/tests/testbench/com/vaadin/tests/components/table/ColumnWidths.java
new file mode 100644
index 0000000000..9fe7a98179
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ColumnWidths.java
@@ -0,0 +1,69 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+
+public class ColumnWidths extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "On window resize undefined "
+                + "columns (by server or user (dragged)) columns "
+                + "must consume the excess space. Space is divided "
+                + "by default according to natural widths of columns."
+                + "In example last column is fixed width. Other columns"
+                + " should divide excess space relatively to 'natural' width unless user has resized column.";
+
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2804;
+    }
+
+    private static final int ROWS = 100;
+
+    @Override
+    public void setup() {
+        Table table1 = initTable();
+        addComponent(new Label("Plain table"));
+        addComponent(table1);
+
+    }
+
+    private Table initTable() {
+        Table table = new Table();
+        table.setWidth("100%");
+
+        IndexedContainer idx = new IndexedContainer();
+        idx.addContainerProperty("firstname", String.class, null);
+        idx.addContainerProperty("lastname", String.class, null);
+        Item i = idx.addItem(1);
+        i.getItemProperty("firstname").setValue("John");
+        i.getItemProperty("lastname").setValue("Johnson");
+        i = idx.addItem(2);
+        i.getItemProperty("firstname").setValue("Jane");
+        i.getItemProperty("lastname").setValue("Janeine");
+
+        for (int index = 3; index < ROWS; index++) {
+            i = idx.addItem(index);
+            i.getItemProperty("firstname").setValue("Jane");
+            i.getItemProperty("lastname").setValue("Janeine");
+        }
+
+        idx.addContainerProperty("150pxfixedCol", String.class, "foobar");
+
+        table.setContainerDataSource(idx);
+
+        table.setColumnHeader("firstname", "FirstName");
+        table.setColumnHeader("lastname", "LastName with long header");
+
+        table.setColumnWidth("150pxfixedCol", 150);
+
+        return table;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/ContainerChangeWithPartlySamePropertyIds.html b/tests/testbench/com/vaadin/tests/components/table/ContainerChangeWithPartlySamePropertyIds.html
new file mode 100644
index 0000000000..6c8a770b6a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ContainerChangeWithPartlySamePropertyIds.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>ContainerChangeWithPartlySamePropertyIds</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ContainerChangeWithPartlySamePropertyIds</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.ContainerChangeWithPartlySamePropertyIds?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableContainerChangeWithPartlySamePropertyIds::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>contextmenu</td>
+	<td>vaadin=runcomvaadintestscomponentstableContainerChangeWithPartlySamePropertyIds::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[2]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>property4</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>value_prop4</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableContainerChangeWithPartlySamePropertyIds::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>property1</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>value1</td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/ContainerChangeWithPartlySamePropertyIds.java b/tests/testbench/com/vaadin/tests/components/table/ContainerChangeWithPartlySamePropertyIds.java
new file mode 100644
index 0000000000..b8e9226ad2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ContainerChangeWithPartlySamePropertyIds.java
@@ -0,0 +1,107 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+
+public class ContainerChangeWithPartlySamePropertyIds extends TestBase {
+
+    @Override
+    protected void setup() {
+        getLayout().addComponent(new TableTestComponent());
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The client side Table component messes up its internal "
+                + "data structures (in header and footer) if the container changes and it has partly"
+                + " the same properties (but in different order) than the old container.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6281;
+    }
+
+    public static class TableTestComponent extends VerticalLayout {
+
+        final TableTestComponent me = this;
+
+        Table testTable;
+        IndexedContainer containerA;
+        IndexedContainer containerB;
+
+        String property1 = "property1";
+        String property2 = "property2";
+        String property3 = "property3";
+        String property4 = "property4";
+
+        private void createContainers() {
+
+            containerA = new IndexedContainer();
+            containerA.addContainerProperty(property1, String.class, "");
+            containerA.addContainerProperty(property2, String.class, "");
+            containerA.addContainerProperty(property3, String.class, "");
+
+            Item itemA = containerA.addItem(new Object());
+            itemA.getItemProperty(property1).setValue("value1");
+            itemA.getItemProperty(property2).setValue("value2");
+            itemA.getItemProperty(property3).setValue("value3");
+
+            containerB = new IndexedContainer();
+            containerB.addContainerProperty(property4, String.class, "");
+            containerB.addContainerProperty(property3, String.class, "");
+            containerB.addContainerProperty(property2, String.class, "");
+
+            Item itemB = containerB.addItem(new Object());
+            itemB.getItemProperty(property4).setValue("value_prop4");
+            itemB.getItemProperty(property3).setValue("value_prop3");
+            itemB.getItemProperty(property2).setValue("value_prop2");
+        }
+
+        public TableTestComponent() {
+
+            Button switchContainerButton = new Button("switch container");
+            switchContainerButton.addListener(new ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    if (testTable.getContainerDataSource() == containerA) {
+                        testTable.setContainerDataSource(containerB);
+                    } else {
+                        testTable.setContainerDataSource(containerA);
+                    }
+                }
+            });
+            this.addComponent(switchContainerButton);
+
+            Button clearButton = new Button("clear (click twice)");
+            clearButton.addListener(new ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    try {
+                        me.removeComponent(testTable);
+
+                        testTable = new Table();
+                        createContainers();
+                        testTable.setContainerDataSource(containerA);
+
+                        me.addComponent(testTable);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            });
+            this.addComponent(clearButton);
+
+            testTable = new Table();
+            this.addComponent(testTable);
+
+            createContainers();
+            testTable.setContainerDataSource(containerA);
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/ContainerSizeChange.html b/tests/testbench/com/vaadin/tests/components/table/ContainerSizeChange.html
new file mode 100644
index 0000000000..7c2374f322
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ContainerSizeChange.html
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>ContainerSizeChange</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ContainerSizeChange</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.ContainerSizeChange</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableContainerSizeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableContainerSizeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>scroll</td>
+	<td>vaadin=runcomvaadintestscomponentstableContainerSizeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
+	<td>945</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>scroll</td>
+	<td>vaadin=runcomvaadintestscomponentstableContainerSizeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
+	<td>525</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/ContainerSizeChange.java b/tests/testbench/com/vaadin/tests/components/table/ContainerSizeChange.java
new file mode 100644
index 0000000000..84e98deffb
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ContainerSizeChange.java
@@ -0,0 +1,91 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Table;
+
+public class ContainerSizeChange extends TestBase {
+
+    private Table table;
+    private MyDataSource ds;
+
+    @Override
+    protected String getDescription() {
+        return "A table should be able to handle a decrease in the size of the container. The original container here contains 50 items and the decrease button removes 10 of these. To reproduce the problem: Click 'Decrease size' two times to reduce size to 30 and scroll to the end (50). What should happen is the table should notice the container size has decreased and show the last items which now exists in the new container.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2862;
+    }
+
+    @Override
+    protected void setup() {
+        table = new Table("A table");
+        ds = new MyDataSource();
+        table.setContainerDataSource(ds);
+        table.setPageLength(5);
+        addComponent(table);
+
+        Button b = new Button("Decrease size", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                ds.decreaseSize();
+            }
+
+        });
+
+        addComponent(b);
+
+        b = new Button("Increase size", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                ds.increaseSize();
+            }
+
+        });
+
+        addComponent(b);
+
+    }
+
+}
+
+class MyDataSource extends IndexedContainer {
+
+    private int size = 0;
+
+    public MyDataSource() {
+        addContainerProperty("a", String.class, "");
+        addContainerProperty("b", String.class, "");
+        addContainerProperty("c", String.class, "");
+
+        for (int i = 0; i < 100; i++) {
+            Item item = addItem(String.valueOf(i));
+            item.getItemProperty("a").setValue("a " + i);
+            item.getItemProperty("b").setValue("b " + i);
+            item.getItemProperty("c").setValue("c " + i);
+        }
+        size = 50;
+    }
+
+    public void increaseSize() {
+        size += 10;
+
+    }
+
+    public void decreaseSize() {
+        if (size > 10) {
+            size -= 10;
+        }
+
+    }
+
+    @Override
+    public int size() {
+        return size;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/CtrlShiftMultiselect.java b/tests/testbench/com/vaadin/tests/components/table/CtrlShiftMultiselect.java
new file mode 100644
index 0000000000..02f4af045b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/CtrlShiftMultiselect.java
@@ -0,0 +1,53 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+
+@SuppressWarnings("serial")
+public class CtrlShiftMultiselect extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Table table = new Table("Multiselectable table");
+
+        table.setContainerDataSource(createContainer());
+        table.setImmediate(true);
+
+        table.setSelectable(true);
+        table.setMultiSelect(true);
+
+        table.setWidth("400px");
+        table.setHeight("400px");
+
+        addComponent(table);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Improve Table multiselect to use Ctrl and Shift for selection";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3520;
+    }
+
+    private Container createContainer() {
+        IndexedContainer container = new IndexedContainer();
+        container.addContainerProperty("col1", String.class, "");
+        container.addContainerProperty("col2", String.class, "");
+        container.addContainerProperty("col3", String.class, "");
+
+        for (int i = 0; i < 100; i++) {
+            Item item = container.addItem("item " + i);
+            item.getItemProperty("col1").setValue("first" + i);
+            item.getItemProperty("col2").setValue("middle" + i);
+            item.getItemProperty("col3").setValue("last" + i);
+        }
+
+        return container;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/DisabledTableKeyboardNavigation.html b/tests/testbench/com/vaadin/tests/components/table/DisabledTableKeyboardNavigation.html
new file mode 100644
index 0000000000..a8f0e864c3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/DisabledTableKeyboardNavigation.html
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.DisabledTableKeyboardNavigation?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>ADisabledTableWithoutASelection</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableDisabledTableKeyboardNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[1]/domChild[0]</td>
+	<td>56,13</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentstableDisabledTableKeyboardNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentstableDisabledTableKeyboardNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentstableDisabledTableKeyboardNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentstableDisabledTableKeyboardNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentstableDisabledTableKeyboardNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentstableDisabledTableKeyboardNavigation::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
+	<td>down</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>StillADisabledTableWithoutSelection</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/DisabledTableKeyboardNavigation.java b/tests/testbench/com/vaadin/tests/components/table/DisabledTableKeyboardNavigation.java
new file mode 100644
index 0000000000..ec888c2699
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/DisabledTableKeyboardNavigation.java
@@ -0,0 +1,54 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+
+public class DisabledTableKeyboardNavigation extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Table table = new Table("Multiselectable table");
+
+        table.setContainerDataSource(createContainer());
+        table.setImmediate(true);
+        table.setSelectable(true);
+        table.setMultiSelect(true);
+        table.setWidth("400px");
+        table.setHeight("200px");
+
+        table.setEnabled(false);
+
+        addComponent(table);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Once should not be able to focus or use a disabled table";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5797;
+    }
+
+    private Container createContainer() {
+        IndexedContainer container = new IndexedContainer();
+        container.addContainerProperty("col1", String.class, "");
+        container.addContainerProperty("col2", String.class, "");
+        container.addContainerProperty("col3", String.class, "");
+
+        for (int i = 0; i < 100; i++) {
+            Item item = container.addItem("item " + i);
+            item.getItemProperty("col1").setValue("first" + i);
+            item.getItemProperty("col2").setValue("middle" + i);
+            item.getItemProperty("col3").setValue("last" + i);
+        }
+
+        return container;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/DisabledTableShouldNotSendPageLengthUpdates.java b/tests/testbench/com/vaadin/tests/components/table/DisabledTableShouldNotSendPageLengthUpdates.java
new file mode 100644
index 0000000000..86646f522f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/DisabledTableShouldNotSendPageLengthUpdates.java
@@ -0,0 +1,45 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Table;
+
+@SuppressWarnings("serial")
+public class DisabledTableShouldNotSendPageLengthUpdates extends TestBase {
+
+    final Table table = new Table();
+
+    @Override
+    protected void setup() {
+        HorizontalSplitPanel split = new HorizontalSplitPanel();
+        table.addContainerProperty("name", Integer.class, 0);
+        Button button = new Button("Add items", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                for (int i = 0; i < 5; i++) {
+                    Object id = table.addItem();
+                    table.getItem(id).getItemProperty("name").setValue(i);
+                }
+            }
+        });
+        table.setEnabled(false);
+        table.setSizeFull();
+        split.setFirstComponent(table);
+        split.setSecondComponent(button);
+        getLayout().setSizeFull();
+        split.setSizeFull();
+        addComponent(split);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A disabled table should not send pageLength updates causing 'Warning: Ignoring variable change for disabled component class com.vaadin.ui.Table' warnings in the server logs";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4317;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/EditableModeChange.html b/tests/testbench/com/vaadin/tests/components/table/EditableModeChange.html
new file mode 100644
index 0000000000..2a7949f3ba
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/EditableModeChange.html
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.EditableModeChange?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableEditableModeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>24,8</td>
+</tr>
+<!--Set into editable mode-->
+<tr>
+	<td>doubleClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableEditableModeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>24,8</td>
+</tr>
+<!--Update name for selected row-->
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstableEditableModeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VTextField[0]</td>
+	<td>baa</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableEditableModeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
+	<td>34,11</td>
+</tr>
+<!--Ensure the name was updated-->
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableEditableModeChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>baa</td>
+</tr>
+<!--Ensure the correct row is selected-->
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>selected-teemu</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/EditableModeChange.java b/tests/testbench/com/vaadin/tests/components/table/EditableModeChange.java
new file mode 100644
index 0000000000..f2163f6df3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/EditableModeChange.java
@@ -0,0 +1,99 @@
+package com.vaadin.tests.components.table;
+
+import java.text.DateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+
+import com.vaadin.data.Container;
+import com.vaadin.event.ItemClickEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DefaultFieldFactory;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TableFieldFactory;
+
+public class EditableModeChange extends TestBase {
+
+    private ItemClickEvent selectionEvent;
+
+    private final String[] names = { "Teemu", "Teppo", "Seppo", "Matti",
+            "Pekka" };
+
+    @Override
+    public void setup() {
+
+        final Table items = new Table("Items - double-click to edit");
+        items.setSelectable(true);
+        items.addContainerProperty("name", String.class, "");
+        items.addContainerProperty("birthday", Date.class, "");
+
+        final TableFieldFactory fieldFactory = new ItemFieldFactory();
+        items.setTableFieldFactory(fieldFactory);
+
+        Calendar cal = Calendar.getInstance();
+        cal.set(2010, 7, 12, 12, 7, 54);
+
+        for (String name : names) {
+            items.addItem(name);
+            items.getItem(name).getItemProperty("name").setValue(name);
+            items.getItem(name).getItemProperty("birthday")
+                    .setValue(new FormattedDate(cal.getTime().getTime()));
+        }
+
+        items.addListener(new ItemClickEvent.ItemClickListener() {
+
+            public void itemClick(ItemClickEvent event) {
+                if (event.isDoubleClick()) {
+                    selectionEvent = event;
+                    items.setEditable(true);
+                } else if (items.isEditable()) {
+                    items.setEditable(false);
+                }
+            }
+        });
+
+        addComponent(items);
+    }
+
+    private class FormattedDate extends Date {
+
+        private DateFormat formatter = DateFormat.getDateTimeInstance(
+                DateFormat.MEDIUM, DateFormat.MEDIUM, new Locale("en", "US"));
+
+        public FormattedDate(long time) {
+            super(time);
+        }
+
+        @Override
+        public String toString() {
+            return formatter.format(this);
+        }
+    }
+
+    private class ItemFieldFactory extends DefaultFieldFactory {
+        @Override
+        public Field createField(Container container, Object itemId,
+                Object propertyId, Component uiContext) {
+            if (selectionEvent != null) {
+                if ((selectionEvent.getItemId().equals(itemId))
+                        && (selectionEvent.getPropertyId().equals(propertyId))) {
+                    return super.createField(container, itemId, propertyId,
+                            uiContext);
+                }
+            }
+            return null;
+        }
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Double click a cell to edit, then click on another row to select it (editmode is set to false). The clicked row should now be selected without any flickering.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5427;
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/table/EditableTableLeak.java b/tests/testbench/com/vaadin/tests/components/table/EditableTableLeak.java
new file mode 100644
index 0000000000..6561ff0076
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/EditableTableLeak.java
@@ -0,0 +1,144 @@
+package com.vaadin.tests.components.table;
+
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.io.Serializable;
+import java.util.HashMap;
+
+import com.vaadin.data.Container;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.TestUtils;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DefaultFieldFactory;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+
+public class EditableTableLeak extends TestBase {
+    private final Table table = new Table("ISO-3166 Country Codes and flags");
+    private final CheckBox useFieldFactory = new CheckBox(
+            "Use a caching TableFieldFactory");
+    private final Label sizeLabel = new Label("", Label.CONTENT_XHTML);
+
+    private long size = 0;
+
+    static class DebugUtils {
+        private static class ByteCountNullOutputStream extends OutputStream
+                implements Serializable {
+            private static final long serialVersionUID = 4220043426041762877L;
+            private long bytes;
+
+            @Override
+            public void write(int b) {
+                bytes++;
+            }
+
+            public long getBytes() {
+                return bytes;
+            }
+        }
+
+        public static long getSize(Object object) {
+            ByteCountNullOutputStream os = new ByteCountNullOutputStream();
+            ObjectOutputStream oos;
+            try {
+                oos = new ObjectOutputStream(os);
+                oos.writeObject(object);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            return os.getBytes();
+        }
+    }
+
+    private static class CachingFieldFactory extends DefaultFieldFactory {
+        private final HashMap<Object, HashMap<Object, Field>> cache = new HashMap<Object, HashMap<Object, Field>>();
+
+        @Override
+        public Field createField(Container container, Object itemId,
+                Object propertyId, Component uiContext) {
+            if (cache.containsKey(itemId)) {
+                if (cache.get(itemId) != null
+                        && cache.get(itemId).containsKey(propertyId)) {
+                    return cache.get(itemId).get(propertyId);
+                }
+            }
+            Field f = super.createField(container, itemId, propertyId,
+                    uiContext);
+            if (!cache.containsKey(itemId)) {
+                cache.put(itemId, new HashMap<Object, Field>());
+            }
+            cache.get(itemId).put(propertyId, f);
+            return f;
+        }
+
+    }
+
+    @Override
+    protected void setup() {
+        addComponent(useFieldFactory);
+        useFieldFactory.setImmediate(true);
+        useFieldFactory.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                if ((Boolean) useFieldFactory.getValue()) {
+                    table.setTableFieldFactory(new CachingFieldFactory());
+                } else {
+                    table.setTableFieldFactory(DefaultFieldFactory.get());
+                }
+            }
+        });
+        addComponent(table);
+        table.setEditable(true);
+        table.setWidth("100%");
+        table.setHeight("170px");
+        table.setSelectable(true);
+        table.setContainerDataSource(TestUtils.getISO3166Container());
+        table.setColumnHeaders(new String[] { "Country", "Code" });
+        table.setColumnAlignment(TestUtils.iso3166_PROPERTY_SHORT,
+                Table.ALIGN_CENTER);
+        table.setColumnExpandRatio(TestUtils.iso3166_PROPERTY_NAME, 1);
+        table.setColumnWidth(TestUtils.iso3166_PROPERTY_SHORT, 70);
+
+        addComponent(sizeLabel);
+
+        addComponent(new Button("Show size of the table", new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                table.requestRepaintAll();
+                updateSize();
+            }
+
+        }));
+
+        addComponent(new Button("Select the second row", new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                table.select("AL");
+                updateSize();
+            }
+        }));
+    }
+
+    private void updateSize() {
+        System.gc();
+        long newSize = DebugUtils.getSize(table);
+        sizeLabel.setValue("Size of the table: " + newSize
+                + " bytes<br/>Delta: " + (newSize - size));
+        size = newSize;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Table leaks memory while scrolling/selecting when in editable mode";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6071;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/EmptyTable.html b/tests/testbench/com/vaadin/tests/components/table/EmptyTable.html
new file mode 100644
index 0000000000..dc52eb8bac
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/EmptyTable.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
+	<td>35,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>36,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>44,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>25,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>80,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>25,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>empty-table</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables</td>
+	<td></td>
+</tr>
+<!-- Focus menubar to get consistent screenshots-->
+<tr>
+	<td>focus</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu</td>
+	<td>35,1</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>empty-table</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/FixedHeightTable.html b/tests/testbench/com/vaadin/tests/components/table/FixedHeightTable.html
new file mode 100644
index 0000000000..fb8f7c8b7f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/FixedHeightTable.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>FixedHeighTable</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.FixedHeightTable</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/FixedHeightTable.java b/tests/testbench/com/vaadin/tests/components/table/FixedHeightTable.java
new file mode 100644
index 0000000000..e193a8a949
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/FixedHeightTable.java
@@ -0,0 +1,39 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+
+public class FixedHeightTable extends TestBase {
+
+    private static final long serialVersionUID = -929892889178757852L;
+    Table table;
+    VerticalLayout layout;
+
+    @Override
+    public void setup() {
+
+        table = new Table();
+        table.addContainerProperty("test", String.class, null);
+        table.setSizeFull();
+        // bug: settings rows to 16 or more => last line is not rendered at all
+        // on the client-side.
+        final int maxRows = 16;
+        for (int i = 1; i <= maxRows; i++) {
+            table.addItem(new Object[] { "" + i }, i);
+        }
+
+        getLayout().setHeight("400px");
+        addComponent(table);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The table contains 16 (1-16) rows which all should be visible";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3814;
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/table/Footer.html b/tests/testbench/com/vaadin/tests/components/table/Footer.html
new file mode 100644
index 0000000000..dbbdef2f9c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/Footer.html
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>Footer</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Footer</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Footer?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]</td>
+	<td>926,229</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>Footer1</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
+	<td>Footer2</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>Footer3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+	<td>11,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>no-footer</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+	<td>6,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>footer-col1-col2-col3-a</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>Footer1</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
+	<td>Footer2</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>Footer3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[1]</td>
+	<td>9,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::Root/VContextMenu[0]#option1</td>
+	<td>0,9</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>footer-col1-col3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[1]</td>
+	<td>12,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VContextMenu[0]#option1</td>
+	<td>10,7</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>footer-col1-col2-col3-b</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>-45,13</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>fuu</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>fuu</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>-61,2</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>bar</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
+	<td>bar</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>-21,9</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>-18,9</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>Footer1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>-56,-4</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>Footer2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>124,17</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>Footer3</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>footer-col1-col2-col3-c</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>Footer1</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/Footer.java b/tests/testbench/com/vaadin/tests/components/table/Footer.java
new file mode 100644
index 0000000000..d6a9853fff
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/Footer.java
@@ -0,0 +1,134 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+@SuppressWarnings("serial")
+public class Footer extends TestBase {
+
+    @Override
+    protected void setup() {
+        HorizontalLayout layout = new HorizontalLayout();
+        layout.setSpacing(true);
+
+        final Table table = new Table();
+        table.setWidth("400px");
+        table.setHeight("400px");
+
+        table.setContainerDataSource(createContainer());
+        table.setImmediate(true);
+
+        table.setColumnCollapsingAllowed(true);
+        table.setColumnReorderingAllowed(true);
+
+        table.setFooterVisible(true);
+
+        table.setColumnFooter("col1", "Footer1");
+        table.setColumnFooter("col2", "Footer2");
+        table.setColumnFooter("col3", "Footer3");
+
+        table.setColumnAlignment("col2", Table.ALIGN_CENTER);
+        table.setColumnAlignment("col3", Table.ALIGN_RIGHT);
+
+        layout.addComponent(table);
+
+        // Add some options to play with
+        VerticalLayout options = new VerticalLayout();
+        options.setSpacing(true);
+
+        final CheckBox visible = new CheckBox("Footers Visible", true);
+        visible.setImmediate(true);
+        visible.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                table.setFooterVisible(visible.booleanValue());
+
+            }
+        });
+
+        options.addComponent(visible);
+
+        final TextField footer1Value = new TextField(null, "Footer1");
+        footer1Value.setImmediate(true);
+        Button footer1Btn = new Button("Change", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                table.setColumnFooter("col1",
+                        footer1Value.getValue() == null ? "" : footer1Value
+                                .getValue().toString());
+            }
+        });
+        HorizontalLayout footer1 = new HorizontalLayout();
+        footer1.addComponent(footer1Value);
+        footer1.addComponent(footer1Btn);
+        options.addComponent(footer1);
+
+        final TextField footer2Value = new TextField(null, "Footer2");
+        footer2Value.setImmediate(true);
+        Button footer2Btn = new Button("Change", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                table.setColumnFooter("col2",
+                        footer2Value.getValue() == null ? "" : footer2Value
+                                .getValue().toString());
+            }
+        });
+        HorizontalLayout footer2 = new HorizontalLayout();
+        footer2.addComponent(footer2Value);
+        footer2.addComponent(footer2Btn);
+        options.addComponent(footer2);
+
+        final TextField footer3Value = new TextField(null, "Footer3");
+        footer3Value.setImmediate(true);
+        Button footer3Btn = new Button("Change", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                table.setColumnFooter("col3",
+                        footer3Value.getValue() == null ? "" : footer3Value
+                                .getValue().toString());
+            }
+        });
+        HorizontalLayout footer3 = new HorizontalLayout();
+        footer3.addComponent(footer3Value);
+        footer3.addComponent(footer3Btn);
+        options.addComponent(footer3);
+
+        layout.addComponent(options);
+
+        addComponent(layout);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Table with footer";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 1553;
+    }
+
+    private Container createContainer() {
+        IndexedContainer container = new IndexedContainer();
+        container.addContainerProperty("col1", String.class, "");
+        container.addContainerProperty("col2", String.class, "");
+        container.addContainerProperty("col3", String.class, "");
+
+        for (int i = 0; i < 100; i++) {
+            Item item = container.addItem("item " + i);
+            item.getItemProperty("col1").setValue("first" + i);
+            item.getItemProperty("col2").setValue("middle" + i);
+            item.getItemProperty("col3").setValue("last" + i);
+        }
+
+        return container;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/FooterClick.html b/tests/testbench/com/vaadin/tests/components/table/FooterClick.html
new file mode 100644
index 0000000000..fb3d004620
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/FooterClick.html
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>FooterClick</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">FooterClick</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.FooterClick?restartApplication</td>
+	<td></td>
+</tr>
+<!--Click on text in cell-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_Stable/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>41,7</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SClickedColumn</td>
+	<td>col1</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>1. Clicked on footer: col1</td>
+</tr>
+<!--Click on empty cell-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_Stable/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]</td>
+	<td>69,12</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SClickedColumn</td>
+	<td>col2</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>2. Clicked on footer: col2</td>
+</tr>
+<!--Click on cell, not on text-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_Stable/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>19,3</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SClickedColumn</td>
+	<td>col3</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. Clicked on footer: col3</td>
+</tr>
+<!--non-immediate-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+	<td>30,9</td>
+</tr>
+<!--Click on text in cell-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_Stable/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>41,7</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SClickedColumn</td>
+	<td>col1</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>4. Clicked on footer: col1</td>
+</tr>
+<!--Click on empty cell-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_Stable/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]</td>
+	<td>69,12</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SClickedColumn</td>
+	<td>col2</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>5. Clicked on footer: col2</td>
+</tr>
+<!--Click on cell, not on text-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_Stable/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>19,3</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SClickedColumn</td>
+	<td>col3</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableFooterClick::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>6. Clicked on footer: col3</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/FooterClick.java b/tests/testbench/com/vaadin/tests/components/table/FooterClick.java
new file mode 100644
index 0000000000..b92d6ef362
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/FooterClick.java
@@ -0,0 +1,108 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.FooterClickEvent;
+import com.vaadin.ui.TextField;
+
+@SuppressWarnings("serial")
+public class FooterClick extends TestBase {
+
+    private final String COLUMN1_PROPERTY_ID = "col1";
+    private final String COLUMN2_PROPERTY_ID = "col2";
+    private final String COLUMN3_PROPERTY_ID = "col3";
+
+    private Log log = new Log(5);
+
+    @Override
+    protected void setup() {
+        final Table table = new Table();
+        table.setDebugId("table");
+        table.setContainerDataSource(createContainer());
+        table.setWidth("400px");
+        table.setHeight("400px");
+        table.setImmediate(true);
+        table.setFooterVisible(true);
+        table.setColumnReorderingAllowed(true);
+
+        table.setColumnFooter(COLUMN1_PROPERTY_ID, "fuu");
+        // table.setColumnFooter(COLUMN2_PROPERTY_ID, "bar");
+        table.setColumnFooter(COLUMN3_PROPERTY_ID, "fuubar");
+
+        final TextField columnField = new TextField(
+                "ProperyId of clicked column");
+        columnField.setDebugId("ClickedColumn");
+
+        // Add a footer click listener
+        table.addListener(new Table.FooterClickListener() {
+            public void footerClick(FooterClickEvent event) {
+                columnField.setValue(event.getPropertyId());
+                log.log("Clicked on footer: " + event.getPropertyId());
+            }
+        });
+
+        CheckBox immediateCheckbox = new CheckBox("Immediate");
+        immediateCheckbox.setImmediate(true);
+        immediateCheckbox.setValue(table.isImmediate());
+        immediateCheckbox.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                table.setImmediate(event.getButton().booleanValue());
+            }
+        });
+
+        CheckBox columnReorderingCheckbox = new CheckBox(
+                "Column reordering allowed");
+        columnReorderingCheckbox.setImmediate(true);
+        columnReorderingCheckbox.setValue(table.isColumnReorderingAllowed());
+        columnReorderingCheckbox.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                table.setColumnReorderingAllowed(event.getButton()
+                        .booleanValue());
+            }
+        });
+
+        addComponent(immediateCheckbox);
+        addComponent(columnReorderingCheckbox);
+
+        addComponent(log);
+
+        addComponent(table);
+        addComponent(columnField);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tests the footer click handler";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4516;
+    }
+
+    private Container createContainer() {
+        IndexedContainer container = new IndexedContainer();
+        container.addContainerProperty(COLUMN1_PROPERTY_ID, String.class, "");
+        container.addContainerProperty(COLUMN2_PROPERTY_ID, String.class, "");
+        container.addContainerProperty(COLUMN3_PROPERTY_ID, String.class, "");
+
+        for (int i = 0; i < 100; i++) {
+            Item item = container.addItem("item " + i);
+            item.getItemProperty(COLUMN1_PROPERTY_ID).setValue("first" + i);
+            item.getItemProperty(COLUMN2_PROPERTY_ID).setValue("middle" + i);
+            item.getItemProperty(COLUMN3_PROPERTY_ID).setValue("last" + i);
+        }
+
+        return container;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/HeaderClick.html b/tests/testbench/com/vaadin/tests/components/table/HeaderClick.html
new file mode 100644
index 0000000000..d5328b25d3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/HeaderClick.html
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8080/" />
+<title>HeaderClick</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">HeaderClick</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.HeaderClick?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]</td>
+	<td>37,11</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
+	<td>col1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[1]</td>
+	<td>36,9</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
+	<td>col2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[1]</td>
+	<td>8,11</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
+	<td>col3</td>
+</tr>
+<!--non-immediate test-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+	<td>6,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]</td>
+	<td>31,9</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
+	<td>col1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[1]</td>
+	<td>16,10</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
+	<td>col2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[1]</td>
+	<td>16,10</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
+	<td>col3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
+	<td>7,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]</td>
+	<td>64,10</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
+	<td>col1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[1]</td>
+	<td>48,10</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
+	<td>col2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[1]</td>
+	<td>30,11</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
+	<td>col3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
+	<td>7,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]</td>
+	<td>48,11</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
+	<td>col1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[1]</td>
+	<td>71,10</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
+	<td>col2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[1]</td>
+	<td>39,5</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
+	<td>col3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
+	<td>54,6</td>
+</tr>
+<!--Column reordering should not fire header click-->
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VTextField[0]</td>
+	<td>col3</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/HeaderClick.java b/tests/testbench/com/vaadin/tests/components/table/HeaderClick.java
new file mode 100644
index 0000000000..3cb11781b1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/HeaderClick.java
@@ -0,0 +1,102 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.HeaderClickEvent;
+import com.vaadin.ui.TextField;
+
+@SuppressWarnings("serial")
+public class HeaderClick extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Table table = new Table();
+        table.setColumnReorderingAllowed(true);
+        table.setContainerDataSource(createContainer());
+        table.setWidth("400px");
+        table.setHeight("400px");
+        table.setImmediate(true);
+
+        final TextField columnField = new TextField(
+                "ProperyId of clicked column");
+
+        // Add a header click listener
+        table.addListener(new Table.HeaderClickListener() {
+            public void headerClick(HeaderClickEvent event) {
+                columnField.setValue(event.getPropertyId());
+            }
+        });
+
+        CheckBox immediateCheckbox = new CheckBox("Immediate");
+        immediateCheckbox.setImmediate(true);
+        immediateCheckbox.setValue(table.isImmediate());
+        immediateCheckbox.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                table.setImmediate(event.getButton().booleanValue());
+            }
+        });
+
+        CheckBox sortEnabledCheckbox = new CheckBox("Sortable");
+        sortEnabledCheckbox.setImmediate(true);
+        sortEnabledCheckbox.setValue(!table.isSortDisabled());
+        sortEnabledCheckbox.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                table.setSortDisabled(!event.getButton().booleanValue());
+            }
+        });
+
+        CheckBox columnReorderingCheckbox = new CheckBox(
+                "Column reordering allowed");
+        columnReorderingCheckbox.setImmediate(true);
+        columnReorderingCheckbox.setValue(table.isColumnReorderingAllowed());
+        columnReorderingCheckbox.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                table.setColumnReorderingAllowed(event.getButton()
+                        .booleanValue());
+            }
+        });
+
+        addComponent(immediateCheckbox);
+        addComponent(sortEnabledCheckbox);
+        addComponent(columnReorderingCheckbox);
+        addComponent(table);
+        addComponent(columnField);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tests the header click listener";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4515;
+    }
+
+    private Container createContainer() {
+        IndexedContainer container = new IndexedContainer();
+        container.addContainerProperty("col1", String.class, "");
+        container.addContainerProperty("col2", String.class, "");
+        container.addContainerProperty("col3", String.class, "");
+
+        for (int i = 0; i < 100; i++) {
+            Item item = container.addItem("item " + i);
+            item.getItemProperty("col1").setValue("first" + i);
+            item.getItemProperty("col2").setValue("middle" + i);
+            item.getItemProperty("col3").setValue("last" + i);
+        }
+
+        return container;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/HeaderPositionWhenSorting.html b/tests/testbench/com/vaadin/tests/components/table/HeaderPositionWhenSorting.html
new file mode 100644
index 0000000000..c3128820ef
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/HeaderPositionWhenSorting.html
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableAndBrowserContextMenu?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableAndBrowserContextMenu::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
+	<td>32,4</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>sort-asc-died-at-age</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableAndBrowserContextMenu::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
+	<td>32,4</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>sort-desc-died-at-age</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableAndBrowserContextMenu::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>19,15</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>sort-asc-name</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableAndBrowserContextMenu::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>19,15</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>sort-desc-name</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/HeaderSyncOnScroll.html b/tests/testbench/com/vaadin/tests/components/table/HeaderSyncOnScroll.html
new file mode 100644
index 0000000000..70abbd78ba
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/HeaderSyncOnScroll.html
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<!--hide log-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
+	<td>39,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>23,9</td>
+</tr>
+<!--width: 100%-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>35,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>54,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>21,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>44,4</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>100pct-no-scrollbar</td>
+</tr>
+<!--parent width: 300px-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
+	<td>22,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>48,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>7,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item6</td>
+	<td>43,7</td>
+</tr>
+<!--scroll right-->
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>scrollLeft</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
+	<td>200</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>300px-scrolled-right</td>
+</tr>
+<!--parent width: 100%-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
+	<td>22,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>48,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>7,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>43,7</td>
+</tr>
+<!--  Should really be the same image as before, avoiding constant IE fails using a different image (#6147)-->
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>100pct-no-scrollbar-2</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/HeaderUpdateWhenNoRows.html b/tests/testbench/com/vaadin/tests/components/table/HeaderUpdateWhenNoRows.html
new file mode 100644
index 0000000000..ef2067fbf5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/HeaderUpdateWhenNoRows.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.HeaderUpdateWhenNoRows</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>headerVisible</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderUpdateWhenNoRows::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+	<td>5,4</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>headerHidden</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableHeaderUpdateWhenNoRows::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+	<td>9,7</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>headerVisibleAgain</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/HeaderUpdateWhenNoRows.java b/tests/testbench/com/vaadin/tests/components/table/HeaderUpdateWhenNoRows.java
new file mode 100644
index 0000000000..bf1f9ca883
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/HeaderUpdateWhenNoRows.java
@@ -0,0 +1,47 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Table;
+
+public class HeaderUpdateWhenNoRows extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Table table = new Table("Test table");
+        table.addContainerProperty("Name", String.class, null, "Name", null,
+                null);
+        table.setItemCaptionPropertyId("Name");
+        table.setHeight("100px");
+        table.setImmediate(true);
+
+        CheckBox showHeaders = new CheckBox("Show headers",
+                new CheckBox.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        if (event.getButton().booleanValue()) {
+                            table.setColumnHeaderMode(Table.COLUMN_HEADER_MODE_EXPLICIT_DEFAULTS_ID);
+                        } else {
+                            table.setColumnHeaderMode(Table.COLUMN_HEADER_MODE_HIDDEN);
+                        }
+                    }
+                });
+
+        showHeaders.setImmediate(true);
+        showHeaders.setValue(true);
+
+        addComponent(showHeaders);
+        addComponent(table);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The header should be updated when toggling column header mode";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2974;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/HiddenColumnsExpandRatios.java b/tests/testbench/com/vaadin/tests/components/table/HiddenColumnsExpandRatios.java
new file mode 100644
index 0000000000..007c93573f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/HiddenColumnsExpandRatios.java
@@ -0,0 +1,75 @@
+package com.vaadin.tests.components.table;
+
+import java.util.Random;
+
+import com.vaadin.data.Item;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Table;
+
+public class HiddenColumnsExpandRatios extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Table table = new Table();
+        table.setColumnCollapsingAllowed(true);
+        table.setWidth("800px");
+        addComponent(table);
+        table.addContainerProperty("foo", String.class, "");
+        table.addContainerProperty("bar", String.class, "");
+        table.addContainerProperty("baz", String.class, "");
+        table.addContainerProperty("asdf", String.class, "");
+        table.addContainerProperty("sdfg", String.class, "");
+        table.addContainerProperty("dfgh", String.class, "");
+        table.setColumnExpandRatio("bar", 1.0f);
+        for (int i = 0; i < 10; i++) {
+            Item item = table.addItem(i);
+            item.getItemProperty("foo").setValue(genValue());
+            item.getItemProperty("bar").setValue(genValue());
+            item.getItemProperty("baz").setValue(genValue());
+            item.getItemProperty("asdf").setValue(genValue());
+            item.getItemProperty("sdfg").setValue(genValue());
+            item.getItemProperty("dfgh").setValue(genValue());
+        }
+
+        addComponent(new Button("All", new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                table.setVisibleColumns(table.getContainerPropertyIds()
+                        .toArray());
+            }
+        }));
+        addComponent(new Button("Some", new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                table.setWidth("100px");
+                table.setWidth("800px");
+                table.setVisibleColumns(new Object[] { "foo", "bar", "baz" });
+            }
+        }));
+    }
+
+    private String genValue() {
+        Random rnd = new Random();
+        StringBuffer str = new StringBuffer("");
+        String[] strings = new String[] { "foo", "bar", "baz" };
+        for (int i = 0; i < 5; i++) {
+            str.append(strings[Math.abs(rnd.nextInt() % strings.length)])
+                    .append(" ");
+        }
+        return str.toString();
+    }
+
+    @Override
+    protected String getDescription() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/HugeRowCount.java b/tests/testbench/com/vaadin/tests/components/table/HugeRowCount.java
new file mode 100644
index 0000000000..5cd9f964a3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/HugeRowCount.java
@@ -0,0 +1,86 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+
+public class HugeRowCount extends TestBase {
+
+    private MockupContainer container;
+
+    @Override
+    protected void setup() {
+
+        container = new MockupContainer();
+        container.setSize(100000);
+
+        final TextField tf = new TextField("Rows");
+        tf.setValue(100000);
+        tf.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                container.setSize(Integer.parseInt(tf.getValue().toString()));
+            }
+        });
+        addComponent(tf);
+        addComponent(new Button("Update rowcount"));
+
+        Table t = new Table();
+        t.setWidth("400px");
+        t.setRowHeaderMode(Table.ROW_HEADER_MODE_INDEX);
+        t.setContainerDataSource(container);
+
+        addComponent(t);
+
+    }
+
+    class MockupContainer extends IndexedContainer {
+
+        private Item item;
+        private Object addItem;
+
+        public MockupContainer() {
+            addContainerProperty("foo", String.class, "bar");
+            addItem = addItem();
+            item = getItem(addItem);
+        }
+
+        private int size;
+
+        public void setSize(int size) {
+            this.size = size;
+            fireItemSetChange();
+        }
+
+        @Override
+        public int size() {
+            return size;
+        }
+
+        @Override
+        public Item getItem(Object itemId) {
+            return item;
+        }
+
+        @Override
+        public Object getIdByIndex(int index) {
+            return addItem;
+        }
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Should work as well as possible";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4220;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/ItemClickEvents.html b/tests/testbench/com/vaadin/tests/components/table/ItemClickEvents.html
new file mode 100644
index 0000000000..e00482679c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ItemClickEvents.html
@@ -0,0 +1,479 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.ItemClickEvents?restartApplication</td>
+	<td></td>
+</tr>
+<!--Single select not null-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>42,7</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>1. left click on table/Item 0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>41,3</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>2. left click on table/Item 1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>41,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. left click on table/Item 1</td>
+</tr>
+<tr>
+	<td>doubleClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>88,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>4. doubleClick on table/Item 1</td>
+</tr>
+<tr>
+	<td>doubleClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>88,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>5. doubleClick on table/Item 0</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<!--Single select null-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
+	<td>6,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>48,15</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>0. left click on table/Item 0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>57,11</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>1. left click on table/Item 0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[5]/domChild[0]/domChild[0]</td>
+	<td>45,9</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>2. left click on table/Item 5</td>
+</tr>
+<tr>
+	<td>doubleClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[5]/domChild[0]/domChild[0]</td>
+	<td>45,9</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. doubleClick on table/Item 5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[5]</td>
+	<td>195,142</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[5]</td>
+	<td>582,1</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<!--Multiselect null-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[3]/VCheckBox[0]/domChild[0]</td>
+	<td>22,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>50,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[0]/domChild[0]</td>
+	<td>51,10:shift</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[6]/domChild[0]/domChild[0]</td>
+	<td>47,11:ctrl</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+	<td>50,8:ctrl</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>0. left click on table/Item 0</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[2]/VLabel[0]</td>
+	<td>1. left click on table/Item 4 (shift)</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[1]/VLabel[0]</td>
+	<td>2. left click on table/Item 6 (ctrl)</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. left click on table/Item 2 (ctrl)</td>
+</tr>
+<!--Multi select not null-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
+	<td>34,0</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[0]/domChild[0]</td>
+	<td>43,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[0]/domChild[0]</td>
+	<td>49,6:ctrl</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[0]/domChild[0]</td>
+	<td>71,9:ctrl</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[0]/domChild[0]</td>
+	<td>79,4:ctrl</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[0]/domChild[0]</td>
+	<td>75,17:ctrl</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[4]/VLabel[0]</td>
+	<td>0. left click on table/Item 9</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>1. left click on table/Item 9 (ctrl)</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[2]/VLabel[0]</td>
+	<td>2. left click on table/Item 3 (ctrl)</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[1]/VLabel[0]</td>
+	<td>3. left click on table/Item 9 (ctrl)</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>4. left click on table/Item 3 (ctrl)</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<!--Single not selectable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[3]/VCheckBox[0]/domChild[0]</td>
+	<td>11,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
+	<td>11,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>49,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+	<td>48,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[7]/domChild[0]/domChild[0]</td>
+	<td>50,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[0]/domChild[0]</td>
+	<td>57,11</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>0. left click on table/Item 1</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[2]/VLabel[0]</td>
+	<td>1. left click on table/Item 2</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[1]/VLabel[0]</td>
+	<td>2. left click on table/Item 7</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. left click on table/Item 3</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<!--Multi not selectable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[3]/VCheckBox[0]/domChild[0]</td>
+	<td>8,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>42,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[5]/domChild[0]/domChild[0]</td>
+	<td>47,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[0]/domChild[0]</td>
+	<td>43,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[8]/domChild[0]/domChild[0]</td>
+	<td>44,9:shift</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>0. left click on table/Item 1</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[2]/VLabel[0]</td>
+	<td>1. left click on table/Item 5</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[1]/VLabel[0]</td>
+	<td>2. left click on table/Item 3</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. left click on table/Item 8 (shift)</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<!--Single, Non-immediate-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+	<td>8,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[3]/VCheckBox[0]/domChild[0]</td>
+	<td>6,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>57,8</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>0. left click on table/Item 0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>47,9</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>1. left click on table/Item 1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+	<td>47,11</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>2. left click on table/Item 2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[8]/domChild[0]/domChild[0]</td>
+	<td>31,13:ctrl shift</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. left click on table/Item 8 (ctrl shift)</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<!--non-immediate single selectable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
+	<td>10,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>43,11</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>0. left click on table/Item 1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[8]/domChild[0]/domChild[0]</td>
+	<td>73,9</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>1. left click on table/Item 8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>58,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>2. left click on table/Item 1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>71,15</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. left click on table/Item 0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[6]/domChild[0]/domChild[0]</td>
+	<td>68,11</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableItemClickEvents::PID_Slog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>4. left click on table/Item 6</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/ItemClickEvents.java b/tests/testbench/com/vaadin/tests/components/table/ItemClickEvents.java
new file mode 100644
index 0000000000..537461ce0f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ItemClickEvents.java
@@ -0,0 +1,153 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.MethodProperty;
+import com.vaadin.event.ItemClickEvent;
+import com.vaadin.event.ItemClickEvent.ItemClickListener;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Tree;
+
+public class ItemClickEvents extends TestBase {
+
+    Tree tree = new Tree();
+    Table table = new Table();
+    Log log = new Log(5);
+
+    @Override
+    public void setup() {
+        log.setDebugId("log");
+
+        HorizontalLayout ol = createHorizontalLayout(tree);
+        Button b = new Button("icon", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                if (tree.getItemIconPropertyId() == null) {
+                    tree.setItemIconPropertyId("icon");
+                } else {
+                    tree.setItemIconPropertyId(null);
+                }
+
+            }
+        });
+        ol.addComponent(b);
+
+        tree.setImmediate(true);
+        tree.setNullSelectionAllowed(false);
+        tree.addItem("Root 1");
+        tree.addItem("1. Child 1");
+        tree.setParent("1. Child 1", "Root 1");
+        tree.addItem("1. Child 2");
+        tree.setParent("1. Child 2", "Root 1");
+        tree.addItem("Root 2");
+        tree.addItem("2. Child 1");
+        tree.setParent("2. Child 1", "Root 2");
+        tree.addItem("2. Child 2");
+        tree.setParent("2. Child 2", "Root 2");
+        tree.addContainerProperty("icon", ExternalResource.class,
+                new ExternalResource(
+                        "http://www.itmill.com/res/images/itmill_logo.gif"));
+
+        tree.addListener(new ItemClickListener() {
+            public void itemClick(ItemClickEvent event) {
+                logEvent(event, "tree");
+            }
+        });
+        tree.setDebugId("tree");
+
+        HorizontalLayout ol2 = createHorizontalLayout(table);
+        table.setWidth("150px");
+        table.setImmediate(true);
+        table.setSelectable(true);
+        table.setNullSelectionAllowed(false);
+        table.addContainerProperty("Column", String.class, "value");
+        for (int i = 0; i < 10; i++) {
+            Item item = table.addItem("Item " + i);
+            item.getItemProperty("Column").setValue("Row " + i);
+
+        }
+        table.addListener(new ItemClickListener() {
+            public void itemClick(ItemClickEvent event) {
+                logEvent(event, "table");
+            }
+        });
+        table.setDebugId("table");
+
+        addComponent(log);
+        addComponent(new Button("Clear log", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                log.clear();
+            }
+        }));
+        addComponent(ol);
+        addComponent(tree);
+        addComponent(ol2);
+        addComponent(table);
+    }
+
+    protected void logEvent(ItemClickEvent event, String targetComponent) {
+        String type = event.getButtonName() + " " + "click";
+        if (event.isDoubleClick()) {
+            type = "doubleClick";
+        }
+
+        String modifiers = "";
+        if (event.isAltKey()) {
+            modifiers += "alt ";
+        }
+        if (event.isMetaKey()) {
+            modifiers += "meta ";
+        }
+        if (event.isCtrlKey()) {
+            modifiers += "ctrl ";
+        }
+        if (event.isShiftKey()) {
+            modifiers += "shift ";
+        }
+        if (!"".equals(modifiers)) {
+            modifiers = " (" + modifiers.trim() + ")";
+        }
+
+        log.log(type + " on " + targetComponent + "/" + event.getItemId()
+                + modifiers);
+
+    }
+
+    private static HorizontalLayout createHorizontalLayout(Component c) {
+        HorizontalLayout layout = new HorizontalLayout();
+        CheckBox b = new CheckBox("immediate", new MethodProperty<Boolean>(c,
+                "immediate"));
+        b.setImmediate(true);
+        layout.addComponent(b);
+        b = new CheckBox("selectable", new MethodProperty<Boolean>(c,
+                "selectable"));
+        b.setImmediate(true);
+        layout.addComponent(b);
+        b = new CheckBox("nullsel", new MethodProperty<Boolean>(c,
+                "nullSelectionAllowed"));
+        b.setImmediate(true);
+        layout.addComponent(b);
+        b = new CheckBox("multi", new MethodProperty<Boolean>(c, "multiSelect"));
+        b.setImmediate(true);
+        layout.addComponent(b);
+        return layout;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Click events should always come trough no matter how the table is configured.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5458;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/KeyControl.java b/tests/testbench/com/vaadin/tests/components/table/KeyControl.java
new file mode 100644
index 0000000000..e662db338c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/KeyControl.java
@@ -0,0 +1,135 @@
+package com.vaadin.tests.components.table;
+
+import java.util.Set;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+
+@SuppressWarnings("serial")
+public class KeyControl extends TestBase {
+
+    private final Label selected1 = new Label("No selected items.");
+    private final Table table1 = new Table("Read only table");
+
+    private final Label selected2 = new Label("No selected items");
+    private final Table table2 = new Table("Selectable table");
+
+    private final Label selected3 = new Label("Not selected items");
+    private final Table table3 = new Table("Multi-selectable table");
+
+    @Override
+    protected void setup() {
+        HorizontalLayout layout = new HorizontalLayout();
+        layout.setSpacing(true);
+        addComponent(layout);
+
+        // Create read only table
+        VerticalLayout layout1 = new VerticalLayout();
+        layout1.setSpacing(true);
+
+        table1.setContainerDataSource(createContainer());
+        table1.setWidth("300px");
+        table1.setHeight("300px");
+        table1.setImmediate(true);
+        layout1.addComponent(table1);
+
+        table1.addListener(new Table.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                @SuppressWarnings("unchecked")
+                Set<String> value = (Set<String>) table1.getValue();
+                selected1.setValue(value.toString() + " TOTAL: " + value.size());
+            }
+        });
+
+        layout1.addComponent(selected1);
+        layout.addComponent(layout1);
+
+        // Create single select table
+        VerticalLayout layout2 = new VerticalLayout();
+        layout2.setSpacing(true);
+
+        table2.setContainerDataSource(createContainer());
+        table2.setSelectable(true);
+        table2.setWidth("300px");
+        table2.setHeight("300px");
+        table2.setImmediate(true);
+        layout2.addComponent(table2);
+
+        table2.addListener(new Table.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                String value = table2.getValue() == null ? "No selected items"
+                        : table2.getValue().toString();
+                selected2.setValue(value);
+            }
+        });
+
+        layout2.addComponent(selected2);
+        layout.addComponent(layout2);
+
+        // Create multi select table
+        VerticalLayout layout3 = new VerticalLayout();
+        layout3.setSpacing(true);
+
+        table3.setContainerDataSource(createContainer());
+        table3.setSelectable(true);
+        table3.setMultiSelect(true);
+        table3.setWidth("300px");
+        table3.setHeight("300px");
+        table3.setImmediate(true);
+        layout3.addComponent(table3);
+
+        table3.addListener(new Table.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                @SuppressWarnings("unchecked")
+                Set<String> value = (Set<String>) table3.getValue();
+                selected3.setValue(value.size() == 0 ? "No selected items"
+                        : value + ": Total " + value.size() + " items");
+            }
+        });
+
+        selected3.setWidth("300px");
+        selected3.setHeight("500px");
+        layout3.addComponent(selected3);
+        layout.addComponent(layout3);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Add keyboard control to the Table";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2390;
+    }
+
+    private Container createContainer() {
+        IndexedContainer container = new IndexedContainer();
+        container.addContainerProperty("col1", String.class, "");
+        container.addContainerProperty("col2", String.class, "");
+        container.addContainerProperty("col3", String.class, "");
+        container.addContainerProperty("col4", String.class, "");
+        container.addContainerProperty("col5", String.class, "");
+        container.addContainerProperty("col6", String.class, "");
+
+        for (int i = 0; i < 100; i++) {
+            Item item = container.addItem("item " + i);
+            item.getItemProperty("col1").setValue("First column " + i);
+            item.getItemProperty("col2").setValue("Second column " + i);
+            item.getItemProperty("col3").setValue("Third column" + i);
+            item.getItemProperty("col4").setValue("Fourth column" + i);
+            item.getItemProperty("col5").setValue("Fifth column" + i);
+            item.getItemProperty("col6").setValue("Sixth column" + i);
+        }
+
+        return container;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/KeyboardNavigationDatasourceChange.java b/tests/testbench/com/vaadin/tests/components/table/KeyboardNavigationDatasourceChange.java
new file mode 100644
index 0000000000..b389727fd3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/KeyboardNavigationDatasourceChange.java
@@ -0,0 +1,137 @@
+package com.vaadin.tests.components.table;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+
+public class KeyboardNavigationDatasourceChange extends TestBase {
+
+    @Override
+    protected void setup() {
+        List<MyItem> items = new ArrayList<MyItem>();
+        for (int i = 0; i < 110; i++) {
+            items.add(new MyItem("item" + i, i, null));
+        }
+        BeanItemContainer<MyItem> c = new BeanItemContainer<MyItem>(
+                MyItem.class, items);
+        Table t = new Table("Test", c);
+        t.setVisibleColumns(new String[] { "nome", "index", "parent" });
+        t.setSelectable(true);
+        t.setSizeFull();
+        t.setImmediate(true);
+        TextField f = new TextField("Name");
+        final Form form = new Form();
+        // Property p = new ObjectProperty<String>("", String.class);
+        // t.setPropertyDataSource(p); // UNCOMMENT THIS LINE TO SEE BUG
+        // HAPPENING
+        // f.setPropertyDataSource(p);
+        // f.setImmediate(true);
+        t.setPropertyDataSource(f);
+        form.addField("table", t);
+        form.addField("name", f);
+        addComponent(form);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "When calling setPropertyDataSource on a regular table the keyboard navigation becomes unstable";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 7446;
+    }
+
+    public class MyItem implements Serializable {
+
+        private String nome;
+        private Integer index;
+        protected List<MyItem> children = new ArrayList<MyItem>();
+        private MyItem parent;
+
+        public MyItem(String nome, Integer index, List<MyItem> children) {
+            this.nome = nome;
+            this.index = index;
+            if (children != null) {
+                this.children = children;
+                if (children != null) {
+                    for (MyItem child : children) {
+                        child.setParent(this);
+                    }
+                }
+            }
+        }
+
+        /**
+         * @return the nome
+         */
+        public String getNome() {
+            return nome;
+        }
+
+        /**
+         * @param nome
+         *            the nome to set
+         */
+        public void setNome(String nome) {
+            this.nome = nome;
+        }
+
+        /**
+         * @return the idade
+         */
+        public Integer getIndex() {
+            return index;
+        }
+
+        /**
+         * @param idade
+         *            the idade to set
+         */
+        public void setIndex(Integer idade) {
+            index = idade;
+        }
+
+        /**
+         * @return the children
+         */
+        public List<MyItem> getChildren() {
+            return children;
+        }
+
+        /**
+         * @param children
+         *            the children to set
+         */
+        public void setChildren(List<MyItem> children) {
+            this.children = children;
+        }
+
+        /**
+         * @return the parent
+         */
+        public MyItem getParent() {
+            return parent;
+        }
+
+        /**
+         * @param parent
+         *            the parent to set
+         */
+        public void setParent(MyItem parent) {
+            this.parent = parent;
+        }
+
+        @Override
+        public String toString() {
+            return nome;
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/KeyboardNavigationWithChangingContent.java b/tests/testbench/com/vaadin/tests/components/table/KeyboardNavigationWithChangingContent.java
new file mode 100644
index 0000000000..44a2dcd9a9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/KeyboardNavigationWithChangingContent.java
@@ -0,0 +1,84 @@
+package com.vaadin.tests.components.table;
+
+import java.util.Arrays;
+
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Table;
+
+@SuppressWarnings("serial")
+public class KeyboardNavigationWithChangingContent extends TestBase {
+
+    @Override
+    protected void setup() {
+        ValueHolder<String> v1 = new ValueHolder<String>("test1");
+        ValueHolder<String> v2 = new ValueHolder<String>("test2");
+        ValueHolder<String> v3 = new ValueHolder<String>("test3");
+        @SuppressWarnings("unchecked")
+        final BeanItemContainer<ValueHolder<String>> bic = new BeanItemContainer<ValueHolder<String>>(
+                Arrays.asList(v1, v2, v3));
+        final Table t = new Table(null, bic);
+        t.setSelectable(true);
+        t.setMultiSelect(false);
+        t.setWidth(200, Sizeable.UNITS_PIXELS);
+        t.setHeight(100, Sizeable.UNITS_PIXELS);
+        t.select(v1);
+        t.focus();
+        t.setMultiSelect(true);
+
+        getLayout().addComponent(t);
+        getLayout().addComponent(
+                new Button("Change elements and selection",
+                        new ClickListener() {
+
+                            public void buttonClick(ClickEvent event) {
+
+                                bic.removeAllItems();
+                                ValueHolder<String> v4 = null;
+                                for (int i = 4; i < 30; i++) {
+                                    v4 = new ValueHolder<String>("test" + i);
+                                    bic.addBean(v4);
+
+                                }
+                                t.select(t.firstItemId());
+                                t.focus();
+                            }
+                        }));
+    }
+
+    @Override
+    protected String getDescription() {
+        // TODO Auto-generated method stub
+        return "Table keyboard navigation does not work after the contents in table is changed";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        // TODO Auto-generated method stub
+        return 5347;
+    }
+
+    public class ValueHolder<E> {
+        private E value;
+
+        public ValueHolder() {
+        }
+
+        public ValueHolder(E value) {
+            this.value = value;
+        }
+
+        public void setValue(E value) {
+            this.value = value;
+        }
+
+        public E getValue() {
+            return value;
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.html b/tests/testbench/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.html
new file mode 100644
index 0000000000..62e3786a44
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.html
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>LabelEmbeddedClickThroughForTable</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">LabelEmbeddedClickThroughForTable</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.LabelEmbeddedClickThroughForTable?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>32,13</td>
+</tr>
+<!--  Work around for Opera issue #5597 -->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>30,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>32,13</td>
+</tr>
+<!--  Work around done -->
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>30,12</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>row-2-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VLabel[0]</td>
+	<td>32,9</td>
+</tr>
+<!--  Moved here to avoid Opera issue #5588 -->
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>row-1-selected</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VLabel[0]</td>
+	<td>22,6</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>row-2-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VLabel[1]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VLabel[0]</td>
+	<td>22,6</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VEmbedded[0]/domChild[0]</td>
+	<td>19,14</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VEmbedded[0]/domChild[0]</td>
+	<td>16,15</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]</td>
+	<td>v-selected</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.java b/tests/testbench/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.java
new file mode 100644
index 0000000000..a54c3ce447
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.java
@@ -0,0 +1,68 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.event.ItemClickEvent;
+import com.vaadin.event.ItemClickEvent.ItemClickListener;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+
+public class LabelEmbeddedClickThroughForTable extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Clicking on a Label or Embedded inside a Table should select the row in the same way that clicking on a text selects the row.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2688;
+    }
+
+    @Override
+    protected void setup() {
+        Table table = new Table();
+        table.setHeight("500px");
+        table.setSelectable(true);
+        table.addContainerProperty("Column 1", String.class, "");
+        table.addContainerProperty("Column 2", Component.class, "");
+        table.addContainerProperty("Column 3", Component.class, "");
+        table.addContainerProperty("Column 4", Component.class, "");
+
+        Item item = table.addItem("Item 1 (row 1)");
+        item.getItemProperty("Column 1").setValue("String A");
+        item.getItemProperty("Column 2").setValue(new Label("Label A"));
+        item.getItemProperty("Column 3").setValue(
+                new Label("<b>Label A</b>", Label.CONTENT_XHTML));
+        item.getItemProperty("Column 4").setValue(
+                new Embedded("An embedded image", new ThemeResource(
+                        "../runo/icons/32/ok.png")));
+
+        item = table.addItem("Item 2 (row 2)");
+        item.getItemProperty("Column 1").setValue("String B");
+        item.getItemProperty("Column 2").setValue(new Label("Label B"));
+        item.getItemProperty("Column 3")
+                .setValue(
+                        new Label(
+                                "<a style=\"color: blue\" href=\"javascript:false\">Label A</a>",
+                                Label.CONTENT_XHTML));
+        item.getItemProperty("Column 4").setValue(
+                new Embedded("", new ThemeResource(
+                        "../runo/icons/32/cancel.png")));
+
+        table.addListener(new ItemClickListener() {
+
+            public void itemClick(ItemClickEvent event) {
+                System.out.println("Clickevent on item " + event.getItemId()
+                        + ", column: " + event.getPropertyId());
+
+            }
+
+        });
+        addComponent(table);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/MissingScrollbar.html b/tests/testbench/com/vaadin/tests/components/table/MissingScrollbar.html
new file mode 100644
index 0000000000..e1f783d42f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/MissingScrollbar.html
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>MissingScrollbar</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">MissingScrollbar</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.MissingScrollbar</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableMissingScrollbar::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>50-items-scrollbar</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableMissingScrollbar::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>2-items-no-scrollbar</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/MissingScrollbar.java b/tests/testbench/com/vaadin/tests/components/table/MissingScrollbar.java
new file mode 100644
index 0000000000..5f65b40f2f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/MissingScrollbar.java
@@ -0,0 +1,89 @@
+package com.vaadin.tests.components.table;
+
+import java.io.Serializable;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+
+public class MissingScrollbar extends TestBase {
+
+    private Table table;
+    private IndexedContainer container50;
+    private IndexedContainer container2;
+
+    @Override
+    protected String getDescription() {
+        return "Increasing the number of items to more than is displayed at once should show the scrollbar.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3076;
+    }
+
+    @Override
+    protected void setup() {
+        HorizontalLayout hl = new HorizontalLayout();
+
+        container50 = createContainer(50);
+        container2 = createContainer(2);
+
+        table = new Table();
+        table.setContainerDataSource(container2);
+        table.setPageLength(10);
+
+        VerticalLayout buttonLayout = new VerticalLayout();
+        buttonLayout.setWidth(null);
+
+        Button b = new Button("Set items to 2", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                table.setContainerDataSource(container2);
+            }
+        });
+        buttonLayout.addComponent(b);
+
+        b = new Button("Set items to 50", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                table.setContainerDataSource(container50);
+            }
+
+        });
+        buttonLayout.addComponent(b);
+
+        hl.addComponent(buttonLayout);
+        hl.addComponent(table);
+
+        addComponent(hl);
+    }
+
+    private static IndexedContainer createContainer(int items) {
+        IndexedContainer ic = new IndexedContainer();
+        ic.addContainerProperty("License number", Integer.class, "");
+        ic.addContainerProperty("First", String.class, "");
+        ic.addContainerProperty("Last", String.class, "");
+
+        for (int i = 0; i < items; i++) {
+            Item item = ic.addItem("" + i);
+            item.getItemProperty("License number").setValue(i);
+            item.getItemProperty("First").setValue("First " + i);
+            item.getItemProperty("Last").setValue("Last " + i);
+        }
+
+        return ic;
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws Exception {
+
+        out.defaultWriteObject();
+        System.out.println("Serialize " + getClass().getName() + "("
+                + (this instanceof Serializable) + ")");
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/ModifyContainerProperty.html b/tests/testbench/com/vaadin/tests/components/table/ModifyContainerProperty.html
new file mode 100644
index 0000000000..93d97cd698
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ModifyContainerProperty.html
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>ModifyContainerProperty</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ModifyContainerProperty</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.ModifyContainerProperty?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableModifyContainerProperty::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertTextNotPresent</td>
+	<td>bar</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableModifyContainerProperty::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableModifyContainerProperty::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
+	<td>three</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/ModifyContainerProperty.java b/tests/testbench/com/vaadin/tests/components/table/ModifyContainerProperty.java
new file mode 100644
index 0000000000..be3b6d3ec0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ModifyContainerProperty.java
@@ -0,0 +1,60 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Table;
+
+@SuppressWarnings("serial")
+public class ModifyContainerProperty extends TestBase {
+
+    private Table table = new Table();
+    private IndexedContainer ic = new IndexedContainer();
+
+    @Override
+    protected void setup() {
+        addComponent(table);
+
+        ic.addContainerProperty("one", String.class, "one");
+        ic.addContainerProperty("two", String.class, "two");
+
+        ic.addItem("foo");
+
+        ic.getContainerProperty("foo", "one").setValue("bar");
+        ic.getContainerProperty("foo", "two").setValue("baz");
+
+        table.setContainerDataSource(ic);
+        addComponent(new Button("Remove container property",
+                new Button.ClickListener() {
+                    public void buttonClick(com.vaadin.ui.Button.ClickEvent arg0) {
+                        ic.removeContainerProperty("one");
+                    }
+                }));
+        addComponent(new Button("Add container property",
+                new Button.ClickListener() {
+                    public void buttonClick(com.vaadin.ui.Button.ClickEvent arg0) {
+                        boolean added = ic.addContainerProperty("three",
+                                String.class, "three");
+                        if (added) {
+                            Object[] current = table.getVisibleColumns();
+                            Object[] vis = new Object[current.length + 1];
+                            for (int i = 0; i < current.length; i++) {
+                                vis[i] = current[i];
+                            }
+                            vis[current.length] = "three";
+                            table.setVisibleColumns(vis);
+                        }
+                    }
+                }));
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Clicking on \"Add container property\" adds a property to the container and sets it visible. The table should then show a \"three\" column in addition to the others. Clicking on \"Remove container property\" should remove column \"two\" from the table.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3165;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/MultiSelectWithNotIdentityEqualIds.java b/tests/testbench/com/vaadin/tests/components/table/MultiSelectWithNotIdentityEqualIds.java
new file mode 100644
index 0000000000..62fd53d769
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/MultiSelectWithNotIdentityEqualIds.java
@@ -0,0 +1,61 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+
+@SuppressWarnings("serial")
+public class MultiSelectWithNotIdentityEqualIds extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Table t = new Table();
+        t.setContainerDataSource(getDS());
+        t.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+        t.setMultiSelect(true);
+        t.setSelectable(true);
+        t.setImmediate(true);
+        t.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                t.getWindow().showNotification(
+                        "Selected: " + event.getProperty());
+
+            }
+        });
+        getLayout().addComponent(t);
+    }
+
+    private Container getDS() {
+
+        IndexedContainer idx = new IndexedContainer() {
+
+            @Override
+            public Object nextItemId(Object itemId) {
+                Integer id = (Integer) super.nextItemId(itemId);
+                return id == null ? null : new Integer(id);
+            }
+
+        };
+        for (int i = 0; i < 10; i++) {
+            idx.addItem();
+        }
+
+        idx.addContainerProperty("Property", String.class, "foo");
+
+        return idx;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Multiselection should work with container that uses ids that are equal, but not necessary identical. With bug an infinit loop is caused.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5342;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/NotselectablePaintSelections.java b/tests/testbench/com/vaadin/tests/components/table/NotselectablePaintSelections.java
new file mode 100644
index 0000000000..9d3011365d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/NotselectablePaintSelections.java
@@ -0,0 +1,55 @@
+package com.vaadin.tests.components.table;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import com.vaadin.data.Item;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+
+public class NotselectablePaintSelections extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Table should paint selections even if it's not selectable.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3500;
+    }
+
+    @Override
+    protected void setup() {
+        // Multiselect
+        Table t = new Table("Multiselect");
+        addComponent(t);
+        t.setSelectable(false);
+        t.setMultiSelect(true);
+        t.setPageLength(5);
+        t.addContainerProperty("Name", String.class, null);
+        Set<Object> selected = new HashSet<Object>();
+        for (int i = 0; i < 30; i++) {
+            Item item = t.addItem(i);
+            item.getItemProperty("Name").setValue("Name " + i);
+            if (i % 2 == 0) {
+                selected.add(i);
+            }
+        }
+        t.setValue(selected);
+
+        // Singleselect
+        t = new Table("Singleselect");
+        addComponent(t);
+        t.setSelectable(false);
+        t.setMultiSelect(false);
+        t.setPageLength(5);
+        t.addContainerProperty("Name", String.class, null);
+        for (int i = 0; i < 30; i++) {
+            Item item = t.addItem(i);
+            item.getItemProperty("Name").setValue("Name " + i);
+        }
+        t.setValue(3);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/OddEvenRowStyling.html b/tests/testbench/com/vaadin/tests/components/table/OddEvenRowStyling.html
new file mode 100644
index 0000000000..525ad34888
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/OddEvenRowStyling.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>OddEvenRowStyling</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">OddEvenRowStyling</td></tr>
+</thead><tbody>
+<tr>
+    <td>open</td>
+    <td>/run/com.vaadin.tests.components.table.OddEvenRowStyling?restartApplication</td>
+    <td></td>
+</tr>
+<tr>
+    <td>scroll</td>
+    <td>vaadin=runcomvaadintestscomponentstableOddEvenRowStyling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
+    <td>1000</td>
+</tr>
+<tr>
+    <td>pause</td>
+    <td>300</td>
+    <td></td>
+</tr>
+<tr>
+    <td>screenCapture</td>
+    <td></td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>scroll</td>
+    <td>vaadin=runcomvaadintestscomponentstableOddEvenRowStyling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
+    <td>0</td>
+</tr>
+<tr>
+    <td>pause</td>
+    <td>300</td>
+    <td></td>
+</tr>
+<tr>
+    <td>screenCapture</td>
+    <td></td>
+    <td>up</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/OddEvenRowStyling.java b/tests/testbench/com/vaadin/tests/components/table/OddEvenRowStyling.java
new file mode 100644
index 0000000000..578672ec83
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/OddEvenRowStyling.java
@@ -0,0 +1,36 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+
+/**
+ * @author jonatan
+ * 
+ */
+public class OddEvenRowStyling extends TestBase {
+
+    @Override
+    protected void setup() {
+        Table t = new Table();
+        t.setPageLength(10);
+        t.addContainerProperty("foo", String.class, "");
+        for (int i = 0; i < 33; i++) {
+            t.addItem(i).getItemProperty("foo").setValue("bar");
+        }
+        addComponent(t);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Odd/even row styling should not change when scrolling";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 7644;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/PropertyValueChange.html b/tests/testbench/com/vaadin/tests/components/table/PropertyValueChange.html
new file mode 100644
index 0000000000..71d323cdc0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/PropertyValueChange.html
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>PropertyValueChange</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">PropertyValueChange</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.PropertyValueChange</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstablePropertyValueChange::PID_Seditortable/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VFilterSelect[0]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[4]/td</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstablePropertyValueChange::PID_Seditortable/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VTextField[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentstablePropertyValueChange::PID_Seditortable/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VTextField[0]</td>
+	<td>9</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstablePropertyValueChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/PropertyValueChange.java b/tests/testbench/com/vaadin/tests/components/table/PropertyValueChange.java
new file mode 100644
index 0000000000..5975137976
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/PropertyValueChange.java
@@ -0,0 +1,156 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractSelect.NewItemHandler;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DefaultFieldFactory;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.ColumnGenerator;
+import com.vaadin.ui.TableFieldFactory;
+
+public class PropertyValueChange extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Property value change should only update absolutely "
+                + "needed cells. Tables have common datasource. The first is "
+                + "editable, second one has data in disabled fields, the lastone "
+                + "is plain table that directly shows data. Use first table and "
+                + "combobox/sync button to send changed values to server and evaluate "
+                + "given uidl responses.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2823;
+    }
+
+    private IndexedContainer container;
+
+    // Also use column generator in test, to ensure it is possible to build
+    // columns that update automatically.
+    ColumnGenerator multiplier = new ColumnGenerator() {
+        private int getMultipliedValue(Property p) {
+            int i = ((Integer) p.getValue()).intValue();
+            return i * 3;
+        }
+
+        public Component generateCell(Table source, Object itemId,
+                Object columnId) {
+            final Label l = new Label();
+            final Property integer = source.getContainerProperty(itemId,
+                    "integer");
+            l.setValue(getMultipliedValue(integer));
+
+            // we must hook value change listener to ensure updates in all use
+            // cases (eg. edit mode)
+            if (integer instanceof Property.ValueChangeNotifier) {
+                Property.ValueChangeNotifier notifier = (Property.ValueChangeNotifier) integer;
+                notifier.addListener(new ValueChangeListener() {
+                    public void valueChange(ValueChangeEvent event) {
+                        l.setValue(getMultipliedValue(integer));
+                    }
+                });
+            }
+            return l;
+        }
+    };
+
+    TableFieldFactory ff = new MyFieldFactory();
+
+    @Override
+    public void setup() {
+        container = new IndexedContainer();
+
+        container.addContainerProperty("text", String.class, "sampletext");
+        container.addContainerProperty("integer", Integer.class, 5);
+
+        container.addItem();
+        container.addItem();
+
+        Table t1 = new Table(
+                "Editable table with bells and wistles. See description.");
+        t1.setDescription("Opening combobox should never fire table"
+                + " refresh (for this table). Update from textfield "
+                + "(integer) may be sent to server however. The readonly table"
+                + " my refresh, but not this one.");
+        t1.setPageLength(0);
+        t1.setContainerDataSource(container);
+        t1.addGeneratedColumn("integer x 3", multiplier);
+        t1.setTableFieldFactory(ff);
+        t1.setEditable(true);
+        t1.setDebugId("editortable");
+
+        Table t2 = new Table(
+                "A clone of table1, but disabled. Properties are in components.");
+        t2.setDescription("This table is in editable mode."
+                + " Updates to common datasource should not affect redraw for this "
+                + "table. Only the components inside table should get updated.");
+        t2.setTableFieldFactory(ff);
+        t2.setEditable(true);
+        t2.setEnabled(false);
+        t2.setContainerDataSource(container);
+        t2.addGeneratedColumn("integer x 3", multiplier);
+        t2.setPageLength(0);
+        t2.setDebugId("disabled table");
+
+        Table reader = new Table("Reader table");
+        reader.setDescription("This table should be redrawn on container changes as container data is "
+                + "displayed directly in cells.");
+        reader.setContainerDataSource(container);
+        reader.addGeneratedColumn("integer x 3", multiplier);
+        reader.setPageLength(0);
+        reader.setDebugId("reader table");
+
+        getLayout().addComponent(t1);
+        getLayout().addComponent(t2);
+        getLayout().addComponent(reader);
+        getLayout().addComponent(new Button("Sync!"));
+
+    }
+}
+
+class MyFieldFactory extends DefaultFieldFactory {
+
+    IndexedContainer texts = new IndexedContainer();
+
+    public MyFieldFactory() {
+        texts.addItem("sampletext");
+        texts.addItem("foo");
+        texts.addItem("bar");
+        for (int i = 0; i < 100; i++) {
+            texts.addItem("foo" + 1);
+        }
+
+    }
+
+    @Override
+    public Field createField(Container container, Object itemId,
+            Object propertyId, Component uiContext) {
+        if (propertyId.equals("text")) {
+            // replace text fields with comboboxes
+            final ComboBox cb = new ComboBox() {
+            };
+            cb.setContainerDataSource(texts);
+            cb.setNewItemsAllowed(true);
+            cb.setNewItemHandler(new NewItemHandler() {
+                public void addNewItem(String newItemCaption) {
+                    texts.addItem(newItemCaption);
+                    cb.setValue(newItemCaption);
+                }
+            });
+            return cb;
+        }
+
+        return super.createField(container, itemId, propertyId, uiContext);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/ResizeColumnAfterScrolling.html b/tests/testbench/com/vaadin/tests/components/table/ResizeColumnAfterScrolling.html
new file mode 100644
index 0000000000..7e7536d63a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/ResizeColumnAfterScrolling.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>drag</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[0]</td>
+	<td>0,11</td>
+</tr>
+<tr>
+	<td>drop</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[0]</td>
+	<td>100,0</td>
+</tr>
+<tr>
+	<td>scrollLeft</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
+	<td>101</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>drag</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[9]/domChild[0]</td>
+	<td>0,11</td>
+</tr>
+<tr>
+	<td>drop</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[9]/domChild[0]</td>
+	<td>-50,0</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>resized-after-scrolling</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/RowAdditionTest.java b/tests/testbench/com/vaadin/tests/components/table/RowAdditionTest.java
new file mode 100644
index 0000000000..742cc0acf3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/RowAdditionTest.java
@@ -0,0 +1,59 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Table;
+
+public class RowAdditionTest extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Adding a row should refresh client area only if newly added row is in the rendered area.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return new Integer(2799);
+    }
+
+    @Override
+    protected void setup() {
+        final Table table = new Table();
+        final IndexedContainer container = (IndexedContainer) table
+                .getContainerDataSource();
+        table.addContainerProperty("column1", String.class, "test");
+
+        for (int i = 0; i < 100; ++i) {
+            table.addItem();
+        }
+
+        HorizontalLayout hl = new HorizontalLayout();
+        hl.addComponent(new Button("Add first", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                Item item = container.addItemAt(0, new Object());
+                item.getItemProperty("column1").setValue("0");
+            }
+        }));
+        hl.addComponent(new Button("Add at position 50",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        Item item = container.addItemAt(50, new Object());
+                        item.getItemProperty("column1").setValue("50");
+                    }
+                }));
+        hl.addComponent(new Button("Add at position 100",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        Item item = container.addItemAt(100, new Object());
+                        item.getItemProperty("column1").setValue("100");
+                    }
+                }));
+
+        getLayout().addComponent(table);
+        getLayout().addComponent(hl);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/RowGenerators.java b/tests/testbench/com/vaadin/tests/components/table/RowGenerators.java
new file mode 100644
index 0000000000..1ddb03c316
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/RowGenerators.java
@@ -0,0 +1,59 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.GeneratedRow;
+import com.vaadin.ui.Table.RowGenerator;
+
+public class RowGenerators extends TestBase implements RowGenerator {
+
+    @Override
+    protected void setup() {
+        Table table = new Table();
+        table.setContainerDataSource(filledContainer());
+        table.setRowGenerator(this);
+        addComponent(table);
+    }
+
+    private Container filledContainer() {
+        IndexedContainer c = new IndexedContainer();
+        c.addContainerProperty("Property 1", String.class, "");
+        c.addContainerProperty("Property 2", String.class, "");
+        c.addContainerProperty("Property 3", String.class, "");
+        c.addContainerProperty("Property 4", String.class, "");
+        for (int ix = 0; ix < 500; ix++) {
+            Item i = c.addItem(ix);
+            i.getItemProperty("Property 1").setValue("Item " + ix + ",1");
+            i.getItemProperty("Property 2").setValue("Item " + ix + ",2");
+            i.getItemProperty("Property 3").setValue("Item " + ix + ",3");
+            i.getItemProperty("Property 4").setValue("Item " + ix + ",4");
+        }
+        return c;
+    }
+
+    public GeneratedRow generateRow(Table table, Object itemId) {
+        if ((Integer) itemId % 5 == 0) {
+            if ((Integer) itemId % 10 == 0) {
+                return new GeneratedRow(
+                        "foobarbazoof very extremely long, most definitely will span.");
+            } else {
+                return new GeneratedRow("foo", "bar", "baz", "oof");
+            }
+        }
+        return null;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Row generators should replace every fifth row in the table";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6720;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/SafariRenderingBugWhiteSpace.java b/tests/testbench/com/vaadin/tests/components/table/SafariRenderingBugWhiteSpace.java
new file mode 100644
index 0000000000..133a5e83a5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/SafariRenderingBugWhiteSpace.java
@@ -0,0 +1,64 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Table;
+
+public class SafariRenderingBugWhiteSpace extends TestBase {
+
+    @Override
+    protected void setup() {
+
+        final HorizontalSplitPanel split = new HorizontalSplitPanel();
+
+        final Table table = new Table();
+        table.addContainerProperty("name", String.class, "");
+        table.addContainerProperty("value", String.class, "");
+
+        table.addItem(new Object[] { "test1", "val1" }, "test1");
+        table.addItem(new Object[] { "test2", "val2" }, "test2");
+        table.addItem(new Object[] { "test3", "val3" }, "test3");
+        table.addItem(new Object[] { "test4", "val4" }, "test4");
+        table.addItem(new Object[] { "test5", "val5" }, "test5");
+        table.addItem(new Object[] { "test6", "val6" }, "test6");
+        table.addItem(new Object[] { "test7", "val7" }, "test7");
+        table.addItem(new Object[] { "test8", "val8" }, "test8");
+        table.addItem(new Object[] { "test9", "val9" }, "test9");
+        table.setSelectable(true);
+        table.setImmediate(true);
+        table.setSizeFull();
+        table.addListener(new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                if (table.getValue() == null) {
+                    split.setSplitPosition(100, Sizeable.UNITS_PERCENTAGE);
+                } else {
+                    split.setSplitPosition(20, Sizeable.UNITS_PERCENTAGE);
+                }
+            }
+        });
+
+        split.setFirstComponent(table);
+        split.setSplitPosition(100, Sizeable.UNITS_PERCENTAGE);
+        Panel editor = new Panel("Editor");
+        editor.setSizeFull();
+        split.setSecondComponent(editor);
+        getLayout().setSizeFull();
+        getLayout().addComponent(split);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "White space between header an content should not appear, when selecting and de-selecting first row";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3875;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/SelectingItemScrollsRight.java b/tests/testbench/com/vaadin/tests/components/table/SelectingItemScrollsRight.java
new file mode 100644
index 0000000000..cfe0301775
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/SelectingItemScrollsRight.java
@@ -0,0 +1,41 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+
+public class SelectingItemScrollsRight extends TestBase {
+
+    @Override
+    protected void setup() {
+        Table table = new Table();
+        table.setSelectable(true);
+        table.setWidth("300px");
+        table.setColumnWidth("Column", 500);
+        table.addGeneratedColumn("Column", new Table.ColumnGenerator() {
+            public Component generateCell(Table source, Object itemId,
+                    Object columnId) {
+                return new Label(
+                        "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
+            }
+        });
+
+        for (int i = 0; i < 50; i++) {
+            table.addItem();
+        }
+
+        addComponent(table);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Clicking on an item that is longer than the table width should not scroll the table right";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5385;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/SortLongTable.html b/tests/testbench/com/vaadin/tests/components/table/SortLongTable.html
new file mode 100644
index 0000000000..96513509e1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/SortLongTable.html
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.SortLongTable?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableSortLongTable::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>120,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>sorted-asc</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableSortLongTable::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>120,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>sorted-desc</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/SortLongTable.java b/tests/testbench/com/vaadin/tests/components/table/SortLongTable.java
new file mode 100644
index 0000000000..cc9dec0965
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/SortLongTable.java
@@ -0,0 +1,43 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class SortLongTable extends AbstractTestCase {
+
+    @Override
+    public void init() {
+        final int NUMBER_OF_ROWS = 100; // Works with 10
+
+        Window mainWindow = new Window("Table Sort Test");
+        mainWindow.setSizeFull();
+        setMainWindow(mainWindow);
+
+        Table ptable = new Table();
+        ptable.addContainerProperty("Sort_me_please", String.class, "--");
+        for (int i = NUMBER_OF_ROWS - 1; i >= 0; i--) {
+            ptable.addItem("" + i).getItemProperty("Sort_me_please")
+                    .setValue("Value " + String.format("%02d", i));
+        }
+
+        ptable.setWidth("100%");
+        ptable.setPageLength(NUMBER_OF_ROWS);
+
+        VerticalLayout vl = new VerticalLayout();
+        vl.addComponent(ptable);
+        mainWindow.addComponent(vl);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Clicking on the header should sort the column. It should not cause the headers to be scrolled out of view.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6367;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableAndBrowserContextMenu.java b/tests/testbench/com/vaadin/tests/components/table/TableAndBrowserContextMenu.java
new file mode 100644
index 0000000000..d1fce928d4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableAndBrowserContextMenu.java
@@ -0,0 +1,150 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.event.Action;
+import com.vaadin.event.ItemClickEvent;
+import com.vaadin.event.ItemClickEvent.ItemClickListener;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Table;
+
+public class TableAndBrowserContextMenu extends TestBase implements
+        Action.Handler, ItemClickListener {
+
+    private Table table;
+    private boolean actionHandlerHasActions = false;
+
+    @Override
+    public void setup() {
+        CheckBox cb = new CheckBox("Item click listener");
+        cb.setImmediate(true);
+        cb.addListener(new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                if (((Boolean) event.getProperty().getValue())) {
+                    table.addListener(TableAndBrowserContextMenu.this);
+                } else {
+                    table.removeListener(TableAndBrowserContextMenu.this);
+                }
+
+            }
+        });
+        addComponent(cb);
+
+        CheckBox cbActionHandler = new CheckBox("Action handler");
+        cbActionHandler.setImmediate(true);
+        cbActionHandler.addListener(new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                if (((Boolean) event.getProperty().getValue())) {
+                    table.addActionHandler(TableAndBrowserContextMenu.this);
+                } else {
+                    table.removeActionHandler(TableAndBrowserContextMenu.this);
+                }
+
+            }
+        });
+        addComponent(cbActionHandler);
+
+        CheckBox cbActionHasActions = new CheckBox("Action handler has actions");
+        cbActionHasActions.setImmediate(true);
+        cbActionHasActions.addListener(new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                actionHandlerHasActions = ((Boolean) event.getProperty()
+                        .getValue());
+
+                // Workaround to ensure actions are repainted
+                removeComponent(table);
+                addComponent(table);
+
+            }
+        });
+        addComponent(cbActionHasActions);
+
+        createTable();
+        addComponent(table);
+
+    }
+
+    private void createTable() {
+        // Have a table with a numeric column
+        table = new Table("A table");
+        table.addContainerProperty("Name", String.class, null);
+        table.addContainerProperty("Died At Age", Integer.class, null);
+
+        // Add a generated column with a link to Google
+        table.addGeneratedColumn("Search", new Table.ColumnGenerator() {
+            public Component generateCell(Table source, Object itemId,
+                    Object columnId) {
+                Item item = source.getItem(itemId);
+                String name = (String) item.getItemProperty("Name").getValue();
+                return new Link("Google for " + name, new ExternalResource(
+                        "http://www.google.co.uk/search?q=" + name));
+            }
+        });
+
+        // Insert some data
+        Object people[][] = { { "Galileo", 77 }, { "Monnier", 83 },
+                { "Vaisala", 79 }, { "Oterma", 86 } };
+
+        for (int i = 0; i < people.length; i++) {
+            table.addItem(people[i], i);
+        }
+
+        // Calculate the average of the numeric column
+        double avgAge = 0;
+        for (int i = 0; i < people.length; i++) {
+            avgAge += (Integer) people[i][1];
+        }
+        avgAge /= people.length;
+
+        // Set the footers
+        table.setFooterVisible(true);
+        table.setColumnFooter("Name", "Average");
+        table.setColumnFooter("Died At Age", String.valueOf(avgAge));
+
+        // Adjust the table height a bit
+        table.setPageLength(table.size() + 2);
+
+        for (int i = 0; i < people.length; i++) {
+            Object[] person = people[i];
+            String name = (String) person[0];
+            addComponent(new Link("Google for " + name, new ExternalResource(
+                    "http://www.google.co.uk/search?q=" + name)));
+        }
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Table should only prevent the browser context menu when the right click is used for some Table specific operation. In practice these are either action handlers/context menu or item click listeners (right click). Note that item click listeners affects rows only, not the body.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5924;
+    }
+
+    public void itemClick(ItemClickEvent event) {
+        getMainWindow()
+                .showNotification("Click using " + event.getButtonName());
+    }
+
+    public Action[] getActions(Object target, Object sender) {
+        if (!actionHandlerHasActions) {
+            return null;
+        }
+
+        return new Action[] { new Action("test") };
+    }
+
+    public void handleAction(Action action, Object sender, Object target) {
+        getMainWindow().showNotification("Action: " + action.getCaption());
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableCacheBuildEfficiency.java b/tests/testbench/com/vaadin/tests/components/table/TableCacheBuildEfficiency.java
new file mode 100644
index 0000000000..220d5e8192
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableCacheBuildEfficiency.java
@@ -0,0 +1,59 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Property;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+
+public class TableCacheBuildEfficiency extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "On each add, row property values should be queried only once (one log row for first addition).";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4299;
+    }
+
+    @Override
+    protected void setup() {
+
+        final CssLayout log = new CssLayout();
+        log.setWidth("100%");
+
+        final Table table = new Table() {
+            @Override
+            public Property getContainerProperty(Object itemId,
+                    Object propertyId) {
+                log("Fetched container property \"" + propertyId
+                        + "\" for item \"" + itemId + "\"");
+                return super.getContainerProperty(itemId, propertyId);
+            }
+
+            private void log(String string) {
+                log.addComponent(new Label(string));
+
+            }
+        };
+
+        table.addContainerProperty("foo", String.class, "bar");
+
+        Button b = new Button("Click to add row", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                table.addItem();
+
+            }
+        });
+
+        getLayout().addComponent(table);
+        getLayout().addComponent(b);
+        getLayout().addComponent(log);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableClickAndDragOnIconAndComponents.html b/tests/testbench/com/vaadin/tests/components/table/TableClickAndDragOnIconAndComponents.html
new file mode 100644
index 0000000000..7ad0873c0f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableClickAndDragOnIconAndComponents.html
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TableClickAndDragOnIconAndComponents</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TableClickAndDragOnIconAndComponents</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableClickAndDragOnIconAndComponents?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertNotCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[1]/domChild[0]</td>
+	<td>38,13</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>assertNotCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>1,1</td>
+</tr>
+<tr>
+	<td>assertNotCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VLabel[0]</td>
+	<td>30,9</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>assertNotCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VTextField[0]</td>
+	<td>71,11</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>assertNotCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]/VTextField[1]</td>
+	<td>34,9</td>
+</tr>
+<tr>
+	<td>assertNotCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VEmbedded[0]/domChild[0]</td>
+	<td>9,8</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>assertNotCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]</td>
+	<td>v-selected</td>
+</tr>
+<tr>
+	<td>drag</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[1]</td>
+	<td>2,16</td>
+</tr>
+<tr>
+	<td>drop</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[1]/domChild[0]</td>
+	<td>22,18</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableClickAndDragOnIconAndComponents::PID_Stestable-table/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[1]/domChild[0]</td>
+	<td>foo 4foo</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableClickAndDragOnIconAndComponents.java b/tests/testbench/com/vaadin/tests/components/table/TableClickAndDragOnIconAndComponents.java
new file mode 100644
index 0000000000..ee04813ce6
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableClickAndDragOnIconAndComponents.java
@@ -0,0 +1,142 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.event.DataBoundTransferable;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.acceptcriteria.AcceptAll;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.ColumnGenerator;
+import com.vaadin.ui.Table.TableDragMode;
+import com.vaadin.ui.TextField;
+
+public class TableClickAndDragOnIconAndComponents extends TestBase {
+
+    private static final long serialVersionUID = -2534880024131980135L;
+    private Table table;
+
+    @Override
+    protected void setup() {
+        table = new Table();
+        table.addContainerProperty("foo", String.class, "foo");
+        table.addContainerProperty("red", String.class, "red");
+        table.addContainerProperty("icon", Resource.class, null);
+        table.setSelectable(true);
+        table.setRowHeaderMode(Table.ROW_HEADER_MODE_ICON_ONLY);
+        table.setItemIconPropertyId("icon");
+        table.setDebugId("testable-table");
+        addComponent(table);
+        for (int i = 0; i < 5; i++) {
+            addItemAfter(i + "foo", null);
+        }
+
+        table.addGeneratedColumn("Label", new ColumnGenerator() {
+
+            private static final long serialVersionUID = -5042109683675242407L;
+
+            public Component generateCell(Table source, Object itemId,
+                    Object columnId) {
+                Item item = source.getItem(itemId);
+                return new Label("" + item.getItemProperty("foo").getValue());
+            }
+        });
+        table.addGeneratedColumn("textField", new ColumnGenerator() {
+
+            private static final long serialVersionUID = -5042109683675242407L;
+
+            public Component generateCell(Table source, Object itemId,
+                    Object columnId) {
+                Item item = source.getItem(itemId);
+                TextField textfield = new TextField();
+                textfield.setValue(String.valueOf(item.getItemProperty("foo")
+                        .getValue()));
+                return textfield;
+            }
+        });
+        table.addGeneratedColumn("readOnlyTextField", new ColumnGenerator() {
+
+            private static final long serialVersionUID = -5042109683675242407L;
+
+            public Component generateCell(Table source, Object itemId,
+                    Object columnId) {
+                Item item = source.getItem(itemId);
+                TextField textfield = new TextField();
+                textfield.setValue(String.valueOf(item.getItemProperty("foo")
+                        .getValue()));
+                textfield.setReadOnly(true);
+                return textfield;
+            }
+        });
+        table.addGeneratedColumn("embedded", new ColumnGenerator() {
+
+            private static final long serialVersionUID = -5042109683675242407L;
+
+            public Component generateCell(Table source, Object itemId,
+                    Object columnId) {
+                Embedded embedded = new Embedded(null, new ThemeResource(
+                        "../runo/icons/16/ok.png"));
+                return embedded;
+            }
+        });
+
+        table.setDragMode(TableDragMode.ROW);
+        table.setDropHandler(new DropHandler() {
+
+            public AcceptCriterion getAcceptCriterion() {
+                return AcceptAll.get();
+            }
+
+            public void drop(DragAndDropEvent event) {
+                DataBoundTransferable t = (DataBoundTransferable) event
+                        .getTransferable();
+                Object dragged = t.getItemId();
+
+                AbstractSelectTargetDetails dropData = ((AbstractSelectTargetDetails) event
+                        .getTargetDetails());
+                Object target = dropData.getItemIdOver();
+
+                if (dragged == target || target == null) {
+                    return;
+                }
+
+                IndexedContainer container = (IndexedContainer) table
+                        .getContainerDataSource();
+                container.removeItem(dragged);
+                addItemAfter(dragged, target);
+            }
+        });
+    }
+
+    private void addItemAfter(Object itemId, Object afterItemId) {
+        Item item;
+        if (afterItemId != null) {
+            item = table.addItemAfter(afterItemId, itemId);
+        } else {
+            item = table.addItem(itemId);
+        }
+        item.getItemProperty("foo").setValue("foo " + itemId);
+        item.getItemProperty("red").setValue("red " + itemId);
+        item.getItemProperty("icon").setValue(
+                new ThemeResource("../runo/icons/16/ok.png"));
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tests that you can click on a row icon in a table to select the row, or to drag the row. Verifies also that the table doesn't capture the click events meant for components inside the table";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 7026;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableColumnAlignment.html b/tests/testbench/com/vaadin/tests/components/table/TableColumnAlignment.html
new file mode 100644
index 0000000000..49bb86dbce
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableColumnAlignment.html
@@ -0,0 +1,305 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<!--Add some footers as it should be aligned aswell-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>22,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item7</td>
+	<td>37,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>85,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>73,6</td>
+</tr>
+<!--Align 1r,2c,3l,4r,5c-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>23,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>53,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>61,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>41,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
+	<td>46,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>24,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>41,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>24,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>51,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item1</td>
+	<td>32,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>34,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>42,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>37,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>50,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+	<td>15,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>13,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>42,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item3</td>
+	<td>42,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>32,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
+	<td>36,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>48,21</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>46,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>35,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>43,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item1</td>
+	<td>24,11</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>aligned-1r-2c-3l-4r-5c</td>
+</tr>
+<!--Align column back to left-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>35,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>37,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>50,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>60,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+	<td>38,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>39,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>56,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>44,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>53,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+	<td>30,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>49,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>44,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>44,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>36,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+	<td>54,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>32,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>33,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item3</td>
+	<td>53,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>48,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+	<td>28,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>29,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>34,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>36,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>34,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+	<td>31,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>aligned-all-left</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableColumnHeaders.html b/tests/testbench/com/vaadin/tests/components/table/TableColumnHeaders.html
new file mode 100644
index 0000000000..9f4e6cb8da
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableColumnHeaders.html
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<!--3 properties-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>63,19</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>54,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>43,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+	<td>17,3</td>
+</tr>
+<!--Property 1 -> "A nice column"-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>51,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>39,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>51,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item5</td>
+	<td>52,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
+	<td>46,2</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>A nice column</td>
+</tr>
+<!--Property 2 -> "A"-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>54,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>58,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>46,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item5</td>
+	<td>22,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item1</td>
+	<td>31,11</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
+	<td>A</td>
+</tr>
+<!--Header mode -> id-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>24,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>51,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>50,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>72,11</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>Property 1</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
+	<td>Property 2</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[2]</td>
+	<td>Property 3</td>
+</tr>
+<!--Header mode -> Explicit-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>22,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>43,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>34,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>48,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>A nice column</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
+	<td>A</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[2]</td>
+	<td></td>
+</tr>
+<!--Header mode hidden-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>49,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>44,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>72,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+	<td>40,10</td>
+</tr>
+<tr>
+	<td>assertNotVisible</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]</td>
+	<td>A nice column<br /><br /><br />A<br /><br /><br />Property 3</td>
+</tr>
+<!--explicit defaults id-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>39,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>39,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>51,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>73,11</td>
+</tr>
+<tr>
+	<td>assertVisible</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]</td>
+	<td>A nice column<br /><br /><br />A<br /><br /><br />Property 3</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>A nice column</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
+	<td>A</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[2]</td>
+	<td>Property 3</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableColumnIcons.html b/tests/testbench/com/vaadin/tests/components/table/TableColumnIcons.html
new file mode 100644
index 0000000000..81b8be89fa
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableColumnIcons.html
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<!--Add icons to property 1,5,10-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>19,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>31,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>48,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+	<td>45,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item1</td>
+	<td>38,14</td>
+</tr>
+<!--ensure icon is there-->
+<tr>
+	<td>assertElementPresent</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>2,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>24,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>49,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+	<td>29,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item3</td>
+	<td>51,7</td>
+</tr>
+<tr>
+	<td>assertElementPresent</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[4]/domChild[2]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>20,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>45,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item9</td>
+	<td>36,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+	<td>46,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item4</td>
+	<td>72,10</td>
+</tr>
+<tr>
+	<td>assertElementPresent</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[9]/domChild[2]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>icons-on-properties-1-5-10</td>
+</tr>
+<!--Remove icons from 1 and 10-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>21,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>42,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>17,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+	<td>52,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+	<td>27,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>45,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>53,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item9</td>
+	<td>45,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+	<td>41,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+	<td>13,5</td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[9]/domChild[2]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>icon-on-5</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableColumnResizeContentsWidth.html b/tests/testbench/com/vaadin/tests/components/table/TableColumnResizeContentsWidth.html
new file mode 100644
index 0000000000..9c8a12fe15
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableColumnResizeContentsWidth.html
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title></title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3"></td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableColumnResizeContentsWidth?restartApplication&amp;debug</td>
+	<td></td>
+</tr>
+<tr>
+	<td>dragAndDrop</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableColumnResizeContentsWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>-20,+0</td>
+</tr>
+<tr>
+	<td>assertElementWidth</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableColumnResizeContentsWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VTextField[0]</td>
+	<td>80</td>
+</tr>
+<tr>
+	<td>dragAndDrop</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableColumnResizeContentsWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>+40,+0</td>
+</tr>
+<tr>
+	<td>assertElementWidth</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableColumnResizeContentsWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VTextField[0]</td>
+	<td>120</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableColumnResizeContentsWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementWidth</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableColumnResizeContentsWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VTextField[0]</td>
+	<td>80</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableColumnResizeContentsWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementWidth</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableColumnResizeContentsWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VTextField[0]</td>
+	<td>100</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableColumnResizeContentsWidth.java b/tests/testbench/com/vaadin/tests/components/table/TableColumnResizeContentsWidth.java
new file mode 100644
index 0000000000..fbe7ed88ef
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableColumnResizeContentsWidth.java
@@ -0,0 +1,56 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.ColumnGenerator;
+import com.vaadin.ui.TextField;
+
+public class TableColumnResizeContentsWidth extends TestBase {
+
+    private static final String COL1 = "COL1";
+
+    @Override
+    protected void setup() {
+        final Table table = new Table();
+        table.addGeneratedColumn(COL1, new ColumnGenerator() {
+            public Object generateCell(Table source, Object itemId,
+                    Object columnId) {
+                TextField textField = new TextField();
+                textField.setWidth("100%");
+                return textField;
+            }
+        });
+
+        table.addItem();
+
+        table.setWidth("200px");
+        table.setColumnWidth(COL1, 100);
+
+        addComponent(table);
+        addComponent(new Button("Increase width", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                table.setColumnWidth(COL1, table.getColumnWidth(COL1) + 20);
+                table.requestRepaint();
+            }
+        }));
+        addComponent(new Button("Decrease width", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                table.setColumnWidth(COL1, table.getColumnWidth(COL1) - 40);
+                table.requestRepaint();
+            }
+        }));
+    }
+
+    @Override
+    protected String getDescription() {
+        return "When a column is resized, it's contents should update to match the new size";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return Integer.valueOf(7393);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableColumnSorting.html b/tests/testbench/com/vaadin/tests/components/table/TableColumnSorting.html
new file mode 100644
index 0000000000..f513d147a8
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableColumnSorting.html
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
+	<td>35,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>36,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>auto-unsorted</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>53,11</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>auto-sorted-p1-asc-update</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>53,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>53,11</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>auto-sorted-p1-asc-redraw</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>53,11</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
+	<td>34,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[2]</td>
+	<td>29,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[2]</td>
+	<td>19,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[4]/domChild[2]</td>
+	<td>27,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[4]/domChild[2]</td>
+	<td>27,12</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>auto-sorted-p5-desc-update</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>auto-sorted-p5-desc-redraw</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[4]/domChild[2]</td>
+	<td>27,12</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables</td>
+	<td></td>
+</tr>
+<!--500px wide-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>30,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>32,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>40,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item6</td>
+	<td>47,4</td>
+</tr>
+<!--3 items-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>36,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>61,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>72,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+	<td>20,10</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>500px-unsorted-redraw</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>83,9</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>500px-sorted-p1-desc-update</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>500px-sorted-p1-desc-redraw</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>83,9</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableContextMenuAndIcons.html b/tests/testbench/com/vaadin/tests/components/table/TableContextMenuAndIcons.html
new file mode 100644
index 0000000000..54d8e624f1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableContextMenuAndIcons.html
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<!--Hide event log-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
+	<td>19,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>32,7</td>
+</tr>
+<!--Simple context menu-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>28,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>57,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>68,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>69,7</td>
+</tr>
+<tr>
+	<td>contextMenuAt</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[1]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>contextmenu-noicon</td>
+</tr>
+<!--Two actions, without and with icon-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>42,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>52,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>53,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>31,4</td>
+</tr>
+<tr>
+	<td>contextMenuAt</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[2]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>caption-only-and-has-icon</td>
+</tr>
+<!--Large icon-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>42,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>52,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>53,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+	<td>31,4</td>
+</tr>
+<tr>
+	<td>contextMenuAt</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[2]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>large-icon</td>
+</tr>
+<!--Simple context menu again to ensure it is properly updated (icons removed)-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>28,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>57,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>68,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>69,7</td>
+</tr>
+<tr>
+	<td>contextMenuAt</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[1]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>contextmenu-noicon</td>
+</tr>
+<!--Empty context menu-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>25,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>72,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>77,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+	<td>48,5</td>
+</tr>
+<tr>
+	<td>contextmenu</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[3]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>contextmenu-empty</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableContextMenuOnField.java b/tests/testbench/com/vaadin/tests/components/table/TableContextMenuOnField.java
new file mode 100644
index 0000000000..4c6f658a24
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableContextMenuOnField.java
@@ -0,0 +1,93 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.event.Action;
+import com.vaadin.event.LayoutEvents.LayoutClickEvent;
+import com.vaadin.event.LayoutEvents.LayoutClickListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class TableContextMenuOnField extends TestBase {
+
+    private static final Action ACTION_MYACTION = new Action("Action!!");
+
+    @Override
+    protected void setup() {
+        Table table = new Table();
+        table.setSelectable(true);
+        table.setMultiSelect(true);
+
+        table.addActionHandler(new Action.Handler() {
+            public void handleAction(Action action, Object sender, Object target) {
+                // TODO Auto-generated method stub
+
+            }
+
+            public Action[] getActions(Object target, Object sender) {
+                return new Action[] { ACTION_MYACTION };
+            }
+        });
+
+        table.addGeneratedColumn("layout", new Table.ColumnGenerator() {
+
+            public Component generateCell(Table source, Object itemId,
+                    Object columnId) {
+
+                VerticalLayout layout = new VerticalLayout();
+                layout.addComponent(new TextField());
+
+                layout.addListener(new LayoutClickListener() {
+
+                    public void layoutClick(LayoutClickEvent event) {
+                        getMainWindow().showNotification("HELLO");
+
+                    }
+                });
+
+                return layout;
+            }
+        });
+
+        table.addGeneratedColumn("textfield", new Table.ColumnGenerator() {
+            public Component generateCell(Table source, Object itemId,
+                    Object columnId) {
+                return new TextField();
+            }
+        });
+
+        table.addGeneratedColumn("link", new Table.ColumnGenerator() {
+            public Component generateCell(Table source, Object itemId,
+                    Object columnId) {
+                return new Link("Link", null);
+            }
+        });
+
+        table.addGeneratedColumn("button", new Table.ColumnGenerator() {
+            public Component generateCell(Table source, Object itemId,
+                    Object columnId) {
+                return new Button("Button");
+            }
+        });
+
+        table.addItem();
+        table.addItem();
+        table.addItem();
+        addComponent(table);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Right clicking on an item without a context menu should bring"
+                + "up the Tables context menu";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4264;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableDragColumn.html b/tests/testbench/com/vaadin/tests/components/table/TableDragColumn.html
new file mode 100644
index 0000000000..7c2dc2813c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableDragColumn.html
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>TableDragColumn</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TableDragColumn</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<!--Hide log to allow screenshots to be consistent-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
+	<td>23,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>58,13</td>
+</tr>
+<!-- Icon for first column -->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>43,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>42,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>24,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+	<td>58,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item1</td>
+	<td>37,8</td>
+</tr>
+<!-- Drag column to a new location -->
+<tr>
+	<td>drag</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+	<td>51,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>dragging_column</td>
+</tr>
+<tr>
+	<td>drop</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[2]</td>
+	<td>10,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>moved_column</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableExtraScrollbars.java b/tests/testbench/com/vaadin/tests/components/table/TableExtraScrollbars.java
new file mode 100644
index 0000000000..bc8c40108c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableExtraScrollbars.java
@@ -0,0 +1,61 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class TableExtraScrollbars extends AbstractTestCase {
+
+    private static int PROPS = 15;
+    private static int ROWS = 1000;
+
+    @Override
+    public void init() {
+        setTheme("runo");
+        Window w = new Window("Table scrollbars bug example");
+        setMainWindow(w);
+
+        VerticalLayout vl = new VerticalLayout();
+        vl.setSizeFull();
+        vl.addComponent(createTable());
+        w.setContent(vl);
+    }
+
+    protected Table createTable() {
+        Table table = new Table(null, createContainer());
+        table.setSizeFull();
+        table.setPageLength(50);
+        table.setColumnReorderingAllowed(true);
+        table.setSelectable(true);
+        return table;
+    }
+
+    protected Container createContainer() {
+        Container container = new IndexedContainer();
+        for (int i = 0; i < PROPS; ++i) {
+            container.addContainerProperty("prop" + i, String.class, null);
+        }
+        for (int i = 0; i < ROWS; ++i) {
+            Item item = container.addItem(i);
+            for (int p = 0; p < PROPS; ++p) {
+                item.getItemProperty("prop" + p).setValue(
+                        "property value 1234567890");
+            }
+        }
+        return container;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Scrolling down in the table should not add extra scrollbars";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4489;
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableGeneratedColumns.html b/tests/testbench/com/vaadin/tests/components/table/TableGeneratedColumns.html
new file mode 100644
index 0000000000..19326e9f12
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableGeneratedColumns.html
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<!--Hide log to allow screenshots to be consistent-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
+	<td>23,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>58,13</td>
+</tr>
+<!--width 700px-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>44,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>41,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>36,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item8</td>
+	<td>53,17</td>
+</tr>
+<!--2 properties-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>31,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>36,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>86,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>22,7</td>
+</tr>
+<!--add 100% wide button-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>27,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>37,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>77,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>45,10</td>
+</tr>
+<!--Ensure button is resized with column-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>1,11</td>
+</tr>
+<tr>
+	<td>dragAndDrop</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>-100,0</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>button-100%-after-column-resize</td>
+</tr>
+<!--Add undefined wide label-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>45,21</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>30,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>109,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+	<td>71,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>button-and-label</td>
+</tr>
+<!--Reload to relayout (this shouldn't be necessary)-->
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>button-and-label-after-reload</td>
+</tr>
+<!--Align generated button right (should not make a difference)-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>17,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>48,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>39,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>53,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
+	<td>16,6</td>
+</tr>
+<!--Align generated label right (should make a difference)-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>17,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>48,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item3</td>
+	<td>39,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>53,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
+	<td>16,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>label-aligned-right</td>
+</tr>
+<!--Resize right aligned column with undef wide Label-->
+<tr>
+	<td>dragAndDrop</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[0]</td>
+	<td>-20,0</td>
+</tr>
+<tr>
+	<td>dragAndDrop</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[0]</td>
+	<td>20,0</td>
+</tr>
+<!--Should match after resizing back and forth-->
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>label-aligned-right</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableGeneratedRows.html b/tests/testbench/com/vaadin/tests/components/table/TableGeneratedRows.html
new file mode 100644
index 0000000000..35a600765f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableGeneratedRows.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+    <td>open</td>
+    <td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+    <td></td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+    <td>46,13</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+    <td>42,5</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item6</td>
+    <td>82,3</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+    <td>56,4</td>
+</tr>
+<tr>
+    <td>screenCapture</td>
+    <td></td>
+    <td>spanned</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+    <td>29,3</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+    <td>30,5</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+    <td>27,4</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+    <td>47,13</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item6</td>
+    <td>80,2</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+    <td>80,8</td>
+</tr>
+<tr>
+    <td>screenCapture</td>
+    <td></td>
+    <td>nospan</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+    <td>36,12</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+    <td>47,5</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item6</td>
+    <td>95,7</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+    <td>67,12</td>
+</tr>
+<tr>
+    <td>screenCapture</td>
+    <td></td>
+    <td>html</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableGeneratedStringColumns.html b/tests/testbench/com/vaadin/tests/components/table/TableGeneratedStringColumns.html
new file mode 100644
index 0000000000..4d5f4c2d17
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableGeneratedStringColumns.html
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<!--Hide log to allow screenshots to be consistent-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
+	<td>23,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>58,13</td>
+</tr>
+<!--2 properties-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>31,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>36,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>86,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>22,7</td>
+</tr>
+<!--add plain string-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>27,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>37,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>77,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item7</td>
+	<td>45,10</td>
+</tr>
+<!--Add html label-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>45,21</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>30,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>109,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item8</td>
+	<td>71,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>plain-html</td>
+</tr>
+<!--set width to 900px-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>39,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>38,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>39,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item10</td>
+	<td>19,9</td>
+</tr>
+<!--Align generated string right-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>17,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+	<td>48,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>39,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>53,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
+	<td>16,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>plain-right-html-left</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableHeaderShifting.java b/tests/testbench/com/vaadin/tests/components/table/TableHeaderShifting.java
new file mode 100644
index 0000000000..9dc641ddc4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableHeaderShifting.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+
+public class TableHeaderShifting extends TestBase {
+
+    // COLS = 200; still ok
+    // COLS = 210; header width begins shifting
+    // COLS = 230; header text disappears
+    static final int COLS = 210;
+
+    @Override
+    protected String getDescription() {
+        return "The table header starts shifting when adding lots of columns";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5022;
+    }
+
+    @Override
+    protected void setup() {
+        final Table t = new Table();
+        t.setSizeFull();
+        t.addContainerProperty("name", String.class, "NA");
+
+        for (Integer i = 0; i < COLS; i++) {
+            t.addContainerProperty(i, Integer.class, Integer.valueOf(0));
+        }
+        t.addItem("1").getItemProperty("name").setValue("Ares");
+        t.addItem("2").getItemProperty("name").setValue("Bob");
+        t.addItem("3").getItemProperty("name").setValue("Coral");
+        t.addItem("4").getItemProperty("name").setValue("David");
+        t.addItem("5").getItemProperty("name").setValue("Emma");
+
+        addComponent(t);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableHeightWhenHidingHeaders.html b/tests/testbench/com/vaadin/tests/components/table/TableHeightWhenHidingHeaders.html
new file mode 100644
index 0000000000..01b2c578f0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableHeightWhenHidingHeaders.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>Ticket4507</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Ticket4507</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableHeightWhenHidingHeaders?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableHeightWhenHidingHeaders::/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+	<td>5,9</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableHeightWhenHidingHeaders::/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+	<td>10,7</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableHeightWhenHidingHeaders.java b/tests/testbench/com/vaadin/tests/components/table/TableHeightWhenHidingHeaders.java
new file mode 100644
index 0000000000..d0b7631f10
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableHeightWhenHidingHeaders.java
@@ -0,0 +1,68 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+/**
+ * Setting table height and setting column header mode as hidden leaves the body
+ * height of the table as it would be with the headers visible and leaves an
+ * empty area below the body.
+ * 
+ */
+@SuppressWarnings("serial")
+public class TableHeightWhenHidingHeaders extends AbstractTestCase {
+
+    @Override
+    public void init() {
+        Window mainWindow = new Window();
+        setMainWindow(mainWindow);
+
+        final Table table = new Table("Test table");
+        table.addContainerProperty("Name", String.class, null, "Name", null,
+                null);
+        table.setItemCaptionPropertyId("Name");
+        table.setHeight("100px");
+        table.setImmediate(true);
+
+        table.addItem("1").getItemProperty("Name").setValue("Item 1");
+        table.addItem("2").getItemProperty("Name").setValue("Item 2");
+
+        CheckBox showHeaders = new CheckBox("Show headers",
+                new CheckBox.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        if (event.getButton().booleanValue()) {
+                            // table body height is now 77px, which together
+                            // with header makes 100px
+                            table.setColumnHeaderMode(Table.COLUMN_HEADER_MODE_EXPLICIT_DEFAULTS_ID);
+                        } else {
+                            table.setColumnHeaderMode(Table.COLUMN_HEADER_MODE_HIDDEN);
+                            // header disappears, but table body height stays at
+                            // 77px
+                            // and below the body is an empty area (same height
+                            // as header would
+                            // have)
+
+                        }
+                    }
+                });
+        showHeaders.setValue(true);
+        showHeaders.setImmediate(true);
+
+        mainWindow.addComponent(showHeaders);
+        mainWindow.addComponent(table);
+    }
+
+    @Override
+    protected String getDescription() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4507;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableItemDescriptionGeneratorTest.java b/tests/testbench/com/vaadin/tests/components/table/TableItemDescriptionGeneratorTest.java
new file mode 100644
index 0000000000..2f53b91107
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableItemDescriptionGeneratorTest.java
@@ -0,0 +1,75 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.AbstractSelect.ItemDescriptionGenerator;
+import com.vaadin.ui.TextField;
+
+public class TableItemDescriptionGeneratorTest extends TestBase {
+
+	private final String COLUMN1_PROPERTY_ID = "Text - Cell description";
+	private final String COLUMN2_PROPERTY_ID = "Text - Row description";
+	private final String COLUMN3_PROPERTY_ID = "Widget";
+	
+	@Override
+	protected void setup() {
+		   final Table table = new Table();
+	        table.setDebugId("table");
+	        table.setContainerDataSource(createContainer());        
+	        addComponent(table);
+	        	   	        
+	        table.setItemDescriptionGenerator(new ItemDescriptionGenerator() {				
+				public String generateDescription(Component source, Object itemId,
+						Object propertyId) {
+					if(propertyId == null){
+						return "Row description "+ itemId;
+					} else if(propertyId == COLUMN1_PROPERTY_ID) {
+						return "Cell description " + itemId +","+propertyId;
+					}									
+					return null;
+				}
+			});
+	        
+	        table.addGeneratedColumn(COLUMN3_PROPERTY_ID, new Table.ColumnGenerator() {
+				
+				public Component generateCell(Table source, Object itemId, Object columnId) {
+					TextField lbl = new TextField();
+					lbl.setDescription("Textfields own description");
+					return lbl;
+				}
+			});
+	}
+
+	@Override
+	protected String getDescription() {		
+		return "Cells and rows should have tooltips";
+	}
+
+	@Override
+	protected Integer getTicketNumber() {		
+		return 5414;
+	}
+	
+	private Container createContainer() {
+        IndexedContainer container = new IndexedContainer();
+        container.addContainerProperty(COLUMN1_PROPERTY_ID, String.class, "");
+        container.addContainerProperty(COLUMN2_PROPERTY_ID, String.class, "");
+       // container.addContainerProperty(COLUMN3_PROPERTY_ID, String.class, "");
+
+        for (int i = 0; i < 5; i++) {
+            Item item = container.addItem("item " + i);
+            item.getItemProperty(COLUMN1_PROPERTY_ID).setValue("first" + i);
+            item.getItemProperty(COLUMN2_PROPERTY_ID).setValue("middle" + i);
+           // item.getItemProperty(COLUMN3_PROPERTY_ID).setValue("last" + i);
+        }
+
+        return container;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableItemIcon.java b/tests/testbench/com/vaadin/tests/components/table/TableItemIcon.java
new file mode 100644
index 0000000000..b8a6733e83
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableItemIcon.java
@@ -0,0 +1,38 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.terminal.ClassResource;
+import com.vaadin.terminal.Resource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+
+public class TableItemIcon extends TestBase {
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2457;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The items in the Table should have icons in the first column (rowheader).";
+    }
+
+    @Override
+    protected void setup() {
+        Table table = new Table();
+        table.addContainerProperty("icon", Resource.class, null);
+        table.setItemIconPropertyId("icon");
+        table.setRowHeaderMode(Table.ROW_HEADER_MODE_ICON_ONLY);
+        getLayout().addComponent(table);
+
+        Item item = table.addItem("FI");
+        item.getItemProperty("icon").setValue(
+                new ClassResource("fi.gif", TableItemIcon.this));
+        item = table.addItem("SE");
+        item.getItemProperty("icon").setValue(
+                new ClassResource("se.gif", TableItemIcon.this));
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableLastRowMissing.html b/tests/testbench/com/vaadin/tests/components/table/TableLastRowMissing.html
new file mode 100644
index 0000000000..ca8ee6d6a4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableLastRowMissing.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TableLastRowMissing</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TableLastRowMissing</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableLastRowMissing</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableLastRowMissing.java b/tests/testbench/com/vaadin/tests/components/table/TableLastRowMissing.java
new file mode 100644
index 0000000000..4e4a223e23
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableLastRowMissing.java
@@ -0,0 +1,35 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+
+public class TableLastRowMissing extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The table below should display 3 rows. Each with a textfield containing the row number.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2933;
+    }
+
+    @Override
+    protected void setup() {
+        Table t = new Table();
+        addComponent(t);
+
+        t.addContainerProperty("Name", TextField.class, null);
+
+        for (int i = 0; i < 3; i++) {
+            Item item = t.addItem(i);
+            TextField tf = new TextField("", String.valueOf(i + 1));
+            tf.setColumns(10);
+            item.getItemProperty("Name").setValue(tf);
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableModifcationsWhenScrolledRight.java b/tests/testbench/com/vaadin/tests/components/table/TableModifcationsWhenScrolledRight.java
new file mode 100644
index 0000000000..7d29b8650e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableModifcationsWhenScrolledRight.java
@@ -0,0 +1,51 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Table;
+
+public class TableModifcationsWhenScrolledRight extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Table t = new Table();
+        Button btn = new Button("Add row");
+        Integer row = 1;
+
+        t.setPageLength(5);
+        t.setWidth("400px");
+        t.addContainerProperty("name", String.class, "NA");
+        t.setColumnCollapsingAllowed(true);
+
+        for (Integer col = 0; col < 10; col++) {
+            t.addContainerProperty(col, Integer.class, col);
+            t.setColumnWidth(col, 50);
+        }
+        t.addItem(row).getItemProperty("name").setValue("Row" + row);
+
+        btn.addListener(new ClickListener() {
+            Integer row = 2;
+
+            public void buttonClick(ClickEvent event) {
+                t.addItem(row).getItemProperty("name").setValue("Row" + row);
+                row++;
+            }
+        });
+
+        addComponent(t);
+        addComponent(btn);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Scroll right and then click \"Add row\". The table will scroll back left and the headers should also.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5382;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableModificationsWhenScrolledRight.html b/tests/testbench/com/vaadin/tests/components/table/TableModificationsWhenScrolledRight.html
new file mode 100644
index 0000000000..b225b30726
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableModificationsWhenScrolledRight.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableModifcationsWhenScrolledRight?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>scrollLeft</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableModifcationsWhenScrolledRight::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
+	<td>292</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>scrolled-right</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableModifcationsWhenScrolledRight::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>column-added-when-scrolled-right</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableMultiSelectMouse.html b/tests/testbench/com/vaadin/tests/components/table/TableMultiSelectMouse.html
new file mode 100644
index 0000000000..8d7c0d98b0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableMultiSelectMouse.html
@@ -0,0 +1,361 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<!--Multi select-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>6,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>73,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>33,13</td>
+</tr>
+<!--Null select allowed-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>39,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>75,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>42,2</td>
+</tr>
+<!--ValueChangeListener-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>14,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>75,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>64,6</td>
+</tr>
+<!--Clear log to ensure numbers matches with the later case-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
+	<td>29,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item1</td>
+	<td>40,7</td>
+</tr>
+<!--Start clicking-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[3]/domChild[0]</td>
+	<td>16,8</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>0. ValueChangeEvent, new value: '[Item 3]'</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[8]/domChild[2]/domChild[0]</td>
+	<td>26,10:shift</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>1. ValueChangeEvent, new value: '[Item 3, Item 4, Item 5, Item 6, Item 7, Item 8, Item 9]'</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>selected-2-9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>31,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>2. ValueChangeEvent, new value: '[Item 1]'</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[2]/domChild[0]</td>
+	<td>27,10:ctrl</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. ValueChangeEvent, new value: '[Item 1, Item 3]'</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[2]/domChild[0]</td>
+	<td>37,10:ctrl</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>4. ValueChangeEvent, new value: '[Item 1, Item 3, Item 5]'</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>selected-135</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[3]/domChild[0]</td>
+	<td>22,6:shift</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>5. ValueChangeEvent, new value: '[Item 10, Item 5, Item 6, Item 7, Item 8, Item 9]'</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>selected-5-10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[6]/domChild[2]/domChild[0]</td>
+	<td>30,7</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>6. ValueChangeEvent, new value: '[Item 7]'</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[2]/domChild[0]</td>
+	<td>66,10:ctrl</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>7. ValueChangeEvent, new value: '[Item 4, Item 7]'</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[2]/domChild[0]</td>
+	<td>62,5:shift</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>8. ValueChangeEvent, new value: '[Item 2, Item 3, Item 4]'</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[4]/domChild[0]</td>
+	<td>62,8:shift</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>9. ValueChangeEvent, new value: '[Item 10, Item 4, Item 5, Item 6, Item 7, Item 8, Item 9]'</td>
+</tr>
+<!--The same thing with nullselectallowed == false-->
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<!--Multi select-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>6,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>73,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>33,13</td>
+</tr>
+<!--ValueChangeListener-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>14,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>75,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>64,6</td>
+</tr>
+<!--Clear log to ensure numbers matches with the later case-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
+	<td>29,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item1</td>
+	<td>40,7</td>
+</tr>
+<!--Start clicking-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[3]/domChild[0]</td>
+	<td>16,8</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>0. ValueChangeEvent, new value: '[Item 3]'</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[8]/domChild[2]/domChild[0]</td>
+	<td>26,10:shift</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>1. ValueChangeEvent, new value: '[Item 3, Item 4, Item 5, Item 6, Item 7, Item 8, Item 9]'</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>selected-2-9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>31,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>2. ValueChangeEvent, new value: '[Item 1]'</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[2]/domChild[0]</td>
+	<td>27,10:ctrl</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. ValueChangeEvent, new value: '[Item 1, Item 3]'</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[2]/domChild[0]</td>
+	<td>37,10:ctrl</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>4. ValueChangeEvent, new value: '[Item 1, Item 3, Item 5]'</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>selected-135</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[3]/domChild[0]</td>
+	<td>22,6:shift</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>5. ValueChangeEvent, new value: '[Item 10, Item 5, Item 6, Item 7, Item 8, Item 9]'</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>selected-5-10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[6]/domChild[2]/domChild[0]</td>
+	<td>30,7</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>6. ValueChangeEvent, new value: '[Item 7]'</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[2]/domChild[0]</td>
+	<td>66,10:ctrl</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>7. ValueChangeEvent, new value: '[Item 4, Item 7]'</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[2]/domChild[0]</td>
+	<td>62,5:shift</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>8. ValueChangeEvent, new value: '[Item 2, Item 3, Item 4]'</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[4]/domChild[0]</td>
+	<td>62,8:shift</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>9. ValueChangeEvent, new value: '[Item 10, Item 4, Item 5, Item 6, Item 7, Item 8, Item 9]'</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableMultiSelectSimple.html b/tests/testbench/com/vaadin/tests/components/table/TableMultiSelectSimple.html
new file mode 100644
index 0000000000..dcf88620ca
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableMultiSelectSimple.html
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableMultiSelectSimple?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableMultiSelectSimple::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>28,17</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableMultiSelectSimple::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+	<td>48,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableMultiSelectSimple::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[0]/domChild[0]</td>
+	<td>48,9</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>0-2-4Selected</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableMultiSelectSimple::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[0]/domChild[0]</td>
+	<td>38,18</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableMultiSelectSimple::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+	<td>32,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableMultiSelectSimple::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>35,13</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>NoSelection</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableMultiSelectSimple.java b/tests/testbench/com/vaadin/tests/components/table/TableMultiSelectSimple.java
new file mode 100644
index 0000000000..76415844be
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableMultiSelectSimple.java
@@ -0,0 +1,62 @@
+package com.vaadin.tests.components.table;
+
+import java.util.Set;
+import java.util.TreeSet;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.AbstractSelect.MultiSelectMode;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Table;
+
+public class TableMultiSelectSimple extends TestBase {
+    Log log = new Log(3);
+
+    @Override
+    protected void setup() {
+        log.setDebugId("eventlog");
+
+        Table t = new Table();
+
+        t.setSelectable(true);
+        t.setNullSelectionAllowed(true);
+        t.setMultiSelect(true);
+        t.setMultiSelectMode(MultiSelectMode.SIMPLE);
+        t.setImmediate(true);
+        t.addListener(new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                TreeSet sorted = new TreeSet((Set) event.getProperty()
+                        .getValue());
+                log.log("Selected value: " + sorted);
+            }
+        });
+
+        t.addContainerProperty("string", String.class, null);
+        t.addContainerProperty("button", Component.class, null);
+
+        for (int i = 0; i < 10; i++) {
+            t.addItem(i);
+            t.getContainerProperty(i, "string").setValue(i);
+            t.getContainerProperty(i, "button")
+                    .setValue(new Button("Click me"));
+        }
+
+        addComponent(log);
+        addComponent(t);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tests that MultiSelectMode.SIMPLE is working properly";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5744;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TablePageLengthCalculation.java b/tests/testbench/com/vaadin/tests/components/table/TablePageLengthCalculation.java
new file mode 100644
index 0000000000..5847450f89
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TablePageLengthCalculation.java
@@ -0,0 +1,50 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+public class TablePageLengthCalculation extends TestBase {
+
+    @Override
+    public void setup() {
+
+        Window window = new Window();
+        window.setCaption("usermanagement");
+        window.center();
+        window.setWidth(40, Window.UNITS_PERCENTAGE);
+        window.setHeight(40, Window.UNITS_PERCENTAGE);
+        window.setModal(true);
+        getMainWindow().addWindow(window);
+
+        TabSheet tab = new TabSheet();
+        tab.setSizeFull();
+
+        tab.addTab(new TableView(), "users", null);
+        tab.addTab(new TableView(), "groups", null);
+
+        window.setContent(tab);
+    }
+
+    public class TableView extends Table {
+        private static final long serialVersionUID = 1L;
+
+        public TableView() {
+            setSizeFull();
+
+            addContainerProperty("name", String.class, "name");
+            addContainerProperty("right", Boolean.class, "right");
+        }
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Resize the window and change the selected tab. In Opera 10.50 the updated pagelength will be calculated as a float and not an integer, causing an \"Internal Error\"";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4374;
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/table/TablePageLengthUpdate.html b/tests/testbench/com/vaadin/tests/components/table/TablePageLengthUpdate.html
new file mode 100644
index 0000000000..bc438eaf1b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TablePageLengthUpdate.html
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TablePageLengthUpdate</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TablePageLengthUpdate</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TablePageLengthUpdate</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTablePageLengthUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentstableTablePageLengthUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
+	<td>200px</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTablePageLengthUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>exact:Pagelength: 9</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTablePageLengthUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentstableTablePageLengthUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
+	<td>260px</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTablePageLengthUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>exact:Pagelength: 12</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentstableTablePageLengthUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
+	<td>50px</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTablePageLengthUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>exact:Pagelength: 2</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TablePageLengthUpdate.java b/tests/testbench/com/vaadin/tests/components/table/TablePageLengthUpdate.java
new file mode 100644
index 0000000000..71dc987e56
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TablePageLengthUpdate.java
@@ -0,0 +1,76 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.util.MethodProperty;
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+
+public class TablePageLengthUpdate extends TestBase {
+
+    private Label pageLengthLabel;
+    private Table table;
+
+    @Override
+    protected String getDescription() {
+        return "When the height is set for a table, the pagelength should be updated according to what is actually displayed. The table pagelength is initially 100 and the height is 100px. After clicking update the pageLength label should display the correct value (?).";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 1623;
+    }
+
+    @Override
+    protected void setup() {
+        table = new Table();
+        table.setWidth("400px");
+        table.setHeight("100px");
+        table.setPageLength(100);
+        table.addContainerProperty("p1", String.class, null);
+        table.addContainerProperty("p2", String.class, null);
+        table.addContainerProperty("p3", String.class, null);
+
+        for (int i = 0; i < 10; i++) {
+            table.addItem(new Object[] { "a" + i, "b" + i, "c" + i }, "" + i);
+        }
+
+        addComponent(table);
+
+        pageLengthLabel = new Label("");
+        updatePageLengthLabel();
+        addComponent(pageLengthLabel);
+
+        Button updateButton = new Button("Update pageLength",
+                new ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        updatePageLengthLabel();
+                    }
+                });
+        addComponent(updateButton);
+
+        TextField tableHeight = new TextField("Table height",
+                new MethodProperty<String>(this, "tableHeight"));
+        tableHeight.setImmediate(true);
+        addComponent(tableHeight);
+    }
+
+    public String getTableHeight() {
+        return "" + (int) table.getHeight()
+                + Sizeable.UNIT_SYMBOLS[table.getHeightUnits()];
+    }
+
+    public void setTableHeight(String height) {
+        table.setHeight(height);
+    }
+
+    protected void updatePageLengthLabel() {
+        pageLengthLabel.setValue("Pagelength: " + table.getPageLength());
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableRemoveActionHandlers.html b/tests/testbench/com/vaadin/tests/components/table/TableRemoveActionHandlers.html
new file mode 100644
index 0000000000..a363f6980e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableRemoveActionHandlers.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<!--5 items-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>25,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>50,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>86,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item5</td>
+	<td>53,6</td>
+</tr>
+<!--Item 1 context menu-->
+<tr>
+	<td>contextmenu</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td></td>
+</tr>
+<!--Body context menu-->
+<tr>
+	<td>contextmenu</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
+	<td></td>
+</tr>
+<!--Add context menu-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>21,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>61,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>68,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item5</td>
+	<td>69,12</td>
+</tr>
+<!--Item 1 context menu-->
+<tr>
+	<td>contextmenu</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertVisible</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
+	<td>Edit Item 1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
+	<td>52,12</td>
+</tr>
+<!--Body context menu-->
+<tr>
+	<td>contextmenu</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertVisible</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
+	<td>New...</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
+	<td>35,12</td>
+</tr>
+<!--Remove context menu-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>20,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>67,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>71,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>16,3</td>
+</tr>
+<!--Item 1 context menu-->
+<tr>
+	<td>contextmenu</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>//div[@id='PID_VAADIN_CM']</td>
+	<td></td>
+</tr>
+<!--Body context menu-->
+<tr>
+	<td>contextmenu</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>//div[@id='PID_VAADIN_CM']</td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableRowHeight.html b/tests/testbench/com/vaadin/tests/components/table/TableRowHeight.html
new file mode 100644
index 0000000000..a28df6329f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableRowHeight.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TableRowHeight</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TableRowHeight</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableRowHeight</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableRowHeight.java b/tests/testbench/com/vaadin/tests/components/table/TableRowHeight.java
new file mode 100644
index 0000000000..b3864ae0e4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableRowHeight.java
@@ -0,0 +1,122 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.ColumnGenerator;
+
+public class TableRowHeight extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "This test case contains 5 tables in various configurations. All tables have a pageLength of "
+                + PAGELENGTH
+                + " and thus should show as many rows without any scrollbars (height is undefined for all tables).";
+
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2691;
+    }
+
+    private static final int PAGELENGTH = 2;
+
+    @Override
+    public void setup() {
+        Table table1 = initTable(PAGELENGTH, false, false, false);
+        addComponent(new Label("Plain table"));
+        addComponent(table1);
+
+        Table table2 = initTable(PAGELENGTH, true, false, false);
+        addComponent(new Label("Table with label component in generated column"));
+        addComponent(table2);
+
+        Table table3 = initTable(PAGELENGTH, false, true, false);
+        addComponent(new Label(
+                "Table with layout component in generated column"));
+        addComponent(table3);
+
+        Table table4 = initTable(PAGELENGTH, true, true, false);
+        addComponent(new Label(
+                "Table with both label and layout component in generated column"));
+        addComponent(table4);
+
+        Table table5 = initTable(PAGELENGTH, false, false, true);
+        addComponent(new Label("Table with label horizontal scrollbar"));
+        addComponent(table5);
+
+    }
+
+    private Table initTable(int pageLength, boolean addLabelColGen,
+            boolean addLayoutColGen, boolean fixedColWidths) {
+        Table table = new Table();
+        table.setWidth("100%");
+        table.setPageLength(pageLength);
+
+        IndexedContainer idx = new IndexedContainer();
+        idx.addContainerProperty("firstname", String.class, null);
+        idx.addContainerProperty("lastname", String.class, null);
+        Item i = idx.addItem(1);
+        i.getItemProperty("firstname").setValue("John");
+        i.getItemProperty("lastname").setValue("Johnson");
+        i = idx.addItem(2);
+        i.getItemProperty("firstname").setValue("Jane");
+        i.getItemProperty("lastname").setValue("Janeine");
+
+        table.setContainerDataSource(idx);
+
+        table.setColumnHeader("firstname", "FirstName");
+        table.setColumnHeader("lastname", "LastName");
+        if (addLabelColGen) {
+            table.addGeneratedColumn("name1", new LabelColumnGenerator());
+        }
+        if (addLayoutColGen) {
+            table.addGeneratedColumn("name2", new LayoutColumnGenerator());
+        }
+        if (fixedColWidths) {
+            table.setWidth("400px");
+            table.setColumnWidth("firstname", 200);
+            table.setColumnWidth("lastname", 300);
+        }
+
+        return table;
+    }
+
+    public class LabelColumnGenerator implements ColumnGenerator {
+
+        public Component generateCell(Table source, Object itemId,
+                Object columnId) {
+            Item item = source.getItem(itemId);
+            String firstname = (String) item.getItemProperty("firstname")
+                    .getValue();
+            String lastname = (String) item.getItemProperty("lastname")
+                    .getValue();
+            Label label = new Label(firstname + " " + lastname);
+            return label;
+        }
+
+    }
+
+    public class LayoutColumnGenerator implements ColumnGenerator {
+
+        public Component generateCell(Table source, Object itemId,
+                Object columnId) {
+            Item item = source.getItem(itemId);
+            GridLayout layout = new GridLayout(1, 2);
+            String firstname = (String) item.getItemProperty("firstname")
+                    .getValue();
+            String lastname = (String) item.getItemProperty("lastname")
+                    .getValue();
+            layout.addComponent(new Label(firstname), 0, 0);
+            layout.addComponent(new Label(lastname), 0, 1);
+            return layout;
+        }
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableRowHeight2.html b/tests/testbench/com/vaadin/tests/components/table/TableRowHeight2.html
new file mode 100644
index 0000000000..a440ff84fb
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableRowHeight2.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TableRowHeight2</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TableRowHeight2</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableRowHeight2</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>1</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableRowHeight2::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VButton[1]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableRowHeight2::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VButton[1]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>1</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableRowHeight2.java b/tests/testbench/com/vaadin/tests/components/table/TableRowHeight2.java
new file mode 100644
index 0000000000..0011fdca18
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableRowHeight2.java
@@ -0,0 +1,58 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.themes.BaseTheme;
+
+public class TableRowHeight2 extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The table contains 2 rows, which both should be shown completely as the table height is undefined.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2747;
+    }
+
+    @Override
+    protected void setup() {
+        setTheme("tests-tickets");
+        HorizontalLayout vl = new HorizontalLayout();
+        vl.setSizeFull();
+
+        Table table = new Table();
+
+        int COL_TITLE_W = 200;
+        int COL_TEST_W = 98;
+
+        table.setPageLength(0);
+        table.setColumnWidth("title", COL_TITLE_W);
+        table.setColumnWidth("test", COL_TEST_W);
+        table.addContainerProperty("title", Button.class, "");
+        table.addContainerProperty("test", Button.class, "");
+        for (int i = 0; i < 2; i++) {
+            Item item = table.addItem(new Object());
+
+            Button b = new Button();
+            b.setWidth("100%");
+            b.setStyleName(BaseTheme.BUTTON_LINK);
+            b.addStyleName("nowraplink");
+
+            b.setCaption("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ullamcorper, elit quis elementum iaculis, dui est rutrum risus, at cursus sem leo eget arcu. Proin vel eros ut tortor luctus pretium. Nulla facilisi. Donec in dui. Proin ac diam vitae massa tempus faucibus. Fusce eu risus. Nunc ac risus. Cras libero.");
+
+            item.getItemProperty("title").setValue(b);
+
+            Button c = new Button("test");
+            item.getItemProperty("test").setValue(c);
+        }
+
+        vl.addComponent(table);
+
+        addComponent(vl);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableRowHeight3.html b/tests/testbench/com/vaadin/tests/components/table/TableRowHeight3.html
new file mode 100644
index 0000000000..2aa90085e4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableRowHeight3.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TableRowHeight3</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TableRowHeight3</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableRowHeight3</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableRowHeight3.java b/tests/testbench/com/vaadin/tests/components/table/TableRowHeight3.java
new file mode 100644
index 0000000000..c31b87f9da
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableRowHeight3.java
@@ -0,0 +1,61 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.themes.BaseTheme;
+
+public class TableRowHeight3 extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "All rows should be visible and the table height should match the height of the rows (no vertical scrollbar)";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2747;
+    }
+
+    @Override
+    protected void setup() {
+        setTheme("tests-tickets");
+        HorizontalLayout vl = new HorizontalLayout();
+        vl.setSizeFull();
+
+        Table table = new Table();
+        table.setWidth("320px");
+        table.setPageLength(0);
+        table.setColumnWidth("title", 200);
+        table.setColumnWidth("test", 98);
+        table.addContainerProperty("title", Button.class, "");
+        table.addContainerProperty("test", Button.class, "");
+        for (int i = 0; i < 6; i++) {
+            Item item = table.addItem(new Object());
+
+            Button b = new Button();
+            b.setWidth("100%");
+            b.setStyleName(BaseTheme.BUTTON_LINK);
+            b.addStyleName("nowraplink");
+            if (i < 2) {
+                b.setCaption("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ullamcorper, elit quis elementum iaculis, dui est rutrum risus, at cursus sem leo eget arcu. Proin vel eros ut tortor luctus pretium. Nulla facilisi. Donec in dui. Proin ac diam vitae massa tempus faucibus. Fusce eu risus. Nunc ac risus. Cras libero.");
+            } else if (2 <= i && i < 4) {
+                b.setCaption("One line");
+            } else {
+                b.setCaption("This button caption should use up two lines");
+            }
+            item.getItemProperty("title").setValue(b);
+
+            Button c = new Button("test");
+            item.getItemProperty("test").setValue(c);
+        }
+
+        vl.addComponent(table);
+
+        addComponent(vl);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableScrollOnFocus.html b/tests/testbench/com/vaadin/tests/components/table/TableScrollOnFocus.html
new file mode 100644
index 0000000000..1a91211040
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableScrollOnFocus.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableScrollOnFocus?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>scroll</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableScrollOnFocus::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]</td>
+	<td>3864</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableScrollOnFocus::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
+	<td>391,141</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableScrollOnFocus::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]</td>
+	<td>3234</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>visible-185-199</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableScrollOnFocus.java b/tests/testbench/com/vaadin/tests/components/table/TableScrollOnFocus.java
new file mode 100644
index 0000000000..05e101a5f9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableScrollOnFocus.java
@@ -0,0 +1,49 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Table;
+
+public class TableScrollOnFocus extends TestBase {
+    @Override
+    protected void setup() {
+        final Table table = new Table();
+        final CheckBox chkSelectable = new CheckBox("selectable");
+
+        chkSelectable.setImmediate(true);
+        chkSelectable.addListener(new ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                table.setSelectable(chkSelectable.booleanValue());
+            }
+        });
+
+        table.addContainerProperty("row #", String.class, "-");
+        table.setColumnWidth("row #", 150);
+        for (int i = 1; i < 200; i++) {
+            table.addItem(new String[] { "" + i }, null);
+        }
+        table.setSortDisabled(true);
+
+        chkSelectable.setValue(true);
+
+        addComponent(chkSelectable);
+        addComponent(table);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The table scrolls up 2 pages after loosing and regaining the focus!</b><p>"
+                + "Drag scrollbar to top then to the bottom of the table.<br>"
+                + "Click somewhere beside the table to take away the focus,<br>"
+                + "then click back on the table (header or scrollbar) to give back the focus<br>"
+                + "(Pressing Tab and Shift-Tab does the same job).<p>"
+                + "If the table is set to non-selectable-mode, no self-scrolling occurs.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6774;
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableScrolling.html b/tests/testbench/com/vaadin/tests/components/table/TableScrolling.html
new file mode 100644
index 0000000000..51fa844412
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableScrolling.html
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<!--Hide event log-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
+	<td>37,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>35,13</td>
+</tr>
+<!--1000 items-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>28,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>63,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>63,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item13</td>
+	<td>27,5</td>
+</tr>
+<!--600px width-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>31,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>54,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>12,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item7</td>
+	<td>25,10</td>
+</tr>
+<!--scroll right and down-->
+<tr>
+	<td>scroll</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
+	<td>13823</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>scrollLeft</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
+	<td>369</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>scrolled-down-right</td>
+</tr>
+<tr>
+	<td>scrollLeft</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
+	<td>0</td>
+</tr>
+<tr>
+	<td>scroll</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]</td>
+	<td>0</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>scrolled-up-left</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableScrollsOnSelection.html b/tests/testbench/com/vaadin/tests/components/table/TableScrollsOnSelection.html
new file mode 100644
index 0000000000..dff3dcbc48
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableScrollsOnSelection.html
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableScrollsOnSelection?restartApplication</td>
+	<td></td>
+</tr>
+<!--Scroll to the end of the page (show last items in Table)-->
+<tr>
+	<td>scroll</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableScrollsOnSelection::</td>
+	<td>2000</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<!--Select the last item (79)-->
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstableTableScrollsOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[79]/domChild[0]/domChild[0]</td>
+    <td>38,-892</td>
+</tr>
+<!--Ensure the page is not scrolled to the beginning-->
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>scrolled-down-and-selected-79</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableScrollsOnSelection.java b/tests/testbench/com/vaadin/tests/components/table/TableScrollsOnSelection.java
new file mode 100644
index 0000000000..c76fe05d47
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableScrollsOnSelection.java
@@ -0,0 +1,36 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+
+public class TableScrollsOnSelection extends TestBase {
+
+    @Override
+    protected void setup() {
+        getMainWindow().getContent().setSizeUndefined();
+
+        IndexedContainer cont = new IndexedContainer();
+        cont.addContainerProperty("number", String.class, null);
+        for (int i = 0; i < 80; i++) {
+            Item item = cont.addItem(i);
+            item.getItemProperty("number").setValue(i + "");
+        }
+        Table table = new Table();
+        table.setPageLength(0);
+        table.setContainerDataSource(cont);
+        table.setSelectable(true);
+        addComponent(table);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The scroll position should not change when an item is selected in a Table that is higher than the view.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6197;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableSelectPagingOff.java b/tests/testbench/com/vaadin/tests/components/table/TableSelectPagingOff.java
new file mode 100644
index 0000000000..4d97a1a669
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableSelectPagingOff.java
@@ -0,0 +1,69 @@
+package com.vaadin.tests.components.table;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+
+public class TableSelectPagingOff extends TestBase {
+
+    @Override
+    protected void setup() {
+        Table table = new Table();
+        BeanItemContainer<MyBean> dataSource = new BeanItemContainer<MyBean>(
+                getBeans());
+        table.setContainerDataSource(dataSource);
+        table.setSelectable(true);
+        table.setPageLength(0);
+        addComponent(table);
+    }
+
+    private Collection<MyBean> getBeans() {
+        return Arrays.asList(new MyBean("a", "description a"), new MyBean("b",
+                "description b"), new MyBean("c", "description c"), new MyBean(
+                "d", "description d"));
+    }
+
+    public class MyBean {
+
+        private String name;
+        private String description;
+
+        public MyBean() {
+        }
+
+        public MyBean(String name, String description) {
+            this.name = name;
+            this.description = description;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getDescription() {
+            return description;
+        }
+
+        public void setDescription(String description) {
+            this.description = description;
+        }
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "No flickering (scrollbars) should happen on select";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5746;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableShouldNotEatValueChanges.html b/tests/testbench/com/vaadin/tests/components/table/TableShouldNotEatValueChanges.html
new file mode 100644
index 0000000000..ede2ea70fc
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableShouldNotEatValueChanges.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TableShouldNotEatValueChanges</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TableShouldNotEatValueChanges</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableShouldNotEatValueChanges?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>139,5</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>fooo</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>18,11:shift</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::Root/VNotification[0]</td>
+	<td>TF Value on the server:fooo</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[2]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>74,15</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>74,15</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>baar</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>12,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableShouldNotEatValueChanges::Root/VNotification[0]/HTML[0]/domChild[0]</td>
+	<td>TF Value on the server:baar</td>
+</tr>
+<tr>
+	<td>closeNotification</td>
+	<td>//body/div[2]</td>
+	<td>0,0</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableShouldNotEatValueChanges.java b/tests/testbench/com/vaadin/tests/components/table/TableShouldNotEatValueChanges.java
new file mode 100644
index 0000000000..21e26b64b8
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableShouldNotEatValueChanges.java
@@ -0,0 +1,62 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.event.ItemClickEvent;
+import com.vaadin.event.ItemClickEvent.ItemClickListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.TableDragMode;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window.Notification;
+
+public class TableShouldNotEatValueChanges extends TestBase {
+
+    @Override
+    protected void setup() {
+        Table t = new Table("Table with multiselection and item click listener");
+        t.focus();
+        t.setPageLength(3);
+        t.addContainerProperty("foo", String.class, "bar");
+        t.addItem();
+        t.setSelectable(true);
+        t.setMultiSelect(true);
+        t.setTabIndex(4);
+        // t.setSelectable(true);
+
+        final TextField tf = new TextField();
+        tf.setTabIndex(1);
+        ItemClickListener l = new ItemClickListener() {
+
+            public void itemClick(ItemClickEvent event) {
+                tf.getWindow().showNotification(
+                        "TF Value on the server:" + tf.getValue(),
+                        Notification.TYPE_WARNING_MESSAGE);
+
+            }
+        };
+        t.addListener(l);
+        addComponent(tf);
+        addComponent(t);
+        t = new Table("Table with drag and drop and item click listener");
+        t.setDragMode(TableDragMode.ROW);
+        t.setPageLength(3);
+        t.addContainerProperty("foo", String.class, "bar");
+        t.addItem();
+        t.setSelectable(true);
+        t.setMultiSelect(true);
+
+        t.addListener(l);
+        addComponent(t);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "When selecting something from table or clicking on item, table should never eat value change from other components.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5429;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableSingleSelect.html b/tests/testbench/com/vaadin/tests/components/table/TableSingleSelect.html
new file mode 100644
index 0000000000..c029e2889b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableSingleSelect.html
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableSingleSelect?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableSingleSelect::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>27,14</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableSingleSelect::PID_Seventlog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>1. Selected value: 0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableSingleSelect::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>28,17</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableSingleSelect::PID_Seventlog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>2. Selected value: 1</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>selected-1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableSingleSelect::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>33,15</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableSingleSelect::PID_Seventlog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. Selected value: null</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableSingleSelect::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>26,17</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableSingleSelect::PID_Seventlog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>4. Selected value: 1</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableSingleSelect.java b/tests/testbench/com/vaadin/tests/components/table/TableSingleSelect.java
new file mode 100644
index 0000000000..edde284848
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableSingleSelect.java
@@ -0,0 +1,54 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Table;
+
+public class TableSingleSelect extends TestBase {
+    Log log = new Log(3);
+
+    @Override
+    protected void setup() {
+        log.setDebugId("eventlog");
+
+        Table t = new Table();
+
+        t.setSelectable(true);
+        t.setNullSelectionAllowed(true);
+        t.setImmediate(true);
+        t.addListener(new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                log.log("Selected value: " + event.getProperty().getValue());
+            }
+        });
+
+        t.addContainerProperty("string", String.class, null);
+        t.addContainerProperty("button", Component.class, null);
+
+        for (int i = 0; i < 10; i++) {
+            t.addItem(i);
+            t.getContainerProperty(i, "string").setValue(i);
+            t.getContainerProperty(i, "button")
+                    .setValue(new Button("Click me"));
+        }
+
+        addComponent(log);
+        addComponent(t);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Table in single-select mode with null selection allowed. Tests that single select does not select multiple items, selects and deselects properly.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5431;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableSorting.java b/tests/testbench/com/vaadin/tests/components/table/TableSorting.java
new file mode 100644
index 0000000000..4cbb1934e4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableSorting.java
@@ -0,0 +1,67 @@
+package com.vaadin.tests.components.table;
+
+import java.io.Serializable;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+
+public class TableSorting extends TestBase {
+
+    @Override
+    public void setup() {
+        final Label showID = new Label("");
+        final Table testTable = new Table();
+
+        BeanItemContainer<TestItem> cont = new BeanItemContainer<TestItem>(
+                TestItem.class);
+
+        for (int i = 0; i < 20; i++) {
+            TestItem ti = new TestItem();
+            ti.setTestName("Name_" + i);
+            cont.addBean(ti);
+        }
+        testTable.setContainerDataSource(cont);
+        testTable.setImmediate(true);
+        testTable.setSelectable(true);
+        testTable.setMultiSelect(false);
+        testTable.setVisibleColumns(new Object[] { "testName" });
+
+        // Handle selection change.
+        testTable.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                System.out.println("ValueChanged: "
+                        + testTable.getValue().toString());
+                showID.setCaption("ID: " + testTable.getValue().toString());
+            }
+        });
+        addComponent(testTable);
+        addComponent(showID);
+    }
+
+    public class TestItem implements Serializable {
+        private static final long serialVersionUID = -745849615488792221L;
+        private String testName;
+
+        public String getTestName() {
+            return testName;
+        }
+
+        public void setTestName(String testName) {
+            this.testName = testName;
+        }
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Click the header to sort the table, then click on \"Name_10\". This should show ID: com.vaadin.tests.components.table.TableSorting$TestItem@<hex id> below the table";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4537;
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableToggleVisibility.html b/tests/testbench/com/vaadin/tests/components/table/TableToggleVisibility.html
new file mode 100644
index 0000000000..e9c57203c0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableToggleVisibility.html
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableToggleVisibility?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>trucks-trailers-drivers</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>drivers</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>trailers</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>trailers-drivers</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableToggleVisibility::/VVerticalLayout[0]/ChildComponentContainer[0]/VSplitPanelHorizontal[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>trucks-trailers-drivers-2</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableToggleVisibility.java b/tests/testbench/com/vaadin/tests/components/table/TableToggleVisibility.java
new file mode 100644
index 0000000000..5c456ab230
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableToggleVisibility.java
@@ -0,0 +1,169 @@
+package com.vaadin.tests.components.table;
+
+import java.text.DecimalFormat;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class TableToggleVisibility extends AbstractTestCase {
+
+    private static final int[] LENGTHS = new int[] { 20, 22, 10 };
+
+    @Override
+    public void init() {
+
+        DecimalFormat format = new DecimalFormat("000");
+        Table[] tables = new Table[3];
+        Button[] buttons = new Button[3];
+
+        VerticalLayout leftComponent = new VerticalLayout();
+        leftComponent.setMargin(true);
+        leftComponent.setSpacing(true);
+
+        // Toolbar with buttons to hide or show lists
+
+        HorizontalLayout toolBar = new HorizontalLayout();
+        toolBar.setSpacing(true);
+        toolBar.setMargin(true);
+
+        leftComponent.addComponent(toolBar);
+        leftComponent.setExpandRatio(toolBar, 0.0f);
+
+        // List of trucks -----------------------
+
+        tables[0] = new Table("Trucks");
+        tables[0].addContainerProperty("Brand", String.class, null);
+        tables[0].addContainerProperty("Model", String.class, null);
+        tables[0].addContainerProperty("License Plate", String.class, null);
+
+        for (int i = 1; i < LENGTHS[0]; i++) {
+            tables[0].addItem(
+                    new Object[] { "MAN", "XYZ", "1-ABC-" + format.format(i) },
+                    Integer.valueOf(i));
+        }
+        tables[0].setPageLength(LENGTHS[0]);
+
+        tables[0].setWidth("100%");
+        tables[0].setHeight("100%");
+        tables[0].setSelectable(true);
+
+        leftComponent.addComponent(tables[0]);
+        leftComponent.setExpandRatio(tables[0], 1.0f);
+
+        // List of trailers ----------------------
+
+        tables[1] = new Table("Trailers");
+        tables[1].addContainerProperty("Type", String.class, null);
+        tables[1].addContainerProperty("License Plate", String.class, null);
+        for (int i = 1; i < LENGTHS[1]; i++) {
+            tables[1].addItem(
+                    new Object[] { "Cooler", "1-QQQ-" + format.format(i) },
+                    Integer.valueOf(i));
+        }
+        tables[1].setPageLength(LENGTHS[1]);
+
+        tables[1].setWidth("100%");
+        tables[1].setHeight("100%");
+        tables[1].setSelectable(true);
+
+        leftComponent.addComponent(tables[1]);
+        leftComponent.setExpandRatio(tables[1], 1.0f);
+
+        // List of drivers ------------------------
+
+        tables[2] = new Table("Drivers");
+        tables[2].addContainerProperty("First Name", String.class, null);
+        tables[2].addContainerProperty("Last Name", String.class, null);
+        tables[2].addContainerProperty("HR ID", String.class, null);
+        for (int i = 1; i < LENGTHS[2]; i++) {
+            tables[2].addItem(
+                    new Object[] { "King", "Vabis", "HR-" + format.format(i) },
+                    Integer.valueOf(i));
+        }
+        tables[2].setPageLength(LENGTHS[2]);
+
+        tables[2].setWidth("100%");
+        tables[2].setHeight("100%");
+        tables[2].setSelectable(true);
+
+        leftComponent.addComponent(tables[2]);
+        leftComponent.setExpandRatio(tables[2], 1.0f);
+
+        leftComponent.setWidth("100%");
+
+        HorizontalSplitPanel split = new HorizontalSplitPanel();
+        split.setFirstComponent(leftComponent);
+
+        VerticalLayout rightComponent = new VerticalLayout();
+        rightComponent.setMargin(true);
+        rightComponent.addComponent(new Label("Left blank!"));
+        split.setSecondComponent(rightComponent);
+
+        split.setSizeFull();
+
+        VerticalLayout mainLayout = new VerticalLayout();
+        mainLayout.setSizeFull();
+        mainLayout.addComponent(split);
+        mainLayout.setExpandRatio(split, 1.0f);
+
+        Window mainWindow = new Window("Visibilitybug Application", mainLayout);
+        mainWindow.setSizeFull();
+
+        setMainWindow(mainWindow);
+
+        // complete toolbar
+
+        for (int i = 0; i < buttons.length; i++) {
+            buttons[i] = new ToggleButton(tables[i]);
+            toolBar.addComponent(buttons[i]);
+        }
+
+    }
+
+    // Button to switch the visibility of a table.
+
+    private static class ToggleButton extends Button {
+
+        private Table table;
+
+        private ToggleButton(Table table) {
+            this.table = table;
+
+            setCaption("- " + table.getCaption());
+
+            addListener(new ClickListener() {
+
+                public void buttonClick(ClickEvent event) {
+
+                    boolean wasVisible = ToggleButton.this.table.isVisible();
+
+                    ToggleButton.this.table.setVisible(!wasVisible);
+                    setCaption((wasVisible ? "+ " : "- ")
+                            + ToggleButton.this.table.getCaption());
+                    setDescription((wasVisible ? "Show " : "Hide ")
+                            + "the list with "
+                            + ToggleButton.this.table.getCaption());
+
+                }
+            });
+        }
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Test for hiding and showing tables. Click a button to show/hide one of the tables. The tables are all 100% wide and should be rendered the same way after being hidden and shown again.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6494;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableTooltips.html b/tests/testbench/com/vaadin/tests/components/table/TableTooltips.html
new file mode 100644
index 0000000000..989fb865c5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableTooltips.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableItemDescriptionGeneratorTest?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableItemDescriptionGeneratorTest::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[0]/domChild[0]</td>
+	<td>57,5</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>1000</td>
+	<td>1000</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableItemDescriptionGeneratorTest::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>Cell description item 3,Text - Cell description</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableItemDescriptionGeneratorTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[0]</td>
+	<td>810,153</td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableItemDescriptionGeneratorTest::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[1]/domChild[0]</td>
+	<td>57,12</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>1000</td>
+	<td>1000</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableItemDescriptionGeneratorTest::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>Row description item 1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableItemDescriptionGeneratorTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[0]</td>
+	<td>1011,283</td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableItemDescriptionGeneratorTest::PID_Stable/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[4]/VTextField[0]</td>
+	<td>58,10</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>1000</td>
+	<td>1000</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableItemDescriptionGeneratorTest::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>Textfields own description</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableUndefinedSize.html b/tests/testbench/com/vaadin/tests/components/table/TableUndefinedSize.html
new file mode 100644
index 0000000000..fbb6f4c7f9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableUndefinedSize.html
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableUndefinedSize?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>UndefinedSizeTable</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableUndefinedSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>exact:1: Size 200x200 pixels</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>FixedSize200x200Table</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableUndefinedSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>exact:2: Size 600x200 pixels<br />1: Size 200x200 pixels</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>FixedSize600x200Table</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableUndefinedSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>exact:3: Size undefined<br />2: Size 600x200 pixels<br />1: Size 200x200 pixels</td>
+	<td></td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableUndefinedSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[3]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=4</td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>exact:4: Page length: 4<br />3: Size undefined<br />2: Size 600x200 pixels<br />1: Size 200x200 pixels</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>PageLength4</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableUndefinedSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[3]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>PageLength10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableUndefinedSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[3]</td>
+	<td>1102,215</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableUndefinedSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+	<td>3,6</td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>Column 2</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>Column 3</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>Column1Hidden</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableUndefinedSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+	<td>3,3</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>AllColumnsShown</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableUndefinedSize.java b/tests/testbench/com/vaadin/tests/components/table/TableUndefinedSize.java
new file mode 100644
index 0000000000..2b3204953b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableUndefinedSize.java
@@ -0,0 +1,165 @@
+package com.vaadin.tests.components.table;
+
+import java.util.Arrays;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.Table;
+
+public class TableUndefinedSize extends TestBase {
+
+    private ObjectProperty<String> output = new ObjectProperty<String>("");
+
+    private int counter = 1;
+
+    @Override
+    protected void setup() {
+
+        HorizontalLayout controls = new HorizontalLayout();
+        controls.setSpacing(true);
+        addComponent(controls);
+
+        HorizontalLayout visibilities = new HorizontalLayout();
+        visibilities.setSpacing(true);
+        addComponent(visibilities);
+
+        final Table tbl = new Table("", createDataSource());
+        tbl.setImmediate(true);
+        tbl.setColumnCollapsingAllowed(true);
+
+        Label output = new Label(this.output);
+        output.setWidth("400px");
+        output.setHeight("100px");
+        output.setContentMode(Label.CONTENT_XHTML);
+
+        controls.addComponent(new Button("Fixed size (200x200)",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        tbl.setWidth("200px");
+                        tbl.setHeight("200px");
+                        print("Size 200x200 pixels");
+                    }
+                }));
+
+        controls.addComponent(new Button("Fixed size (600x200)",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        tbl.setWidth("600px");
+                        tbl.setHeight("200px");
+                        print("Size 600x200 pixels");
+                    }
+                }));
+
+        controls.addComponent(new Button("Undefined size",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        tbl.setSizeUndefined();
+                        print("Size undefined");
+                    }
+                }));
+
+        NativeSelect pageLength = new NativeSelect("PageLength", Arrays.asList(
+                0, 1, 2, 4, 8, 10));
+        pageLength.setImmediate(true);
+        pageLength.setNullSelectionAllowed(false);
+        pageLength.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                int pageLength = Integer.valueOf(event.getProperty().getValue()
+                        .toString());
+                tbl.setPageLength(pageLength);
+                print("Page length: " + pageLength);
+            }
+        });
+        controls.addComponent(pageLength);
+
+        CheckBox cb = new CheckBox("Column 1", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                tbl.setColumnCollapsed("Column 1", !event.getButton()
+                                .booleanValue());
+                if (event.getButton().booleanValue()) {
+                    print("Column 1 visible");
+                } else {
+                    print("Column 1 hidden");
+                }
+                    }
+        });
+        cb.setImmediate(true);
+        cb.setValue(true);
+        visibilities.addComponent(cb);
+
+        cb = new CheckBox("Column 2", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                tbl.setColumnCollapsed("Column 2", !event.getButton()
+                        .booleanValue());
+
+                if (event.getButton().booleanValue()) {
+                    print("Column 2 visible");
+                } else {
+                    print("Column 2 hidden");
+                }
+            }
+        });
+        cb.setImmediate(true);
+        cb.setValue(true);
+        visibilities.addComponent(cb);
+
+        cb = new CheckBox("Column 3", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                tbl.setColumnCollapsed("Column 3", !event.getButton()
+                        .booleanValue());
+
+                if (event.getButton().booleanValue()) {
+                    print("Column 3 visible");
+                } else {
+                    print("Column 3 hidden");
+                }
+            }
+        });
+        cb.setImmediate(true);
+        cb.setValue(true);
+        visibilities.addComponent(cb);
+
+        addComponent(output);
+        addComponent(tbl);
+
+    }
+
+    protected void print(String message) {
+        output.setValue(counter + ": " + message + "<br/>" + output.getValue());
+        counter++;
+    }
+
+    protected Container createDataSource() {
+        IndexedContainer c = new IndexedContainer();
+        c.addContainerProperty("Column 1", String.class, "Column 1");
+        c.addContainerProperty("Column 2", String.class, "Column 2");
+        c.addContainerProperty("Column 3", String.class, "Column 3");
+
+        for (int i = 0; i < 50; i++) {
+            c.addItem();
+        }
+
+        return c;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5789;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableUnregisterComponent.html b/tests/testbench/com/vaadin/tests/components/table/TableUnregisterComponent.html
new file mode 100644
index 0000000000..1e5617d64f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableUnregisterComponent.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableUnregisterComponent?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableUnregisterComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableUnregisterComponent::PID_SLog_row_0</td>
+	<td>1. Embedded field property data source set</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableUnregisterComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableUnregisterComponent::PID_SLog_row_0</td>
+	<td>2. Edit field property data source set</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableUnregisterComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableUnregisterComponent::PID_SLog_row_0</td>
+	<td>3. Edit field property data source cleared</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableUnregisterComponent.java b/tests/testbench/com/vaadin/tests/components/table/TableUnregisterComponent.java
new file mode 100644
index 0000000000..91f5aec1ca
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableUnregisterComponent.java
@@ -0,0 +1,102 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DefaultFieldFactory;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+
+public class TableUnregisterComponent extends TestBase {
+
+    private static final String COL_A = "textFieldA";
+    private static final String COL_B = "textB";
+
+    @Override
+    protected void setup() {
+        final Log log = new Log(5);
+
+        IndexedContainer container = new IndexedContainer();
+        container.addContainerProperty(COL_A, TextField.class, null);
+        container.addContainerProperty(COL_B, String.class, "");
+
+        Item it = container.addItem("a");
+        final ObjectProperty<String> valA = new ObjectProperty<String>("orgVal");
+        final TextField fieldA = new TextField(valA) {
+            @Override
+            public void setPropertyDataSource(Property newDataSource) {
+                super.setPropertyDataSource(newDataSource);
+                if (newDataSource == null) {
+                    log.log("Embedded field property data source cleared");
+                } else {
+                    log.log("Embedded field property data source set");
+                }
+            }
+        };
+        it.getItemProperty(COL_A).setValue(fieldA);
+        it.getItemProperty(COL_B).setValue("Some text here");
+
+        final Table table = new Table("", container);
+        table.setColumnCollapsingAllowed(true);
+        table.setTableFieldFactory(new DefaultFieldFactory() {
+            @Override
+            public Field createField(Container container, Object itemId,
+                    Object propertyId, Component uiContext) {
+                if (COL_B.equals(propertyId)) {
+                    Field field = new TextField() {
+                        @Override
+                        public void setPropertyDataSource(Property newDataSource) {
+                            super.setPropertyDataSource(newDataSource);
+                            if (newDataSource == null) {
+                                log.log("Edit field property data source cleared");
+                            } else {
+                                log.log("Edit field property data source set");
+                            }
+                        }
+                    };
+                    field.setCaption(createCaptionByPropertyId(propertyId));
+                    return field;
+                } else {
+                    return super.createField(container, itemId, propertyId,
+                            uiContext);
+                }
+            }
+        });
+
+        addComponent(log);
+        addComponent(table);
+
+        addComponent(new Button("Switch column collapse", new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                table.setColumnCollapsed(COL_A, !table.isColumnCollapsed(COL_A));
+            }
+        }));
+
+        addComponent(new Button("Switch editable", new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                table.setEditable(!table.isEditable());
+            }
+        }));
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Table.uncollapseColumn (triggered by collapsing column or disabling editable mode) should only unregister property data sources that have been added by the table.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return Integer.valueOf("7541");
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableVisibleColumnsUpdate.html b/tests/testbench/com/vaadin/tests/components/table/TableVisibleColumnsUpdate.html
new file mode 100644
index 0000000000..05325cb9e6
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableVisibleColumnsUpdate.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TableVisibleColumnsUpdate</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TableVisibleColumnsUpdate</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableVisibleColumnsUpdate</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>1</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableVisibleColumnsUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>2</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableVisibleColumnsUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>1</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableVisibleColumnsUpdate::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>2</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableVisibleColumnsUpdate.java b/tests/testbench/com/vaadin/tests/components/table/TableVisibleColumnsUpdate.java
new file mode 100644
index 0000000000..ad8eacb4b7
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableVisibleColumnsUpdate.java
@@ -0,0 +1,57 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Table;
+
+public class TableVisibleColumnsUpdate extends TestBase {
+
+    private String[] cols1 = new String[] { "p1", "p2", "p3" };
+    private String[] cols2 = new String[] { "p1", "p4", "p3" };
+    private Table table;
+
+    @Override
+    protected String getDescription() {
+        return "Columns should change between p1,p2,p3 and p1,p4,p3";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3139;
+    }
+
+    @Override
+    protected void setup() {
+        table = new Table();
+        table.setWidth("400px");
+        table.setHeight("100px");
+        table.setPageLength(100);
+        table.addContainerProperty("p1", String.class, null);
+        table.addContainerProperty("p2", String.class, null);
+        table.addContainerProperty("p3", String.class, null);
+        table.addContainerProperty("p4", String.class, null);
+
+        for (int i = 0; i < 10; i++) {
+            table.addItem(new Object[] { "a" + i, "b" + i, "c" + i, "X" + i },
+                    "" + i);
+        }
+
+        addComponent(table);
+
+        table.setVisibleColumns(cols1);
+        // table.setColumnHeaders(headers1);
+
+        Button updateButton = new Button("Change columns", new ClickListener() {
+            private boolean one = true;
+
+            public void buttonClick(ClickEvent event) {
+                table.setVisibleColumns((one ? cols2 : cols1));
+                one = !one;
+            }
+        });
+        addComponent(updateButton);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableWithManyColumns.html b/tests/testbench/com/vaadin/tests/components/table/TableWithManyColumns.html
new file mode 100644
index 0000000000..5fea0c99df
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableWithManyColumns.html
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TableWithManyColumns?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>scrollLeft</td>
+	<td>vaadin=runcomvaadintestscomponentstableTableWithManyColumns::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td>
+	<td>10000</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>scrolled-right</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TableWithManyColumns.java b/tests/testbench/com/vaadin/tests/components/table/TableWithManyColumns.java
new file mode 100644
index 0000000000..543c1ebae2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TableWithManyColumns.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+
+public class TableWithManyColumns extends TestBase {
+
+    private static final int ROWS = 20;
+    private static final int COLS = 100;
+
+    @Override
+    protected void setup() {
+        Table t = new Table();
+
+        for (int i = 0; i < COLS; i++) {
+            t.addContainerProperty("COLUMN_" + i, String.class, "");
+        }
+        for (int row = 0; row < ROWS; row++) {
+            Item i = t.addItem(String.valueOf(row));
+            for (int col = 0; col < COLS; col++) {
+                Property p = i.getItemProperty("COLUMN_" + col);
+                p.setValue("item " + row + "/" + col);
+            }
+        }
+        t.setFooterVisible(true);
+        t.setSizeFull();
+        addComponent(t);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The footer, header and content cells should be as wide, even when the Table contains many columns";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5185;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/Tables.java b/tests/testbench/com/vaadin/tests/components/table/Tables.java
new file mode 100644
index 0000000000..3a34fb47b2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/Tables.java
@@ -0,0 +1,838 @@
+package com.vaadin.tests.components.table;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import com.vaadin.event.Action;
+import com.vaadin.event.Action.Handler;
+import com.vaadin.event.ItemClickEvent.ItemClickListener;
+import com.vaadin.terminal.Resource;
+import com.vaadin.tests.components.select.AbstractSelectTestCase;
+import com.vaadin.ui.AbstractSelect.MultiSelectMode;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.CellStyleGenerator;
+import com.vaadin.ui.Table.ColumnGenerator;
+import com.vaadin.ui.Table.ColumnResizeEvent;
+import com.vaadin.ui.Table.ColumnResizeListener;
+import com.vaadin.ui.Table.FooterClickEvent;
+import com.vaadin.ui.Table.FooterClickListener;
+import com.vaadin.ui.Table.GeneratedRow;
+import com.vaadin.ui.Table.HeaderClickEvent;
+import com.vaadin.ui.Table.HeaderClickListener;
+import com.vaadin.ui.Table.RowGenerator;
+
+public class Tables<T extends Table> extends AbstractSelectTestCase<T>
+        implements ItemClickListener, HeaderClickListener, FooterClickListener,
+        ColumnResizeListener {
+
+    protected static final String CATEGORY_ROWS = "Rows";
+    private static final String CATEGORY_HEADER = "Header";
+    private static final String CATEGORY_FOOTER = "Footer";
+    private static final String CATEGORY_COLUMNS = "Columns";
+
+    @Override
+    protected Class<T> getTestClass() {
+        return (Class) Table.class;
+    }
+
+    /* COMMANDS */
+    private Command<T, String> columnAlignmentCommand = new Command<T, String>() {
+
+        public void execute(T c, String alignment, Object propertyId) {
+            c.setColumnAlignment(propertyId, alignment);
+        }
+
+    };
+
+    private Command<T, Boolean> columnVisibleCommand = new Command<T, Boolean>() {
+        public void execute(Table c, Boolean visible, Object propertyId) {
+            List<Object> visibleColumns = new ArrayList<Object>(Arrays.asList(c
+                    .getVisibleColumns()));
+            if (visible) {
+                // Table should really check this... Completely fails without
+                // the check (#
+                if (!visibleColumns.contains(propertyId)) {
+                    visibleColumns.add(propertyId);
+                }
+            } else {
+                visibleColumns.remove(propertyId);
+            }
+            c.setVisibleColumns(visibleColumns.toArray());
+        }
+    };
+
+    private Command<T, Boolean> columnCollapsed = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean collapsed, Object propertyId) {
+            c.setColumnCollapsed(propertyId, collapsed);
+
+        }
+    };
+
+    protected Command<T, Boolean> columnResizeListenerCommand = new Command<T, Boolean>() {
+
+        public void execute(Table c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((ColumnResizeListener) Tables.this);
+            } else {
+                c.removeListener((ColumnResizeListener) Tables.this);
+            }
+        }
+    };
+
+    protected Command<T, Boolean> headerClickListenerCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((HeaderClickListener) Tables.this);
+            } else {
+                c.removeListener((HeaderClickListener) Tables.this);
+            }
+        }
+    };
+
+    protected Command<T, Boolean> footerClickListenerCommand = new Command<T, Boolean>() {
+
+        public void execute(Table c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((FooterClickListener) Tables.this);
+            } else {
+                c.removeListener((FooterClickListener) Tables.this);
+            }
+        }
+    };
+
+    protected Command<T, Integer> rowHeaderModeCommand = new Command<T, Integer>() {
+
+        public void execute(Table c, Integer value, Object data) {
+            if (value == Table.ROW_HEADER_MODE_PROPERTY) {
+                c.setItemCaptionPropertyId("Property 3");
+            }
+            c.setRowHeaderMode(value);
+        }
+    };
+
+    protected Command<T, String> footerTextCommand = new Command<T, String>() {
+
+        public void execute(Table c, String value, Object data) {
+            for (Object propertyId : c.getContainerPropertyIds()) {
+                if (value != null) {
+                    c.setColumnFooter(propertyId,
+                            value.replace("{id}", propertyId.toString()));
+                } else {
+                    c.setColumnFooter(propertyId, null);
+                }
+            }
+        }
+    };
+
+    protected Command<T, Object> alignColumnLeftCommand = new Command<T, Object>() {
+
+        public void execute(T c, Object propertyId, Object data) {
+            c.setColumnAlignment(propertyId, (String) data);
+        }
+    };
+
+    private Command<T, ContextMenu> contextMenuCommand = new Command<T, ContextMenu>() {
+
+        public void execute(T c, final ContextMenu value, Object data) {
+            c.removeAllActionHandlers();
+            if (value != null) {
+                c.addActionHandler(new Handler() {
+
+                    public void handleAction(Action action, Object sender,
+                            Object target) {
+                        log("Action " + action.getCaption() + " performed on "
+                                + target);
+                    }
+
+                    public Action[] getActions(Object target, Object sender) {
+                        return value.getActions(target, sender);
+                    }
+                });
+            }
+        }
+    };
+    private Command<T, Integer> columnWidthCommand = new Command<T, Integer>() {
+
+        public void execute(T c, Integer width, Object propertyId) {
+            c.setColumnWidth(propertyId, width);
+
+        }
+    };
+
+    private Command<T, Resource> columnIconCommand = new Command<T, Resource>() {
+
+        public void execute(T c, Resource icon, Object propertyId) {
+            c.setColumnIcon(propertyId, icon);
+
+        }
+    };
+    private Command<T, Integer> columnHeaderModeCommand = new Command<T, Integer>() {
+
+        public void execute(T c, Integer columnHeaderMode, Object data) {
+            c.setColumnHeaderMode(columnHeaderMode);
+
+        }
+    };
+    private Command<T, String> columnHeaderCommand = new Command<T, String>() {
+
+        public void execute(T c, String header, Object propertyId) {
+            c.setColumnHeader(propertyId, header);
+
+        }
+    };
+    private Command<T, Float> columnExpandRatioCommand = new Command<T, Float>() {
+
+        public void execute(T c, Float expandRatio, Object propertyId) {
+            c.setColumnExpandRatio(propertyId, expandRatio);
+        }
+    };
+
+    private class GeneratedColumn {
+        private Class<?> type;
+        private String width;
+        private boolean html;
+
+        public GeneratedColumn(Class<?> type, String width, boolean html) {
+            super();
+            this.type = type;
+            this.width = width;
+            this.html = html;
+        }
+    }
+
+    String generatedColumnId = "Generated ";
+    int generatedColumnNextNr = 1;
+
+    private Command<T, GeneratedColumn> addGeneratedColumnCommand = new Command<T, GeneratedColumn>() {
+
+        public void execute(T c, final GeneratedColumn col, Object data) {
+            while (c.getColumnGenerator(generatedColumnId
+                    + generatedColumnNextNr) != null) {
+                generatedColumnNextNr++;
+            }
+
+            c.addGeneratedColumn(generatedColumnId + generatedColumnNextNr,
+                    new ColumnGenerator() {
+
+                        public Object generateCell(Table source, Object itemId,
+                                Object columnId) {
+                            String value = "";
+                            if (col.html) {
+                                value = "<i>" + itemId + "</i>" + "/" + "<b>"
+                                        + columnId + "</b>";
+                            } else {
+                                value = itemId + "/" + columnId;
+                            }
+                            if (col.type == Button.class) {
+                                Button b = new Button();
+                                b.setCaption(value);
+                                b.setWidth(col.width);
+                                return b;
+                            } else if (col.type == Label.class) {
+                                Label l = new Label();
+                                l.setWidth(col.width);
+                                if (col.html) {
+                                    l.setValue(value);
+                                    l.setContentMode(Label.CONTENT_XHTML);
+                                } else {
+                                    l.setValue(value);
+                                }
+                                return l;
+                            } else if (col.type == String.class) {
+                                return value;
+                            } else if (col.type == Object.class) {
+                                return new Object();
+                            }
+
+                            return null;
+                        }
+                    });
+            generatedColumnNextNr++;
+            createColumnOptions(false);
+
+        }
+    };
+    private Command<T, Object> removeGeneratedColumnsCommand = new Command<T, Object>() {
+
+        public void execute(T c, Object value, Object data) {
+            for (int i = 0; i < generatedColumnNextNr; i++) {
+                String columnId = generatedColumnId + i;
+                if (c.getColumnGenerator(columnId) != null) {
+                    c.removeGeneratedColumn(columnId);
+                }
+
+            }
+            createColumnOptions(false);
+
+        }
+    };
+
+    private class CellStyleInfo {
+        private final String styleName;
+        private final Object itemId;
+        private final Object propertyId;
+
+        public CellStyleInfo(String styleName, Object itemId, Object propertyId) {
+            this.styleName = styleName;
+            this.itemId = itemId;
+            this.propertyId = propertyId;
+        }
+
+        public boolean appliesTo(Object itemId, Object propertyId) {
+            return (this.itemId != null && this.itemId.equals(itemId))
+                    && (this.propertyId == propertyId || (this.propertyId != null && this.propertyId
+                            .equals(propertyId)));
+        }
+    }
+
+    private Command<T, CellStyleInfo> cellStyleCommand = new Command<T, CellStyleInfo>() {
+
+        public void execute(T c, final CellStyleInfo cellStyleInfo, Object data) {
+            if (cellStyleInfo == null) {
+                c.setCellStyleGenerator(null);
+            } else {
+                c.setCellStyleGenerator(new CellStyleGenerator() {
+
+                    public String getStyle(Object itemId, Object propertyId) {
+                        if (cellStyleInfo.appliesTo(itemId, propertyId)) {
+                            return cellStyleInfo.styleName;
+                        }
+                        return null;
+                    }
+                });
+            }
+        }
+    };
+
+    private class GeneratedRowInfo {
+
+        private final int nth;
+        private final String[] text;
+        private final boolean isHtml;
+
+        public GeneratedRowInfo(int nth, boolean isHtml, String... text) {
+            this.nth = nth;
+            this.isHtml = isHtml;
+            this.text = text;
+        }
+
+        public boolean appliesTo(Object itemId) {
+            int ix = Integer.valueOf(itemId.toString().substring(5));
+            return ix % nth == 0;
+        }
+
+        @Override
+        public String toString() {
+            return String.format("%d, %s, %s", nth, isHtml ? "true" : "false",
+                    Arrays.toString(text));
+        }
+    }
+
+    private Command<T, GeneratedRowInfo> rowGeneratorCommand = new Command<T, GeneratedRowInfo>() {
+
+        public void execute(T c, final GeneratedRowInfo generatedRowInfo,
+                Object data) {
+            if (generatedRowInfo == null) {
+                c.setRowGenerator(null);
+            } else {
+                c.setRowGenerator(new RowGenerator() {
+
+                    public GeneratedRow generateRow(Table table, Object itemId) {
+                        if (generatedRowInfo.appliesTo(itemId)) {
+                            GeneratedRow generatedRow = new GeneratedRow(
+                                    generatedRowInfo.text);
+                            generatedRow
+                                    .setHtmlContentAllowed(generatedRowInfo.isHtml);
+                            return generatedRow;
+                        }
+                        return null;
+                    }
+                });
+            }
+        }
+    };
+
+    private Command<T, Boolean> setSortEnabledCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            c.setSortDisabled(!value);
+
+        }
+    };
+
+    /* COMMANDS END */
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+
+        createPageLengthSelect(CATEGORY_SIZE);
+
+        createSelectionModeSelect(CATEGORY_SELECTION);
+        createValueSelection(CATEGORY_SELECTION);
+
+        createItemClickListener(CATEGORY_LISTENERS);
+        createColumnResizeListenerCheckbox(CATEGORY_LISTENERS);
+        createHeaderClickListenerCheckbox(CATEGORY_LISTENERS);
+        createFooterClickListenerCheckbox(CATEGORY_LISTENERS);
+
+        createRowHeaderModeSelect(CATEGORY_DATA_SOURCE);
+
+        createHeaderVisibilitySelect(CATEGORY_HEADER);
+        createHeaderTextCheckbox(CATEGORY_HEADER);
+
+        createFooterVisibilityCheckbox(CATEGORY_FOOTER);
+        createFooterTextSelect(CATEGORY_FOOTER);
+
+        createColumnReorderingAllowedCheckbox(CATEGORY_FEATURES);
+        createColumnCollapsingAllowedCheckbox(CATEGORY_FEATURES);
+
+        createContextMenuAction(CATEGORY_FEATURES);
+
+        createColumnHeaderMode(CATEGORY_FEATURES);
+        createAddGeneratedColumnAction(CATEGORY_FEATURES);
+        createCellStyleAction(CATEGORY_FEATURES);
+        createGeneratedRowAction(CATEGORY_FEATURES);
+
+        createBooleanAction("Sort enabled", CATEGORY_FEATURES, true,
+                setSortEnabledCommand);
+        createColumnOptions(true);
+    }
+
+    private void createAddGeneratedColumnAction(String categoryFeatures) {
+        String category = "Generated columns";
+        createCategory(category, categoryFeatures);
+        createClickAction("Add Button", category, addGeneratedColumnCommand,
+                new GeneratedColumn(Button.class, null, false));
+        createClickAction("Add 200px wide Button", category,
+                addGeneratedColumnCommand, new GeneratedColumn(Button.class,
+                        "200px", false));
+        createClickAction("Add 100% wide Button", category,
+                addGeneratedColumnCommand, new GeneratedColumn(Button.class,
+                        "100%", false));
+        createClickAction("Add Label", category, addGeneratedColumnCommand,
+                new GeneratedColumn(Label.class, null, false));
+        createClickAction("Add 100px Label", category,
+                addGeneratedColumnCommand, new GeneratedColumn(Label.class,
+                        "100px", false));
+        createClickAction("Add 100% wide Label", category,
+                addGeneratedColumnCommand, new GeneratedColumn(Label.class,
+                        "100%", false));
+
+        createClickAction("Remove generated columns", category,
+                removeGeneratedColumnsCommand, null);
+        createClickAction("Add string as generated column", category,
+                addGeneratedColumnCommand, new GeneratedColumn(String.class,
+                        "", false));
+        createClickAction("Add HTML string as generated column", category,
+                addGeneratedColumnCommand, new GeneratedColumn(String.class,
+                        "", true));
+        createClickAction("Add 100px HTML Label", category,
+                addGeneratedColumnCommand, new GeneratedColumn(Label.class,
+                        "100px", true));
+        createClickAction("Add Object as generated column", category,
+                addGeneratedColumnCommand, new GeneratedColumn(Object.class,
+                        "", false));
+    }
+
+    private void createCellStyleAction(String categoryFeatures) {
+        LinkedHashMap<String, CellStyleInfo> options = new LinkedHashMap<String, CellStyleInfo>();
+        options.put("None", null);
+        options.put("Red row", new CellStyleInfo(
+                "tables-test-cell-style-red-row", "Item 2", null));
+        options.put("Red cell", new CellStyleInfo(
+                "tables-test-cell-style-red-row", "Item 2", "Property 2"));
+        createSelectAction("Cell style generator", categoryFeatures, options,
+                "None", cellStyleCommand, true);
+    }
+
+    private void createGeneratedRowAction(String categoryFeatures) {
+        LinkedHashMap<String, GeneratedRowInfo> options = new LinkedHashMap<String, GeneratedRowInfo>();
+        options.put("None", null);
+        options.put("Every fifth row, spanned", new GeneratedRowInfo(5, false,
+                "foobarbaz this is a long one that should span."));
+        int props = getComponent().getContainerPropertyIds().size();
+        String[] text = new String[props];
+        for (int ix = 0; ix < props; ix++) {
+            text[ix] = "foo" + ix;
+        }
+        options.put("Every tenth row, no spanning", new GeneratedRowInfo(10,
+                false, text));
+        options.put(
+                "Every eight row, spanned, html formatted",
+                new GeneratedRowInfo(8, true,
+                        "<b>foo</b> <i>bar</i> <span style='color:red;text-size:0.5em;'>baz</span>"));
+        options.put("Every row, spanned", new GeneratedRowInfo(1, false,
+                "spanned"));
+        createSelectAction("Row generator", categoryFeatures, options, "None",
+                rowGeneratorCommand, true);
+    }
+
+    private void createColumnHeaderMode(String category) {
+        LinkedHashMap<String, Integer> columnHeaderModeOptions = new LinkedHashMap<String, Integer>();
+        columnHeaderModeOptions.put("Hidden", Table.COLUMN_HEADER_MODE_HIDDEN);
+        columnHeaderModeOptions.put("Id", Table.COLUMN_HEADER_MODE_ID);
+        columnHeaderModeOptions.put("Explicit",
+                Table.COLUMN_HEADER_MODE_EXPLICIT);
+        columnHeaderModeOptions.put("Explicit defaults id",
+                Table.COLUMN_HEADER_MODE_EXPLICIT_DEFAULTS_ID);
+
+        createSelectAction("Column header mode", category,
+                columnHeaderModeOptions, "Explicit defaults id",
+                columnHeaderModeCommand);
+    }
+
+    private void createValueSelection(String categorySelection) {
+        LinkedHashMap<String, Object> options = new LinkedHashMap<String, Object>();
+        options.put("null", null);
+        for (int i = 1; i <= 10; i++) {
+            options.put("Item " + i, "Item " + i);
+        }
+        createSelectAction("Value", categorySelection, options, null,
+                setValueCommand);
+    }
+
+    private void createContextMenuAction(String category) {
+        LinkedHashMap<String, ContextMenu> options = new LinkedHashMap<String, ContextMenu>();
+        options.put("None", null);
+        options.put("Item without icon", new ContextMenu("No icon", null));
+        ContextMenu cm = new ContextMenu();
+        cm.addItem("Caption only", null);
+        cm.addItem("Has icon", ICON_16_USER_PNG_UNCACHEABLE);
+        options.put("With and without icon", cm);
+        options.put("Only one large icon", new ContextMenu("Icon",
+                ICON_64_EMAIL_REPLY_PNG_UNCACHEABLE));
+        options.put("Empty", new ContextMenu() {
+            @Override
+            public Action[] getActions(Object target, Object sender) {
+                return null;
+            }
+        });
+        options.put("Edit/New", new ContextMenu() {
+            @Override
+            public Action[] getActions(Object itemId, Object component) {
+                if (itemId == null) {
+                    return new Action[] { new Action("New..."),
+                            new Action("Common action") };
+                } else {
+                    return new Action[] { new Action("Edit " + itemId),
+                            new Action("Common action") };
+                }
+            }
+        });
+
+        createSelectAction("Context menu", category, options, "None",
+                contextMenuCommand, true);
+    }
+
+    private void createColumnReorderingAllowedCheckbox(String category) {
+        createBooleanAction("Column reordering allowed", category, true,
+                new Command<T, Boolean>() {
+                    public void execute(Table c, Boolean value, Object data) {
+                        c.setColumnReorderingAllowed(value);
+                    }
+                });
+    }
+
+    private void createColumnCollapsingAllowedCheckbox(String category) {
+        createBooleanAction("Column collapsing allowed", category, true,
+                new Command<T, Boolean>() {
+                    public void execute(T c, Boolean value, Object data) {
+                        c.setColumnCollapsingAllowed(value);
+                    }
+                });
+    }
+
+    private void createColumnOptions(boolean init) {
+        if (!init && !hasCategory(CATEGORY_COLUMNS)) {
+            return;
+        }
+
+        long start = System.currentTimeMillis();
+        if (!init) {
+            removeCategory(CATEGORY_COLUMNS);
+        }
+
+        for (Object id : getComponent().getContainerPropertyIds()) {
+            String name = id.toString();
+            createCategory(name, CATEGORY_COLUMNS);
+            createColumnOption(name, id);
+        }
+        for (int i = 0; i < generatedColumnNextNr; i++) {
+            String id = generatedColumnId + i;
+            String name = id;
+            if (getTestComponents().get(0).getColumnGenerator(id) != null) {
+                createCategory(name, CATEGORY_COLUMNS);
+                createColumnOption(name, id);
+            }
+        }
+
+        long end = System.currentTimeMillis();
+        System.err.println("Create options took " + (end - start) + "ms");
+    }
+
+    private class Timer {
+        private long start, last;
+
+        private Timer() {
+            start = System.currentTimeMillis();
+            last = System.currentTimeMillis();
+        }
+
+        public void log(String msg) {
+            long now = System.currentTimeMillis();
+            System.err.println("[This: " + (now - last) + "ms, total: "
+                    + (now - start) + "ms]: " + msg);
+            last = now;
+        }
+    }
+
+    private void createColumnOption(String category, Object propertyId) {
+        Timer t = new Timer();
+        createBooleanAction("Visible", category, true, columnVisibleCommand,
+                propertyId);
+        t.log("Visible");
+        createBooleanAction("Collapsed", category, false, columnCollapsed,
+                propertyId);
+        t.log("Collapsed");
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+        options.put("Left", Table.ALIGN_LEFT);
+        options.put("Center", Table.ALIGN_CENTER);
+        options.put("Right", Table.ALIGN_RIGHT);
+
+        createSelectAction("Alignment", category, options, "Left",
+                columnAlignmentCommand, propertyId);
+        t.log("Alignment");
+        LinkedHashMap<String, Integer> widthOptions = new LinkedHashMap<String, Integer>();
+        widthOptions.put("- remove -", -1);
+        for (int i : new int[] { 0, 1, 10, 100, 200, 400 }) {
+            widthOptions.put(i + "px", i);
+        }
+        createSelectAction("Width", category, widthOptions, "- remove -",
+                columnWidthCommand, propertyId);
+        t.log("Width");
+
+        LinkedHashMap<String, Resource> iconOptions = new LinkedHashMap<String, Resource>();
+        iconOptions.put("- none -", null);
+        iconOptions.put("ok 16x16", ICON_16_USER_PNG_CACHEABLE);
+        iconOptions.put("help 16x16", ICON_16_HELP_PNG_CACHEABLE);
+        iconOptions.put("folder 16x16", ICON_16_FOLDER_PNG_CACHEABLE);
+        iconOptions.put("attention 32x32", ICON_32_ATTENTION_PNG_CACHEABLE);
+        createSelectAction("Icon", category, iconOptions, "- none -",
+                columnIconCommand, propertyId);
+
+        t.log("Icon");
+        LinkedHashMap<String, String> columnHeaderOptions = new LinkedHashMap<String, String>();
+        columnHeaderOptions.put("- none -", null);
+        columnHeaderOptions.put("A", "A");
+        columnHeaderOptions.put("A nice column", "A nice column");
+
+        createSelectAction("Column header", category, columnHeaderOptions,
+                "- none -", columnHeaderCommand, propertyId);
+        t.log("Header");
+        LinkedHashMap<String, Float> expandOptions = new LinkedHashMap<String, Float>();
+        expandOptions.put("- remove -", -1f);
+        for (float i : new float[] { 0, 1, 2, 3, 4, 5 }) {
+            expandOptions.put(i + "", i);
+        }
+        createSelectAction("Expand ratio", category, expandOptions,
+                "- remove -", columnExpandRatioCommand, propertyId);
+        t.log("Expand");
+        // Footer text (move)
+        // Header text (move)
+
+    }
+
+    private void createRowHeaderModeSelect(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("Explicit", Table.ROW_HEADER_MODE_EXPLICIT);
+        options.put("Explicit defaults id",
+                Table.ROW_HEADER_MODE_EXPLICIT_DEFAULTS_ID);
+        options.put("Hidden", Table.ROW_HEADER_MODE_HIDDEN);
+        options.put("Icon only", Table.ROW_HEADER_MODE_ICON_ONLY);
+        options.put("Id", Table.ROW_HEADER_MODE_ID);
+        options.put("Index", Table.ROW_HEADER_MODE_INDEX);
+        options.put("Item", Table.ROW_HEADER_MODE_ITEM);
+        options.put("'Property 3' property", Table.ROW_HEADER_MODE_PROPERTY);
+
+        createSelectAction("Row header mode", category, options, "Hidden",
+                rowHeaderModeCommand);
+    }
+
+    private void createFooterTextSelect(String category) {
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+        options.put("None", null);
+        options.put("Footer X", "Footer {id}");
+        options.put("X", "{id}");
+
+        createSelectAction("Texts in footer", category, options, "None",
+                footerTextCommand);
+    }
+
+    private void createHeaderTextCheckbox(String category) {
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+        options.put("None", null);
+        options.put("Col: {id}", "Col: {id}");
+        options.put("Header {id} - every second", "Header {id}");
+
+        createSelectAction("Texts in header", category, options, "None",
+                new Command<T, String>() {
+                    public void execute(T c, String value, Object data) {
+                        int nr = 0;
+                        for (Object propertyId : c.getContainerPropertyIds()) {
+                            nr++;
+                            if (value != null && value.equals("Header {id}")
+                                    && nr % 2 == 0) {
+                                c.setColumnHeader(propertyId, null);
+                            } else if (value != null) {
+                                c.setColumnHeader(
+                                        propertyId,
+                                        value.replace("{id}",
+                                                propertyId.toString()));
+                            } else {
+                                c.setColumnHeader(propertyId, null);
+                            }
+                        }
+
+                    }
+                });
+    }
+
+    private void createHeaderClickListenerCheckbox(String category) {
+
+        createBooleanAction("Header click listener", category, false,
+                headerClickListenerCommand);
+    }
+
+    private void createFooterClickListenerCheckbox(String category) {
+
+        createBooleanAction("Footer click listener", category, false,
+                footerClickListenerCommand);
+    }
+
+    private void createColumnResizeListenerCheckbox(String category) {
+
+        createBooleanAction("Column resize listener", category, false,
+                columnResizeListenerCommand);
+    }
+
+    // TODO:
+    // setCurrentPageFirstItemIndex()
+    // Editable
+    // Cache rate
+    // CurrentPageFirstItemId
+
+    protected void createFooterVisibilityCheckbox(String category) {
+        createBooleanAction("Footer visible", category, true,
+                new Command<T, Boolean>() {
+
+                    public void execute(T c, Boolean value, Object data) {
+                        c.setFooterVisible(value);
+                    }
+                });
+    }
+
+    protected void createHeaderVisibilitySelect(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("Explicit", Table.COLUMN_HEADER_MODE_EXPLICIT);
+        options.put("Explicit defaults id",
+                Table.COLUMN_HEADER_MODE_EXPLICIT_DEFAULTS_ID);
+        options.put("Id", Table.COLUMN_HEADER_MODE_ID);
+        options.put("Hidden", Table.COLUMN_HEADER_MODE_HIDDEN);
+
+        createSelectAction("Header mode", category, options,
+                "Explicit defaults id", new Command<T, Integer>() {
+
+                    public void execute(T c, Integer value, Object data) {
+                        c.setColumnHeaderMode(value);
+
+                    }
+                });
+    }
+
+    protected void createPageLengthSelect(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("0", 0);
+        options.put("5", 5);
+        options.put("10", 10);
+        options.put("20", 20);
+        options.put("50", 50);
+
+        createSelectAction("PageLength", category, options, "10",
+                new Command<T, Integer>() {
+
+                    public void execute(Table t, Integer value, Object data) {
+                        t.setPageLength(value);
+                    }
+                });
+    }
+
+    private enum SelectMode {
+        NONE, SINGLE, MULTI_SIMPLE, MULTI;
+    }
+
+    protected void createSelectionModeSelect(String category) {
+        LinkedHashMap<String, SelectMode> options = new LinkedHashMap<String, SelectMode>();
+        options.put("None", SelectMode.NONE);
+        options.put("Single", SelectMode.SINGLE);
+        options.put("Multi - simple", SelectMode.MULTI_SIMPLE);
+        options.put("Multi - ctrl/shift", SelectMode.MULTI);
+
+        createSelectAction("Selection Mode", category, options,
+                "Multi - ctrl/shift", new Command<T, SelectMode>() {
+
+                    public void execute(Table t, SelectMode value, Object data) {
+                        switch (value) {
+                        case NONE:
+                            t.setSelectable(false);
+                            break;
+                        case SINGLE:
+                            t.setMultiSelect(false);
+                            t.setSelectable(true);
+                            break;
+                        case MULTI_SIMPLE:
+                            t.setSelectable(true);
+                            t.setMultiSelect(true);
+                            t.setMultiSelectMode(MultiSelectMode.SIMPLE);
+                            break;
+                        case MULTI:
+                            t.setSelectable(true);
+                            t.setMultiSelect(true);
+                            t.setMultiSelectMode(MultiSelectMode.DEFAULT);
+                            break;
+                        }
+                    }
+                });
+    }
+
+    public void columnResize(ColumnResizeEvent event) {
+        log("ColumnResize on " + event.getPropertyId() + " from "
+                + event.getPreviousWidth() + " to " + event.getCurrentWidth());
+    }
+
+    public void footerClick(FooterClickEvent event) {
+        log("FooterClick on " + event.getPropertyId() + " using "
+                + event.getButtonName());
+    }
+
+    public void headerClick(HeaderClickEvent event) {
+        log("HeaderClick on " + event.getPropertyId() + " using "
+                + event.getButtonName());
+    }
+
+    @Override
+    protected void updateContainer() {
+        super.updateContainer();
+
+        // Recreate for the new properties
+        createColumnOptions(false);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TestCurrentPageFirstItem.java b/tests/testbench/com/vaadin/tests/components/table/TestCurrentPageFirstItem.java
new file mode 100644
index 0000000000..9c3b2de3e0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TestCurrentPageFirstItem.java
@@ -0,0 +1,60 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.Application;
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class TestCurrentPageFirstItem extends Application implements
+        ClickListener {
+
+    private Button buttonIndex;
+    private Button buttonItem;
+    private Table table;
+    private int counter = 0;
+    IndexedContainer container = new IndexedContainer();
+
+    @Override
+    public void init() {
+        try {
+            Window main = new Window("Table header Test");
+            setMainWindow(main);
+            main.setSizeFull();
+            // setTheme("testtheme");
+            VerticalLayout baseLayout = new VerticalLayout();
+            main.setContent(baseLayout);
+
+            table = new Table();
+            container.addContainerProperty("row", String.class, "");
+            table.setContainerDataSource(container);
+            table.setWidth("100%");
+            table.setPageLength(3);
+            buttonIndex = new Button("Add row and select last index", this);
+            buttonItem = new Button("Add row and select last item", this);
+
+            baseLayout.addComponent(table);
+            baseLayout.addComponent(buttonIndex);
+            baseLayout.addComponent(buttonItem);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public void buttonClick(ClickEvent event) {
+        Item item = container.addItem(++counter);
+        item.getItemProperty("row").setValue(counter + "");
+        table.select(counter);
+        if (event.getButton() == buttonIndex) {
+            table.setCurrentPageFirstItemIndex(((Container.Indexed) table
+                    .getContainerDataSource()).indexOfId(counter));
+        } else {
+            table.setCurrentPageFirstItemId(counter);
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/TextFieldRelativeWidth.html b/tests/testbench/com/vaadin/tests/components/table/TextFieldRelativeWidth.html
new file mode 100644
index 0000000000..99f8f5bf9b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TextFieldRelativeWidth.html
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TextFieldRelativeWidth</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TextFieldRelativeWidth</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TextFieldRelativeWidth</td>
+	<td></td>
+</tr>
+<!--  Workaround for Opera 10.50 CSS loading problem -->
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.TextFieldRelativeWidth</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTextFieldRelativeWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableTextFieldRelativeWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[4]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/TextFieldRelativeWidth.java b/tests/testbench/com/vaadin/tests/components/table/TextFieldRelativeWidth.java
new file mode 100644
index 0000000000..13ca9f8cf3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/TextFieldRelativeWidth.java
@@ -0,0 +1,129 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+
+public class TextFieldRelativeWidth extends TestBase {
+
+    @Override
+    public void setup() {
+        TextField tf = new TextField("test", "testing");
+        tf.setWidth("100%");
+
+        EditTable t = new EditTable();
+        t.setButtonCaption("Click to add new Key Research Question");
+        t.setInputPrompt("Key Reseach question");
+        t.setInputPromptChild("Question details");
+        t.addNewRow();
+        addComponent(t);
+    }
+
+    public class EditTable extends Table implements Button.ClickListener {
+
+        private Button addButton = new Button("Add new row",
+                (Button.ClickListener) this);
+
+        private String inputPrompt;
+
+        private String inputPromptChild;
+
+        private int nextItemIndex = 1;
+
+        private static final long serialVersionUID = 3326806911297977454L;
+
+        public EditTable() {
+            setColumnHeaderMode(Table.COLUMN_HEADER_MODE_HIDDEN);
+            inputPrompt = "";
+            setPageLength(100);
+            setHeight("100%");
+            setSizeFull();
+            addContainerProperty("id", Integer.class, null);
+            addContainerProperty("text", Component.class, null);
+            addContainerProperty("button", Button.class, null);
+            setColumnExpandRatio("text", 1);
+            Item i = getItem(addItem());
+            i.getItemProperty("text").setValue(addButton);
+            setImmediate(true);
+            setSelectable(true);
+            addListener(new Property.ValueChangeListener() {
+                private static final long serialVersionUID = 448896474865195605L;
+
+                public void valueChange(
+                        com.vaadin.data.Property.ValueChangeEvent event) {
+                    // IndexedContainer idc = (IndexedContainer)
+                    // getContainerDataSource();
+
+                }
+
+            });
+        }
+
+        public void addNewRow() {
+            IndexedContainer idc = (IndexedContainer) getContainerDataSource();
+            int size = idc.size();
+            Object itemId = idc.addItemAt(size - 1);
+            Item newItem = idc.getItem(itemId);
+            TextField tf = new TextField();
+            if (inputPrompt != null && inputPrompt.length() > 0) {
+                tf.setInputPrompt(inputPrompt);
+            }
+            tf.setWidth("100%");
+
+            newItem.getItemProperty("id").setValue(nextItemIndex);
+            nextItemIndex++;
+            newItem.getItemProperty("text").setValue(tf);
+            setValue(itemId);
+            itemId = idc.addItemAt(size);
+            newItem = idc.getItem(itemId);
+
+            tf = new TextField();
+            if (inputPromptChild != null && inputPromptChild.length() > 0) {
+                tf.setInputPrompt(inputPromptChild);
+            }
+            // tf.setRows(1);
+            // tf.setHeight("45px");
+            tf.setWidth("100%");
+            tf.addStyleName("childtf");
+            newItem.getItemProperty("text").setValue(tf);
+
+        }
+
+        public void setButtonCaption(String caption) {
+            addButton.setCaption(caption);
+        }
+
+        public void buttonClick(ClickEvent event) {
+            Button b = event.getButton();
+            if (b == addButton) {
+                select(getNullSelectionItemId());
+                addNewRow();
+            }
+        }
+
+        public void setInputPrompt(String string) {
+            inputPrompt = string;
+        }
+
+        public void setInputPromptChild(String string) {
+            inputPromptChild = string;
+        }
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The table has 3 columns. The second column is expanded and contains 100% wide textfields. These should fill the available space. The third column is empty.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3145;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/UncollapsedCollumnWidth.html b/tests/testbench/com/vaadin/tests/components/table/UncollapsedCollumnWidth.html
new file mode 100644
index 0000000000..e1b39533f3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/UncollapsedCollumnWidth.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.UncollapsedCollumnWidth?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableUncollapsedCollumnWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>1,10</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstableUncollapsedCollumnWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertNotElementWidth</td>
+	<td>vaadin=runcomvaadintestscomponentstableUncollapsedCollumnWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
+	<td>0</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/table/UncollapsedCollumnWidth.java b/tests/testbench/com/vaadin/tests/components/table/UncollapsedCollumnWidth.java
new file mode 100644
index 0000000000..99b954fa63
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/UncollapsedCollumnWidth.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Table;
+
+public class UncollapsedCollumnWidth extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Table table = new Table();
+        table.addContainerProperty("Col1", String.class, "");
+        table.addContainerProperty("Col2", String.class, "");
+        table.setColumnCollapsingAllowed(true);
+        table.setColumnCollapsed("Col2", true);
+
+        table.setColumnWidth("Col1", 150);
+
+        table.setWidth("400px");
+
+        table.addItem(new Object[] { "Cell 1", "Cell 2" }, new Object());
+
+        addComponent(table);
+        addComponent(new Button("Uncollapse col2", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                table.setColumnCollapsed("Col2", false);
+            }
+        }));
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Uncollapsing col2 after resizing col1 should set a reasonable width for col2. Additionally, the width of the header and the cell content should be the same.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return Integer.valueOf(7012);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/table/WideSelectableTable.java b/tests/testbench/com/vaadin/tests/components/table/WideSelectableTable.java
new file mode 100644
index 0000000000..c820dc08d5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/table/WideSelectableTable.java
@@ -0,0 +1,45 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+
+public class WideSelectableTable extends TestBase {
+
+    @Override
+    protected void setup() {
+        final int NUMBER_OF_COLS = 50;
+
+        // mainWindow.setSizeFull();
+        // setMainWindow(mainWindow);
+
+        Table ptable = new Table();
+        for (int colcount = 0; colcount < NUMBER_OF_COLS; colcount++) {
+            String col = "COL_" + colcount + "";
+            ptable.addContainerProperty(col, String.class, "--");
+            ptable.addItem(colcount + "-").getItemProperty(col)
+                    .setValue("--" + colcount + "");
+        }
+        ptable.setSelectable(true);
+        ptable.setMultiSelect(true);
+        ptable.setColumnReorderingAllowed(false);
+        ptable.setImmediate(true);
+
+        ptable.setWidth("100%");
+        ptable.setPageLength(5);
+
+        VerticalLayout vl = new VerticalLayout();
+        vl.addComponent(ptable);
+        addComponent(vl);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A wide table scrolls to the beginning when sorting a column at  the beginning when sorting a column at the end";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6788;
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/table/fi.gif b/tests/testbench/com/vaadin/tests/components/table/fi.gif
new file mode 100755
index 0000000000..8d3a191828
Binary files /dev/null and b/tests/testbench/com/vaadin/tests/components/table/fi.gif differ
diff --git a/tests/testbench/com/vaadin/tests/components/table/se.gif b/tests/testbench/com/vaadin/tests/components/table/se.gif
new file mode 100755
index 0000000000..80f6285228
Binary files /dev/null and b/tests/testbench/com/vaadin/tests/components/table/se.gif differ
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/AddAndRemoveTabs.html b/tests/testbench/com/vaadin/tests/components/tabsheet/AddAndRemoveTabs.html
new file mode 100644
index 0000000000..993ef79c91
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/AddAndRemoveTabs.html
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>AddAndRemoveTabs</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">AddAndRemoveTabs</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tabsheet.AddAndRemoveTabs?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VHorizontalLayout[1]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetAddAndRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>v-tabsheet-tabitemcell-first</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/AddAndRemoveTabs.java b/tests/testbench/com/vaadin/tests/components/tabsheet/AddAndRemoveTabs.java
new file mode 100644
index 0000000000..3b5166a21e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/AddAndRemoveTabs.java
@@ -0,0 +1,60 @@
+package com.vaadin.tests.components.tabsheet;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.TabSheet;
+
+public class AddAndRemoveTabs extends TestBase {
+    private TabSheet tabSheet;
+
+    private int counter = 0;
+
+    @Override
+    public void setup() {
+        tabSheet = new TabSheet();
+        addTab();
+        addComponent(tabSheet);
+
+        Button addTabBtn = new Button("Add new tab",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        addTab();
+                    }
+
+                });
+        addComponent(addTabBtn);
+    }
+
+    private void addTab() {
+        final HorizontalLayout layout = new HorizontalLayout();
+        layout.setCaption("Test " + counter);
+
+        Button closeTab = new Button("Close tab", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                tabSheet.removeComponent(layout);
+
+            }
+
+        });
+
+        layout.addComponent(closeTab);
+
+        tabSheet.addComponent(layout);
+        counter++;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Removing all tabs and then adding new tabs should work properly and without javascript errors. All new tabs should be displayed and not only the first one";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2861;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/PreventTabChange.html b/tests/testbench/com/vaadin/tests/components/tabsheet/PreventTabChange.html
new file mode 100644
index 0000000000..c4f5998f47
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/PreventTabChange.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8080/" />
+<title>PreventTabChange</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">PreventTabChange</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tabsheet.PreventTabChange</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetPreventTabChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetPreventTabChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetPreventTabChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetPreventTabChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/PreventTabChange.java b/tests/testbench/com/vaadin/tests/components/tabsheet/PreventTabChange.java
new file mode 100644
index 0000000000..f1faecb711
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/PreventTabChange.java
@@ -0,0 +1,67 @@
+package com.vaadin.tests.components.tabsheet;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
+import com.vaadin.ui.TabSheet.SelectedTabChangeListener;
+
+public class PreventTabChange extends TestBase implements
+        SelectedTabChangeListener {
+
+    private TabSheet tabSheet;
+
+    private Component lastTab;
+
+    private Label tab1;
+    private Label tab2;
+    private Label tab3;
+
+    @Override
+    protected String getDescription() {
+        return "Tests prevention of selecting certain tabs. Selecting the tabs in order (1-2-3-1) should work, while selecting out of order should cause the current tab to remain selected. The selected tab will actually first be changed (by the client) and then changed back (on the server response).";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3199;
+    }
+
+    @Override
+    protected void setup() {
+        tabSheet = new TabSheet();
+        tabSheet.addListener(this);
+        tab1 = new Label("Tab 1 contents");
+        tab2 = new Label("Tab 2 contents");
+        tab3 = new Label("Tab 3 contents");
+
+        tabSheet.addTab(tab1, "The first tab", null);
+        tabSheet.addTab(tab2, "The second tab", null);
+        tabSheet.addTab(tab3, "The third tab", null);
+
+        lastTab = tab1;
+        tabSheet.setSelectedTab(tab1);
+
+        addComponent(tabSheet);
+    }
+
+    public void selectedTabChange(SelectedTabChangeEvent event) {
+
+        TabSheet tabsheet = event.getTabSheet();
+        if (lastTab == tab1) {
+            if (tabsheet.getSelectedTab() != tab2) {
+                tabsheet.setSelectedTab(lastTab);
+            }
+        } else if (lastTab == tab2) {
+            if (tabsheet.getSelectedTab() != tab3) {
+                tabsheet.setSelectedTab(lastTab);
+            }
+        } else if (lastTab == tab3) {
+            if (tabsheet.getSelectedTab() != tab1) {
+                tabsheet.setSelectedTab(lastTab);
+            }
+        }
+        lastTab = tabsheet.getSelectedTab();
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/RemoveTabs.java b/tests/testbench/com/vaadin/tests/components/tabsheet/RemoveTabs.java
new file mode 100644
index 0000000000..8602a9a3b4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/RemoveTabs.java
@@ -0,0 +1,145 @@
+package com.vaadin.tests.components.tabsheet;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractComponentContainer;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.Tab;
+
+public class RemoveTabs extends TestBase {
+
+    protected TabSheet tabsheet;
+
+    protected Component[] tab = new Component[5];
+
+    private Button closeCurrent;
+    private Button closeCurrentWithTab;
+    private Button closeFirst;
+    private Button closeLast;
+    private Button reorderTabs;
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2425;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tests the removal of individual tabs from a Tabsheet. No matter what is done in this test the tab caption \"Tab X\" should always match the content \"Tab X\". Use \"remove first\" and \"remove active\" buttons to remove the first or the active tab. The \"reorder\" button reverses the order by adding and removing all components.";
+    }
+
+    @Override
+    protected void setup() {
+        tabsheet = new TabSheet();
+        for (int i = 1; i <= tab.length; i++) {
+            tab[i - 1] = new Label("This is the contents of tab " + i);
+            tab[i - 1].setCaption("Tab " + i);
+
+            tabsheet.addComponent(tab[i - 1]);
+        }
+
+        getLayout().addComponent(tabsheet);
+
+        closeCurrent = new Button("Close current tab");
+        closeCurrent.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                closeCurrentTab();
+
+            }
+        });
+
+        closeCurrentWithTab = new Button("Close current tab with Tab");
+        closeCurrentWithTab.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                closeCurrentTabWithTab();
+
+            }
+        });
+
+        closeFirst = new Button("close first tab");
+        closeFirst.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                closeFirstTab();
+
+            }
+        });
+
+        closeLast = new Button("close last tab");
+        closeLast.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                closeLastTab();
+
+            }
+        });
+
+        reorderTabs = new Button("reorder");
+        reorderTabs.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                reorder();
+
+            }
+        });
+
+        getLayout().addComponent(closeFirst);
+        getLayout().addComponent(closeLast);
+        getLayout().addComponent(closeCurrent);
+        getLayout().addComponent(closeCurrentWithTab);
+        getLayout().addComponent(reorderTabs);
+
+    }
+
+    private void closeCurrentTab() {
+        Component c = tabsheet.getSelectedTab();
+        if (c != null) {
+            tabsheet.removeComponent(c);
+        }
+    }
+
+    private void closeCurrentTabWithTab() {
+        Component c = tabsheet.getSelectedTab();
+        if (c != null) {
+            Tab t = tabsheet.getTab(c);
+            tabsheet.removeTab(t);
+        }
+    }
+
+    private void closeFirstTab() {
+        tabsheet.removeComponent(tabsheet.getComponentIterator().next());
+    }
+
+    private void closeLastTab() {
+        Iterator<Component> i = tabsheet.getComponentIterator();
+        Component last = null;
+        while (i.hasNext()) {
+            last = i.next();
+
+        }
+        tabsheet.removeComponent(last);
+    }
+
+    private void reorder() {
+        AbstractComponentContainer container = tabsheet;
+
+        if (container != null) {
+            List<Component> c = new ArrayList<Component>();
+            Iterator<Component> i = container.getComponentIterator();
+            while (i.hasNext()) {
+                Component comp = i.next();
+                c.add(comp);
+            }
+            container.removeAllComponents();
+
+            for (int j = c.size() - 1; j >= 0; j--) {
+                container.addComponent(c.get(j));
+            }
+
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/RemoveTabsTabsheet.html b/tests/testbench/com/vaadin/tests/components/tabsheet/RemoveTabsTabsheet.html
new file mode 100644
index 0000000000..13f103b82d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/RemoveTabsTabsheet.html
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>RemoveTabs</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">RemoveTabs</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tabsheet.RemoveTabs?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tabs-S1-2-3-4-5</td>
+</tr>
+<!--Close first-->
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tabs-S2-3-4-5</td>
+</tr>
+<!--Select tab 4-->
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<!--Close current tab-->
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tabs-S2-3-5</td>
+</tr>
+<!--Reorder tabs-->
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tabs-S5-3-2</td>
+</tr>
+<!--Close last tab-->
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<!--Select tab 3-->
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tabs-S5-3</td>
+</tr>
+<!--Close using removeTab-->
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetRemoveTabs::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tabs-S5</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabGetAndReplaceComponent.html b/tests/testbench/com/vaadin/tests/components/tabsheet/TabGetAndReplaceComponent.html
new file mode 100644
index 0000000000..fce39361e1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabGetAndReplaceComponent.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tabsheet.TabGetAndReplaceComponent?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>18,13</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VLabel[1]</td>
+	<td>Content 2</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VLabel[1]</td>
+	<td>Replacement 2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>41,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>16,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>39,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>42,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>37,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabGetAndReplaceComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VLabel[0]</td>
+	<td>Content 1</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabGetAndReplaceComponent.java b/tests/testbench/com/vaadin/tests/components/tabsheet/TabGetAndReplaceComponent.java
new file mode 100644
index 0000000000..c49133dd7c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabGetAndReplaceComponent.java
@@ -0,0 +1,54 @@
+package com.vaadin.tests.components.tabsheet;
+
+import java.util.Iterator;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.Tab;
+
+public class TabGetAndReplaceComponent extends TestBase {
+
+    @Override
+    protected void setup() {
+        final TabSheet tabs = new TabSheet();
+
+        tabs.addTab(new Label("Content 1"), "Content 1", null);
+        tabs.addTab(new Label("Content 2"), "Content 2", null);
+        tabs.addTab(new Label("Content 3"), "Content 3", null);
+        tabs.addTab(new Label("Content 4"), "Content 4", null);
+        tabs.addTab(new Label("Content 5"), "Content 5", null);
+        addComponent(tabs);
+
+        Button replace2 = new Button("Replace Content 2",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        Iterator<Component> iter = tabs.getComponentIterator();
+                        iter.next();
+
+                        Component content2 = iter.next();
+                        Tab tab = tabs.getTab(content2);
+
+                        // Replace content
+                        tabs.replaceComponent(tab.getComponent(), new Label(
+                                "Replacement 2"));
+
+                    }
+                });
+        addComponent(replace2);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The tab should have a reference to the component it holds";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6188;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetBasicOperations.html b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetBasicOperations.html
new file mode 100644
index 0000000000..5ee81a48d1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetBasicOperations.html
@@ -0,0 +1,330 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tabsheet.TabSheetTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--hide log to avoid messing up screenshots-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item1</td>
+	<td>33,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>31,9</td>
+</tr>
+<!--Add some components-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
+	<td>21,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>49,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>16,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>49,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+	<td>94,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
+	<td>41,21</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>49,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>28,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>39,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+	<td>28,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
+	<td>52,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>74,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>50,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+	<td>72,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[3]/VMenuBar[0]#item5</td>
+	<td>51,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
+	<td>16,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>89,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>76,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>56,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[3]/VMenuBar[0]#item6</td>
+	<td>19,2</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>auto-auto-button</td>
+</tr>
+<!--Set width and height-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
+	<td>34,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>54,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>8,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[2]/VMenuBar[0]#item6</td>
+	<td>17,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
+	<td>42,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>47,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>19,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[2]/VMenuBar[0]#item5</td>
+	<td>29,3</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>500px-400px-button</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
+	<td>24,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>75,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
+	<td>46,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>40,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+	<td>18,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
+	<td>41,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>70,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
+	<td>62,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>20,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+	<td>19,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>selected-0-closable-0-2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+	<td>1,21</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>selected-2-closable-0-2</td>
+</tr>
+<!--Close and selection listeners-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
+	<td>29,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>49,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>80,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item0</td>
+	<td>18,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>67,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
+	<td>71,9</td>
+</tr>
+<!--show log to be able to assert-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_Smenu#item1</td>
+	<td>33,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>31,9</td>
+</tr>
+<!--close tab 2-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>10,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_SLog/ChildComponentContainer[1]/VLabel[0]</td>
+	<td>10. Tab 2 closed</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>11. Tab 0 selected</td>
+</tr>
+<!--select tab 1-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>32,7</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>12. Tab 1 selected</td>
+</tr>
+<!--select tab 2-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>46,9</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>13. Tab 2 selected</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetCaptions.html b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetCaptions.html
new file mode 100644
index 0000000000..d240d4b419
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetCaptions.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TabSheetCaptions</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TabSheetCaptions</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tabsheet.TabSheetCaptions</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetCaptions::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>Panel initial caption (should also be tab caption)</td>
+</tr>
+<tr>
+	<td>verifyText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetCaptions::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VPanel[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>Panel initial caption (should also be tab caption)</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetCaptions::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetCaptions::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>This is a new tab caption Sun, 2001-Sep-09</td>
+</tr>
+<tr>
+	<td>verifyText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetCaptions::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VPanel[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>Panel initial caption (should also be tab caption)</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetCaptions::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetCaptions::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>This is a new tab caption Sun, 2001-Sep-09</td>
+</tr>
+<tr>
+	<td>verifyText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetCaptions::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VPanel[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>This is a new panel caption Sun, 2001-Sep-09</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetCaptions.java b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetCaptions.java
new file mode 100644
index 0000000000..8449dd42bf
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetCaptions.java
@@ -0,0 +1,64 @@
+package com.vaadin.tests.components.tabsheet;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TabSheet;
+
+public class TabSheetCaptions extends TestBase {
+
+    Panel panel1;
+
+    @Override
+    protected String getDescription() {
+        return "Updating the tabsheet tab text should not change the caption of the component. Click on the button to change the tab text. This must update the tab and not touch the Panel's caption.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2846;
+    }
+
+    @Override
+    protected void setup() {
+        final TabSheet tabSheet = new TabSheet();
+        // Define date and locale so that it doesn't change for machine/time
+        final SimpleDateFormat dateFormatter = new SimpleDateFormat(
+                "EEE, yyyy-MMM-dd", Locale.ENGLISH);
+        final Date date = new Date();
+        date.setTime((long) 1000000000000.0);
+
+        panel1 = new Panel("Panel initial caption (should also be tab caption)");
+        panel1.setSizeFull();
+        panel1.getContent().setSizeFull();
+        panel1.addComponent(new Label("This is a panel"));
+        tabSheet.addTab(panel1);
+
+        Button button = new Button("Update tab caption");
+        button.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                tabSheet.getTab(panel1).setCaption(
+                        "This is a new tab caption "
+                                + dateFormatter.format(date));
+            }
+        });
+
+        Button button2 = new Button("Update panel caption");
+        button2.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                panel1.setCaption("This is a new panel caption "
+                        + dateFormatter.format(date));
+            }
+        });
+
+        addComponent(tabSheet);
+        addComponent(button);
+        addComponent(button2);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetDisabling.html b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetDisabling.html
new file mode 100644
index 0000000000..bc03f7687b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetDisabling.html
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TabSheetDisabling</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TabSheetDisabling</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tabsheet.TabSheetDisabling</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[5]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>1</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>1</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[2]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[6]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>2</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[3]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>3</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[1]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDisabling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[2]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>4</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetDisabling.java b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetDisabling.java
new file mode 100644
index 0000000000..4f4ab836ed
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetDisabling.java
@@ -0,0 +1,62 @@
+package com.vaadin.tests.components.tabsheet;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.TabSheet;
+
+public class TabSheetDisabling extends TestBase {
+
+    private static final int NR_BUTTONS = 10;
+    private Button buttons[] = new Button[NR_BUTTONS];
+    private TabSheet tabSheet;
+
+    @Override
+    public void setup() {
+        tabSheet = new TabSheet();
+        for (int i = 0; i < NR_BUTTONS; i++) {
+            if (i % 2 == 0) {
+                buttons[i] = new Button("Disable this tab",
+                        new ClickListener() {
+
+                            public void buttonClick(ClickEvent event) {
+                                Button b = event.getButton();
+                                tabSheet.getTab(b).setEnabled(false);
+
+                            }
+
+                        });
+            } else {
+                buttons[i] = new Button("Hide this tab", new ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        Button b = event.getButton();
+                        tabSheet.getTab(b).setVisible(false);
+                    }
+
+                });
+            }
+            tabSheet.addTab(buttons[i]);
+        }
+
+        Button button = new Button("Enable/disable", new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                tabSheet.setEnabled(!tabSheet.isEnabled());
+            }
+        });
+        addComponent(tabSheet);
+        addComponent(button);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Switching the tabsheet between disabled and enabled should not change which tab is selected. Disabling the open tab should select the first enabled tab.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2658;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetDiscardsMovedComponents.html b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetDiscardsMovedComponents.html
new file mode 100644
index 0000000000..4cb6925b28
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetDiscardsMovedComponents.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
+<head profile="http://selenium-ide.openqa.org/profiles/test-case"> 
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
+<link rel="selenium.base" href="" /> 
+<title>New Test</title> 
+</head> 
+<body> 
+<table cellpadding="1" cellspacing="1" border="1"> 
+<thead> 
+<tr><td rowspan="1" colspan="3">New Test</td></tr> 
+</thead><tbody> 
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tabsheet.TabSheetDiscardsMovedComponents?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDiscardsMovedComponents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDiscardsMovedComponents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>31,9</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDiscardsMovedComponents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VTextField[0]</td>
+	<td>Text</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDiscardsMovedComponents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDiscardsMovedComponents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+	<td>33,4</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetDiscardsMovedComponents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td>Button</td>
+</tr>
+</tbody></table> 
+</body> 
+</html> 
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetDiscardsMovedComponents.java b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetDiscardsMovedComponents.java
new file mode 100644
index 0000000000..34b5dc86c8
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetDiscardsMovedComponents.java
@@ -0,0 +1,52 @@
+package com.vaadin.tests.components.tabsheet;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TextField;
+
+public class TabSheetDiscardsMovedComponents extends TestBase {
+
+    private GridLayout grid = new GridLayout();
+    private TabSheet tabSheet = new TabSheet();
+
+    @Override
+    public void setup() {
+        tabSheet.addTab(new Label("The tabSheet"), "Initial content");
+        tabSheet.setSizeUndefined();
+
+        grid.setColumns(2);
+        TextField textField = new TextField("Text field");
+        textField.setValue("Text");
+        addTestComponent(textField);
+        addTestComponent(new Button("Button"));
+
+        addComponent(tabSheet);
+        addComponent(grid);
+    }
+
+    private void addTestComponent(final Component component) {
+        grid.addComponent(component);
+        grid.addComponent(new Button("Move to tab", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                tabSheet.addTab(component);
+                grid.removeComponent(event.getButton());
+            }
+        }));
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Moving an already rendered component to a tabsheet and not immediately selecting the new tab should cause no problems";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2669;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetIcons.html b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetIcons.html
new file mode 100644
index 0000000000..425da11af4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetIcons.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TabSheetIcons</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TabSheetIcons</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tabsheet.TabSheetIcons</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetIcons.java b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetIcons.java
new file mode 100644
index 0000000000..49c9784eb9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetIcons.java
@@ -0,0 +1,54 @@
+package com.vaadin.tests.components.tabsheet;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TextField;
+
+public class TabSheetIcons extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Tests rendering of a Tabsheet with fixed/dynamic width when the TabSheet contains icons";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+    @Override
+    protected void setup() {
+        TabSheet ts1 = createTabsheet();
+        ts1.setHeight("100px");
+        TabSheet ts2 = createTabsheet();
+        ts2.setHeight("100px");
+        ts2.setWidth("400px");
+
+        addComponent(ts1);
+        addComponent(ts2);
+    }
+
+    private TabSheet createTabsheet() {
+        TabSheet tabsheet = new TabSheet();
+        tabsheet.setSizeUndefined();
+
+        Component[] tab = new Component[3];
+        tab[0] = new Label("This is tab 1");
+        tab[0].setIcon(new ThemeResource("../runo/icons/32/folder-add.png"));
+        tab[0].setCaption("tab number 1");
+        tab[1] = new TextField("This is tab 2", "Contents of tab 2 textfield");
+        tab[2] = new Label("This is tab 3");
+        tab[2].setIcon(new ThemeResource("../runo/icons/16/folder-add.png"));
+        tab[2].setCaption("tab number 3");
+
+        for (Component c : tab) {
+            tabsheet.addTab(c);
+        }
+
+        return tabsheet;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetIndexOperations.html b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetIndexOperations.html
new file mode 100644
index 0000000000..8db5641603
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetIndexOperations.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tabsheet.TabSheetIndexOperations?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetIndexOperations::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetIndexOperations::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>Added Tab 1</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetIndexOperations::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetIndexOperations::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>1 baT deddA</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetIndexOperations::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetIndexOperations::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>Tab 1</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetIndexOperations.java b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetIndexOperations.java
new file mode 100644
index 0000000000..c106144144
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetIndexOperations.java
@@ -0,0 +1,75 @@
+package com.vaadin.tests.components.tabsheet;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.Tab;
+
+public class TabSheetIndexOperations extends TestBase {
+
+    private int tabCounter = 1;
+
+    @Override
+    protected void setup() {
+        final TabSheet tabs = new TabSheet();
+        
+        // Add some tabs
+        tabs.addTab(new Label("Content 1"), "Tab 1", null);
+        tabs.addTab(new Label("Content 2"), "Tab 2", null);
+        tabs.addTab(new Label("Content 3"), "Tab 3", null);
+        
+        addComponent(tabs);
+        
+        Button addTab = new Button("Add tab at index 2", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                        tabs.addTab(new Label("Content " + tabCounter),
+                                "Added Tab " + tabCounter, null, 2);
+                        tabCounter++;
+                    }
+                });
+        addComponent(addTab);
+
+        Button setCaption = new Button("Invert tab caption at index 2",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        Tab tab = tabs.getTab(2);
+                        tab.setCaption(new StringBuffer(tab.getCaption())
+                                .reverse().toString());
+            }
+        });
+        addComponent(setCaption);
+
+        Button move = new Button("Move selected tab to index 2",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        tabs.setTabPosition(tabs.getTab(tabs.getSelectedTab()),
+                                2);
+                    }
+                });
+        addComponent(move);
+        
+        Button getIndex = new Button("Get selected tab index", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                        getMainWindow().showNotification(
+                                "Index: "
+                                        + tabs.getTabPosition(tabs.getTab(tabs
+                                                .getSelectedTab())));
+                
+            }
+        });
+        addComponent(getIndex);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "You can use indexes to add and reorder the TabSheet";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6188;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetMinimal.java b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetMinimal.java
new file mode 100644
index 0000000000..db647f7110
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetMinimal.java
@@ -0,0 +1,39 @@
+package com.vaadin.tests.components.tabsheet;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+
+public class TabSheetMinimal extends TestBase {
+
+    int index = 1;
+    TabSheet ts = new TabSheet();
+
+    @Override
+    protected void setup() {
+        ts.setStyleName("minimal");
+        Button b = new Button("Add a tab", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                ts.addTab(new Label("" + index), "Tab " + index, null);
+                index++;
+
+            }
+        });
+        addComponent(ts);
+        addComponent(b);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Adding tabs to a 'minimal' style TabSheet work properly even if the TabSheet is initially empty";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4227;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetTabStyleNames.html b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetTabStyleNames.html
new file mode 100644
index 0000000000..d49e2817d3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetTabStyleNames.html
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TabSheetTabStyleNames</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TabSheetTabStyleNames</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tabsheet.TabSheetTabStyleNames?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTabStyleNames::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>v-tabsheet-tabitemcell-TabSheetTabStyleNames</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTabStyleNames::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertNotCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTabStyleNames::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>v-tabsheet-tabitemcell-TabSheetTabStyleNames</td>
+</tr>
+<tr>
+	<td>assertCSSClass</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabSheetTabStyleNames::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]</td>
+	<td>v-tabsheet-tabitemcell-TabSheetTabStyleNames_0</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetTabStyleNames.java b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetTabStyleNames.java
new file mode 100644
index 0000000000..5c806b2ac2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetTabStyleNames.java
@@ -0,0 +1,51 @@
+package com.vaadin.tests.components.tabsheet;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.Tab;
+
+public class TabSheetTabStyleNames extends TestBase {
+
+    private static final String STYLE_NAME = "TabSheetTabStyleNames";
+
+    @Override
+    public void setup() {
+        setTheme("tests-tickets");
+
+        TabSheet tabsheet = new TabSheet();
+        final Tab tab1 = tabsheet.addTab(new Label(), "Tab 1");
+        final Tab tab2 = tabsheet.addTab(new Label(), "Tab 2");
+
+        tab1.setStyleName(STYLE_NAME);
+
+        addComponent(new Button("Update style names",
+                new Button.ClickListener() {
+                    int counter = 0;
+
+                    public void buttonClick(ClickEvent event) {
+                        if (tab1.getStyleName() == null) {
+                            tab1.setStyleName(STYLE_NAME);
+                        } else {
+                            tab1.setStyleName(null);
+                        }
+
+                        tab2.setStyleName(STYLE_NAME + "_" + (counter++));
+                    }
+                }));
+
+        addComponent(tabsheet);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tests setting style names for individual tabs.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5880;
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetTabTheming.java b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetTabTheming.java
new file mode 100644
index 0000000000..94b49d4ae0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetTabTheming.java
@@ -0,0 +1,27 @@
+package com.vaadin.tests.components.tabsheet;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+
+public class TabSheetTabTheming extends TestBase {
+
+    @Override
+    public void setup() {
+        TabSheet tabsheet = new TabSheet();
+        tabsheet.setStyleName("pg");
+        tabsheet.addTab(new Label(), "Brown fox and the fence", null);
+        tabsheet.addTab(new Label(), "Something about using all the keys", null);
+        addComponent(tabsheet);
+        setTheme("tests-tickets");
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Changing tabs should not cause flickering, cut text or text that moves back and forth.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6781;
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetTest.java b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetTest.java
new file mode 100644
index 0000000000..bbbe92f069
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetTest.java
@@ -0,0 +1,202 @@
+package com.vaadin.tests.components.tabsheet;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.terminal.Resource;
+import com.vaadin.tests.components.AbstractComponentContainerTest;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.CloseHandler;
+import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
+import com.vaadin.ui.TabSheet.SelectedTabChangeListener;
+import com.vaadin.ui.TabSheet.Tab;
+
+public class TabSheetTest<T extends TabSheet> extends
+        AbstractComponentContainerTest<T> implements SelectedTabChangeListener {
+
+    private Command<T, Integer> setTabCaption = new Command<T, Integer>() {
+
+        public void execute(T c, Integer value, Object data) {
+            c.getTab(value).setCaption((String) data);
+
+        }
+    };
+    private Command<T, Integer> setTabIcon = new Command<T, Integer>() {
+
+        public void execute(T c, Integer value, Object data) {
+            c.getTab(value).setIcon((Resource) data);
+
+        }
+    };
+    private Command<T, Integer> setTabClosable = new Command<T, Integer>() {
+
+        public void execute(T c, Integer value, Object data) {
+            c.getTab(value).setClosable((Boolean) data);
+        }
+    };
+    private Command<T, Boolean> setCloseHandlerListener = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            if (value) {
+                c.setCloseHandler(new CloseHandler() {
+                    public void onTabClose(TabSheet tabsheet, Component c) {
+                        tabClosed(tabsheet, tabsheet.getTab(c));
+                        tabsheet.removeComponent(c);
+                    }
+
+                });
+            } else {
+                c.setCloseHandler(new CloseHandler() {
+                    public void onTabClose(TabSheet tabsheet, Component c) {
+                        tabsheet.removeComponent(c);
+                    }
+                });
+            }
+
+        }
+    };
+    private Command<T, Boolean> setSelectedTabListener = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((SelectedTabChangeListener) TabSheetTest.this);
+            } else {
+                c.removeListener((SelectedTabChangeListener) TabSheetTest.this);
+            }
+
+        }
+    };
+
+    private Command<T, Integer> selectTab = new Command<T, Integer>() {
+        public void execute(T c, Integer index, Object data) {
+            c.setSelectedTab(c.getTab(index).getComponent());
+        }
+    };
+    private Command<T, Boolean> hideTabs = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean value, Object data) {
+            c.hideTabs(value);
+
+        }
+    };
+
+    @Override
+    protected Class<T> getTestClass() {
+        return (Class<T>) TabSheet.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+        createSetTabCaptionIcon(CATEGORY_FEATURES);
+        createSelectTab(CATEGORY_FEATURES);
+        createClosableToggle(CATEGORY_FEATURES);
+        createCloseHandlerToggle(CATEGORY_LISTENERS);
+        createSelectListenerToggle(CATEGORY_LISTENERS);
+        createHideTabsToggle(CATEGORY_FEATURES);
+
+        // TODO
+        // Insert tab at x
+
+    }
+
+    private void createHideTabsToggle(String category) {
+        createBooleanAction("Hide tabs", category, false, hideTabs);
+
+    }
+
+    private void createSelectListenerToggle(String category) {
+        createBooleanAction("Selected tab listener", category, false,
+                setSelectedTabListener);
+
+    }
+
+    private void createCloseHandlerToggle(String category) {
+        createBooleanAction("Close event listener (handler)", category, false,
+                setCloseHandlerListener);
+
+    }
+
+    private void createClosableToggle(String category) {
+        String closableCategory = "Set tab closable";
+        createCategory(closableCategory, category);
+        for (int i = 0; i < 20; i++) {
+            String tabClosableCategory = "Tab " + i + " closable";
+
+            createCategory(tabClosableCategory, closableCategory);
+            createClickAction("true", tabClosableCategory, setTabClosable, i,
+                    true);
+            createClickAction("false", tabClosableCategory, setTabClosable, i,
+                    false);
+
+        }
+    }
+
+    private void createSelectTab(String category) {
+        String selectTabCategory = "Select tab";
+        createCategory(selectTabCategory, category);
+        for (int i = 0; i < 20; i++) {
+            createClickAction("Select tab " + i, selectTabCategory, selectTab,
+                    i);
+
+        }
+    }
+
+    private void createSetTabCaptionIcon(String category) {
+        String captionCategory = "Set tab caption";
+        String iconCategory = "Set tab icon";
+        createCategory(captionCategory, category);
+        createCategory(iconCategory, category);
+
+        String captionOptions[] = new String[] { "", "{id}", "Tab {id}",
+                "A long caption for tab {id}" };
+        LinkedHashMap<String, Resource> iconOptions = new LinkedHashMap<String, Resource>();
+        iconOptions.put("-", null);
+        iconOptions.put("16x16 (cachable)", ICON_16_USER_PNG_CACHEABLE);
+        iconOptions.put("16x16 (uncachable)", ICON_16_USER_PNG_UNCACHEABLE);
+        iconOptions.put("32x32 (cachable)", ICON_32_ATTENTION_PNG_CACHEABLE);
+        iconOptions
+                .put("32x32 (uncachable)", ICON_32_ATTENTION_PNG_UNCACHEABLE);
+        iconOptions.put("64x64 (cachable)", ICON_64_EMAIL_REPLY_PNG_CACHEABLE);
+        iconOptions.put("64x64 (uncachable)",
+                ICON_64_EMAIL_REPLY_PNG_UNCACHEABLE);
+
+        for (int i = 0; i < 20; i++) {
+            String tabCaptionCategory = "Tab " + i + " caption";
+            String tabIconCategory = "Tab " + i + " icon";
+
+            createCategory(tabCaptionCategory, captionCategory);
+            createCategory(tabIconCategory, iconCategory);
+
+            createClickAction("(null)", tabCaptionCategory, setTabCaption,
+                    Integer.valueOf(i), null);
+            createClickAction("(null)", tabIconCategory, setTabIcon,
+                    Integer.valueOf(i), null);
+
+            for (String option : captionOptions) {
+                option = option.replace("{id}", String.valueOf(i));
+                createClickAction(option, tabCaptionCategory, setTabCaption,
+                        Integer.valueOf(i), option);
+            }
+
+            for (String option : iconOptions.keySet()) {
+                Resource icon = iconOptions.get(option);
+                createClickAction(option, tabIconCategory, setTabIcon,
+                        Integer.valueOf(i), icon);
+            }
+
+        }
+
+    }
+
+    private void tabClosed(TabSheet tabSheet, Tab tab) {
+        log("Tab " + tabSheet.getTabPosition(tab) + " closed");
+    }
+
+    public void selectedTabChange(SelectedTabChangeEvent event) {
+        TabSheet ts = event.getTabSheet();
+        log("Tab " + ts.getTabPosition(ts.getTab(ts.getSelectedTab()))
+                + " selected");
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetWithoutTabCaption.html b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetWithoutTabCaption.html
new file mode 100644
index 0000000000..36e85c1b37
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetWithoutTabCaption.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TabSheetWithoutTabCaption</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TabSheetWithoutTabCaption</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tabsheet.TabSheetWithoutTabCaption</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetWithoutTabCaption.java b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetWithoutTabCaption.java
new file mode 100644
index 0000000000..d766277b48
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabSheetWithoutTabCaption.java
@@ -0,0 +1,28 @@
+package com.vaadin.tests.components.tabsheet;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+
+public class TabSheetWithoutTabCaption extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "There should be a tabsheet with one tab visible. The tab has no caption and contains a label saying 'Tab contents'.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected void setup() {
+        final TabSheet moduleArea = new TabSheet();
+        Label label = new Label("Tab contents");
+        moduleArea.addTab(label);
+        addComponent(moduleArea);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetNPE.java b/tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetNPE.java
new file mode 100644
index 0000000000..ac460dafbb
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetNPE.java
@@ -0,0 +1,59 @@
+package com.vaadin.tests.components.tabsheet;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.Tab;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class TabsheetNPE extends AbstractTestCase implements ClickListener {
+
+    @Override
+    protected String getDescription() {
+        return "Enable and activate tab should enable and activate the first tab.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3292;
+    }
+
+    private static final int TABS_COUNT = 3;
+    private TabSheet tabSheet;
+    private Label[] label = new Label[TABS_COUNT];
+    private Tab[] tab = new Tab[TABS_COUNT];
+
+    @Override
+    public void init() {
+        setMainWindow(new Window("TabSheet Demo", createMainLayout()));
+    }
+
+    private VerticalLayout createMainLayout() {
+        VerticalLayout layout = new VerticalLayout();
+
+        tabSheet = new TabSheet();
+        for (int i = 1; i <= TABS_COUNT; i++) {
+            label[i - 1] = new Label("Tab " + i);
+            tab[i - 1] = tabSheet.addTab(label[i - 1], "Tab " + i, null);
+            tab[i - 1].setEnabled(false);
+        }
+
+        layout.addComponent(tabSheet);
+        Button btn = new Button("Enable and activate tab");
+        btn.addListener(this);
+        layout.addComponent(btn);
+        return layout;
+    }
+
+    public void buttonClick(ClickEvent event) {
+        for (int i = 0; i < TABS_COUNT; i++) {
+            tab[i].setEnabled(true);
+        }
+        tabSheet.setSelectedTab(label[0]);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetScrolling.html b/tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetScrolling.html
new file mode 100644
index 0000000000..dd45e2c591
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetScrolling.html
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TabsheetScrolling</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TabsheetScrolling</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tabsheet.TabsheetScrolling?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[1]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[1]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[1]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[1]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[1]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTabsheet[0]/VTabsheetPanel[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTabsheet[0]/VTabsheetPanel[0]/VButton[1]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[1]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[2]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[3]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[4]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[5]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetScrolling::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VButton[6]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetScrolling.java b/tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetScrolling.java
new file mode 100644
index 0000000000..0880b57eed
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetScrolling.java
@@ -0,0 +1,74 @@
+package com.vaadin.tests.components.tabsheet;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.Tab;
+
+public class TabsheetScrolling extends TestBase {
+
+    private TabSheet fixedSizeTabSheet;
+    private TabSheet autoWideTabSheet;
+
+    @Override
+    protected void setup() {
+        fixedSizeTabSheet = new TabSheet();
+        fixedSizeTabSheet.setHeight("200px");
+        fixedSizeTabSheet.setWidth("400px");
+
+        for (int i = 0; i < 100; i++) {
+            Button b = new Button("Hide this tab (" + i + ")",
+                    new ClickListener() {
+
+                        public void buttonClick(ClickEvent event) {
+                            fixedSizeTabSheet.getTab(event.getButton())
+                                    .setVisible(false);
+                        }
+
+                    });
+            Tab t = fixedSizeTabSheet.addTab(b, "Tab " + i, null);
+            if (i % 2 == 0) {
+                t.setVisible(false);
+            }
+        }
+
+        addComponent(fixedSizeTabSheet);
+
+        autoWideTabSheet = new TabSheet();
+        autoWideTabSheet.setHeight("200px");
+        autoWideTabSheet.setWidth(null);
+
+        for (int i = 0; i < 10; i++) {
+            Button b = new Button("Hide this tab (" + i + ")",
+                    new ClickListener() {
+
+                        public void buttonClick(ClickEvent event) {
+                            autoWideTabSheet.getTab(event.getButton())
+                                    .setVisible(false);
+                        }
+                    });
+
+            Tab t = autoWideTabSheet.addTab(b, "Tab " + i, null);
+            if (i % 2 == 0) {
+                t.setVisible(false);
+
+            }
+        }
+
+        addComponent(autoWideTabSheet);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Two tabsheets, upper has fixed width, lower has dynamic width. Every other tab in both tabsheets are hidden (even numbered tabs). Scrolling the upper tab sheet should never display a hidden tab. Hiding a tab in the upper tabsheet should not affect scrolling. Hiding a tab in the lower tabsheet should make the tabsheet width change (auto wide).";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3141;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetTooltip.html b/tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetTooltip.html
new file mode 100644
index 0000000000..d133ab9937
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetTooltip.html
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>TabsheetTooltip</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TabsheetTooltip</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tabsheet.TabsheetTooltip</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>no-tooltip</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip-tab1</td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetTabsheetTooltip::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>0,0</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tooltip-tab2</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetTooltip.java b/tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetTooltip.java
new file mode 100644
index 0000000000..18934e9318
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/TabsheetTooltip.java
@@ -0,0 +1,37 @@
+package com.vaadin.tests.components.tabsheet;
+
+import com.vaadin.terminal.UserError;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.Tab;
+
+public class TabsheetTooltip extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The label inside the tabsheet should show a tooltip 'This is a label' and the tab should show a different tooltip 'This is a tab'";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2995;
+    }
+
+    @Override
+    protected void setup() {
+        TabSheet tabSheet = new TabSheet();
+        Label l = new Label("Label");
+        l.setDescription("This is a label");
+
+        Tab tab = tabSheet.addTab(l, "Tab", null);
+        tab.setDescription("This is a tab");
+        tab.setComponentError(new UserError("abc error"));
+
+        Tab tab2 = tabSheet.addTab(new Label("Another label, d'oh"), "Tab 2",
+                null);
+        tab2.setDescription("This is another tab");
+
+        addComponent(tabSheet);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/VerticalScrollbarPosition.html b/tests/testbench/com/vaadin/tests/components/tabsheet/VerticalScrollbarPosition.html
new file mode 100644
index 0000000000..3da03edb6a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/VerticalScrollbarPosition.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>VerticalScrollbarPosition</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">VerticalScrollbarPosition</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tabsheet.VerticalScrollbarPosition</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>1</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetVerticalScrollbarPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[1]/domChild[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>2</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetVerticalScrollbarPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>3</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstabsheetVerticalScrollbarPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>1</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/VerticalScrollbarPosition.java b/tests/testbench/com/vaadin/tests/components/tabsheet/VerticalScrollbarPosition.java
new file mode 100644
index 0000000000..b6e00a1e59
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/VerticalScrollbarPosition.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.components.tabsheet;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.TextField;
+
+public class VerticalScrollbarPosition extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "A vertical scrollbar in a TabSheet should always be placed at the right edge";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2473;
+    }
+
+    @Override
+    protected void setup() {
+        TabSheet tabsheet = new TabSheet();
+        tabsheet.setWidth(null);
+        tabsheet.setHeight("200px");
+        TextArea tf = new TextArea();
+        tf.setRows(2);
+        tf.setHeight("300px");
+        tf.setWidth("200px");
+        tabsheet.addTab(
+                tf,
+                "A text field that is 200px wide, the tab bar for the tabsheet is wider",
+                null);
+        TextField tf2 = new TextField("Another tab", "b");
+        tf2.setWidth("1000px");
+        tf2.setHeight("50px");
+        tabsheet.addTab(tf2);
+        addComponent(tabsheet);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/textarea/TextAreaBasicStates.html b/tests/testbench/com/vaadin/tests/components/textarea/TextAreaBasicStates.html
new file mode 100644
index 0000000000..52be660ad2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textarea/TextAreaBasicStates.html
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.textarea.TextAreaTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--Write "content" -->
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_StestComponent</td>
+	<td>content</td>
+</tr>
+<!--Disable event log-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_Smenu#item1</td>
+	<td>26,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>20,8</td>
+</tr>
+<!-- Enabled state -->
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled</td>
+</tr>
+<!--Disable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_Smenu#item0</td>
+	<td>38,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>31,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>57,13</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled</td>
+</tr>
+<!--Set readonly-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_Smenu#item0</td>
+	<td>6,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>20,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled-readonly</td>
+</tr>
+<!--Enable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_Smenu#item0</td>
+	<td>43,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>42,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>53,5</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>readonly</td>
+</tr>
+<!--Set read-write-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_Smenu#item0</td>
+	<td>6,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>20,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/textarea/TextAreaNullRepresentation.html b/tests/testbench/com/vaadin/tests/components/textarea/TextAreaNullRepresentation.html
new file mode 100644
index 0000000000..eb62d30374
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textarea/TextAreaNullRepresentation.html
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.textarea.TextAreaTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--ValueChangeListener-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_Smenu#item0</td>
+	<td>35,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>37,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>42,9</td>
+</tr>
+<!--Null representation-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_Smenu#item0</td>
+	<td>22,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>32,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>52,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>17,7</td>
+</tr>
+<!--Type null representation-->
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_StestComponent</td>
+	<td>This is empty</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
+	<td>176,130</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>2. ValueChangeEvent, new value: null</td>
+</tr>
+<!--Enter text-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_StestComponent</td>
+	<td>44,10</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_StestComponent</td>
+	<td>abc</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. ValueChangeEvent, new value: 'abc'</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_StestComponent</td>
+	<td>74,14</td>
+</tr>
+<!--Type null representation-->
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_StestComponent</td>
+	<td>This is empty</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
+	<td>176,130</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaTextAreaTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>4. ValueChangeEvent, new value: null</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/textarea/TextAreaTest.java b/tests/testbench/com/vaadin/tests/components/textarea/TextAreaTest.java
new file mode 100644
index 0000000000..8d7b6b3dc9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textarea/TextAreaTest.java
@@ -0,0 +1,43 @@
+package com.vaadin.tests.components.textarea;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.tests.components.abstractfield.AbstractTextFieldTest;
+import com.vaadin.ui.TextArea;
+
+public class TextAreaTest extends AbstractTextFieldTest<TextArea> {
+
+    private Command<TextArea, Boolean> wordwrapCommand = new Command<TextArea, Boolean>() {
+        public void execute(TextArea c, Boolean value, Object data) {
+            c.setWordwrap(value);
+        }
+    };
+
+    private Command<TextArea, Integer> rowsCommand = new Command<TextArea, Integer>() {
+        public void execute(TextArea c, Integer value, Object data) {
+            c.setRows(value);
+        }
+    };
+
+    @Override
+    protected Class<TextArea> getTestClass() {
+        return TextArea.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+        createWordwrapAction(CATEGORY_FEATURES);
+        createRowsAction(CATEGORY_FEATURES);
+    }
+
+    private void createRowsAction(String category) {
+        LinkedHashMap<String, Integer> options = createIntegerOptions(20);
+        createSelectAction("Rows", category, options, "3", rowsCommand);
+    }
+
+    private void createWordwrapAction(String category) {
+        createBooleanAction("Wordwrap", category, false, wordwrapCommand);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/textarea/TextAreaWordwrap.html b/tests/testbench/com/vaadin/tests/components/textarea/TextAreaWordwrap.html
new file mode 100644
index 0000000000..780e95a358
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textarea/TextAreaWordwrap.html
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.textarea.Wordwrap?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>wrap-nowrap</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaWordwrap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
+	<td>98,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaWordwrap::</td>
+	<td>396,331</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>wrap-wrap</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaWordwrap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
+	<td>98,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextareaWordwrap::/VVerticalLayout[0]/domChild[0]/domChild[0]</td>
+	<td>387,96</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>wrap-nowrap</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/textarea/Wordwrap.java b/tests/testbench/com/vaadin/tests/components/textarea/Wordwrap.java
new file mode 100644
index 0000000000..9a443ea757
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textarea/Wordwrap.java
@@ -0,0 +1,59 @@
+package com.vaadin.tests.components.textarea;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.LoremIpsum;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.TextArea;
+
+public class Wordwrap extends TestBase {
+
+    @Override
+    public void setup() {
+        HorizontalLayout layout = new HorizontalLayout();
+
+        TextArea area1 = new TextArea("Wrapping");
+        area1.setWordwrap(true); // The default
+        area1.setValue(LoremIpsum.get(50) + "\n" + "Another row");
+
+        final TextArea area2 = new TextArea("Nonwrapping");
+        area2.setWordwrap(false);
+        area2.setValue(LoremIpsum.get(50) + "\n" + "Another row");
+
+        layout.addComponent(area1);
+        layout.addComponent(area2);
+        layout.setSpacing(true);
+
+        addComponent(layout);
+
+        CheckBox onoff = new CheckBox("Wrap state for the right field");
+        onoff.setValue(false);
+        onoff.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                boolean wrap = (Boolean) event.getProperty().getValue();
+                area2.setWordwrap(wrap);
+                if (wrap) {
+                    area2.setCaption("Wrapping");
+                } else {
+                    area2.setCaption("Nonwrapping");
+                }
+
+            }
+        });
+        onoff.setImmediate(true);
+
+        addComponent(onoff);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6003;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/EnterShortcutMaySendInputPromptAsValue.java b/tests/testbench/com/vaadin/tests/components/textfield/EnterShortcutMaySendInputPromptAsValue.java
new file mode 100644
index 0000000000..bf9924cdbb
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/EnterShortcutMaySendInputPromptAsValue.java
@@ -0,0 +1,57 @@
+package com.vaadin.tests.components.textfield;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.event.Action;
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+
+public class EnterShortcutMaySendInputPromptAsValue extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "?";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2935;
+    }
+
+    @Override
+    protected void setup() {
+
+        final TextField testField = new TextField();
+        testField.setInputPrompt("Enter a value");
+
+        getMainWindow().addActionHandler(new Action.Handler() {
+
+            final Action enter = new ShortcutAction("enter",
+                    ShortcutAction.KeyCode.ENTER, null);
+
+            public Action[] getActions(Object target, Object sender) {
+                return new Action[] { enter };
+            }
+
+            public void handleAction(Action action, Object sender, Object target) {
+                if (action == enter) {
+
+                }
+            }
+
+        });
+        testField.addListener(new ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                String value = event.getProperty().getValue().toString();
+                addComponent(new Label("TextField sent value: " + value));
+                testField.setValue("");
+            }
+        });
+
+        addComponent(testField);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/IE6Cursor.java b/tests/testbench/com/vaadin/tests/components/textfield/IE6Cursor.java
new file mode 100644
index 0000000000..ed25567921
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/IE6Cursor.java
@@ -0,0 +1,28 @@
+package com.vaadin.tests.components.textfield;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.TextField;
+
+public class IE6Cursor extends TestBase {
+
+    @Override
+    protected void setup() {
+        TextField tf1 = new TextField("First");
+        TextField tf2 = new TextField("Second");
+        tf2.setInputPrompt("prompt");
+
+        addComponent(tf1);
+        addComponent(tf2);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tabbing from the first field to the second should clear the second textfield and show the normal, blinking cursor in the field";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3343;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/OutOfSyncIssueWithKeyboardShortcut.java b/tests/testbench/com/vaadin/tests/components/textfield/OutOfSyncIssueWithKeyboardShortcut.java
new file mode 100644
index 0000000000..cf59a9d7f4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/OutOfSyncIssueWithKeyboardShortcut.java
@@ -0,0 +1,192 @@
+package com.vaadin.tests.components.textfield;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.BeanContainer;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.event.ShortcutAction.KeyCode;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalSplitPanel;
+
+public class OutOfSyncIssueWithKeyboardShortcut extends TestBase {
+
+    public static class TestToppingsView extends CustomComponent {
+
+        public static class Topping {
+            private Long id;
+            private String name = "ham";
+
+            public void setId(Long id) {
+                this.id = id;
+            }
+
+            public Long getId() {
+                return id;
+            }
+
+            public void setName(String name) {
+                this.name = name;
+            }
+
+            public String getName() {
+                return name;
+            }
+        }
+
+        private Table table = new Table();
+
+        private Form form = new Form();
+
+        private Map<Long, Topping> toppings = new HashMap<Long, Topping>();
+        private long index = 1;
+
+        private String previousFragment = null;
+
+        public TestToppingsView() {
+            setSizeFull();
+
+            VerticalSplitPanel mainLayout = new VerticalSplitPanel();
+            mainLayout.setSplitPosition(30);
+            setCompositionRoot(mainLayout);
+
+            table.setSizeFull();
+            table.setImmediate(true);
+            table.setSelectable(true);
+
+            mainLayout.setFirstComponent(table);
+            mainLayout.setSecondComponent(form);
+
+            form.setImmediate(true);
+            // this is critical for the problem to occur
+            form.setWriteThrough(false);
+
+            HorizontalLayout footer = new HorizontalLayout();
+            footer.setSpacing(true);
+            form.setFooter(footer);
+            Button saveButton = new Button("Save");
+            footer.addComponent(saveButton);
+
+            // make saving the form the default action on Enter keypress
+            saveButton.setClickShortcut(KeyCode.ENTER);
+
+            table.addListener(new ValueChangeListener() {
+                public void valueChange(ValueChangeEvent event) {
+                    Object value = event.getProperty().getValue();
+                    if (value != null) {
+                        String fragment = "edit/"
+                                + String.valueOf(value)
+                                        .replaceAll("[^0-9]", "");
+                        if (!fragment.equals(previousFragment)) {
+                            navigateTo(fragment);
+                        }
+                    }
+                }
+            });
+
+            saveButton.addListener(new ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    form.commit();
+                    Topping entity = getEntityForItem(form.getItemDataSource());
+                    if (entity != null && entity.getId() == null) {
+                        entity.setId(index++);
+                        toppings.put(entity.getId(), entity);
+                    }
+                    refreshTable();
+                    navigateTo(null);
+                }
+            });
+
+            // create new entity at the beginning
+            refreshTable();
+            navigateTo("new");
+        }
+
+        public void navigateTo(String requestedDataId) {
+            previousFragment = requestedDataId;
+
+            if ("new".equals(requestedDataId)) {
+                table.setValue(null);
+                form.setVisible(true);
+                setCurrentEntity(new Topping());
+                form.focus();
+            } else if (requestedDataId != null
+                    && requestedDataId.startsWith("edit/")) {
+                try {
+                    Long id = Long.valueOf(requestedDataId.substring(5));
+                    setCurrentEntity(getEntityForItem(table.getItem(id)));
+                    form.focus();
+                } catch (NumberFormatException e) {
+                    setCurrentEntity(null);
+                }
+            } else {
+                setCurrentEntity(null);
+            }
+        }
+
+        private void refreshTable() {
+            // refresh table
+            BeanContainer<Long, Topping> container = new BeanContainer<Long, Topping>(
+                    Topping.class);
+            container.setBeanIdProperty("id");
+            for (Topping entity : toppings.values()) {
+                container.addBean(entity);
+            }
+            table.setContainerDataSource(container);
+        }
+
+        protected void setCurrentEntity(Topping entity) {
+            form.setVisible(entity != null);
+            if (entity != null) {
+                Item item = table.getItem(entity.getId());
+                if (item == null) {
+                    item = new BeanItem<Topping>(entity);
+                }
+                form.setItemDataSource(item, Collections.singleton("name"));
+            } else {
+                form.setItemDataSource(null);
+            }
+        }
+
+        public Topping getEntityForItem(Item item) {
+            if (item != null) {
+                return ((BeanItem<Topping>) item).getBean();
+            } else {
+                return null;
+            }
+        }
+
+    }
+
+    @Override
+    protected void setup() {
+        TestToppingsView testToppingsView = new TestToppingsView();
+        addComponent(testToppingsView);
+        getLayout().setSizeFull();
+        getLayout().setExpandRatio(testToppingsView, 1);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Focus the text field and press ENTER.\n"
+                + "Click on the table row to edit it, change the text to \"ahm\" using the keyboard and press ENTER again.\n"
+                + "Then select the table row again.\n"
+                + "This causes an Out of Sync error if the cursor position for the text field is sent too late to a component that is no longer in the layout.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6834;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/SelectionAndCursorPosition.html b/tests/testbench/com/vaadin/tests/components/textfield/SelectionAndCursorPosition.html
new file mode 100644
index 0000000000..c058d8d975
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/SelectionAndCursorPosition.html
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>SelectionAndCursorPosition</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">SelectionAndCursorPosition</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.textfield.SelectionAndCursorPosition?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>singleline-all</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>79,13</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>5</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>15</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>109,16</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>109,16</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>10</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>singleline-partly</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[1]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>37,9</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[1]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>15</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[1]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>singleline-cursor</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VCheckBox[0]/domChild[0]</td>
+	<td>9,1</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>multiline-all</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>multiline-partly</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSelectionAndCursorPosition::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VHorizontalLayout[1]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>multiline-cursor</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/SelectionAndCursorPosition.java b/tests/testbench/com/vaadin/tests/components/textfield/SelectionAndCursorPosition.java
new file mode 100644
index 0000000000..d362a3050d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/SelectionAndCursorPosition.java
@@ -0,0 +1,105 @@
+package com.vaadin.tests.components.textfield;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TextField;
+
+public class SelectionAndCursorPosition extends TestBase {
+
+    TextField tf = new TextField();
+
+    @Override
+    protected void setup() {
+
+        tf.setCaption("Text field");
+        tf.setValue("So we have some text to select");
+        tf.setWidth("400px");
+
+        FormLayout fl = new FormLayout();
+        Panel panel = new Panel(fl);
+        panel.setCaption("Hackers panel");
+        CheckBox ml = new CheckBox("Multiline");
+        ml.setImmediate(true);
+        ml.addListener(new Property.ValueChangeListener() {
+            @SuppressWarnings("deprecation")
+            public void valueChange(ValueChangeEvent event) {
+                if (tf.getHeight() < 0) {
+                    tf.setHeight("50px");
+                } else {
+                    tf.setSizeUndefined();
+                    tf.setRows(0);
+                }
+                tf.setWidth("400px");
+            }
+        });
+        fl.addComponent(ml);
+
+        Button b = new Button("Select all ( selectAll() )");
+        b.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                tf.selectAll();
+            }
+        });
+        fl.addComponent(b);
+
+        HorizontalLayout selectRange = new HorizontalLayout();
+        selectRange
+                .setCaption("Select range of text ( setSelectionRange(int start, int lengt) )");
+        final TextField start = new TextField("From:");
+        final TextField length = new TextField("Selection length:");
+        b = new Button("select");
+        b.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                int startPos = Integer.parseInt((String) start.getValue());
+                int lenght = Integer.parseInt((String) length.getValue());
+                tf.setSelectionRange(startPos, lenght);
+            }
+        });
+
+        selectRange.addComponent(start);
+        selectRange.addComponent(length);
+        selectRange.addComponent(b);
+        fl.addComponent(selectRange);
+
+        HorizontalLayout setCursorPosition = new HorizontalLayout();
+        final TextField pos = new TextField("Position:");
+        b = new Button("set");
+        b.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                int startPos = Integer.parseInt((String) pos.getValue());
+                tf.setCursorPosition(startPos);
+            }
+        });
+
+        setCursorPosition.addComponent(pos);
+        setCursorPosition.addComponent(b);
+        setCursorPosition
+                .setCaption("Set cursor position ( setCursorPosition(int pos) )");
+        fl.addComponent(setCursorPosition);
+
+        getLayout().addComponent(tf);
+        getLayout().addComponent(panel);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "For usability reasons it is often essential that developer "
+                + "can hint how to select the text in the "
+                + "field or where to set the cursor position.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2058;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/SetTabIndex.html b/tests/testbench/com/vaadin/tests/components/textfield/SetTabIndex.html
new file mode 100644
index 0000000000..b61b464f97
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/SetTabIndex.html
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8080/" />
+<title>SetTabIndex</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">SetTabIndex</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.textfield.SetTabIndex?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>39,10</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>111</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextField[0]</td>
+	<td>222</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>333</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
+	<td>444</td>
+</tr>
+<tr>
+	<td>pressSpecialKey</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VCheckBox[0]/domChild[0]</td>
+	<td>enter</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>333</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextField[0]</td>
+	<td>222</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
+	<td>444</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>111</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VCheckBox[0]/domChild[0]</td>
+	<td>-22,-191</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>readonly</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VCheckBox[0]/domChild[0]</td>
+	<td>8,11</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
+	<td>444</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
+	<td>555</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>666</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextField[0]</td>
+	<td>777</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>888</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VTextField[0]</td>
+	<td>555</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTextField[0]</td>
+	<td>777</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>666</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldSetTabIndex::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>888</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/SetTabIndex.java b/tests/testbench/com/vaadin/tests/components/textfield/SetTabIndex.java
new file mode 100644
index 0000000000..d81d26591a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/SetTabIndex.java
@@ -0,0 +1,54 @@
+package com.vaadin.tests.components.textfield;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.TextField;
+
+public class SetTabIndex extends TestBase {
+
+    @Override
+    protected void setup() {
+        final TextField field1 = new TextField("Field1 (tabindex 1)");
+        field1.setTabIndex(1);
+        addComponent(field1);
+
+        final TextField field3 = new TextField("Field3 (tabindex 3)");
+        field3.setTabIndex(3);
+        addComponent(field3);
+
+        final TextField field2 = new TextField("Field2 (tabindex 2)");
+        field2.setTabIndex(2);
+        addComponent(field2);
+
+        final TextField field0 = new TextField("Field2 (tabindex 0)");
+        addComponent(field0);
+
+        final CheckBox readonly = new CheckBox("Readonly");
+        readonly.setImmediate(true);
+        readonly.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                boolean readonly = Boolean.valueOf(event.getProperty()
+                        .getValue().toString());
+                field1.setReadOnly(readonly);
+                field2.setReadOnly(readonly);
+                field3.setReadOnly(readonly);
+                field0.setReadOnly(readonly);
+            }
+        });
+        addComponent(readonly);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "One should be able to set the TabIndex";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5487;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/SizedTextFields.java b/tests/testbench/com/vaadin/tests/components/textfield/SizedTextFields.java
new file mode 100644
index 0000000000..93ab80b88a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/SizedTextFields.java
@@ -0,0 +1,72 @@
+package com.vaadin.tests.components.textfield;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class SizedTextFields extends TestBase {
+
+    @SuppressWarnings("deprecation")
+    @Override
+    protected void setup() {
+
+        TextField tf;
+
+        VerticalLayout vl;
+
+        CssLayout cssLayout = new CssLayout() {
+            @Override
+            protected String getCss(Component c) {
+                return "margin-top: 20px; background:red;";
+            }
+        };
+
+        vl = new VerticalLayout();
+        vl.setHeight("40px");
+        vl.setWidth("200px");
+
+        tf = new TextField();
+        tf.setSizeFull();
+        vl.addComponent(tf);
+        vl.setCaption("Fullsize textfield in 40px height 200px width box");
+        cssLayout.addComponent(vl);
+
+        vl = new VerticalLayout();
+        vl.setHeight("40px");
+        vl.setWidth("200px");
+
+        tf = new TextField();
+        tf.setRows(2); // make it text area, instead of oneliner
+        tf.setSizeFull();
+        vl.addComponent(tf);
+        vl.setCaption("Fullsize textarea in 100px height 200px width box");
+        cssLayout.addComponent(vl);
+
+        vl = new VerticalLayout();
+        vl.setSizeUndefined();
+
+        tf = new TextField();
+        vl.addComponent(tf);
+        vl.setCaption("Normal textfield in natural size.");
+        cssLayout.addComponent(vl);
+
+        getLayout().addComponent(cssLayout);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "TextField sizing is problematic with old IE browsers. "
+                + "This test is to verify correct size. No red color should "
+                + "be visible in IE (at least with default windows themes) "
+                + "and textfields should not look clipped.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2058;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextChangeEvents.java b/tests/testbench/com/vaadin/tests/components/textfield/TextChangeEvents.java
new file mode 100644
index 0000000000..f754beb792
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextChangeEvents.java
@@ -0,0 +1,137 @@
+package com.vaadin.tests.components.textfield;
+
+import com.vaadin.event.FieldEvents.TextChangeEvent;
+import com.vaadin.event.FieldEvents.TextChangeListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.tests.util.TestUtils;
+import com.vaadin.ui.AbstractTextField.TextChangeEventMode;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.TextField;
+
+public class TextChangeEvents extends TestBase {
+    Log l = new Log(10);
+
+    @Override
+    protected void setup() {
+
+        TextField tf = new TextField("Default");
+
+        TextChangeListener inputEventListener = new TextChangeListener() {
+
+            public void textChange(TextChangeEvent event) {
+                l.log("Text change event for  "
+                        + event.getComponent().getCaption()
+                        + ", text content currently:'" + event.getText()
+                        + "' Cursor at index:" + event.getCursorPosition());
+            }
+        };
+
+        tf.addListener(inputEventListener);
+
+        getLayout().addComponent(tf);
+
+        TextField eager = new TextField("Eager");
+        eager.addListener(inputEventListener);
+        eager.setTextChangeEventMode(TextChangeEventMode.EAGER);
+        getLayout().addComponent(eager);
+
+        TextField to = new TextField("Timeout 3s");
+        to.addListener(inputEventListener);
+        to.setTextChangeEventMode(TextChangeEventMode.TIMEOUT);
+        to.setTextChangeTimeout(3000);
+        getLayout().addComponent(to);
+
+        TextArea ta = new TextArea("Default text area");
+        ta.addListener(inputEventListener);
+        getLayout().addComponent(ta);
+
+        VaadinDeveloperNameField vd = new VaadinDeveloperNameField();
+        vd.addListener(inputEventListener);
+        getLayout().addComponent(vd);
+
+        getLayout().addComponent(l);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Simple TextChangeEvent test cases.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+    /**
+     * "Autosuggest"
+     * 
+     * Known issue is timing if suggestion comes while typing more content. IMO
+     * we will not support this kind of features in default TextField, but
+     * hopefully make it easily extendable to perfect suggest feature. MT
+     * 2010-10
+     * 
+     */
+    private class VaadinDeveloperNameField extends TextField implements
+            TextChangeListener {
+        private String[] names = new String[] { "Matti Tahvonen",
+                "Marc Englund", "Joonas Lehtinen", "Jouni Koivuviita",
+                "Marko Grönroos", "Artur Signell" };
+
+        public VaadinDeveloperNameField() {
+            setCaption("Start typing 'old' Vaadin developers.");
+            addListener((TextChangeListener) this);
+            setStyleName("nomatch");
+        }
+
+        @Override
+        public void attach() {
+            super.attach();
+            TestUtils.injectCSS(getWindow(), ".match { background:green ;} "
+                    + ".nomatch {background:red;}");
+        }
+
+        public void textChange(TextChangeEvent event) {
+            boolean atTheEndOfText = event.getText().length() == getCursorPosition();
+            String match = findMatch(event.getText());
+            if (match != null) {
+                setStyleName("match");
+                String curText = event.getText();
+                int matchlenght = curText.length();
+                // autocomplete if garret is at the end of the text
+                if (atTheEndOfText) {
+                    suggest(match, matchlenght);
+                } else {
+                    keepCurrentText(event.getText());
+                }
+            } else {
+                keepCurrentText(event.getText());
+                setStyleName("nomatch");
+            }
+        }
+
+        private void keepCurrentText(String curText) {
+            // keep the current text in the field despite the repaint due to
+            // classname change
+            setValue(curText);
+            setCursorPosition(getCursorPosition());
+        }
+
+        private void suggest(String match, int matchlenght) {
+            setValue(match);
+            setSelectionRange(matchlenght, match.length() - matchlenght);
+        }
+
+        private String findMatch(String currentTextContent) {
+            if (currentTextContent.length() > 0) {
+                for (int i = 0; i < names.length; i++) {
+                    if (names[i].startsWith(currentTextContent)) {
+                        return names[i];
+                    }
+                }
+            }
+            return null;
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextChangeEvents2.java b/tests/testbench/com/vaadin/tests/components/textfield/TextChangeEvents2.java
new file mode 100644
index 0000000000..b40ebb2434
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextChangeEvents2.java
@@ -0,0 +1,175 @@
+package com.vaadin.tests.components.textfield;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.event.FieldEvents.BlurEvent;
+import com.vaadin.event.FieldEvents.BlurListener;
+import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.event.FieldEvents.FocusListener;
+import com.vaadin.event.FieldEvents.TextChangeEvent;
+import com.vaadin.event.FieldEvents.TextChangeListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractTextField.TextChangeEventMode;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+
+public class TextChangeEvents2 extends TestBase {
+    @Override
+    protected void setup() {
+
+        {
+            final TextField tf = new TextField("Debug");
+            getLayout().addComponent(tf);
+
+            tf.addListener(new TextChangeListener() {
+                public void textChange(TextChangeEvent event) {
+                    System.err.println(tf.getCaption() + " textChange");
+                }
+            });
+
+            tf.addListener(new ValueChangeListener() {
+                public void valueChange(ValueChangeEvent event) {
+                    System.err.println(tf.getCaption() + " valueChange");
+                }
+            });
+
+            tf.addListener(new BlurListener() {
+
+                public void blur(BlurEvent event) {
+                    System.err.println(tf.getCaption() + " blur");
+                }
+            });
+
+            tf.addListener(new FocusListener() {
+                public void focus(FocusEvent event) {
+                    System.err.println(tf.getCaption() + " focus");
+                }
+            });
+
+        }
+
+        {
+            final TextField tf = new TextField("Label");
+            getLayout().addComponent(tf);
+            final Label l = new Label();
+            getLayout().addComponent(l);
+            tf.addListener(new TextChangeListener() {
+                public void textChange(TextChangeEvent event) {
+                    l.setValue(event.getText());
+                }
+            });
+
+            tf.addListener(new ValueChangeListener() {
+                public void valueChange(ValueChangeEvent event) {
+                    System.err.println(tf.getCaption() + " valueChange");
+                }
+            });
+
+        }
+
+        {
+            final TextField tf = new TextField("Slow label");
+            tf.setTextChangeTimeout(2000);
+            tf.setImmediate(true);
+            getLayout().addComponent(tf);
+            final Label l = new Label();
+            getLayout().addComponent(l);
+            tf.addListener(new TextChangeListener() {
+
+                public void textChange(TextChangeEvent event) {
+                    l.setValue(event.getText());
+                }
+            });
+
+            tf.addListener(new ValueChangeListener() {
+                public void valueChange(ValueChangeEvent event) {
+                    System.err.println(tf.getCaption() + " valueChange");
+                }
+            });
+
+        }
+
+        {
+            final TextField tf = new TextField("Uppercase");
+            tf.setTextChangeTimeout(1);
+            getLayout().addComponent(tf);
+            final Label l = new Label();
+            getLayout().addComponent(l);
+            tf.addListener(new TextChangeListener() {
+
+                public void textChange(TextChangeEvent event) {
+                    tf.setValue(event.getText().toUpperCase());
+                }
+            });
+
+            tf.addListener(new ValueChangeListener() {
+                public void valueChange(ValueChangeEvent event) {
+                    System.err.println(tf.getCaption() + " valueChange");
+                }
+            });
+
+        }
+
+        {
+            final TextField[] tfs = new TextField[] { new TextField(),
+                    new TextField(), new TextField(), new TextField() };
+            HorizontalLayout hl = new HorizontalLayout();
+            hl.setCaption("Blää");
+            getLayout().addComponent(hl);
+            for (TextField tf : tfs) {
+                tf.setColumns(4);
+                tf.setTextChangeEventMode(TextChangeEventMode.EAGER);
+                hl.addComponent(tf);
+
+                tf.addListener(new TextChangeListener() {
+
+                    public void textChange(TextChangeEvent event) {
+                        String txt = event.getText();
+                        int len = txt.length();
+                        if (len >= 4) {
+                            int idx = 0;
+                            while (tfs[idx] != event.getComponent()) {
+                                idx++;
+                            }
+                            tfs[idx].setValue("");
+                            tfs[idx].setValue(txt.substring(0, 4));
+                            if (idx < tfs.length - 1) {
+                                TextField next = tfs[idx + 1];
+                                next.focus();
+                                if (len > 4) {
+                                    next.setValue(txt.substring(4, len > 8 ? 8
+                                            : len));
+                                } else {
+                                    next.selectAll();
+                                }
+                            }
+                        }
+                    }
+                });
+                tf.addListener(new ValueChangeListener() {
+
+                    public void valueChange(ValueChangeEvent event) {
+                        TextField tf = (TextField) event.getProperty();
+                        String val = (String) tf.getValue();
+                        if (val != null && val.length() > 4) {
+                            tf.setValue(val.substring(0, 4));
+                        }
+                    }
+                });
+            }
+
+        }
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Another set of simple use case/tests for TextChangeEvents";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2387;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextChangeEventsEternalLoop.html b/tests/testbench/com/vaadin/tests/components/textfield/TextChangeEventsEternalLoop.html
new file mode 100644
index 0000000000..6f0772aa29
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextChangeEventsEternalLoop.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TextChangeEventsEternalLoop</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TextChangeEventsEternalLoop</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.textfield.TextChangeEventsEternalLoop?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextChangeEventsEternalLoop::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>99,4</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextChangeEventsEternalLoop::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>g</td>
+</tr>
+<tr>
+	<td>verifyValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextChangeEventsEternalLoop::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>g</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextChangeEventsEternalLoop.java b/tests/testbench/com/vaadin/tests/components/textfield/TextChangeEventsEternalLoop.java
new file mode 100644
index 0000000000..22348bb5b5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextChangeEventsEternalLoop.java
@@ -0,0 +1,32 @@
+package com.vaadin.tests.components.textfield;
+
+import com.vaadin.event.FieldEvents.TextChangeEvent;
+import com.vaadin.event.FieldEvents.TextChangeListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.TextField;
+
+public class TextChangeEventsEternalLoop extends TestBase {
+    @Override
+    protected void setup() {
+
+        final TextField tf = new TextField("Debug");
+        getLayout().addComponent(tf);
+
+        tf.addListener(new TextChangeListener() {
+            public void textChange(TextChangeEvent event) {
+                tf.setValue(event.getText());
+            }
+        });
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Moving current text to value in text change listener should not cause eternal loop.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6376;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextChangeEventsWithNonImmediateValueChange.java b/tests/testbench/com/vaadin/tests/components/textfield/TextChangeEventsWithNonImmediateValueChange.java
new file mode 100644
index 0000000000..a893739bff
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextChangeEventsWithNonImmediateValueChange.java
@@ -0,0 +1,55 @@
+package com.vaadin.tests.components.textfield;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.event.FieldEvents.TextChangeEvent;
+import com.vaadin.event.FieldEvents.TextChangeListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.TextField;
+
+public class TextChangeEventsWithNonImmediateValueChange extends TestBase {
+    Log l = new Log(5);
+
+    @Override
+    protected void setup() {
+
+        TextField tf = new TextField("Default");
+
+        TextChangeListener inputEventListener = new TextChangeListener() {
+
+            public void textChange(TextChangeEvent event) {
+                l.log("Text change event for  "
+                        + event.getComponent().getCaption()
+                        + ", text content currently:'" + event.getText()
+                        + "' Cursor at index:" + event.getCursorPosition());
+            }
+        };
+
+        tf.addListener(inputEventListener);
+
+        // tf.setImmediate(true); // works when this is set
+
+        tf.addListener(new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                l.log("Value change:" + event.getProperty().toString());
+            }
+        });
+
+        getLayout().addComponent(tf);
+
+        getLayout().addComponent(l);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Type a, pause for a second, type ENTER,  type a. Text field should not forget the last textchange event right after valuechange (enter).";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6866;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextChangeTimeoutAfterDetach.html b/tests/testbench/com/vaadin/tests/components/textfield/TextChangeTimeoutAfterDetach.html
new file mode 100644
index 0000000000..544cea9faa
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextChangeTimeoutAfterDetach.html
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.textfield.TextChangeTimeoutAfterDetach?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextChangeTimeoutAfterDetach::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>119,12</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextChangeTimeoutAfterDetach::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>aaaa</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextChangeTimeoutAfterDetach::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<!--Wait for 3 seconds so the timeout occurs-->
+<tr>
+	<td>pause</td>
+	<td>3000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextChangeTimeoutAfterDetach.java b/tests/testbench/com/vaadin/tests/components/textfield/TextChangeTimeoutAfterDetach.java
new file mode 100644
index 0000000000..d1f856f40c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextChangeTimeoutAfterDetach.java
@@ -0,0 +1,48 @@
+package com.vaadin.tests.components.textfield;
+
+import com.vaadin.event.FieldEvents.TextChangeEvent;
+import com.vaadin.event.FieldEvents.TextChangeListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractTextField.TextChangeEventMode;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+
+public class TextChangeTimeoutAfterDetach extends TestBase {
+
+    @Override
+    protected void setup() {
+        final TextField field = new TextField();
+        field.setImmediate(false);
+        field.setTextChangeTimeout(2000);
+        field.setTextChangeEventMode(TextChangeEventMode.TIMEOUT);
+        field.addListener(new TextChangeListener() {
+            public void textChange(TextChangeEvent event) {
+                // Need to add a listener for events to occur
+            }
+        });
+        addComponent(field);
+        
+        Button detachBtn = new Button("detach field",
+                new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                        removeComponent(field);
+                        getLayout().addComponentAsFirst(
+                                new Label("Field detached!"));
+            }
+        });
+        addComponent(detachBtn);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The textfield has a TextChangeTimout of 1 second. Edit the field and immidietly detach the field and you will cause an \"Out Of Sync\" error.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6507;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextFieldBasicStates.html b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldBasicStates.html
new file mode 100644
index 0000000000..823cbeb4e7
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldBasicStates.html
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.textfield.TextFieldTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--Write "content" -->
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>content</td>
+</tr>
+<!--Disable event log-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item1</td>
+	<td>26,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>20,8</td>
+</tr>
+<!-- Enabled state -->
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled</td>
+</tr>
+<!--Disable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>38,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>31,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>57,13</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled</td>
+</tr>
+<!--Set readonly-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>6,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>20,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled-readonly</td>
+</tr>
+<!--Enable-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>43,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>42,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>53,5</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>readonly</td>
+</tr>
+<!--Set read-write-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>6,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>20,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextFieldEagerRepaint.html b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldEagerRepaint.html
new file mode 100644
index 0000000000..ecd0467fb2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldEagerRepaint.html
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.textfield.TextFieldEagerRepaint?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>78,8</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>abCDef</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td></td>
+	<td>100</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>abef</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>73,15</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>a</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td></td>
+	<td>100</td>
+</tr>
+<tr>
+	<td>assertElementWidth</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>150</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>aB</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td></td>
+	<td>100</td>
+</tr>
+<tr>
+	<td>assertElementWidth</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>100</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldEagerRepaint::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+	<td>aB</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextFieldEagerRepaint.java b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldEagerRepaint.java
new file mode 100644
index 0000000000..08751a59fd
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldEagerRepaint.java
@@ -0,0 +1,53 @@
+package com.vaadin.tests.components.textfield;
+
+import com.vaadin.event.FieldEvents.TextChangeEvent;
+import com.vaadin.event.FieldEvents.TextChangeListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractTextField.TextChangeEventMode;
+import com.vaadin.ui.TextField;
+
+public class TextFieldEagerRepaint extends TestBase {
+
+    @Override
+    protected void setup() {
+
+        final TextField tf1 = new TextField("Updates value");
+        tf1.setTextChangeEventMode(TextChangeEventMode.EAGER);
+        tf1.addListener(new TextChangeListener() {
+            public void textChange(TextChangeEvent event) {
+                String text = event.getText();
+                if (!text.matches("[a-z]*")) {
+                    String newValue = text.replaceAll("[^a-z]", "");
+                    tf1.setValue(newValue);
+                }
+            }
+        });
+
+        final TextField tf2 = new TextField("Updates width");
+        tf2.setTextChangeEventMode(TextChangeEventMode.EAGER);
+        tf2.addListener(new TextChangeListener() {
+            public void textChange(TextChangeEvent event) {
+                String text = event.getText();
+                if (!text.matches("[a-z]*")) {
+                    tf2.setWidth("100px");
+                } else {
+                    tf2.setWidth("150px");
+                }
+            }
+        });
+
+        addComponent(tf1);
+        addComponent(tf2);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Updating the value in an EAGER TextChangeListener should send the new value to the client while updating something else (e.g. the width) should preserve the text in the field. Both fields react when the field contains anything else than lower case letters a-z";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return Integer.valueOf(6588);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextFieldFocusAndBlurListeners.java b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldFocusAndBlurListeners.java
new file mode 100644
index 0000000000..e2f5c45b72
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldFocusAndBlurListeners.java
@@ -0,0 +1,95 @@
+package com.vaadin.tests.components.textfield;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.event.FieldEvents.BlurEvent;
+import com.vaadin.event.FieldEvents.BlurListener;
+import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.event.FieldEvents.FocusListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.TextField;
+
+public class TextFieldFocusAndBlurListeners extends TestBase implements
+        FocusListener, BlurListener, ValueChangeListener {
+    private Log log = new Log(5).setNumberLogRows(false);
+
+    @Override
+    protected String getDescription() {
+        return "Tests the focus and blur functionality of TextField";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3544;
+    }
+
+    @Override
+    public void setup() {
+        addComponent(log);
+        TextField tf1 = new TextField("TextField 1",
+                "Has focus and blur listeners");
+        tf1.setWidth("300px");
+        tf1.addListener((FocusListener) this);
+        tf1.addListener((BlurListener) this);
+
+        addComponent(tf1);
+
+        TextField tf2 = new TextField("TextField 2",
+                "Has focus, blur and valuechange listeners");
+        tf2.setWidth("300px");
+        tf2.addListener(new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                TextFieldFocusAndBlurListeners.this.valueChange(event);
+            }
+        });
+        tf2.addListener(new FocusListener() {
+
+            public void focus(FocusEvent event) {
+                TextFieldFocusAndBlurListeners.this.focus(event);
+            }
+
+        });
+        tf2.addListener(new BlurListener() {
+
+            public void blur(BlurEvent event) {
+                TextFieldFocusAndBlurListeners.this.blur(event);
+            }
+        });
+
+        addComponent(tf2);
+
+        TextField tf3 = new TextField("TextField 3",
+                "Has non-immediate valuechange listener");
+        tf3.setWidth("300px");
+        tf3.addListener((ValueChangeListener) this);
+
+        addComponent(tf3);
+
+        TextField tf4 = new TextField("TextField 4",
+                "Has immediate valuechange listener");
+        tf4.setWidth("300px");
+        tf4.setImmediate(true);
+        tf4.addListener((ValueChangeListener) this);
+
+        addComponent(tf4);
+    }
+
+    public void focus(FocusEvent event) {
+        log.log(event.getComponent().getCaption() + ": Focus");
+
+    }
+
+    public void blur(BlurEvent event) {
+        TextField tf = (TextField) event.getComponent();
+        log.log(tf.getCaption() + ": Blur. Value is: "
+                + tf.getValue().toString());
+
+    }
+
+    public void valueChange(ValueChangeEvent event) {
+        TextField tf = (TextField) event.getProperty();
+        log.log(tf.getCaption() + ": ValueChange: " + tf.getValue().toString());
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextFieldInLayoutInTable.html b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldInLayoutInTable.html
new file mode 100644
index 0000000000..e53e8ed601
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldInLayoutInTable.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.textfield.TextFieldInLayoutInTable</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextFieldInLayoutInTable.java b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldInLayoutInTable.java
new file mode 100644
index 0000000000..451bc03f05
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldInLayoutInTable.java
@@ -0,0 +1,34 @@
+package com.vaadin.tests.components.textfield;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+@SuppressWarnings("serial")
+public class TextFieldInLayoutInTable extends Application {
+
+    @Override
+    public void init() {
+
+        final Window mainWindow = new Window(this.getClass().getName());
+        setMainWindow(mainWindow);
+
+        final Table table = new Table();
+        table.addContainerProperty("column1", Component.class, null);
+        final Panel panel = new Panel("Panel");
+        ((VerticalLayout) panel.getContent()).setMargin(false);
+        VerticalLayout vl = new VerticalLayout();
+        final TextField textField = new TextField();
+        vl.addComponent(textField);
+
+        table.addItem(new Object[] { vl }, 1);
+
+        table.setSizeFull();
+        mainWindow.addComponent(table);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextFieldMaxLength.html b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldMaxLength.html
new file mode 100644
index 0000000000..01c35aeea0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldMaxLength.html
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TextFieldMaxLength</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TextFieldMaxLength</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.textfield.TextFieldTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--ValueChangeListener-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>38,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>30,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>62,12</td>
+</tr>
+<!--MaxLength 5-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>29,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>38,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>76,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item5</td>
+	<td>22,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>57,13</td>
+</tr>
+<!--Enter some text-->
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>123456789012345</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>12345</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>2. ValueChangeEvent, new value: '12345'</td>
+</tr>
+<!--MaxLength 10-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>29,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>38,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>76,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item10</td>
+	<td>22,8</td>
+</tr>
+<!--Firefox 4 beta needs a brief pause to update the max length-->
+<tr>
+	<td>pause</td>
+	<td>1000</td>
+	<td></td>
+</tr>
+<!--Enter some text-->
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>123456789012345</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>1234567890</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>4. ValueChangeEvent, new value: '1234567890'</td>
+</tr>
+<!--Remove max length-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>29,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>38,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>76,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item14</td>
+	<td>22,8</td>
+</tr>
+<!--Enter some text-->
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>123456789012345</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>123456789012345</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>6. ValueChangeEvent, new value: '123456789012345'</td>
+</tr>
+<!--MaxLength 0-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>20,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>33,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>51,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>9,9</td>
+</tr>
+<!--Enter some text-->
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>123456789012345</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>8. ValueChangeEvent, new value: ''</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextFieldNullRepresentation.html b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldNullRepresentation.html
new file mode 100644
index 0000000000..5506351d34
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldNullRepresentation.html
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.textfield.TextFieldTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--ValueChangeListener-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>35,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>37,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>42,9</td>
+</tr>
+<!--Null representation-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>22,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>32,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>52,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>17,7</td>
+</tr>
+<!--Type null representation-->
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>This is empty</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
+	<td>176,130</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>2. ValueChangeEvent, new value: null</td>
+</tr>
+<!--Enter text-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>44,10</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>abc</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. ValueChangeEvent, new value: 'abc'</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>74,14</td>
+</tr>
+<!--Type null representation-->
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>This is empty</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
+	<td>176,130</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>4. ValueChangeEvent, new value: null</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextFieldNullRepresentationAndSelection.html b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldNullRepresentationAndSelection.html
new file mode 100644
index 0000000000..d1882575d1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldNullRepresentationAndSelection.html
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.textfield.TextFieldTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--ValueChangeListener-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>38,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>30,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>62,12</td>
+</tr>
+<!--Null representation "This is empty"-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>1,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>27,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>64,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>64,8</td>
+</tr>
+<!--non-empty contents-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>90,11</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>Not empty</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>2. ValueChangeEvent, new value: 'Not empty'</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>Not empty</td>
+</tr>
+<!--empty contents "This is empty"-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>102,10</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>This is empty</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
+	<td>114,149</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. ValueChangeEvent, new value: null</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>This is empty</td>
+</tr>
+<!--Turn off null selection allowed-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>28,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>23,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>94,10</td>
+</tr>
+<!--Change text to something else and back to null representation-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>84,13</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>This is empty2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
+	<td>120,102</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>5. ValueChangeEvent, new value: 'This is empty2'</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>This is empty2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>101,19</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>This is empty</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[2]</td>
+	<td>163,129</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>6. ValueChangeEvent, new value: 'This is empty'</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>This is empty</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextFieldSecret.html b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldSecret.html
new file mode 100644
index 0000000000..1e5a295971
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldSecret.html
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.textfield.TextFieldTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--Disable event log-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item1</td>
+	<td>19,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>24,1</td>
+</tr>
+<!--Enter "s3cr3t" in the TextField-->
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>s3cr3t</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>normal</td>
+</tr>
+<!--Change to secret-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>38,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item6</td>
+	<td>25,12</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>secret</td>
+</tr>
+<!--Change to normal-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>38,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item6</td>
+	<td>25,12</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>normal</td>
+</tr>
+<!--Change to secret-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>38,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item6</td>
+	<td>25,12</td>
+</tr>
+<!--ValueChangeListener-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>38,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>30,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>62,12</td>
+</tr>
+<!--Enable and clear event log-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item1</td>
+	<td>19,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>24,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item1</td>
+	<td>19,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item1</td>
+	<td>24,1</td>
+</tr>
+<!--Value -> Test-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>21,2</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item4</td>
+	<td>24,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>37,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>37,4</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>1. ValueChangeEvent, new value: 'Test'</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>Test</td>
+</tr>
+<!--Change to normal-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>38,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>51,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item6</td>
+	<td>25,12</td>
+</tr>
+<tr>
+	<td>assertValue</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>Test</td>
+</tr>
+<!---->
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextFieldTest.java b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldTest.java
new file mode 100644
index 0000000000..81b753d6e4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldTest.java
@@ -0,0 +1,59 @@
+package com.vaadin.tests.components.textfield;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.event.FieldEvents.TextChangeListener;
+import com.vaadin.tests.components.abstractfield.AbstractTextFieldTest;
+import com.vaadin.ui.TextField;
+
+public class TextFieldTest extends AbstractTextFieldTest<TextField> implements
+        TextChangeListener {
+
+    private Command<TextField, Boolean> secretCommand = new Command<TextField, Boolean>() {
+        @SuppressWarnings("deprecation")
+        public void execute(TextField c, Boolean value, Object data) {
+            c.setSecret(value);
+        }
+    };
+
+    private Command<TextField, Boolean> wordwrapCommand = new Command<TextField, Boolean>() {
+        @SuppressWarnings("deprecation")
+        public void execute(TextField c, Boolean value, Object data) {
+            c.setWordwrap(value);
+        }
+    };
+
+    private Command<TextField, Integer> rowsCommand = new Command<TextField, Integer>() {
+        @SuppressWarnings("deprecation")
+        public void execute(TextField c, Integer value, Object data) {
+            c.setRows(value);
+        }
+    };
+
+    @Override
+    protected Class<TextField> getTestClass() {
+        return TextField.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+        createSecretAction(CATEGORY_FEATURES);
+        createWordwrapAction(CATEGORY_FEATURES);
+        createRowsAction(CATEGORY_FEATURES);
+    }
+
+    private void createRowsAction(String category) {
+        LinkedHashMap<String, Integer> options = createIntegerOptions(20);
+        createSelectAction("Rows", category, options, "0", rowsCommand);
+    }
+
+    private void createSecretAction(String category) {
+        createBooleanAction("Secret", category, false, secretCommand);
+    }
+
+    private void createWordwrapAction(String category) {
+        createBooleanAction("Wordwrap", category, false, wordwrapCommand);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextFieldTextChangeEvent.htm b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldTextChangeEvent.htm
new file mode 100644
index 0000000000..e6ccc0f254
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextFieldTextChangeEvent.htm
@@ -0,0 +1,359 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<!-- Only works properly in Firefox and therefore named .htm instead of .html. Other browsers do not enter text with keydown,keypress,keyup combo. Cannot use pressSpecialKey either for some reason (not even in Firefox) -->
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.textfield.TextFieldTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--Enable text change listener-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>37,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>36,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>73,6</td>
+</tr>
+<!--Eager mode-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>36,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>36,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>98,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>30,5</td>
+</tr>
+<!--Enter "abc" and ensure there is one event for each change-->
+<tr>
+	<td>keyDown</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>a</td>
+</tr>
+<tr>
+	<td>keyPress</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>a</td>
+</tr>
+<tr>
+	<td>keyUp</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>a</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>keyDown</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>b</td>
+</tr>
+<tr>
+	<td>keyPress</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>b</td>
+</tr>
+<tr>
+	<td>keyUp</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>b</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>keyDown</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>c</td>
+</tr>
+<tr>
+	<td>keyPress</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>c</td>
+</tr>
+<tr>
+	<td>keyUp</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>c</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<!--Type is needed for a ValueChange to be sent when blurring the field-->
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>abc</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[2]/VLabel[0]</td>
+	<td>2. TextChangeEvent: text='a', cursor position=1 (field cursor pos: 1)</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[1]/VLabel[0]</td>
+	<td>3. TextChangeEvent: text='ab', cursor position=2 (field cursor pos: 2)</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>4. TextChangeEvent: text='abc', cursor position=3 (field cursor pos: 3)</td>
+</tr>
+<!--Lazy mode-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>36,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>36,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>98,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>30,5</td>
+</tr>
+<!--Set timeout to 5s-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>11,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>28,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item5</td>
+	<td>74,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item5</td>
+	<td>49,15</td>
+</tr>
+<!--Enter "def" and ensure there is only one text change event-->
+<tr>
+	<td>keyDown</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>d</td>
+</tr>
+<tr>
+	<td>keyPress</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>d</td>
+</tr>
+<tr>
+	<td>keyUp</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>d</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>1000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>keyDown</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>e</td>
+</tr>
+<tr>
+	<td>keyPress</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>e</td>
+</tr>
+<tr>
+	<td>keyUp</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>e</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>3000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>keyDown</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>f</td>
+</tr>
+<tr>
+	<td>keyPress</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>f</td>
+</tr>
+<tr>
+	<td>keyUp</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>f</td>
+</tr>
+<!--Wait for the timeout-->
+<tr>
+	<td>pause</td>
+	<td>5000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>7. TextChangeEvent: text='abcdef', cursor position=6 (field cursor pos: 6)</td>
+</tr>
+<!--Clear the value-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>-18,15</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>8. TextChangeEvent: text='', cursor position=0 (field cursor pos: 0)</td>
+</tr>
+<!--Timeout mode (5s)-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_Smenu#item0</td>
+	<td>41,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>28,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>110,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>33,9</td>
+</tr>
+<!--Slowly enter "def" and ensure there are several events (one after 500ms with de, another one afterwards with def)-->
+<tr>
+	<td>keyDown</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>d</td>
+</tr>
+<tr>
+	<td>keyPress</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>d</td>
+</tr>
+<tr>
+	<td>keyUp</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>d</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>4000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>keyDown</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>e</td>
+</tr>
+<tr>
+	<td>keyPress</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>e</td>
+</tr>
+<tr>
+	<td>keyUp</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>e</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>4000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>10. TextChangeEvent: text='de', cursor position=2 (field cursor pos: 2)</td>
+</tr>
+<tr>
+	<td>keyDown</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>f</td>
+</tr>
+<tr>
+	<td>keyPress</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>f</td>
+</tr>
+<tr>
+	<td>keyUp</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_StestComponent</td>
+	<td>f</td>
+</tr>
+<!--Wait for the timeout-->
+<tr>
+	<td>pause</td>
+	<td>6000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFieldTest::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>11. TextChangeEvent: text='def', cursor position=3 (field cursor pos: 3)</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextFields.html b/tests/testbench/com/vaadin/tests/components/textfield/TextFields.html
new file mode 100644
index 0000000000..3a13fdbdcf
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextFields.html
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>TextFields</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TextFields</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.textfield.TextFields?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>enabled</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFields::PID_Scheckboxaction-Required/domChild[0]</td>
+	<td>3,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFields::PID_Scheckboxaction-Error indicators/domChild[0]</td>
+	<td>31,13</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>required-and-error</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFields::PID_Scheckboxaction-Readonly/domChild[0]</td>
+	<td>17,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>required-error-readonly</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFields::PID_Scheckboxaction-Enabled/domChild[0]</td>
+	<td>16,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFields::PID_Scheckboxaction-Error indicators/domChild[0]</td>
+	<td>32,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFields::PID_Scheckboxaction-Required/domChild[0]</td>
+	<td>23,4</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>readonly-disabled</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstextfieldTextFields::PID_Scheckboxaction-Readonly/domChild[0]</td>
+	<td>30,11</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>disabled</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/textfield/TextFields.java b/tests/testbench/com/vaadin/tests/components/textfield/TextFields.java
new file mode 100644
index 0000000000..994769b1d1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/textfield/TextFields.java
@@ -0,0 +1,65 @@
+package com.vaadin.tests.components.textfield;
+
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.ui.TextField;
+
+public class TextFields extends ComponentTestCase<TextField> {
+
+    @Override
+    protected Class<TextField> getTestClass() {
+        return TextField.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+        TextField tf;
+
+        tf = createTextField("TextField 100% wide");
+        tf.setWidth("100%");
+        addTestComponent(tf);
+
+        tf = createTextField(null, "TextField 100% wide, no caption");
+        tf.setWidth("100%");
+        addTestComponent(tf);
+
+        tf = createTextField("TextField auto wide");
+        addTestComponent(tf);
+
+        tf = createTextField("TextField with input prompt");
+        tf.setInputPrompt("Please enter a value");
+        addTestComponent(tf);
+
+        tf = createTextField("100px wide textfield");
+        tf.setWidth("100px");
+        addTestComponent(tf);
+
+        tf = createTextField("150px wide, 120px high textfield");
+        tf.setWidth("150px");
+        tf.setHeight("120px");
+        addTestComponent(tf);
+
+        tf = createTextField("50px high textfield");
+        tf.setHeight("50px");
+        addTestComponent(tf);
+
+        tf = createTextField(null, "No caption");
+        addTestComponent(tf);
+
+        tf = createTextField(null, "No caption and input prompt");
+        tf.setInputPrompt("Enter a value");
+        addTestComponent(tf);
+
+    }
+
+    private TextField createTextField(String caption, String value) {
+        TextField tf = new TextField(caption);
+        tf.setValue(value);
+
+        return tf;
+    }
+
+    private TextField createTextField(String caption) {
+        return createTextField(caption, "");
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/ActionsOnTreeBackground.html b/tests/testbench/com/vaadin/tests/components/tree/ActionsOnTreeBackground.html
new file mode 100644
index 0000000000..8b679208d0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/ActionsOnTreeBackground.html
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>actions-on-table-background</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">actions-on-table-background</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tree.Trees?restartApplication</td>
+	<td></td>
+</tr>
+<!--Set tree height so we get empty space-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_Smenu#item0</td>
+	<td>26,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+	<td>6,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+	<td>15,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+	<td>9,11</td>
+</tr>
+<!--Add context menu item-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_Smenu#item0</td>
+	<td>25,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>6,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>60,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>54,12</td>
+</tr>
+<!--Open context menu on empty space-->
+<tr>
+	<td>contextmenu</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_StestComponent</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertVisible</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VContextMenu[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VContextMenu[0]#option0</td>
+	<td>8,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_SLog_row_0</td>
+	<td>2. Action No icon performed on null</td>
+</tr>
+<!--Open context menu on item-->
+<tr>
+	<td>contextmenu</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_StestComponent#n[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertVisible</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VContextMenu[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VContextMenu[0]#option0</td>
+	<td>12,5</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_SLog_row_0</td>
+	<td>3. Action No icon performed on Item 2</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/CtrlShiftMultiselect.java b/tests/testbench/com/vaadin/tests/components/tree/CtrlShiftMultiselect.java
new file mode 100644
index 0000000000..69956e4d2c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/CtrlShiftMultiselect.java
@@ -0,0 +1,119 @@
+package com.vaadin.tests.components.tree;
+
+import java.util.Set;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Tree;
+
+public class CtrlShiftMultiselect extends TestBase {
+
+    private final Tree tree = new Tree();
+    private final Label valueLbl = new Label("No selection");
+
+    @Override
+    protected void setup() {
+
+        getLayout().setSpacing(true);
+
+        tree.setContainerDataSource(createContainer());
+        tree.setItemCaptionPropertyId("name");
+        tree.setWidth("300px");
+        tree.setImmediate(true);
+        tree.setSelectable(true);
+        tree.setMultiSelect(true);
+        tree.expandItemsRecursively("Item 1");
+        tree.expandItemsRecursively("Item 4");
+
+        tree.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                if (tree.getValue() instanceof Set) {
+                    @SuppressWarnings("unchecked")
+                    // safe cast after instanceof check
+                    Set<Object> itemIds = (Set<Object>) tree.getValue();
+                    if (itemIds.size() == 0) {
+                        valueLbl.setValue("No selection");
+                    } else {
+                        valueLbl.setValue(itemIds);
+                    }
+                } else {
+                    valueLbl.setValue(tree.getValue());
+                }
+            }
+        });
+
+        addComponent(tree);
+
+        valueLbl.setWidth("300px");
+        valueLbl.setHeight("600px");
+        addComponent(valueLbl);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Add ctlr+shift multi selection in Tree";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4259;
+    }
+
+    private HierarchicalContainer createContainer() {
+        HierarchicalContainer cont = new HierarchicalContainer();
+        cont.addContainerProperty("name", String.class, "");
+
+        for (int i = 0; i < 20; i++) {
+            Item item = cont.addItem("Item " + i);
+            item.getItemProperty("name").setValue("Item " + i);
+            cont.setChildrenAllowed("Item " + i, false);
+
+            if (i == 1 || i == 4) {
+                cont.setChildrenAllowed("Item " + i, true);
+            }
+
+            // Add three items to item 1
+            if (i > 1 && i < 4) {
+                cont.setParent("Item " + i, "Item 1");
+            }
+
+            // Add 5 items to item 4
+            if (i > 4 && i < 10) {
+                cont.setChildrenAllowed("Item " + i, true);
+
+                if (i == 7) {
+                    item = cont.addItem("Item 71");
+                    item.getItemProperty("name").setValue("Item 71");
+                    cont.setParent("Item 71", "Item " + i);
+                    cont.setChildrenAllowed("Item 71", false);
+
+                    item = cont.addItem("Item 72");
+                    item.getItemProperty("name").setValue("Item 72");
+                    cont.setParent("Item 72", "Item " + i);
+                    cont.setChildrenAllowed("Item 72", true);
+
+                    item = cont.addItem("Item 73");
+                    item.getItemProperty("name").setValue("Item 73");
+                    cont.setParent("Item 73", "Item 72");
+                    cont.setChildrenAllowed("Item 73", true);
+
+                    item = cont.addItem("Item 74");
+                    item.getItemProperty("name").setValue("Item 74");
+                    cont.setParent("Item 74", "Item " + i);
+                    cont.setChildrenAllowed("Item 74", true);
+                }
+
+                cont.setParent("Item " + i, "Item " + (i - 1));
+
+            }
+        }
+
+        return cont;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/ExpandCollapseTree.html b/tests/testbench/com/vaadin/tests/components/tree/ExpandCollapseTree.html
new file mode 100644
index 0000000000..6ebb0c4cb3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/ExpandCollapseTree.html
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tree.ExpandCollapseTree?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeExpandCollapseTree::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]/n[0]/n[0]/n[0]/expand</td>
+	<td>6,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeExpandCollapseTree::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]/n[0]/n[0]/expand</td>
+	<td>9,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeExpandCollapseTree::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[1]/expand</td>
+	<td>9,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>collapsed-1-6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeExpandCollapseTree::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]/n[0]/n[0]/expand</td>
+	<td>9,9</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>collapsed-1-7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeExpandCollapseTree::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]/n[0]/n[0]/n[0]/expand</td>
+	<td>8,9</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>collapsed-1</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/ExpandCollapseTree.java b/tests/testbench/com/vaadin/tests/components/tree/ExpandCollapseTree.java
new file mode 100644
index 0000000000..e23213fafc
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/ExpandCollapseTree.java
@@ -0,0 +1,119 @@
+package com.vaadin.tests.components.tree;
+
+import java.util.Set;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Tree;
+
+public class ExpandCollapseTree extends TestBase {
+
+    private final Tree tree = new Tree();
+    private final Label valueLbl = new Label("No selection");
+
+    @Override
+    protected void setup() {
+
+        getLayout().setSpacing(true);
+
+        tree.setContainerDataSource(createContainer());
+        tree.setItemCaptionPropertyId("name");
+        tree.setWidth("300px");
+        tree.setImmediate(true);
+        tree.setSelectable(true);
+        tree.setMultiSelect(true);
+        tree.expandItemsRecursively("Item 1");
+        tree.expandItemsRecursively("Item 4");
+
+        tree.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                if (tree.getValue() instanceof Set) {
+                    @SuppressWarnings("unchecked")
+                    // safe cast after instanceof check
+                    Set<Object> itemIds = (Set<Object>) tree.getValue();
+                    if (itemIds.size() == 0) {
+                        valueLbl.setValue("No selection");
+                    } else {
+                        valueLbl.setValue(itemIds);
+                    }
+                } else {
+                    valueLbl.setValue(tree.getValue());
+                }
+            }
+        });
+
+        addComponent(tree);
+
+        valueLbl.setWidth("300px");
+        valueLbl.setHeight("600px");
+        addComponent(valueLbl);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Test collapsing and expansion of tree nodes";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5439;
+    }
+
+    private HierarchicalContainer createContainer() {
+        HierarchicalContainer cont = new HierarchicalContainer();
+        cont.addContainerProperty("name", String.class, "");
+
+        for (int i = 0; i < 20; i++) {
+            Item item = cont.addItem("Item " + i);
+            item.getItemProperty("name").setValue("Item " + i);
+            cont.setChildrenAllowed("Item " + i, false);
+
+            if (i == 1 || i == 4) {
+                cont.setChildrenAllowed("Item " + i, true);
+            }
+
+            // Add three items to item 1
+            if (i > 1 && i < 4) {
+                cont.setParent("Item " + i, "Item 1");
+            }
+
+            // Add 5 items to item 4
+            if (i > 4 && i < 10) {
+                cont.setChildrenAllowed("Item " + i, true);
+
+                if (i == 7) {
+                    item = cont.addItem("Item 71");
+                    item.getItemProperty("name").setValue("Item 71");
+                    cont.setParent("Item 71", "Item " + i);
+                    cont.setChildrenAllowed("Item 71", false);
+
+                    item = cont.addItem("Item 72");
+                    item.getItemProperty("name").setValue("Item 72");
+                    cont.setParent("Item 72", "Item " + i);
+                    cont.setChildrenAllowed("Item 72", true);
+
+                    item = cont.addItem("Item 73");
+                    item.getItemProperty("name").setValue("Item 73");
+                    cont.setParent("Item 73", "Item 72");
+                    cont.setChildrenAllowed("Item 73", true);
+
+                    item = cont.addItem("Item 74");
+                    item.getItemProperty("name").setValue("Item 74");
+                    cont.setParent("Item 74", "Item " + i);
+                    cont.setChildrenAllowed("Item 74", true);
+                }
+
+                cont.setParent("Item " + i, "Item " + (i - 1));
+
+            }
+        }
+
+        return cont;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/ItemStyleGenerator.java b/tests/testbench/com/vaadin/tests/components/tree/ItemStyleGenerator.java
new file mode 100644
index 0000000000..f2ca2a85bd
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/ItemStyleGenerator.java
@@ -0,0 +1,52 @@
+package com.vaadin.tests.components.tree;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.Tree;
+
+public class ItemStyleGenerator extends TestBase {
+
+    private Component styles;
+    private String css = "<style type=\"text/css\">"
+            + ".v-tree-node-red {color: red;}"
+            + ".v-tree-node-green {color: green;}"
+            + ".v-tree-node-caption-blue {color:blue;}" //
+            + "</style>";
+
+    @Override
+    protected String getDescription() {
+        return "Item Style generator can be used to style items.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3070;
+    }
+
+    @Override
+    protected void setup() {
+        styles = new CustomLayout(css);
+        addComponent(styles);
+
+        Tree tree = new Tree();
+
+        tree.setItemStyleGenerator(new Tree.ItemStyleGenerator() {
+            public String getStyle(Object itemId) {
+                // simple return itemId as css style name
+                return itemId.toString();
+            }
+        });
+
+        tree.addItem("red");
+        tree.setChildrenAllowed("red", false);
+        tree.addItem("green");
+        tree.addItem("green children");
+        tree.setParent("green children", "green");
+        tree.addItem("blue");
+        tree.addItem("non-blue-childnode");
+        tree.setParent("non-blue-childnode", "blue");
+
+        addComponent(tree);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/PreselectedTreeVisible.html b/tests/testbench/com/vaadin/tests/components/tree/PreselectedTreeVisible.html
new file mode 100644
index 0000000000..7f8bb408aa
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/PreselectedTreeVisible.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tree.PreselectedTreeVisible</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/PreselectedTreeVisible.java b/tests/testbench/com/vaadin/tests/components/tree/PreselectedTreeVisible.java
new file mode 100644
index 0000000000..b812c9e955
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/PreselectedTreeVisible.java
@@ -0,0 +1,36 @@
+package com.vaadin.tests.components.tree;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Tree;
+
+@SuppressWarnings("serial")
+public class PreselectedTreeVisible extends TestBase {
+
+    @Override
+    protected void setup() {
+
+        String itemId1 = "Item 1";
+        String itemId2 = "Item 2";
+
+        Tree tree = new Tree();
+
+        tree.addItem(itemId1);
+        tree.addItem(itemId2);
+
+        // Removing this line causes the tree to show normally in Firefox
+        tree.select(itemId1);
+        addComponent(tree);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tree should be visible when a item has been selected.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5396;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeConnectors.html b/tests/testbench/com/vaadin/tests/components/tree/TreeConnectors.html
new file mode 100644
index 0000000000..b76c65fa69
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeConnectors.html
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="/" />
+<title>TreeConnectors</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TreeConnectors</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/TreeConnectors?theme=base</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>base</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/TreeConnectors?theme=reindeer</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>reindeer</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/TreeConnectors?theme=runo</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>runo</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/TreeConnectors?theme=liferay</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>liferay</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/TreeConnectors?theme=chameleon</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>chameleon</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeConnectors.java b/tests/testbench/com/vaadin/tests/components/tree/TreeConnectors.java
new file mode 100644
index 0000000000..81c6d2df9e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeConnectors.java
@@ -0,0 +1,131 @@
+package com.vaadin.tests.components.tree;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.acceptcriteria.AcceptAll;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Tree.TreeDragMode;
+import com.vaadin.ui.themes.BaseTheme;
+
+@SuppressWarnings("serial")
+public class TreeConnectors extends TestBase {
+
+    @Override
+    protected void setup() {
+        HorizontalLayout l = new HorizontalLayout();
+        l.setSpacing(true);
+
+        l.addComponent(createTree());
+        Tree connectors = createTree();
+        connectors.addStyleName(BaseTheme.TREE_CONNECTORS);
+        l.addComponent(connectors);
+
+        addComponent(l);
+    }
+
+    private Tree createTree() {
+        final Tree tree = new Tree(null, createContainer());
+        tree.setWidth("300px");
+        for (Object rootItems : tree.rootItemIds()) {
+            tree.expandItemsRecursively(rootItems);
+        }
+        tree.setChildrenAllowed("Item 73", false);
+
+        tree.setDragMode(TreeDragMode.NODE);
+        tree.setDropHandler(new DropHandler() {
+
+            public void drop(DragAndDropEvent event) {
+                // TODO Auto-generated method stub
+
+            }
+
+            public AcceptCriterion getAcceptCriterion() {
+                return AcceptAll.get();
+            }
+
+        });
+
+        tree.setItemIcon("Item 1", new ThemeResource(
+                "../runo/icons/32/folder.png"));
+        tree.setItemIcon("Item 3", new ThemeResource(
+                "../runo/icons/32/document.png"));
+        tree.setItemIcon("Item 13", new ThemeResource(
+                "../runo/icons/64/user.png"));
+        tree.setItemIcon("Item 72", new ThemeResource(
+                "../runo/icons/64/users.png"));
+        tree.setItemIcon("Item 17", new ThemeResource(
+                "../runo/icons/16/document-pdf.png"));
+        tree.setItemIcon("Item 6", new ThemeResource(
+                "../runo/icons/16/folder-add.png"));
+
+        return tree;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The second tree's nodes should be connected with lines indicating the hierarchy. The first tree should be without connectors.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6745;
+    }
+
+    private HierarchicalContainer createContainer() {
+        HierarchicalContainer cont = new HierarchicalContainer();
+        cont.addContainerProperty("name", String.class, "");
+
+        for (int i = 0; i < 20; i++) {
+            Item item = cont.addItem("Item " + i);
+            item.getItemProperty("name").setValue("Item " + i);
+            cont.setChildrenAllowed("Item " + i, false);
+
+            if (i == 1 || i == 4) {
+                cont.setChildrenAllowed("Item " + i, true);
+            }
+
+            // Add three items to item 1
+            if (i > 1 && i < 4) {
+                cont.setParent("Item " + i, "Item 1");
+            }
+
+            // Add 5 items to item 4
+            if (i > 4 && i < 10) {
+                cont.setChildrenAllowed("Item " + i, true);
+
+                if (i == 7) {
+                    item = cont.addItem("Item 71");
+                    item.getItemProperty("name").setValue("Item 71");
+                    cont.setParent("Item 71", "Item " + i);
+                    cont.setChildrenAllowed("Item 71", false);
+
+                    item = cont.addItem("Item 72");
+                    item.getItemProperty("name").setValue("Item 72");
+                    cont.setParent("Item 72", "Item " + i);
+                    cont.setChildrenAllowed("Item 72", true);
+
+                    item = cont.addItem("Item 73");
+                    item.getItemProperty("name").setValue("Item 73");
+                    cont.setParent("Item 73", "Item 72");
+                    cont.setChildrenAllowed("Item 73", true);
+
+                    item = cont.addItem("Item 74");
+                    item.getItemProperty("name").setValue("Item 74");
+                    cont.setParent("Item 74", "Item " + i);
+                    cont.setChildrenAllowed("Item 74", true);
+                }
+
+                cont.setParent("Item " + i, "Item " + (i - 1));
+
+            }
+        }
+
+        return cont;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeContainerChange b/tests/testbench/com/vaadin/tests/components/tree/TreeContainerChange
new file mode 100644
index 0000000000..8ea2dcc107
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeContainerChange
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TreeContainerChange</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TreeContainerChange</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tree.TreeContainerChange?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeContainerChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeContainerChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[0]/domChild[3]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>24,5</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>ds1-selected-value-ds1-3</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeContainerChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>ds2-selected-value-null</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeContainerChange.java b/tests/testbench/com/vaadin/tests/components/tree/TreeContainerChange.java
new file mode 100644
index 0000000000..f33bbae7b5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeContainerChange.java
@@ -0,0 +1,101 @@
+package com.vaadin.tests.components.tree;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Tree;
+
+@SuppressWarnings("serial")
+public class TreeContainerChange extends TestBase {
+
+    private Tree tree;
+
+    @Override
+    protected void setup() {
+        final IndexedContainer ds1 = new IndexedContainer();
+        // ds1.addContainerProperty("caption", String.class, "");
+        for (int i = 0; i < 32; i++) {
+            ds1.addItem("ds1-" + i);
+        }
+
+        final IndexedContainer ds2 = new IndexedContainer();
+        // ds2.addContainerProperty("caption", String.class, "");
+        for (int i = 0; i < 32; i++) {
+            ds2.addItem("ds2-" + i);
+        }
+
+        HorizontalLayout hl = new HorizontalLayout();
+        hl.setWidth("100%");
+
+        tree = new Tree();
+        tree.setImmediate(true);
+        hl.addComponent(tree);
+        HorizontalLayout state = new HorizontalLayout();
+        state.setSpacing(true);
+        hl.addComponent(state);
+
+        final Label currentValue = new Label();
+        currentValue.setCaption("Current Value:");
+        currentValue.setSizeUndefined();
+        final Label currentDS = new Label();
+        currentDS.setCaption("Current DS:");
+        currentDS.setSizeUndefined();
+        state.addComponent(currentValue);
+        state.addComponent(currentDS);
+
+        Table t = new Table("ds1");
+        t.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+        t.setContainerDataSource(ds1);
+        state.addComponent(t);
+
+        Button b = new Button("Use ds1");
+        b.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                tree.setContainerDataSource(ds1);
+                currentDS.setValue("ds1");
+            }
+        });
+        state.addComponent(b);
+
+        t = new Table("ds2");
+        t.setContainerDataSource(ds2);
+        t.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+        state.addComponent(t);
+
+        b = new Button("Use ds2");
+        b.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                tree.setContainerDataSource(ds2);
+                currentDS.setValue("ds2");
+            }
+        });
+        state.addComponent(b);
+
+        addComponent(hl);
+
+        tree.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                currentValue.setValue(event.getProperty().getValue());
+            }
+        });
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A test for tree and its container changes. Value should be cleared on container change.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5281;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeContextMenuAndIcons.html b/tests/testbench/com/vaadin/tests/components/tree/TreeContextMenuAndIcons.html
new file mode 100644
index 0000000000..d3eaf3470e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeContextMenuAndIcons.html
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tree.Trees?restartApplication</td>
+	<td></td>
+</tr>
+<!--Hide event log-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_Smenu#item1</td>
+	<td>19,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>32,7</td>
+</tr>
+<!--Simple context menu-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_Smenu#item0</td>
+	<td>28,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>57,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>68,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>69,7</td>
+</tr>
+<tr>
+	<td>contextMenuAt</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_StestComponent#n[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>contextmenu-noicon</td>
+</tr>
+<!--Two actions, without and with icon-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_Smenu#item0</td>
+	<td>42,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>52,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>53,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>31,4</td>
+</tr>
+<tr>
+	<td>contextMenuAt</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_StestComponent#n[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>caption-only-and-has-icon</td>
+</tr>
+<!--Large icon-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_Smenu#item0</td>
+	<td>42,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>52,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>53,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+	<td>31,4</td>
+</tr>
+<tr>
+	<td>contextMenuAt</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_StestComponent#n[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>large-icon</td>
+</tr>
+<!--Simple context menu again to ensure it is properly updated (icons removed)-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_Smenu#item0</td>
+	<td>28,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+	<td>57,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>68,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>69,7</td>
+</tr>
+<tr>
+	<td>contextMenuAt</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTrees::PID_StestComponent#n[1]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>contextmenu-noicon</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeFiltering.html b/tests/testbench/com/vaadin/tests/components/tree/TreeFiltering.html
new file mode 100644
index 0000000000..06ae7600f7
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeFiltering.html
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TreeFiltering</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tree.TreeFiltering?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>unfiltered</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFiltering::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>all-removed</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFiltering::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[8]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>unfiltered</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFiltering::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>filter-0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFiltering::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
+	<td>69,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>filter-0-no-parents</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFiltering::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
+	<td>69,10</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFiltering::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>all-removed</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeFiltering.java b/tests/testbench/com/vaadin/tests/components/tree/TreeFiltering.java
new file mode 100644
index 0000000000..ff1ac96e26
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeFiltering.java
@@ -0,0 +1,126 @@
+package com.vaadin.tests.components.tree;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Tree;
+
+public class TreeFiltering extends TestBase {
+
+    @Override
+    public void setup() {
+
+        final Tree ccTree = new Tree();
+        addComponent(ccTree);
+        final HierarchicalContainer cont = new HierarchicalContainer();
+        cont.addContainerProperty("caption", String.class, "");
+
+        Item item;
+        for (int i = 0; i < 5; i++) {
+            item = cont.addItem(i);
+            item.getItemProperty("caption").setValue("Number " + i);
+            cont.setParent(i, i - 1);
+        }
+
+        for (int i = 0; i < 5; i++) {
+            Object id = cont.addItem();
+            item = cont.getItem(id);
+            item.getItemProperty("caption").setValue("0-" + i);
+            cont.setParent(id, 0);
+        }
+
+        ccTree.setContainerDataSource(cont);
+        ccTree.setItemCaptionPropertyId("caption");
+
+        for (final Object o : ccTree.getItemIds()) {
+            ccTree.expandItem(o);
+        }
+
+        final CheckBox filterType = new CheckBox(
+                "Include parent when filtering", true);
+        filterType.setImmediate(true);
+        filterType.addListener(new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                cont.setIncludeParentsWhenFiltering(((CheckBox) event
+                        .getProperty()).booleanValue());
+                ccTree.requestRepaint();
+            }
+        });
+        addComponent(filterType);
+
+        final Button b = new Button("Add filter 'foo'", new ClickListener() {
+            public void buttonClick(final ClickEvent event) {
+                cont.addContainerFilter("caption", "foo", true, false);
+
+            }
+        });
+        addComponent(b);
+        final Button b2 = new Button("Add filter 'Num'", new ClickListener() {
+            public void buttonClick(final ClickEvent event) {
+                cont.addContainerFilter("caption", "Num", true, false);
+
+            }
+        });
+
+        addComponent(b2);
+        final Button num = new Button("Add filter '0'", new ClickListener() {
+            public void buttonClick(final ClickEvent event) {
+                cont.addContainerFilter("caption", "0", true, false);
+
+            }
+        });
+
+        addComponent(num);
+        final Button num2 = new Button("Add filter '0-'", new ClickListener() {
+            public void buttonClick(final ClickEvent event) {
+                cont.addContainerFilter("caption", "0-", true, false);
+
+            }
+        });
+
+        addComponent(num2);
+        final Button num3 = new Button("Add filter 'Number 4'",
+                new ClickListener() {
+                    public void buttonClick(final ClickEvent event) {
+                        cont.addContainerFilter("caption", "Number 4", true,
+                                false);
+
+                    }
+                });
+
+        addComponent(num3);
+        final Button p1 = new Button("Set Number 3 parent to Number 0",
+                new ClickListener() {
+                    public void buttonClick(final ClickEvent event) {
+                        cont.setParent(3, 0);
+
+                    }
+                });
+        addComponent(p1);
+        final Button r = new Button("Remove filters", new ClickListener() {
+            public void buttonClick(final ClickEvent event) {
+                cont.removeAllContainerFilters();
+
+            }
+        });
+        addComponent(r);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Filtering in a tree should work as expected. Roots and their children which match the filter should be shown. Other nodes should be hidden";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4192;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeFocusGaining.html b/tests/testbench/com/vaadin/tests/components/tree/TreeFocusGaining.html
new file mode 100644
index 0000000000..74a69ec203
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeFocusGaining.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TreeFocusGaining</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TreeFocusGaining</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tree.TreeFocusGaining?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>57,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>57,13</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>foo</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTree[0]#n[0]</td>
+	<td>24,12</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::PID_SLog_row_1</td>
+	<td>1. TF value now:foo</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::PID_SLog_row_0</td>
+	<td>2. Tree value now:Item1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>-18,10</td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+	<td>bar</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTree[0]#n[0]</td>
+	<td>4,9</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::PID_SLog_row_1</td>
+	<td>3. TF value now:bar</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeFocusGaining::PID_SLog_row_0</td>
+	<td>4. Item click event</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeFocusGaining.java b/tests/testbench/com/vaadin/tests/components/tree/TreeFocusGaining.java
new file mode 100644
index 0000000000..e784009bce
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeFocusGaining.java
@@ -0,0 +1,62 @@
+package com.vaadin.tests.components.tree;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.event.ItemClickEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Tree;
+
+@SuppressWarnings("serial")
+public class TreeFocusGaining extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Log log = new Log(5);
+
+        TextField textField = new TextField(
+                "My value should get to server when tree is clicked");
+        addComponent(textField);
+        textField.addListener(new Property.ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                log.log("TF value now:" + event.getProperty());
+            }
+        });
+
+        Tree tree = new Tree("Simple selectable tree (immediate)");
+        tree.addItem("Item1");
+        addComponent(tree);
+        tree.addListener(new Property.ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                log.log("Tree value now:" + event.getProperty());
+            }
+        });
+        tree.setImmediate(true);
+
+        tree = new Tree("Simple tree with itemm click listener");
+        tree.addItem("Item1");
+        tree.addListener(new ItemClickEvent.ItemClickListener() {
+            public void itemClick(ItemClickEvent event) {
+                log.log("Item click event");
+            }
+        });
+        addComponent(tree);
+
+        addComponent(log);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tree should get focus before sending variables to server.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6374;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeHorizontalResize.html b/tests/testbench/com/vaadin/tests/components/tree/TreeHorizontalResize.html
new file mode 100644
index 0000000000..8e882e215d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeHorizontalResize.html
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tree.TreeHorizontalResize?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[0]</td>
+	<td>57,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[0]</td>
+	<td>71,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>all-expanded-gx240-focused</td>
+</tr>
+<!--Collapse all tree nodes-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/expand</td>
+	<td>11,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[1]/expand</td>
+	<td>11,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]/expand</td>
+	<td>10,11</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>all-collapsed-nothing-focused</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/expand</td>
+	<td>9,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[0]</td>
+	<td>57,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[0]</td>
+	<td>64,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>desktops-expanded-gx240-focused</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[1]/expand</td>
+	<td>6,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]/expand</td>
+	<td>8,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[0]</td>
+	<td>45,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeHorizontalResize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[0]</td>
+	<td>57,7</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>all-expanded-gx240-focused-2</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeHorizontalResize.java b/tests/testbench/com/vaadin/tests/components/tree/TreeHorizontalResize.java
new file mode 100644
index 0000000000..e25b2d6760
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeHorizontalResize.java
@@ -0,0 +1,87 @@
+package com.vaadin.tests.components.tree;
+
+import java.util.Iterator;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Tree;
+
+public class TreeHorizontalResize extends TestBase {
+
+    // copied from Sampler to eliminate dependency
+    public static final Object hw_PROPERTY_NAME = "name";
+    public static final Object hw_PROPERTY_ICON = "icon";
+    private static final String[][] hardware = { //
+            { "Desktops", "Dell OptiPlex GX240", "Dell OptiPlex GX260",
+                    "Dell OptiPlex GX280" },
+            { "Monitors", "Benq T190HD", "Benq T220HD", "Benq T240HD" },
+            { "Laptops", "IBM ThinkPad T40", "IBM ThinkPad T43",
+                    "IBM ThinkPad T60" } };
+
+    @Override
+    protected void setup() {
+        Panel treePanel = new Panel();
+        treePanel.setHeight("500px");
+        treePanel.setWidth(null);
+        treePanel.getContent().setSizeUndefined();
+        addComponent(treePanel);
+
+        Tree tree = new Tree();
+        tree.setContainerDataSource(getHardwareContainer());
+        tree.setItemCaptionPropertyId(hw_PROPERTY_NAME);
+        for (Iterator<?> it = tree.rootItemIds().iterator(); it.hasNext();) {
+            tree.expandItemsRecursively(it.next());
+        }
+        treePanel.addComponent(tree);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The Tree should be properly resized horizontally when collapsing/expanding nodes. The height is fixed to 500px.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6230;
+    }
+
+    public static HierarchicalContainer getHardwareContainer() {
+        Item item = null;
+        int itemId = 0; // Increasing numbering for itemId:s
+
+        // Create new container
+        HierarchicalContainer hwContainer = new HierarchicalContainer();
+        // Create containerproperty for name
+        hwContainer.addContainerProperty(hw_PROPERTY_NAME, String.class, null);
+        // Create containerproperty for icon
+        hwContainer.addContainerProperty(hw_PROPERTY_ICON, ThemeResource.class,
+                new ThemeResource("../runo/icons/16/document.png"));
+        for (int i = 0; i < hardware.length; i++) {
+            // Add new item
+            item = hwContainer.addItem(itemId);
+            // Add name property for item
+            item.getItemProperty(hw_PROPERTY_NAME).setValue(hardware[i][0]);
+            // Allow children
+            hwContainer.setChildrenAllowed(itemId, true);
+            itemId++;
+            for (int j = 1; j < hardware[i].length; j++) {
+                if (j == 1) {
+                    item.getItemProperty(hw_PROPERTY_ICON).setValue(
+                            new ThemeResource("../runo/icons/16/folder.png"));
+                }
+                // Add child items
+                item = hwContainer.addItem(itemId);
+                item.getItemProperty(hw_PROPERTY_NAME).setValue(hardware[i][j]);
+                hwContainer.setParent(itemId, itemId - j);
+                hwContainer.setChildrenAllowed(itemId, false);
+
+                itemId++;
+            }
+        }
+        return hwContainer;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeItemClickListening.html b/tests/testbench/com/vaadin/tests/components/tree/TreeItemClickListening.html
new file mode 100644
index 0000000000..841565df2f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeItemClickListening.html
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tree.TreeItemClickListening?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]</td>
+	<td>36,7</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::PID_SLog_row_0</td>
+	<td>1. Left Click</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[1]</td>
+	<td>45,7</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::PID_SLog_row_0</td>
+	<td>2. Left Click</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]</td>
+	<td>37,13</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::PID_SLog_row_0</td>
+	<td>3. Left Click</td>
+</tr>
+<tr>
+	<td>mouseDownRight</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[3]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseUpRight</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[3]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::PID_SLog_row_0</td>
+	<td>4. Right Click</td>
+</tr>
+<tr>
+	<td>mouseDownRight</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[4]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseUpRight</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[4]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeItemClickListening::PID_SLog_row_0</td>
+	<td>5. Right Click</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeItemClickListening.java b/tests/testbench/com/vaadin/tests/components/tree/TreeItemClickListening.java
new file mode 100644
index 0000000000..e772be7cde
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeItemClickListening.java
@@ -0,0 +1,61 @@
+package com.vaadin.tests.components.tree;
+
+import com.vaadin.event.ItemClickEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.Tree;
+
+public class TreeItemClickListening extends TestBase {
+
+    private int clickCounter = 0;
+
+    private Log log = new Log(5);
+
+    @Override
+    protected void setup() {
+
+        Tree tree = new Tree();
+        tree.setImmediate(true);
+
+        tree.addContainerProperty("caption", String.class, "");
+        for (int i = 1; i <= 10; i++) {
+            String item = "Node " + i;
+            tree.addItem(item);
+            tree.getContainerProperty(item, "caption").setValue("Caption " + i);
+            tree.setChildrenAllowed(item, false);
+        }
+        tree.setItemCaptionMode(Tree.ITEM_CAPTION_MODE_PROPERTY);
+        tree.setItemCaptionPropertyId("caption");
+
+        tree.addListener(new ItemClickEvent.ItemClickListener() {
+            public void itemClick(ItemClickEvent event) {
+                clickCounter++;
+                switch (event.getButton()) {
+                case ItemClickEvent.BUTTON_LEFT:
+                    log.log("Left Click");
+                    break;
+                case ItemClickEvent.BUTTON_RIGHT:
+                    log.log("Right Click");
+                    break;
+                case ItemClickEvent.BUTTON_MIDDLE:
+                    log.log("Middle Click");
+                    break;
+                }
+            }
+        });
+
+        addComponent(tree);
+        addComponent(log);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Item click event should be triggered from all mouse button clicks";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6845;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationScroll b/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationScroll
new file mode 100644
index 0000000000..8d03e3aaf3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationScroll
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TreeKeyboardNavigationScroll</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+    <td>open</td>
+    <td>/run/com.vaadin.tests.components.tree.TreeKeyboardNavigationScrolls?restartApplication</td>
+    <td></td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]</td>
+    <td>4,3</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>right</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>right</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>right</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>screenCapture</td>
+    <td></td>
+    <td>noscroll</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationScrolls.java b/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationScrolls.java
new file mode 100644
index 0000000000..5bbc5423ab
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationScrolls.java
@@ -0,0 +1,54 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+package com.vaadin.tests.components.tree;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.data.validator.AbstractValidator;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Tree;
+
+public class TreeKeyboardNavigationScrolls extends TestBase {
+
+    @Override
+    protected void setup() {
+        Tree tree = new Tree();
+        tree.setContainerDataSource(generateHierarchicalContainer());
+        tree.setImmediate(true);
+        tree.addValidator(new AbstractValidator("failed") {
+            public boolean isValid(Object value) {
+                return false;
+            }
+
+        });
+        addComponent(tree);
+    }
+
+    private Container generateHierarchicalContainer() {
+        HierarchicalContainer cont = new HierarchicalContainer();
+        for (int i = 1; i < 6; i++) {
+            cont.addItem(i);
+            for (int j = 1; j < 3; j++) {
+                String id = i
+                        + " foo bar baz make this node really wide so that we don't have to fiddle with resizing the browser window -> what would you do if you had one of your legs on backwards? it's legs time! everybody get your legs! "
+                        + j;
+                cont.addItem(id);
+                cont.setChildrenAllowed(id, false);
+                cont.setParent(id, i);
+            }
+        }
+        return cont;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The tree scrolls right if the focused node is too wide when navigating with the keyboard";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 7230;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators b/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators
new file mode 100644
index 0000000000..8b9722df94
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TreeKeyboardNavigationValidators</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+    <td>open</td>
+    <td>/run/com.vaadin.tests.components.tree.TreeKeyboardNavigationValidators?restartApplication</td>
+    <td></td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]</td>
+    <td>7,10</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>right</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>right</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>right</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>pressSpecialKey</td>
+    <td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationValidators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
+    <td>down</td>
+</tr>
+<tr>
+    <td>screenCapture</td>
+    <td></td>
+    <td>5-2-sel</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators.java b/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators.java
new file mode 100644
index 0000000000..2a545065c4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators.java
@@ -0,0 +1,54 @@
+package com.vaadin.tests.components.tree;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.data.validator.AbstractValidator;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Tree;
+
+public class TreeKeyboardNavigationValidators extends TestBase {
+
+    @Override
+    protected void setup() {
+        addComponent(getTree());
+    }
+
+    private Tree getTree() {
+        Tree tree = new Tree();
+        tree.setSizeFull();
+        tree.setContainerDataSource(generateHierarchicalContainer());
+        tree.setImmediate(true);
+        tree.addValidator(new AbstractValidator("failed") {
+            public boolean isValid(Object value) {
+                return false;
+            }
+
+        });
+        return tree;
+    }
+
+    private Container generateHierarchicalContainer() {
+        HierarchicalContainer cont = new HierarchicalContainer();
+        for (int i = 1; i < 6; i++) {
+            cont.addItem(i);
+            for (int j = 1; j < 3; j++) {
+                String id = i + " -> " + j;
+                cont.addItem(id);
+                cont.setChildrenAllowed(id, false);
+                cont.setParent(id, i);
+            }
+        }
+        return cont;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Keyboard navigation should still work in a tree with validators.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 7057;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeNodeCaptionWrapping.html b/tests/testbench/com/vaadin/tests/components/tree/TreeNodeCaptionWrapping.html
new file mode 100644
index 0000000000..f98482f4c7
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeNodeCaptionWrapping.html
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TreeNodeCaptionWrapping</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TreeNodeCaptionWrapping</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tree.TreeNodeCaptionWrapping</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>A very long item that should not wrap</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>Subitem - also long</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeNodeCaptionWrapping.java b/tests/testbench/com/vaadin/tests/components/tree/TreeNodeCaptionWrapping.java
new file mode 100644
index 0000000000..2101abb630
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeNodeCaptionWrapping.java
@@ -0,0 +1,44 @@
+package com.vaadin.tests.components.tree;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Tree;
+
+public class TreeNodeCaptionWrapping extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The text should not wrap to the following line but instead be cut off when there is too little horizontal space.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3098;
+    }
+
+    @Override
+    protected void setup() {
+        setTheme("runo");
+        Tree tree = new Tree();
+        tree.setWidth("100px");
+
+        tree.addItem("1");
+        tree.setItemIcon("1", new ThemeResource("../runo/icons/16/ok.png"));
+
+        String mainItem = "A very long item that should not wrap";
+        String subItem = "Subitem - also long";
+
+        tree.addItem(mainItem);
+        tree.setItemIcon(mainItem, new ThemeResource(
+                "../runo/icons/16/error.png"));
+
+        tree.addItem(subItem);
+        tree.setParent(subItem, mainItem);
+
+        tree.expandItem("1");
+        tree.expandItem(mainItem);
+        tree.expandItem(subItem);
+
+        addComponent(tree);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreePerformanceTest.java b/tests/testbench/com/vaadin/tests/components/tree/TreePerformanceTest.java
new file mode 100644
index 0000000000..de72a6efeb
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreePerformanceTest.java
@@ -0,0 +1,75 @@
+package com.vaadin.tests.components.tree;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class TreePerformanceTest extends AbstractTestCase {
+
+    @Override
+    protected String getDescription() {
+        return "Trees rendering type may become slow escpecially with FF and big tree in a deep component tree.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+    @Override
+    public void init() {
+        Window w = new Window();
+        setMainWindow(w);
+
+        Layout layout = null;
+
+        for (int i = 0; i < getLayoutCount(); i++) {
+            Layout newlayout = createLayout();
+            // newlayout.setHeight("100%");
+            if (i == 0) {
+                w.setContent(newlayout);
+            } else {
+                layout.addComponent(newlayout);
+            }
+            layout = newlayout;
+        }
+
+        Tree tree = new Tree();
+
+        for (int i = 0; i < getItemCount(); i++) {
+            String text = "ITEM " + i;
+            tree.addItem(text);
+            for (int j = 0; j < getSubItemCount(); j++) {
+                String subtext = " SUBITEM " + j + " for " + text;
+                tree.addItem(subtext);
+                tree.setParent(subtext, text);
+            }
+            tree.expandItemsRecursively(text);
+        }
+
+        // One can test that the slugginesh is actually verticallayout issue
+        // Table testTable = TestForTablesInitialColumnWidthLogicRendering
+        // .getTestTable(12, 60);
+        // testTable.setPageLength(0);
+        layout.addComponent(tree);
+
+    }
+
+    private Layout createLayout() {
+        return new VerticalLayout();
+    }
+
+    private int getLayoutCount() {
+        return 10;
+    }
+
+    private int getSubItemCount() {
+        return 3;
+    }
+
+    private int getItemCount() {
+        return 200;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeScrolling.html b/tests/testbench/com/vaadin/tests/components/tree/TreeScrolling.html
new file mode 100644
index 0000000000..55c5aacbda
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeScrolling.html
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tree.TreeScrolling?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeScrolling::/VVerticalLayout[0]/ChildComponentContainer[2]/VTree[0]#n[0]/n[14]</td>
+	<td>67,8</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>selected-0-14</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeScrolling.java b/tests/testbench/com/vaadin/tests/components/tree/TreeScrolling.java
new file mode 100644
index 0000000000..38bf07ef59
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeScrolling.java
@@ -0,0 +1,54 @@
+package com.vaadin.tests.components.tree;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.RichTextArea;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class TreeScrolling extends AbstractTestCase {
+
+    @Override
+    public void init() {
+        VerticalLayout layout = new VerticalLayout();
+        layout.setSizeUndefined();
+        Window w = new Window("", layout);
+        setMainWindow(w);
+
+        TextField filler1 = new TextField();
+        RichTextArea filler2 = new RichTextArea();
+        Tree tree = new Tree();
+        for (int i = 0; i < 20; i++) {
+            String parentId = "Item " + i;
+            // Item parentItem =
+            tree.addItem(parentId);
+            for (int j = 0; j < 20; j++) {
+                String subId = "Item " + i + " - " + j;
+                // Item subItem =
+                tree.addItem(subId);
+                tree.setParent(subId, parentId);
+            }
+
+        }
+
+        for (Object id : tree.rootItemIds()) {
+            tree.expandItemsRecursively(id);
+        }
+
+        layout.addComponent(filler1);
+        layout.addComponent(filler2);
+        layout.addComponent(tree);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tests what happens when a tree is partly out of view when an item is selected";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5400;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeScrollingOnSelection.html b/tests/testbench/com/vaadin/tests/components/tree/TreeScrollingOnSelection.html
new file mode 100644
index 0000000000..bd8e944c32
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeScrollingOnSelection.html
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tree.TreeScrollingOnSelection?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeScrollingOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[4]</td>
+	<td>32,7</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>epsilon-selected</td>
+</tr>
+<tr>
+	<td>scroll</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeScrollingOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/domChild[1]</td>
+	<td>256</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeScrollingOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[21]</td>
+	<td>18,-245</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>scrolled-down-chi-selected</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tree.TreeScrollingOnSelection?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>scroll</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeScrollingOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/domChild[1]</td>
+	<td>500</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>300</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeScrollingOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[11]</td>
+	<td>14,-248</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>scrolled-down-my-selected</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeScrollingOnSelection.java b/tests/testbench/com/vaadin/tests/components/tree/TreeScrollingOnSelection.java
new file mode 100644
index 0000000000..42c9087fc3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeScrollingOnSelection.java
@@ -0,0 +1,72 @@
+package com.vaadin.tests.components.tree;
+
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.event.ItemClickEvent;
+import com.vaadin.event.ItemClickEvent.ItemClickListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Tree;
+
+public class TreeScrollingOnSelection extends TestBase {
+    private static final long serialVersionUID = 4082075610259697145L;
+
+    private static final String GREEK_ALPHABET = "greek alphabet";
+
+    private static final String[] ALPHABET = { "Alpha", "Beta", "Gamma",
+            "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa",
+            "Lambda", "My", "Ny", "Xi", "Omikron", "Pi", "Rho", "Sigma", "Tau",
+            "Ypsilon", "Phi", "Chi", "Psi", "Omega" };
+
+    @Override
+    public void setup() {
+        final Label charLabel = new Label();
+        charLabel.setWidth("200px");
+
+        Tree tree = new Tree("alphabets", getContainer());
+        tree.expandItem(GREEK_ALPHABET);
+        tree.addListener(new ItemClickListener() {
+
+            private static final long serialVersionUID = 5955518276555388126L;
+
+            public void itemClick(ItemClickEvent event) {
+                charLabel.setValue(event.getItemId().toString());
+            }
+        });
+        tree.setImmediate(true);
+
+        Panel panel = new Panel();
+        panel.setScrollable(true);
+        panel.addComponent(tree);
+        panel.setWidth("200px");
+        panel.setHeight("300px");
+
+        addComponent(panel);
+
+        addComponent(charLabel);
+    }
+
+    private HierarchicalContainer getContainer() {
+        HierarchicalContainer container = new HierarchicalContainer();
+
+        container.addItem(GREEK_ALPHABET);
+
+        for (String character : ALPHABET) {
+            container.addItem(character);
+            container.setChildrenAllowed(character, false);
+            container.setParent(character, GREEK_ALPHABET);
+        }
+
+        return container;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Selecting an item in the tree inside the Panel should not cause the panel scroll position to change.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6731;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeToolTips.java b/tests/testbench/com/vaadin/tests/components/tree/TreeToolTips.java
new file mode 100644
index 0000000000..c6e29bc3b8
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeToolTips.java
@@ -0,0 +1,89 @@
+package com.vaadin.tests.components.tree;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractSelect;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Tree;
+
+public class TreeToolTips extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Tree tree = new Tree(null, createContainer());
+        tree.setItemDescriptionGenerator(new AbstractSelect.ItemDescriptionGenerator() {
+            public String generateDescription(Component source, Object itemId,
+                    Object propertyId) {
+                return "This is a tooltip for item id '" + itemId + "'";
+            }
+        });
+
+        for (Object rootItems : tree.rootItemIds())
+            tree.expandItemsRecursively(rootItems);
+
+        addComponent(tree);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tree items should have tooltips";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6637;
+    }
+
+    private HierarchicalContainer createContainer() {
+        HierarchicalContainer cont = new HierarchicalContainer();
+        cont.addContainerProperty("name", String.class, "");
+
+        for (int i = 0; i < 20; i++) {
+            Item item = cont.addItem("Item " + i);
+            item.getItemProperty("name").setValue("Item " + i);
+            cont.setChildrenAllowed("Item " + i, false);
+
+            if (i == 1 || i == 4) {
+                cont.setChildrenAllowed("Item " + i, true);
+            }
+
+            // Add three items to item 1
+            if (i > 1 && i < 4) {
+                cont.setParent("Item " + i, "Item 1");
+            }
+
+            // Add 5 items to item 4
+            if (i > 4 && i < 10) {
+                cont.setChildrenAllowed("Item " + i, true);
+
+                if (i == 7) {
+                    item = cont.addItem("Item 71");
+                    item.getItemProperty("name").setValue("Item 71");
+                    cont.setParent("Item 71", "Item " + i);
+                    cont.setChildrenAllowed("Item 71", false);
+
+                    item = cont.addItem("Item 72");
+                    item.getItemProperty("name").setValue("Item 72");
+                    cont.setParent("Item 72", "Item " + i);
+                    cont.setChildrenAllowed("Item 72", true);
+
+                    item = cont.addItem("Item 73");
+                    item.getItemProperty("name").setValue("Item 73");
+                    cont.setParent("Item 73", "Item 72");
+                    cont.setChildrenAllowed("Item 73", true);
+
+                    item = cont.addItem("Item 74");
+                    item.getItemProperty("name").setValue("Item 74");
+                    cont.setParent("Item 74", "Item " + i);
+                    cont.setChildrenAllowed("Item 74", true);
+                }
+
+                cont.setParent("Item " + i, "Item " + (i - 1));
+
+            }
+        }
+
+        return cont;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeTooltip.html b/tests/testbench/com/vaadin/tests/components/tree/TreeTooltip.html
new file mode 100644
index 0000000000..afebdaacd5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeTooltip.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tree.TreeToolTips?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeToolTips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]</td>
+	<td>20,9</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>1000</td>
+	<td>1000</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>This is a tooltip for item id 'Item 0'</td>
+</tr>
+<tr>
+	<td>showTooltip</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeToolTips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]/n[0]/n[0]/n[0]</td>
+	<td>25,8</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>1000</td>
+	<td>1000</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeToolTips::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+	<td>This is a tooltip for item id 'Item 7'</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeWithIcons.html b/tests/testbench/com/vaadin/tests/components/tree/TreeWithIcons.html
new file mode 100644
index 0000000000..0b01807054
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeWithIcons.html
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.tree.TreeWithIcons?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>large-icon</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeWithIcons::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/expand</td>
+	<td>9,6</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>two-large-icons</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreeTreeWithIcons::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[1]/expand</td>
+	<td>8,9</td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>100</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>huge-and-two-large-icons</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeWithIcons.java b/tests/testbench/com/vaadin/tests/components/tree/TreeWithIcons.java
new file mode 100644
index 0000000000..fbf4a3c1d1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeWithIcons.java
@@ -0,0 +1,69 @@
+package com.vaadin.tests.components.tree;
+
+import java.util.Date;
+
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.LoremIpsum;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.themes.Reindeer;
+
+public class TreeWithIcons extends TestBase {
+
+    @Override
+    protected void setup() {
+        ThemeResource notCachedFolderIconHuge = new ThemeResource(
+                "../runo/icons/64/folder.png?" + new Date().getTime());
+        ThemeResource notCachedFolderIconLarge = new ThemeResource(
+                "../runo/icons/32/folder.png?" + new Date().getTime());
+        ThemeResource notCachedFolderIconLargeOther = new ThemeResource(
+                "../runo/icons/32/ok.png?" + new Date().getTime());
+        Tree t = new Tree();
+        t.setImmediate(true);
+
+        t.addItem("Root 1");
+        t.addItem("Root 11");
+        t.addItem("Root 111");
+        t.addItem("Root 1111");
+        t.addItem("Sub 1");
+        t.setItemIcon("Sub 1", notCachedFolderIconLargeOther);
+        t.setParent("Sub 1", "Root 1");
+        String longItemId = LoremIpsum.get(50);
+        t.addItem(longItemId);
+        t.setItemIcon(longItemId, notCachedFolderIconHuge);
+        t.setParent(longItemId, "Root 11");
+        t.addItem("abcdefghijklmn");
+
+        String first = "abcdefghijklmnop";
+        String second = "abcdefghijklmnopqrst";
+        t.addItem(first);
+        t.addItem(second);
+        t.setParent(second, first);
+        t.setItemIcon(first, notCachedFolderIconLarge);
+
+        HorizontalLayout hlay = new HorizontalLayout();
+        hlay.setStyleName(Reindeer.LAYOUT_BLUE);
+        hlay.addComponent(t);
+        hlay.setWidth(-1, Sizeable.UNITS_PIXELS);
+
+        Panel p = new Panel();
+        p.setSizeUndefined();
+        p.setContent(hlay);
+
+        addComponent(p);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A tree with icons should resize itself correctly so the nodes are not cut either horizontally or vertically.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3529;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeWithPreselectedItemNotShown.java b/tests/testbench/com/vaadin/tests/components/tree/TreeWithPreselectedItemNotShown.java
new file mode 100644
index 0000000000..92c82a6ccf
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/TreeWithPreselectedItemNotShown.java
@@ -0,0 +1,52 @@
+package com.vaadin.tests.components.tree;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Window;
+
+public class TreeWithPreselectedItemNotShown extends TestBase {
+
+    @Override
+    protected void setup() {
+        Button open = new Button("Open modal window with tree",
+                new Button.ClickListener() {
+                    public void buttonClick(Button.ClickEvent event) {
+                        getMainWindow().addWindow(new SubwindowWithTree());
+                    }
+                });
+
+        addComponent(open);
+    }
+
+    private class SubwindowWithTree extends Window {
+
+        private SubwindowWithTree() {
+            super("Tree here");
+
+            String itemId1 = "Item 1";
+            String itemId2 = "Item 2";
+
+            Tree tree = new Tree();
+
+            tree.addItem(itemId1);
+            tree.addItem(itemId2);
+
+            // todo error here
+            tree.select(itemId1);
+
+            addComponent(tree);
+        }
+    }
+
+    @Override
+    protected String getDescription() {
+        return "IE8 doesn't display a tree if an item has been selected before the tree becomes visible";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6878;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/tree/Trees.java b/tests/testbench/com/vaadin/tests/components/tree/Trees.java
new file mode 100644
index 0000000000..076e0c9dda
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/tree/Trees.java
@@ -0,0 +1,391 @@
+package com.vaadin.tests.components.tree;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Container.Hierarchical;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.event.Action;
+import com.vaadin.event.Action.Handler;
+import com.vaadin.tests.components.select.AbstractSelectTestCase;
+import com.vaadin.ui.AbstractSelect.MultiSelectMode;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Tree.CollapseEvent;
+import com.vaadin.ui.Tree.CollapseListener;
+import com.vaadin.ui.Tree.ExpandEvent;
+import com.vaadin.ui.Tree.ExpandListener;
+import com.vaadin.ui.Tree.ItemStyleGenerator;
+
+public class Trees extends AbstractSelectTestCase<Tree> implements
+        ExpandListener, CollapseListener {
+
+    private int rootItemIds = 3;
+
+    private ItemStyleGenerator rootGreenSecondLevelRed = new com.vaadin.ui.Tree.ItemStyleGenerator() {
+
+        public String getStyle(Object itemId) {
+            Hierarchical c = (Container.Hierarchical) getComponent()
+                    .getContainerDataSource();
+            if (c.isRoot(itemId)) {
+                return "green";
+            }
+
+            Object parent = c.getParent(itemId);
+            if (!c.isRoot(parent)) {
+                return "red";
+            }
+
+            return null;
+        }
+
+        @Override
+        public String toString() {
+            return "Root green, second level red";
+        };
+
+    };
+
+    private ItemStyleGenerator evenItemsBold = new com.vaadin.ui.Tree.ItemStyleGenerator() {
+
+        public String getStyle(Object itemId) {
+            Hierarchical c = (Container.Hierarchical) getComponent()
+                    .getContainerDataSource();
+            int idx = 0;
+
+            for (Iterator<?> i = c.getItemIds().iterator(); i.hasNext();) {
+                Object id = i.next();
+                if (id == itemId) {
+                    if (idx % 2 == 1) {
+                        return "bold";
+                    } else {
+                        return null;
+                    }
+                }
+
+                idx++;
+            }
+
+            return null;
+        }
+
+        @Override
+        public String toString() {
+            return "Even items bold";
+        };
+
+    };
+
+    private Command<Tree, ContextMenu> contextMenuCommand = new Command<Tree, ContextMenu>() {
+
+        public void execute(Tree c, final ContextMenu value, Object data) {
+            c.removeAllActionHandlers();
+            if (value != null) {
+                c.addActionHandler(new Handler() {
+
+                    public void handleAction(Action action, Object sender,
+                            Object target) {
+                        log("Action " + action.getCaption() + " performed on "
+                                + target);
+                    }
+
+                    public Action[] getActions(Object target, Object sender) {
+                        return value.getActions(target, sender);
+                    }
+                });
+            }
+        }
+    };
+
+    @Override
+    protected Class<Tree> getTestClass() {
+        return Tree.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+
+        // Causes container changes so doing this first..
+        createRootItemSelectAction(CATEGORY_DATA_SOURCE);
+
+        createExpandCollapseActions(CATEGORY_FEATURES);
+        createSelectionModeSelect(CATEGORY_SELECTION);
+        createChildrenAllowedAction(CATEGORY_DATA_SOURCE);
+
+        createListeners(CATEGORY_LISTENERS);
+        createItemStyleGenerator(CATEGORY_FEATURES);
+        createContextMenuAction(CATEGORY_FEATURES);
+        // TODO: DropHandler
+        // TODO: DragMode
+        // TODO: ActionHandler
+
+    }
+
+    private void createContextMenuAction(String category) {
+        LinkedHashMap<String, ContextMenu> options = new LinkedHashMap<String, ContextMenu>();
+        options.put("None", null);
+        options.put("Item without icon", new ContextMenu("No icon", null));
+        ContextMenu cm = new ContextMenu();
+        cm.addItem("Caption only", null);
+        cm.addItem("Has icon", ICON_16_USER_PNG_UNCACHEABLE);
+        options.put("With and without icon", cm);
+        options.put("Only one large icon", new ContextMenu("Icon",
+                ICON_64_EMAIL_REPLY_PNG_UNCACHEABLE));
+
+        createSelectAction("Context menu", category, options, "None",
+                contextMenuCommand, true);
+    }
+
+    private void createItemStyleGenerator(String category) {
+
+        LinkedHashMap<String, com.vaadin.ui.Tree.ItemStyleGenerator> options = new LinkedHashMap<String, com.vaadin.ui.Tree.ItemStyleGenerator>();
+
+        options.put("-", null);
+        options.put(rootGreenSecondLevelRed.toString(), rootGreenSecondLevelRed);
+        options.put(evenItemsBold.toString(), evenItemsBold);
+
+        createSelectAction("Item Style generator", category, options, "-",
+                itemStyleGeneratorCommand);
+
+    }
+
+    private void createListeners(String category) {
+        createBooleanAction("Expand listener", category, false,
+                expandListenerCommand);
+        createBooleanAction("Collapse listener", category, false,
+                collapseListenerCommand);
+        createBooleanAction("Item click listener", category, false,
+                itemClickListenerCommand);
+
+    }
+
+    private enum SelectMode {
+        NONE, SINGLE, MULTI_SIMPLE, MULTI;
+    }
+
+    protected void createSelectionModeSelect(String category) {
+        LinkedHashMap<String, SelectMode> options = new LinkedHashMap<String, SelectMode>();
+        options.put("None", SelectMode.NONE);
+        options.put("Single", SelectMode.SINGLE);
+        options.put("Multi - simple", SelectMode.MULTI_SIMPLE);
+        options.put("Multi - ctrl/shift", SelectMode.MULTI);
+
+        createSelectAction("Selection Mode", category, options,
+                "Multi - ctrl/shift", new Command<Tree, SelectMode>() {
+
+                    public void execute(Tree t, SelectMode value, Object data) {
+                        switch (value) {
+                        case NONE:
+                            t.setSelectable(false);
+                            break;
+                        case SINGLE:
+                            t.setMultiSelect(false);
+                            t.setSelectable(true);
+                            break;
+                        case MULTI_SIMPLE:
+                            t.setSelectable(true);
+                            t.setMultiSelect(true);
+                            t.setMultiselectMode(MultiSelectMode.SIMPLE);
+                            break;
+                        case MULTI:
+                            t.setSelectable(true);
+                            t.setMultiSelect(true);
+                            t.setMultiselectMode(MultiSelectMode.DEFAULT);
+                            break;
+                        }
+                    }
+                });
+    }
+
+    @Override
+    protected Container createContainer(int properties, int items) {
+        return createHierarchicalContainer(properties, items, rootItemIds);
+    }
+
+    private Container.Hierarchical createHierarchicalContainer(int properties,
+            int items, int roots) {
+        Container.Hierarchical c = new HierarchicalContainer();
+
+        populateContainer(c, properties, items);
+
+        if (items <= roots) {
+            return c;
+        }
+
+        // "roots" roots, each with
+        // "firstLevel" children, two with no children (one with childAllowed,
+        // one without)
+        // ("firstLevel"-2)*"secondLevel" children ("secondLevel"/2 with
+        // childAllowed, "secondLevel"/2 without)
+
+        // N*M+N*(M-2)*C = items
+        // items=N(M+MC-2C)
+
+        // Using secondLevel=firstLevel/2 =>
+        // items = roots*(firstLevel+firstLevel*firstLevel/2-2*firstLevel/2)
+        // =roots*(firstLevel+firstLevel^2/2-firstLevel)
+        // = roots*firstLevel^2/2
+        // => firstLevel = sqrt(items/roots*2)
+
+        int firstLevel = (int) Math.ceil(Math.sqrt(items / roots * 2.0));
+        int secondLevel = firstLevel / 2;
+
+        while (roots * (1 + 2 + (firstLevel - 2) * secondLevel) < items) {
+            // Increase something so we get enough items
+            secondLevel++;
+        }
+
+        List<Object> itemIds = new ArrayList<Object>(c.getItemIds());
+
+        int nextItemId = roots;
+        for (int rootIndex = 0; rootIndex < roots; rootIndex++) {
+            // roots use items 0..roots-1
+            Object rootItemId = itemIds.get(rootIndex);
+
+            // force roots to be roots even though they automatically should be
+            c.setParent(rootItemId, null);
+
+            for (int firstLevelIndex = 0; firstLevelIndex < firstLevel; firstLevelIndex++) {
+                if (nextItemId >= items) {
+                    break;
+                }
+                Object firstLevelItemId = itemIds.get(nextItemId++);
+                c.setParent(firstLevelItemId, rootItemId);
+
+                if (firstLevelIndex < 2) {
+                    continue;
+                }
+
+                // firstLevelChildren 2.. have child nodes
+                for (int secondLevelIndex = 0; secondLevelIndex < secondLevel; secondLevelIndex++) {
+                    if (nextItemId >= items) {
+                        break;
+                    }
+
+                    Object secondLevelItemId = itemIds.get(nextItemId++);
+                    c.setParent(secondLevelItemId, firstLevelItemId);
+                }
+            }
+        }
+
+        return c;
+    }
+
+    private void createRootItemSelectAction(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        for (int i = 1; i <= 10; i++) {
+            options.put(String.valueOf(i), i);
+        }
+        options.put("20", 20);
+        options.put("50", 50);
+        options.put("100", 100);
+
+        createSelectAction("Number of root items", category, options, "3",
+                rootItemIdsCommand);
+    }
+
+    private void createExpandCollapseActions(String category) {
+        LinkedHashMap<String, Object> options = new LinkedHashMap<String, Object>();
+
+        for (Object id : getComponent().getItemIds()) {
+            options.put(id.toString(), id);
+        }
+        createMultiClickAction("Expand", category, options, expandItemCommand,
+                null);
+        createMultiClickAction("Expand recursively", category, options,
+                expandItemRecursivelyCommand, null);
+        createMultiClickAction("Collapse", category, options,
+                collapseItemCommand, null);
+
+    }
+
+    private void createChildrenAllowedAction(String category) {
+        LinkedHashMap<String, Object> options = new LinkedHashMap<String, Object>();
+
+        for (Object id : getComponent().getItemIds()) {
+            options.put(id.toString(), id);
+        }
+        createMultiToggleAction("Children allowed", category, options,
+                setChildrenAllowedCommand, true);
+
+    }
+
+    /*
+     * COMMANDS
+     */
+    private Command<Tree, Integer> rootItemIdsCommand = new Command<Tree, Integer>() {
+
+        public void execute(Tree c, Integer value, Object data) {
+            rootItemIds = value;
+            updateContainer();
+        }
+    };
+
+    private Command<Tree, Object> expandItemCommand = new Command<Tree, Object>() {
+
+        public void execute(Tree c, Object itemId, Object data) {
+            c.expandItem(itemId);
+        }
+    };
+    private Command<Tree, Object> expandItemRecursivelyCommand = new Command<Tree, Object>() {
+
+        public void execute(Tree c, Object itemId, Object data) {
+            c.expandItemsRecursively(itemId);
+        }
+    };
+
+    private Command<Tree, Object> collapseItemCommand = new Command<Tree, Object>() {
+
+        public void execute(Tree c, Object itemId, Object data) {
+            c.collapseItem(itemId);
+        }
+    };
+
+    private Command<Tree, Boolean> setChildrenAllowedCommand = new Command<Tree, Boolean>() {
+
+        public void execute(Tree c, Boolean areChildrenAllowed, Object itemId) {
+            c.setChildrenAllowed(itemId, areChildrenAllowed);
+        }
+    };
+
+    private Command<Tree, Boolean> expandListenerCommand = new Command<Tree, Boolean>() {
+        public void execute(Tree c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((ExpandListener) Trees.this);
+            } else {
+                c.removeListener((ExpandListener) Trees.this);
+            }
+        }
+    };
+
+    private Command<Tree, Boolean> collapseListenerCommand = new Command<Tree, Boolean>() {
+        public void execute(Tree c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((CollapseListener) Trees.this);
+            } else {
+                c.removeListener((CollapseListener) Trees.this);
+            }
+        }
+    };
+
+    private Command<Tree, com.vaadin.ui.Tree.ItemStyleGenerator> itemStyleGeneratorCommand = new Command<Tree, com.vaadin.ui.Tree.ItemStyleGenerator>() {
+
+        public void execute(Tree c,
+                com.vaadin.ui.Tree.ItemStyleGenerator value, Object data) {
+            c.setItemStyleGenerator(value);
+
+        }
+    };
+
+    public void nodeCollapse(CollapseEvent event) {
+        log(event.getClass().getSimpleName() + ": " + event.getItemId());
+    }
+
+    public void nodeExpand(ExpandEvent event) {
+        log(event.getClass().getSimpleName() + ": " + event.getItemId());
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/treetable/ExpandAndCollapseListeners.html b/tests/testbench/com/vaadin/tests/components/treetable/ExpandAndCollapseListeners.html
new file mode 100644
index 0000000000..81a62aaa50
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/treetable/ExpandAndCollapseListeners.html
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.treetable.TreeTableTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--expand and collapse listeners-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
+	<td>23,12</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>23,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item7</td>
+	<td>75,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
+	<td>4,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
+	<td>79,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item8</td>
+	<td>57,11</td>
+</tr>
+<!--expand and assert events-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>9,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[6]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>10,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>25,4</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_SLog_row_2</td>
+	<td>2. ExpandEvent: Item 1</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_SLog_row_1</td>
+	<td>3. ExpandEvent: Item 3</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_SLog_row_0</td>
+	<td>4. ExpandEvent: Item 9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>30,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>30,7</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_SLog_row_1</td>
+	<td>5. ExpandEvent: Item 4</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_SLog_row_0</td>
+	<td>6. CollapseEvent: Item 4</td>
+</tr>
+<!--click around to see that we do not get extra expand/collapse events-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[6]/domChild[1]/domChild[0]</td>
+	<td>60,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[1]/domChild[0]</td>
+	<td>64,15</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[8]/domChild[1]/domChild[0]</td>
+	<td>51,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[1]/domChild[0]</td>
+	<td>57,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[6]/domChild[1]/domChild[0]</td>
+	<td>66,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[8]/domChild[1]/domChild[0]</td>
+	<td>41,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[1]/domChild[0]</td>
+	<td>63,0</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td>63,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+	<td>60,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[0]/domChild[0]</td>
+	<td>58,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[5]/domChild[0]/domChild[0]</td>
+	<td>66,12</td>
+</tr>
+<!--some collapse testing-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>11,5</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_SLog_row_0</td>
+	<td>7. CollapseEvent: Item 1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>11,6</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_SLog_row_0</td>
+	<td>8. CollapseEvent: Item 3</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/treetable/ExpandAnimationsInChameleon.java b/tests/testbench/com/vaadin/tests/components/treetable/ExpandAnimationsInChameleon.java
new file mode 100644
index 0000000000..ca1c7aeb9c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/treetable/ExpandAnimationsInChameleon.java
@@ -0,0 +1,126 @@
+package com.vaadin.tests.components.treetable;
+
+import com.vaadin.data.Container.Hierarchical;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TreeTable;
+
+public class ExpandAnimationsInChameleon extends TestBase {
+
+    @Override
+    protected void setup() {
+        Layout grid = getGridLayout();
+
+        TreeTable t = getTreeTable(null);
+        grid.addComponent(t);
+
+        t = getTreeTable("small");
+        grid.addComponent(t);
+
+        t = getTreeTable("big");
+        grid.addComponent(t);
+
+        t = getTreeTable("striped");
+        grid.addComponent(t);
+
+        t = getTreeTable("small striped");
+        grid.addComponent(t);
+
+        t = getTreeTable("big striped");
+        grid.addComponent(t);
+
+        t = getTreeTable("strong");
+        grid.addComponent(t);
+
+        t = getTreeTable("small strong");
+        grid.addComponent(t);
+
+        t = getTreeTable("big strong");
+        grid.addComponent(t);
+
+        t = getTreeTable("borderless");
+        grid.addComponent(t);
+
+        t = getTreeTable("striped");
+        t.setColumnHeaderMode(Table.COLUMN_HEADER_MODE_HIDDEN);
+        t.setCaption(t.getCaption() + ", hidden headers");
+        grid.addComponent(t);
+
+        addComponent(grid);
+    }
+
+    GridLayout getGridLayout() {
+        GridLayout grid = new GridLayout(3, 1) {
+            @Override
+            public void addComponent(Component c) {
+                super.addComponent(c);
+                setComponentAlignment(c, Alignment.MIDDLE_CENTER);
+                if (c.getStyleName() != "") {
+                    ((AbstractComponent) c).setDescription(c.getClass()
+                            .getSimpleName()
+                            + ".addStyleName(\""
+                            + c.getStyleName() + "\")");
+                } else {
+                    ((AbstractComponent) c).setDescription("new "
+                            + c.getClass().getSimpleName() + "()");
+                }
+            }
+        };
+        grid.setWidth("100%");
+        grid.setSpacing(true);
+        grid.setMargin(true);
+        grid.setStyleName("preview-grid");
+        return grid;
+    }
+
+    public TreeTable getTreeTable(String style) {
+        TreeTable t = new TreeTable();
+        t.setAnimationsEnabled(true);
+        t.setWidth("250px");
+        t.setPageLength(5);
+        t.setSelectable(true);
+        t.setColumnCollapsingAllowed(true);
+        t.setColumnReorderingAllowed(true);
+
+        if (style != null) {
+            t.setStyleName(style);
+            t.setCaption("Table.addStyleName(\"" + style + "\")");
+        }
+
+        t.addContainerProperty("First", String.class, null);
+        t.addContainerProperty("Second", String.class, null);
+        t.addContainerProperty("Third", String.class, null);
+
+        for (int j = 1; j < 100; j++) {
+            t.addItem(new Object[] { "Foo " + j, "Bar " + j, "Lorem " + j }, j);
+        }
+        Hierarchical hc = t.getContainerDataSource();
+        hc.setChildrenAllowed(2, true);
+        for (int j = 4; j < 100; j++) {
+            hc.setParent(j, 2);
+        }
+
+        t.setColumnIcon("Third", new ThemeResource(
+                "../runo/icons/16/document.png"));
+        t.select(1);
+
+        return t;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Colors should be correct while animating expands/collapses";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6723;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/treetable/KeepAllItemsVisible.html b/tests/testbench/com/vaadin/tests/components/treetable/KeepAllItemsVisible.html
new file mode 100644
index 0000000000..0d92deec16
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/treetable/KeepAllItemsVisible.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.treetable.KeepAllItemsVisible?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableKeepAllItemsVisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>8,3</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>Root3Expanded</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableKeepAllItemsVisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[21]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>10,6</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>Root16Expanded</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableKeepAllItemsVisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[21]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>13,7</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>Root3ExpandedRoot16Collapsed</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/treetable/KeepAllItemsVisible.java b/tests/testbench/com/vaadin/tests/components/treetable/KeepAllItemsVisible.java
new file mode 100644
index 0000000000..ad0255a2da
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/treetable/KeepAllItemsVisible.java
@@ -0,0 +1,133 @@
+package com.vaadin.tests.components.treetable;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Tree.CollapseEvent;
+import com.vaadin.ui.Tree.CollapseListener;
+import com.vaadin.ui.Tree.ExpandEvent;
+import com.vaadin.ui.Tree.ExpandListener;
+import com.vaadin.ui.TreeTable;
+
+public class KeepAllItemsVisible extends TestBase implements ExpandListener,
+        CollapseListener {
+
+    private static final String CAPTION = "caption";
+
+    @Override
+    protected void setup() {
+        getMainWindow().getContent().setHeight(null);
+        final TreeTable tt = new TreeTable();
+        tt.setWidth("400px");
+        tt.addContainerProperty(CAPTION, String.class, "");
+        for (int i = 0; i < 20; i++) {
+            String id = "Root " + i;
+            Item item = tt.addItem(id);
+            item.getItemProperty(CAPTION).setValue(id);
+            addChildren(tt, id, 5, 2);
+        }
+
+        tt.setSelectable(true);
+        tt.setImmediate(true);
+
+        tt.addListener((ExpandListener) this);
+        tt.addListener((CollapseListener) this);
+        tt.addListener(new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                recalculatePageLength(tt);
+                tt.requestRepaint();
+            }
+        });
+        addComponent(tt);
+
+        recalculatePageLength(tt);
+
+        Button b = new Button("Set pagelength to 10",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        tt.setPageLength(10);
+                    }
+                });
+        addComponent(b);
+        b = new Button("Set pagelength to 20", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                tt.setPageLength(20);
+            }
+        });
+        addComponent(b);
+        b = new Button("Set pagelength to 0", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                tt.setPageLength(0);
+            }
+        });
+        addComponent(b);
+    }
+
+    private void recalculatePageLength(TreeTable tt) {
+        tt.setPageLength(getVisibleNodeCount(tt));
+    }
+
+    private int getVisibleNodeCount(TreeTable tt) {
+        int count = 0;
+        for (Object rootId : tt.rootItemIds()) {
+            count += countVisibleNodes(tt, rootId);
+        }
+
+        return count;
+
+    }
+
+    private int countVisibleNodes(TreeTable tt, Object node) {
+        int count = 1;
+        if (!tt.isCollapsed(node) && tt.hasChildren(node)) {
+            for (Object childId : tt.getChildren(node)) {
+                count += countVisibleNodes(tt, childId);
+            }
+        }
+
+        return count;
+    }
+
+    private void addChildren(TreeTable tt, String parentId, int nr,
+            int maxNesting) {
+        if (maxNesting < 1) {
+            return;
+        }
+
+        for (int i = 1; i <= nr; i++) {
+            String id = parentId + "/" + i;
+            Item item = tt.addItem(id);
+            item.getItemProperty(CAPTION).setValue(id);
+            tt.setParent(id, parentId);
+            addChildren(tt, id, nr, maxNesting - 1);
+        }
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Keeps the TreeTable pagelength so that all expanded items are shown.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 7292;
+    }
+
+    public void nodeCollapse(CollapseEvent event) {
+        recalculatePageLength((TreeTable) event.getSource());
+
+    }
+
+    public void nodeExpand(ExpandEvent event) {
+        recalculatePageLength((TreeTable) event.getSource());
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/treetable/ProgrammaticSelect.java b/tests/testbench/com/vaadin/tests/components/treetable/ProgrammaticSelect.java
new file mode 100644
index 0000000000..fc68d0be15
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/treetable/ProgrammaticSelect.java
@@ -0,0 +1,128 @@
+package com.vaadin.tests.components.treetable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.TreeTable;
+
+public class ProgrammaticSelect extends TestBase {
+
+    @Override
+    protected void setup() {
+        final TreeTable tt = new TreeTable();
+        tt.setContainerDataSource(buildDataSource(10, 100, 50));
+        tt.setSelectable(true);
+        addComponent(tt);
+
+        Button selectItem = new Button("Select first row",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        Object id = tt.getItemIds().iterator().next();
+                        tt.select(id);
+                    }
+                });
+
+        addComponent(selectItem);
+    }
+
+    private Container buildDataSource(int properties, int items, int roots) {
+        Container.Hierarchical c = new HierarchicalContainer();
+
+        populateContainer(c, properties, items);
+
+        if (items <= roots) {
+            return c;
+        }
+
+        // "roots" roots, each with
+        // "firstLevel" children, two with no children (one with childAllowed,
+        // one without)
+        // ("firstLevel"-2)*"secondLevel" children ("secondLevel"/2 with
+        // childAllowed, "secondLevel"/2 without)
+
+        // N*M+N*(M-2)*C = items
+        // items=N(M+MC-2C)
+
+        // Using secondLevel=firstLevel/2 =>
+        // items = roots*(firstLevel+firstLevel*firstLevel/2-2*firstLevel/2)
+        // =roots*(firstLevel+firstLevel^2/2-firstLevel)
+        // = roots*firstLevel^2/2
+        // => firstLevel = sqrt(items/roots*2)
+
+        int firstLevel = (int) Math.ceil(Math.sqrt(items / roots * 2.0));
+        int secondLevel = firstLevel / 2;
+
+        while (roots * (1 + 2 + (firstLevel - 2) * secondLevel) < items) {
+            // Increase something so we get enough items
+            secondLevel++;
+        }
+
+        List<Object> itemIds = new ArrayList<Object>(c.getItemIds());
+
+        int nextItemId = roots;
+        for (int rootIndex = 0; rootIndex < roots; rootIndex++) {
+            // roots use items 0..roots-1
+            Object rootItemId = itemIds.get(rootIndex);
+
+            // force roots to be roots even though they automatically should be
+            c.setParent(rootItemId, null);
+
+            for (int firstLevelIndex = 0; firstLevelIndex < firstLevel; firstLevelIndex++) {
+                if (nextItemId >= items) {
+                    break;
+                }
+                Object firstLevelItemId = itemIds.get(nextItemId++);
+                c.setParent(firstLevelItemId, rootItemId);
+
+                if (firstLevelIndex < 2) {
+                    continue;
+                }
+
+                // firstLevelChildren 2.. have child nodes
+                for (int secondLevelIndex = 0; secondLevelIndex < secondLevel; secondLevelIndex++) {
+                    if (nextItemId >= items) {
+                        break;
+                    }
+
+                    Object secondLevelItemId = itemIds.get(nextItemId++);
+                    c.setParent(secondLevelItemId, firstLevelItemId);
+                }
+            }
+        }
+
+        return c;
+    }
+
+    private void populateContainer(Container c, int properties, int items) {
+        c.removeAllItems();
+        for (int i = 1; i <= properties; i++) {
+            c.addContainerProperty("Property " + i, String.class, "");
+        }
+        for (int i = 1; i <= items; i++) {
+            Item item = c.addItem("Item " + i);
+            for (int j = 1; j <= properties; j++) {
+                item.getItemProperty("Property " + j).setValue(
+                        "Item " + i + "," + j);
+            }
+        }
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Programmatically selecting an item should not cause a complete repaint";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6766;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/treetable/TreeTableExpandWithRowStyle.html b/tests/testbench/com/vaadin/tests/components/treetable/TreeTableExpandWithRowStyle.html
new file mode 100644
index 0000000000..2143de2607
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/treetable/TreeTableExpandWithRowStyle.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+    <td>open</td>
+    <td>/run/com.vaadin.tests.components.treetable.TreeTableTest?restartApplication</td>
+    <td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item1</td>
+	<td>26,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+	<td>25,8</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
+    <td>27,4</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+    <td>49,10</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item5</td>
+    <td>104,7</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+    <td>40,10</td>
+</tr>
+<tr>
+    <td>screenCapture</td>
+    <td></td>
+    <td>redrow</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]</td>
+    <td>10,4</td>
+</tr>
+<tr>
+    <td>pause</td>
+    <td></td>
+    <td>200</td>
+</tr>
+<tr>
+    <td>screenCapture</td>
+    <td></td>
+    <td>redrowexpanded</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/treetable/TreeTableGeneratedColumns.html b/tests/testbench/com/vaadin/tests/components/treetable/TreeTableGeneratedColumns.html
new file mode 100644
index 0000000000..09014f3aa0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/treetable/TreeTableGeneratedColumns.html
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.treetable.TreeTableTest?restartApplication</td>
+	<td></td>
+</tr>
+<!--3 properties-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
+	<td>38,13</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+	<td>50,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+	<td>63,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+	<td>32,14</td>
+</tr>
+<!--100px label-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
+	<td>38,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>46,7</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>76,6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+	<td>101,11</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/FocusableScrollPanel[0]/VTreeTable$VTreeTableScrollBody[0]/VTreeTable$VTreeTableScrollBody$VTreeTableRow[0]/VLabel[0]</td>
+	<td>Item 1/Generated 1</td>
+</tr>
+<!--100px html label-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
+	<td>49,19</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>54,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>96,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item9</td>
+	<td>101,9</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/FocusableScrollPanel[0]/VTreeTable$VTreeTableScrollBody[0]/VTreeTable$VTreeTableScrollBody$VTreeTableRow[0]/VLabel[1]</td>
+	<td>Item 1/Generated 2</td>
+</tr>
+<!--plain string-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
+	<td>32,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>44,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>71,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item7</td>
+	<td>143,11</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[5]/domChild[0]</td>
+	<td>Item 1/Generated 3</td>
+</tr>
+<!--html string-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
+	<td>43,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>49,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+	<td>90,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item8</td>
+	<td>135,14</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[6]/domChild[0]</td>
+	<td>&lt;i&gt;Item 1&lt;/i&gt;/&lt;b&gt;Generated 4&lt;/b&gt;</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>generated-columns-label-label-string-string</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/treetable/TreeTableGeneratedRows.html b/tests/testbench/com/vaadin/tests/components/treetable/TreeTableGeneratedRows.html
new file mode 100644
index 0000000000..6419a8c251
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/treetable/TreeTableGeneratedRows.html
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+    <td>open</td>
+    <td>/run/com.vaadin.tests.components.treetable.TreeTableTest?restartApplication=</td>
+    <td></td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
+    <td>30,7</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+    <td>36,4</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+    <td>75,6</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item13</td>
+    <td>34,10</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
+    <td>39,9</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+    <td>43,2</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item3</td>
+    <td>45,4</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item10</td>
+    <td>41,8</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
+    <td>10,9</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+    <td>35,7</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+    <td>32,8</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+    <td>54,7</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
+    <td>20,4</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+    <td>42,5</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item6</td>
+    <td>92,5</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+    <td>65,8</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[0]/domChild[0]/domChild[0]</td>
+    <td>12,8</td>
+</tr>
+<tr>
+    <td>screenCapture</td>
+    <td></td>
+    <td>spanned</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[4]/domChild[0]/domChild[0]/domChild[0]</td>
+    <td>12,4</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
+    <td>22,2</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+    <td>44,0</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item6</td>
+    <td>87,3</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+    <td>68,12</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[0]/domChild[0]/domChild[0]</td>
+    <td>11,6</td>
+</tr>
+<tr>
+    <td>screenCapture</td>
+    <td></td>
+    <td>nospan</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[9]/domChild[0]/domChild[0]/domChild[0]</td>
+    <td>11,6</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_Smenu#item0</td>
+    <td>7,12</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+    <td>24,1</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[1]/VMenuBar[0]#item6</td>
+    <td>93,8</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+    <td>61,6</td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableTest::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[7]/domChild[0]/domChild[0]/domChild[0]</td>
+    <td>12,7</td>
+</tr>
+<tr>
+    <td>screenCapture</td>
+    <td></td>
+    <td>html</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/treetable/TreeTableOutOfSync.html b/tests/testbench/com/vaadin/tests/components/treetable/TreeTableOutOfSync.html
new file mode 100644
index 0000000000..b8d6cdb22e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/treetable/TreeTableOutOfSync.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TreeTableOutOfSync</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TreeTableOutOfSync</td></tr>
+</thead><tbody>
+<tr>
+    <td>open</td>
+    <td>/run/com.vaadin.tests.components.treetable.TreeTableOutOfSync?restartApplication</td>
+    <td></td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableOutOfSync::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+    <td>10,7</td>
+</tr>
+<tr>
+    <td>click</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTableOutOfSync::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/FocusableScrollPanel[0]/VTreeTable$VTreeTableScrollBody[0]/VTreeTable$VTreeTableScrollBody$VTreeTableRow[2]/VButton[0]/domChild[0]/domChild[0]</td>
+    <td></td>
+</tr>
+<tr>
+    <td>verifyTextNotPresent</td>
+    <td>Something has caused us to be out of sync with the server.<br />Take note of any unsaved data, and click here to re-sync.</td>
+    <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/treetable/TreeTableOutOfSync.java b/tests/testbench/com/vaadin/tests/components/treetable/TreeTableOutOfSync.java
new file mode 100644
index 0000000000..09b42cce31
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/treetable/TreeTableOutOfSync.java
@@ -0,0 +1,53 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+package com.vaadin.tests.components.treetable;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TreeTable;
+
+public class TreeTableOutOfSync extends TestBase {
+
+    @Override
+    protected void setup() {
+        TreeTable tt = new TreeTable();
+        tt.addContainerProperty("i", Integer.class, null);
+        tt.addGeneratedColumn("text", new Table.ColumnGenerator() {
+            public Object generateCell(Table source, Object itemId,
+                    Object columnId) {
+                if ("text".equals(columnId)) {
+                    Button button = new Button("text "
+                            + source.getContainerDataSource().getItem(itemId)
+                                    .getItemProperty("i").getValue());
+                    button.addListener(new Button.ClickListener() {
+                        public void buttonClick(ClickEvent event) {
+                            getMainWindow().showNotification("click");
+                        }
+                    });
+                    return button;
+                }
+                return null;
+            }
+        });
+
+        Object item1 = tt.addItem(new Object[] { 1 }, null);
+        Object item2 = tt.addItem(new Object[] { 2 }, null);
+        tt.addItem(new Object[] { 3 }, null);
+        tt.setParent(item2, item1);
+
+        addComponent(tt);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "When a root node is expanded, components created by a column generator go out of sync";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 7620;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/treetable/TreeTablePartialUpdates-LongScroll.html b/tests/testbench/com/vaadin/tests/components/treetable/TreeTablePartialUpdates-LongScroll.html
new file mode 100644
index 0000000000..276725e6bd
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/treetable/TreeTablePartialUpdates-LongScroll.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+    <td>open</td>
+    <td>/run/com.vaadin.tests.components.treetable.TreeTablePartialUpdates?restartApplication</td>
+    <td></td>
+</tr>
+<tr>
+    <td>mouseClick</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTablePartialUpdates::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+    <td>12,6</td>
+</tr>
+<tr>
+    <td>scroll</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTablePartialUpdates::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/domChild[1]</td>
+    <td>1692</td>
+</tr>
+<tr>
+    <td>pause</td>
+    <td>300</td>
+    <td></td>
+</tr>
+<!-- scroll 6000 to make sure to actually hit bottom -->
+<tr>
+    <td>scroll</td>
+    <td>vaadin=runcomvaadintestscomponentstreetableTreeTablePartialUpdates::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/domChild[1]</td>
+    <td>6000</td>
+</tr>
+<tr>
+    <td>pause</td>
+    <td>300</td>
+    <td></td>
+</tr>
+<tr>
+    <td>screenCapture</td>
+    <td></td>
+    <td>treetable-long-scroll</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/treetable/TreeTablePartialUpdates.java b/tests/testbench/com/vaadin/tests/components/treetable/TreeTablePartialUpdates.java
new file mode 100644
index 0000000000..23eaa5dfea
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/treetable/TreeTablePartialUpdates.java
@@ -0,0 +1,63 @@
+package com.vaadin.tests.components.treetable;
+
+import com.vaadin.data.Container.Hierarchical;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.TreeTable;
+
+public class TreeTablePartialUpdates extends TestBase {
+
+    @Override
+    protected void setup() {
+        TreeTable tt = new TreeTable();
+        tt.setContainerDataSource(makeHierarchicalContainer());
+        tt.setWidth("300px");
+        addComponent(tt);
+    }
+
+    private Hierarchical makeHierarchicalContainer() {
+        HierarchicalContainer hc = new HierarchicalContainer();
+        hc.addContainerProperty("p1", String.class, "");
+        hc.addContainerProperty("p2", String.class, "");
+
+        Object r1 = hc.addItem();
+        hc.getItem(r1).getItemProperty("p1").setValue("root1");
+        hc.getItem(r1).getItemProperty("p2").setValue("root1");
+
+        Object r2 = hc.addItem();
+        hc.getItem(r2).getItemProperty("p1").setValue("root2");
+        hc.getItem(r2).getItemProperty("p2").setValue("root2");
+
+        Object r3 = hc.addItem();
+        hc.getItem(r3).getItemProperty("p1").setValue("root3");
+        hc.getItem(r3).getItemProperty("p2").setValue("root3");
+
+        Object r4 = hc.addItem();
+        hc.getItem(r4).getItemProperty("p1").setValue("END");
+        hc.setChildrenAllowed(r4, false);
+
+        addNodesToRoot(hc, r1, 200);
+        addNodesToRoot(hc, r2, 200);
+        addNodesToRoot(hc, r3, 200);
+        return hc;
+    }
+
+    private void addNodesToRoot(HierarchicalContainer hc, Object root, int count) {
+        for (int ix = 0; ix < count; ix++) {
+            Object id = hc.addItem();
+            hc.getItem(id).getItemProperty("p1").setValue(String.valueOf(ix));
+            hc.setParent(id, root);
+        }
+    }
+
+    @Override
+    protected String getDescription() {
+        return "";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6722;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/treetable/TreeTableSetCollapsed.html b/tests/testbench/com/vaadin/tests/components/treetable/TreeTableSetCollapsed.html
new file mode 100644
index 0000000000..5c878dba42
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/treetable/TreeTableSetCollapsed.html
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8080/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.treetable.TreeTableSetCollapsed?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementPresent</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableSetCollapsed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTreeTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableSetCollapsed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementPresent</td>
+	<td>vaadin=runcomvaadintestscomponentstreetableTreeTableSetCollapsed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VTreeTable[0]/domChild[1]</td>
+	<td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/treetable/TreeTableSetCollapsed.java b/tests/testbench/com/vaadin/tests/components/treetable/TreeTableSetCollapsed.java
new file mode 100644
index 0000000000..2a14c946f3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/treetable/TreeTableSetCollapsed.java
@@ -0,0 +1,46 @@
+package com.vaadin.tests.components.treetable;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.TreeTable;
+
+public class TreeTableSetCollapsed extends TestBase {
+
+    @Override
+    protected void setup() {
+        createTreeTableAndPopulate();
+        addComponent(new Button("Create another TreeTable",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        createTreeTableAndPopulate();
+                    }
+                }));
+    }
+
+    private void createTreeTableAndPopulate() {
+        TreeTable tt = new TreeTable();
+        tt.addContainerProperty("Foo", String.class, "");
+        tt.addContainerProperty("Bar", String.class, "");
+
+        Object item1 = tt.addItem(new Object[] { "Foo", "Bar" }, null);
+        Object item2 = tt.addItem(new Object[] { "Foo2", "Bar2" }, null);
+
+        tt.setParent(item2, item1);
+
+        tt.setCollapsed(item1, false);
+
+        addComponent(tt);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Using setCollapsed before the treetable has initially been rendered should not cause any problems";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return Integer.valueOf(7605);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/treetable/TreeTableTest.java b/tests/testbench/com/vaadin/tests/components/treetable/TreeTableTest.java
new file mode 100644
index 0000000000..010c735047
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/treetable/TreeTableTest.java
@@ -0,0 +1,300 @@
+package com.vaadin.tests.components.treetable;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Container.Hierarchical;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.tests.components.table.Tables;
+import com.vaadin.ui.Table.CellStyleGenerator;
+import com.vaadin.ui.Tree.CollapseEvent;
+import com.vaadin.ui.Tree.CollapseListener;
+import com.vaadin.ui.Tree.ExpandEvent;
+import com.vaadin.ui.Tree.ExpandListener;
+import com.vaadin.ui.TreeTable;
+
+public class TreeTableTest extends Tables<TreeTable> implements
+        CollapseListener, ExpandListener {
+
+    @Override
+    protected Class<TreeTable> getTestClass() {
+        return TreeTable.class;
+    }
+
+    private int rootItemIds = 3;
+    private CellStyleGenerator rootGreenSecondLevelRed = new com.vaadin.ui.Table.CellStyleGenerator() {
+
+        public String getStyle(Object itemId, Object propertyId) {
+            if (propertyId != null) {
+                return null;
+            }
+
+            Hierarchical c = getComponent().getContainerDataSource();
+            if (c.isRoot(itemId)) {
+                return "green";
+            }
+
+            Object parent = c.getParent(itemId);
+            if (!c.isRoot(parent)) {
+                return "red";
+            }
+
+            return null;
+        }
+
+        @Override
+        public String toString() {
+            return "Root green, second level red";
+        }
+
+    };
+
+    private CellStyleGenerator evenItemsBold = new CellStyleGenerator() {
+
+        public String getStyle(Object itemId, Object propertyId) {
+            if (propertyId != null) {
+                return null;
+            }
+
+            Hierarchical c = getComponent().getContainerDataSource();
+            int idx = 0;
+
+            for (Iterator<?> i = c.getItemIds().iterator(); i.hasNext();) {
+                Object id = i.next();
+                if (id == itemId) {
+                    if (idx % 2 == 1) {
+                        return "bold";
+                    } else {
+                        return null;
+                    }
+                }
+
+                idx++;
+            }
+
+            return null;
+        }
+
+        @Override
+        public String toString() {
+            return "Even items bold";
+        };
+
+    };
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+
+        // Causes container changes so doing this first..
+        createRootItemSelectAction(CATEGORY_DATA_SOURCE);
+
+        createExpandCollapseActions(CATEGORY_FEATURES);
+        createChildrenAllowedAction(CATEGORY_DATA_SOURCE);
+
+        createListeners(CATEGORY_LISTENERS);
+        // createItemStyleGenerator(CATEGORY_FEATURES);
+
+        createBooleanAction("Animate collapse/expand", CATEGORY_STATE, false,
+                animationCommand);
+
+        // TODO: DropHandler
+        // TODO: DragMode
+        // TODO: ActionHandler
+
+    }
+
+    @Override
+    protected Container createContainer(int properties, int items) {
+        return createHierarchicalContainer(properties, items, rootItemIds);
+    }
+
+    private void createListeners(String category) {
+        createBooleanAction("Item click listener", category, false,
+                itemClickListenerCommand);
+        createBooleanAction("Expand listener", category, false,
+                expandListenerCommand);
+        createBooleanAction("Collapse listener", category, false,
+                collapseListenerCommand);
+
+    }
+
+    private Container.Hierarchical createHierarchicalContainer(int properties,
+            int items, int roots) {
+        Container.Hierarchical c = new HierarchicalContainer();
+
+        populateContainer(c, properties, items);
+
+        if (items <= roots) {
+            return c;
+        }
+
+        // "roots" roots, each with
+        // "firstLevel" children, two with no children (one with childAllowed,
+        // one without)
+        // ("firstLevel"-2)*"secondLevel" children ("secondLevel"/2 with
+        // childAllowed, "secondLevel"/2 without)
+
+        // N*M+N*(M-2)*C = items
+        // items=N(M+MC-2C)
+
+        // Using secondLevel=firstLevel/2 =>
+        // items = roots*(firstLevel+firstLevel*firstLevel/2-2*firstLevel/2)
+        // =roots*(firstLevel+firstLevel^2/2-firstLevel)
+        // = roots*firstLevel^2/2
+        // => firstLevel = sqrt(items/roots*2)
+
+        int firstLevel = (int) Math.ceil(Math.sqrt(items / roots * 2.0));
+        int secondLevel = firstLevel / 2;
+
+        while (roots * (1 + 2 + (firstLevel - 2) * secondLevel) < items) {
+            // Increase something so we get enough items
+            secondLevel++;
+        }
+
+        List<Object> itemIds = new ArrayList<Object>(c.getItemIds());
+
+        int nextItemId = roots;
+        for (int rootIndex = 0; rootIndex < roots; rootIndex++) {
+            // roots use items 0..roots-1
+            Object rootItemId = itemIds.get(rootIndex);
+
+            // force roots to be roots even though they automatically should be
+            c.setParent(rootItemId, null);
+
+            for (int firstLevelIndex = 0; firstLevelIndex < firstLevel; firstLevelIndex++) {
+                if (nextItemId >= items) {
+                    break;
+                }
+                Object firstLevelItemId = itemIds.get(nextItemId++);
+                c.setParent(firstLevelItemId, rootItemId);
+
+                if (firstLevelIndex < 2) {
+                    continue;
+                }
+
+                // firstLevelChildren 2.. have child nodes
+                for (int secondLevelIndex = 0; secondLevelIndex < secondLevel; secondLevelIndex++) {
+                    if (nextItemId >= items) {
+                        break;
+                    }
+
+                    Object secondLevelItemId = itemIds.get(nextItemId++);
+                    c.setParent(secondLevelItemId, firstLevelItemId);
+                }
+            }
+        }
+
+        return c;
+    }
+
+    private void createRootItemSelectAction(String category) {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        for (int i = 1; i <= 10; i++) {
+            options.put(String.valueOf(i), i);
+        }
+        options.put("20", 20);
+        options.put("50", 50);
+        options.put("100", 100);
+
+        createSelectAction("Number of root items", category, options, "3",
+                rootItemIdsCommand);
+    }
+
+    private void createExpandCollapseActions(String category) {
+        LinkedHashMap<String, Object> options = new LinkedHashMap<String, Object>();
+
+        for (Object id : getComponent().getItemIds()) {
+            options.put(id.toString(), id);
+        }
+        createMultiClickAction("Expand", category, options, expandItemCommand,
+                null);
+        // createMultiClickAction("Expand recursively", category, options,
+        // expandItemRecursivelyCommand, null);
+        createMultiClickAction("Collapse", category, options,
+                collapseItemCommand, null);
+
+    }
+
+    private void createChildrenAllowedAction(String category) {
+        LinkedHashMap<String, Object> options = new LinkedHashMap<String, Object>();
+
+        for (Object id : getComponent().getItemIds()) {
+            options.put(id.toString(), id);
+        }
+        createMultiToggleAction("Children allowed", category, options,
+                setChildrenAllowedCommand, true);
+
+    }
+
+    /*
+     * COMMANDS
+     */
+    private Command<TreeTable, Integer> rootItemIdsCommand = new Command<TreeTable, Integer>() {
+
+        public void execute(TreeTable c, Integer value, Object data) {
+            rootItemIds = value;
+            updateContainer();
+        }
+    };
+
+    private Command<TreeTable, Object> expandItemCommand = new Command<TreeTable, Object>() {
+
+        public void execute(TreeTable c, Object itemId, Object data) {
+            c.setCollapsed(itemId, false);
+        }
+    };
+
+    private Command<TreeTable, Object> collapseItemCommand = new Command<TreeTable, Object>() {
+
+        public void execute(TreeTable c, Object itemId, Object data) {
+            c.setCollapsed(itemId, true);
+        }
+    };
+
+    private Command<TreeTable, Boolean> setChildrenAllowedCommand = new Command<TreeTable, Boolean>() {
+
+        public void execute(TreeTable c, Boolean areChildrenAllowed,
+                Object itemId) {
+            c.setChildrenAllowed(itemId, areChildrenAllowed);
+        }
+    };
+
+    private Command<TreeTable, Boolean> expandListenerCommand = new Command<TreeTable, Boolean>() {
+        public void execute(TreeTable c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((ExpandListener) TreeTableTest.this);
+            } else {
+                c.removeListener((ExpandListener) TreeTableTest.this);
+            }
+        }
+    };
+
+    private Command<TreeTable, Boolean> collapseListenerCommand = new Command<TreeTable, Boolean>() {
+        public void execute(TreeTable c, Boolean value, Object data) {
+            if (value) {
+                c.addListener((CollapseListener) TreeTableTest.this);
+            } else {
+                c.removeListener((CollapseListener) TreeTableTest.this);
+            }
+        }
+    };
+
+    protected Command<TreeTable, Boolean> animationCommand = new Command<TreeTable, Boolean>() {
+
+        public void execute(TreeTable c, Boolean enabled, Object data) {
+            c.setAnimationsEnabled(enabled);
+        }
+    };
+
+    public void nodeCollapse(CollapseEvent event) {
+        log(event.getClass().getSimpleName() + ": " + event.getItemId());
+    }
+
+    public void nodeExpand(ExpandEvent event) {
+        log(event.getClass().getSimpleName() + ": " + event.getItemId());
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/twincolselect/TwinColSelectSelection.html b/tests/testbench/com/vaadin/tests/components/twincolselect/TwinColSelectSelection.html
new file mode 100644
index 0000000000..c36b3922a2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/twincolselect/TwinColSelectSelection.html
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.select.TwinColSelects?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>addSelection</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#leftSelect</td>
+	<td>label=5</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#add</td>
+	<td></td>
+</tr>
+<tr>
+	<td>addSelection</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#leftSelect</td>
+	<td>label=1</td>
+</tr>
+<tr>
+	<td>removeSelection</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#leftSelect</td>
+	<td>label=4</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#add</td>
+	<td></td>
+</tr>
+<tr>
+	<td>removeSelection</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#leftSelect</td>
+	<td>label=0</td>
+</tr>
+<tr>
+	<td>addSelection</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#leftSelect</td>
+	<td>label=8</td>
+</tr>
+<tr>
+	<td>addSelection</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#leftSelect</td>
+	<td>label=4</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#add</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
+	<td>5148</td>
+</tr>
+<tr>
+	<td>removeSelection</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
+	<td>label=5</td>
+</tr>
+<tr>
+	<td>removeSelection</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
+	<td>label=4</td>
+</tr>
+<tr>
+	<td>removeSelection</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
+	<td>label=8</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#remove</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
+	<td>548</td>
+</tr>
+<tr>
+	<td>removeSelection</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
+	<td>label=5</td>
+</tr>
+<tr>
+	<td>addSelection</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
+	<td>label=8</td>
+</tr>
+<tr>
+	<td>addSelection</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
+	<td>label=5</td>
+</tr>
+<tr>
+	<td>addSelection</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
+	<td>label=4</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#remove</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#rightSelect</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentsselectTwinColSelects::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTwinColSelect[0]#leftSelect</td>
+	<td>023679101112131415161718191548</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/twincolselect/TwinColSelects.java b/tests/testbench/com/vaadin/tests/components/twincolselect/TwinColSelects.java
new file mode 100644
index 0000000000..ebbddc5f6a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/twincolselect/TwinColSelects.java
@@ -0,0 +1,64 @@
+package com.vaadin.tests.components.twincolselect;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.tests.components.select.AbstractSelectTestCase;
+import com.vaadin.ui.TwinColSelect;
+
+public class TwinColSelects extends AbstractSelectTestCase<TwinColSelect> {
+
+    @Override
+    protected Class<TwinColSelect> getTestClass() {
+        return TwinColSelect.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+        createColumnSelectAction();
+        createRowSelectAction();
+    }
+
+    private void createColumnSelectAction() {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("-", 0);
+        for (int i = 1; i <= 10; i++) {
+            options.put(String.valueOf(i), i);
+        }
+        options.put("50", 50);
+        options.put("100", 100);
+        options.put("1000", 1000);
+
+        super.createSelectAction("Columns", CATEGORY_DATA_SOURCE, options, "-",
+                columnsAction);
+
+    }
+
+    private void createRowSelectAction() {
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
+        options.put("-", 0);
+        for (int i = 1; i <= 10; i++) {
+            options.put(String.valueOf(i), i);
+        }
+        options.put("50", 50);
+        options.put("100", 100);
+        options.put("1000", 1000);
+
+        super.createSelectAction("Rows", CATEGORY_DATA_SOURCE, options, "-",
+                rowsAction);
+
+    }
+
+    private Command<TwinColSelect, Integer> columnsAction = new Command<TwinColSelect, Integer>() {
+
+        public void execute(TwinColSelect c, Integer value, Object data) {
+            c.setColumns(value);
+        }
+    };
+    private Command<TwinColSelect, Integer> rowsAction = new Command<TwinColSelect, Integer>() {
+
+        public void execute(TwinColSelect c, Integer value, Object data) {
+            c.setRows(value);
+        }
+    };
+}
diff --git a/tests/testbench/com/vaadin/tests/components/upload/ForceSubmit.java b/tests/testbench/com/vaadin/tests/components/upload/ForceSubmit.java
new file mode 100644
index 0000000000..9f5c2b67e2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/upload/ForceSubmit.java
@@ -0,0 +1,85 @@
+package com.vaadin.tests.components.upload;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Upload;
+import com.vaadin.ui.Upload.FailedEvent;
+import com.vaadin.ui.Upload.FinishedEvent;
+import com.vaadin.ui.Upload.Receiver;
+import com.vaadin.ui.Upload.StartedEvent;
+
+public class ForceSubmit extends TestBase implements Receiver {
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6630;
+    }
+
+    public OutputStream receiveUpload(String filename, String MIMEType) {
+        return new ByteArrayOutputStream();
+    }
+
+    @Override
+    protected void setup() {
+
+        final TextField textField = new TextField("Test field");
+        addComponent(textField);
+
+        final Upload u;
+
+        u = new Upload("Upload", this);
+
+        u.setButtonCaption(null);
+
+        addComponent(u);
+
+        u.addListener(new Upload.FinishedListener() {
+            public void uploadFinished(FinishedEvent event) {
+                String filename = event.getFilename();
+                long length = event.getLength();
+                getMainWindow().showNotification(
+                        "Done. Filename : " + filename + " Lenght: " + length);
+            }
+        });
+
+        u.addListener(new Upload.FailedListener() {
+            public void uploadFailed(FailedEvent event) {
+                getMainWindow().showNotification("Failed. No file selected?");
+            }
+        });
+
+        u.addListener(new Upload.StartedListener() {
+            public void uploadStarted(StartedEvent event) {
+                getMainWindow().showNotification(
+                        "Started upload. TF value :" + textField.getValue());
+            }
+        });
+
+        Button button = new Button(
+                "I'm an external button (not the uploads builtin), hit me to start upload.");
+        button.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                u.submitUpload();
+            }
+        });
+
+        addComponent(button);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Some wireframists are just so web 1.0. If requirements "
+                + "say the upload must not start until the whole form "
+                + "is 'Oukeyd', that is what we gotta do. In these cases "
+                + "developers most probably also want to hide the uploads"
+                + " internal button by setting its caption to null.";
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/upload/TestImmediateUploadInFormLayout.java b/tests/testbench/com/vaadin/tests/components/upload/TestImmediateUploadInFormLayout.java
new file mode 100644
index 0000000000..d1a77d0e49
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/upload/TestImmediateUploadInFormLayout.java
@@ -0,0 +1,53 @@
+package com.vaadin.tests.components.upload;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+import java.util.Collections;
+import java.util.List;
+
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.Upload;
+import com.vaadin.ui.Upload.Receiver;
+
+public class TestImmediateUploadInFormLayout extends
+        ComponentTestCase<FormLayout> implements Receiver {
+
+    @Override
+    protected String getDescription() {
+        return "On Firefox 3.5 and Opera 10.10, clicking on an immediate upload in a wide FormLayout has no effect";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4359;
+    }
+
+    @Override
+    protected Class<FormLayout> getTestClass() {
+        return FormLayout.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+
+        FormLayout formLayout = new FormLayout();
+        formLayout.setWidth("100%");
+        Upload u = new Upload("Upload in FormLayout", this);
+        u.setImmediate(true);
+        formLayout.addComponent(u);
+        addTestComponent(formLayout);
+
+    }
+
+    @Override
+    protected List<Component> createActions() {
+        return Collections.emptyList();
+    }
+
+    public OutputStream receiveUpload(String filename, String MIMEType) {
+        getMainWindow().showNotification("Receiving upload");
+        return new ByteArrayOutputStream();
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/upload/TestUpload.java b/tests/testbench/com/vaadin/tests/components/upload/TestUpload.java
new file mode 100644
index 0000000000..6690603958
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/upload/TestUpload.java
@@ -0,0 +1,59 @@
+package com.vaadin.tests.components.upload;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Upload;
+import com.vaadin.ui.Upload.FinishedEvent;
+import com.vaadin.ui.Upload.Receiver;
+
+public class TestUpload extends ComponentTestCase<Upload> implements Receiver {
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3525;
+    }
+
+    @Override
+    protected Class<Upload> getTestClass() {
+        return Upload.class;
+    }
+
+    @Override
+    protected void initializeComponents() {
+        Upload u;
+
+        u = new Upload("Undefined wide upload", this);
+        u.setSizeUndefined();
+        addTestComponent(u);
+
+        u.addListener(new Upload.FinishedListener() {
+            public void uploadFinished(FinishedEvent event) {
+                getMainWindow().showNotification("Done");
+            }
+        });
+
+        u = new Upload("300px wide upload", this);
+        u.setWidth("300px");
+        addTestComponent(u);
+
+    }
+
+    @Override
+    protected List<Component> createActions() {
+        List<Component> actions = new ArrayList<Component>();
+        actions.add(createEnabledAction(true));
+
+        return actions;
+    }
+
+    public OutputStream receiveUpload(String filename, String MIMEType) {
+        getMainWindow().showNotification("Receiving upload");
+        return new ByteArrayOutputStream();
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/upload/TestUploadAndDisableOnSuccess.java b/tests/testbench/com/vaadin/tests/components/upload/TestUploadAndDisableOnSuccess.java
new file mode 100644
index 0000000000..009cc63168
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/upload/TestUploadAndDisableOnSuccess.java
@@ -0,0 +1,102 @@
+package com.vaadin.tests.components.upload;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.tests.components.ComponentTestCase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Upload;
+import com.vaadin.ui.Upload.FinishedEvent;
+import com.vaadin.ui.Upload.Receiver;
+import com.vaadin.ui.Upload.StartedEvent;
+
+public class TestUploadAndDisableOnSuccess extends ComponentTestCase<Upload>
+        implements Receiver {
+
+    @Override
+    protected String getDescription() {
+        return "If upload is detached and attached during upload, the client side componenent never receives information that the upload has finished. Second update will not be successful.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4605;
+    }
+
+    @Override
+    protected Class<Upload> getTestClass() {
+        return Upload.class;
+    }
+
+    int counter = 0;
+    private Label l;
+
+    @Override
+    protected void initializeComponents() {
+
+        final Label labe = new Label();
+
+        addComponent(labe);
+
+        final Upload u;
+        u = new Upload(null, this);
+        u.setImmediate(true);
+        addTestComponent(u);
+
+        l = new Label(getUploadcount());
+        addComponent(l);
+
+        u.addListener(new Upload.StartedListener() {
+
+            public void uploadStarted(StartedEvent event) {
+                /*
+                 * Remove component before upload from the same vertical layout.
+                 * Causes upload to be detached/attached -> upload loses it
+                 * target iframes onload listener -> puts VUpload inappropriate
+                 * state.
+                 */
+                getLayout().removeComponent(labe);
+            }
+        });
+
+        u.addListener(new Upload.FinishedListener() {
+            public void uploadFinished(FinishedEvent event) {
+                getMainWindow().showNotification("Done");
+                l.setValue(getUploadcount());
+            }
+        });
+
+    }
+
+    private String getUploadcount() {
+        return counter++ + " uploads";
+    }
+
+    @Override
+    protected List<Component> createActions() {
+        List<Component> actions = new ArrayList<Component>();
+        actions.add(createButtonAction("Toggle Enabled",
+                new Command<Upload, Boolean>() {
+
+                    public void execute(Upload c, Boolean value, Object data) {
+                        c.setEnabled(!c.isEnabled());
+                    }
+                }));
+
+        return actions;
+    }
+
+    public OutputStream receiveUpload(String filename, String MIMEType) {
+        // sleep to ensure change before upload is complete
+        try {
+            Thread.sleep(1000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        return new ByteArrayOutputStream();
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/upload/TestUploadFilename.java b/tests/testbench/com/vaadin/tests/components/upload/TestUploadFilename.java
new file mode 100644
index 0000000000..12006412f2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/upload/TestUploadFilename.java
@@ -0,0 +1,61 @@
+package com.vaadin.tests.components.upload;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Upload;
+import com.vaadin.ui.Upload.FinishedEvent;
+import com.vaadin.ui.Upload.Receiver;
+
+public class TestUploadFilename extends TestBase {
+
+    private Label result = new Label("Waiting for upload");
+    private UploadReceiver receiver = new UploadReceiver();
+
+    @Override
+    protected void setup() {
+
+        Upload upload = new Upload("Upload a file", receiver);
+
+        addComponent(upload);
+        addComponent(result);
+
+        upload.addListener(new Upload.FinishedListener() {
+            public void uploadFinished(FinishedEvent event) {
+                result.setValue("Got file (should not contain path): "
+                        + receiver.getFilename());
+            }
+        });
+
+    }
+
+    public static class UploadReceiver implements Receiver {
+
+        private String filename;
+
+        public OutputStream receiveUpload(String filename, String MIMEType) {
+            this.filename = filename;
+            return new ByteArrayOutputStream();
+        }
+
+        public String getFilename() {
+            return filename;
+        }
+
+    }
+
+    @Override
+    protected String getDescription() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/CenteredWindowWithUndefinedSize.html b/tests/testbench/com/vaadin/tests/components/window/CenteredWindowWithUndefinedSize.html
new file mode 100644
index 0000000000..2e15d8d645
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/CenteredWindowWithUndefinedSize.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>CenteredWindowWithUndefinedSize</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">CenteredWindowWithUndefinedSize</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.window.CenteredWindowWithUndefinedSize</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/window/CenteredWindowWithUndefinedSize.java b/tests/testbench/com/vaadin/tests/components/window/CenteredWindowWithUndefinedSize.java
new file mode 100644
index 0000000000..a7fcda3cf1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/CenteredWindowWithUndefinedSize.java
@@ -0,0 +1,33 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class CenteredWindowWithUndefinedSize extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The centered sub-window with undefined height and a 100% high layout should be rendered in the center of the screen and not in the top-left corner.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2702;
+    }
+
+    @Override
+    protected void setup() {
+        Window centered = new Window("A window");
+        centered.setSizeUndefined();
+        centered.getContent().setSizeFull();
+        centered.center();
+
+        Label l = new Label("This window should be centered");
+        l.setSizeUndefined();
+        centered.addComponent(l);
+
+        getMainWindow().addWindow(centered);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/CloseSubWindow.html b/tests/testbench/com/vaadin/tests/components/window/CloseSubWindow.html
new file mode 100644
index 0000000000..36e9134566
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/CloseSubWindow.html
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>CloseSubWindow</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">CloseSubWindow</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.window.CloseSubWindow?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::PID_Sopennative</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>1. Window 'Sub-window' closed</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::PID_Sopennative</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>2. Window 'Sub-window' closed</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForPopUp</td>
+	<td>nativewindow</td>
+	<td>30000</td>
+</tr>
+<tr>
+	<td>selectWindow</td>
+	<td>name=nativewindow</td>
+	<td></td>
+</tr>
+<tr>
+	<td>close</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>selectWindow</td>
+	<td>title=com.vaadin.tests.components.window.CloseSubWindow</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::PID_Spoll/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentswindowCloseSubWindow::PID_SLog/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>3. Browser window closed</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/window/CloseSubWindow.java b/tests/testbench/com/vaadin/tests/components/window/CloseSubWindow.java
new file mode 100644
index 0000000000..9a5fff18ed
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/CloseSubWindow.java
@@ -0,0 +1,129 @@
+package com.vaadin.tests.components.window;
+
+import java.net.URL;
+
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.CloseEvent;
+import com.vaadin.ui.Window.CloseListener;
+
+public class CloseSubWindow extends TestBase {
+
+    private Window browserWindow;
+    private Log log = new Log(5);
+
+    @Override
+    protected void setup() {
+        Button openWindowButton = new Button("Open sub-window");
+        openWindowButton.setDebugId("opensub");
+        openWindowButton.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                Window sub = createClosableSubWindow("Sub-window");
+                getMainWindow().addWindow(sub);
+            }
+        });
+
+        addComponent(log);
+        addComponent(openWindowButton);
+
+        Button openBrowserWindowButton = new Button("Open browser window");
+        openWindowButton.setDebugId("opennative");
+        openBrowserWindowButton.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                browserWindow = new Window("Window");
+                Button closeButton = new Button("Close this window",
+                        new ClickListener() {
+
+                            public void buttonClick(ClickEvent event) {
+                                event.getButton().getWindow()
+                                        .executeJavaScript("window.close();");
+
+                            }
+                        });
+                browserWindow.addComponent(closeButton);
+
+                browserWindow.addListener(new CloseListener() {
+                    public void windowClose(CloseEvent e) {
+                        logBrowserWindowClosed();
+                        // there is no push, so the user needs to click a button
+                        // to see the notification
+
+                        // Opera does not send a notification about the window
+                        // having been closed
+                    }
+
+                });
+
+                addWindow(browserWindow);
+                URL windowUrl = browserWindow.getURL();
+                // named for easier access by test tools
+                getMainWindow().open(new ExternalResource(windowUrl),
+                        "nativewindow");
+                if (getBrowser().isOpera()) {
+                    // Immediately log a close event in Opera so this test can
+                    // be run for all browsers. Vaadin ticket #5687.
+                    logBrowserWindowClosed();
+                }
+            }
+        });
+
+        addComponent(openBrowserWindowButton);
+
+        Button pollButton = new Button("Poll server");
+        pollButton.setDebugId("poll");
+        addComponent(pollButton);
+
+    }
+
+    private Window createClosableSubWindow(final String title) {
+        final Window window = new Window(title);
+        window.setSizeUndefined();
+        window.getContent().setSizeFull();
+        window.setClosable(true);
+
+        Button closeButton = new Button("Close");
+        closeButton.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                window.getParent().removeWindow(window);
+            }
+        });
+        window.addComponent(closeButton);
+
+        Button removeButton = new Button("Remove from parent");
+        removeButton.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                window.getParent().removeWindow(window);
+            }
+        });
+        window.addComponent(closeButton);
+
+        window.addListener(new CloseListener() {
+            public void windowClose(CloseEvent e) {
+                log.log("Window '" + title + "' closed");
+            }
+        });
+
+        return window;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Close sub-windows both from code and with the close button in the window title bar, and check for close events. Contains an ugly workaround for the Opera bug (Opera does not send close events)";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3865;
+    }
+
+    private void logBrowserWindowClosed() {
+        log.log("Browser window closed");
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/EmbeddedInSubWindow.html b/tests/testbench/com/vaadin/tests/components/window/EmbeddedInSubWindow.html
new file mode 100644
index 0000000000..d74e09dd6a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/EmbeddedInSubWindow.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>EmbeddedInSubWindow</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">EmbeddedInSubWindow</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.window.EmbeddedInSubWindow</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/window/EmbeddedInSubWindow.java b/tests/testbench/com/vaadin/tests/components/window/EmbeddedInSubWindow.java
new file mode 100644
index 0000000000..cd990f94b7
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/EmbeddedInSubWindow.java
@@ -0,0 +1,39 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.Window;
+
+public class EmbeddedInSubWindow extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The sub window contains a large icon and should be sized according to the icon. The icon contains a blue border of 10px at the outer edges. The layout in the sub window has margins enabled.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+    @Override
+    protected void setup() {
+        setTheme("tests-tickets");
+        Window zoom = new Window("Image Preview");
+        zoom.setSizeUndefined();
+        zoom.getContent().setSizeUndefined();
+
+        String res = "icons/EmbeddedInSubWindow-image.png";
+        Embedded imagePreview = new Embedded(null, new ThemeResource(res));
+        imagePreview.setSizeUndefined();
+
+        zoom.addComponent(imagePreview);
+        zoom.setModal(true);
+        zoom.setResizable(false);
+
+        getMainWindow().addWindow(zoom);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/ExecuteJavaScript.java b/tests/testbench/com/vaadin/tests/components/window/ExecuteJavaScript.java
new file mode 100644
index 0000000000..dfa0e80368
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/ExecuteJavaScript.java
@@ -0,0 +1,46 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Window;
+
+public class ExecuteJavaScript extends AbstractTestCase {
+
+    @Override
+    public void init() {
+        final Window mainWindow = new Window("Test");
+        setMainWindow(mainWindow);
+
+        for (final String script : new String[] { "alert('foo');",
+                "window.print()", "document.write('foo')" }) {
+            Panel p = new Panel("Example: " + script);
+            p.addComponent(createScriptButton(script));
+            mainWindow.addComponent(p);
+        }
+
+    }
+
+    private Button createScriptButton(final String script) {
+        Button b = new Button(script);
+        b.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                getMainWindow().executeJavaScript(script);
+            }
+        });
+
+        return b;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Test for the Window.executeJavaScript method. Click a button to execute the javascript";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3589;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/ExtraLargeSubWindow.html b/tests/testbench/com/vaadin/tests/components/window/ExtraLargeSubWindow.html
new file mode 100644
index 0000000000..a679bd6f07
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/ExtraLargeSubWindow.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.window.ExtraLargeSubWindow</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>full-size</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/window/ExtraLargeSubWindow.java b/tests/testbench/com/vaadin/tests/components/window/ExtraLargeSubWindow.java
new file mode 100644
index 0000000000..bcaa44dc76
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/ExtraLargeSubWindow.java
@@ -0,0 +1,32 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.NativeButton;
+import com.vaadin.ui.Window;
+
+public class ExtraLargeSubWindow extends TestBase {
+
+    @Override
+    protected void setup() {
+        Window w = new Window("full sized window");
+        w.setWidth("2000px");
+        w.setHeight("2000px");
+        w.getContent().setSizeFull();
+        NativeButton b = new NativeButton("A large button");
+        b.setSizeFull();
+        w.addComponent(b);
+
+        getMainWindow().addWindow(w);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A 100%x100% sub window should not produce scrollbars in the main view or in the sub window. The button inside the sub window is 100%x100%, as is the layout";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3407;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/ExtraWindowShown.html b/tests/testbench/com/vaadin/tests/components/window/ExtraWindowShown.html
new file mode 100644
index 0000000000..4881d0caf1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/ExtraWindowShown.html
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.window.ExtraWindowShown?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowExtraWindowShown::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowExtraWindowShown::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>1000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>vaadin=runcomvaadintestscomponentswindowExtraWindowShown::/VWindow[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowExtraWindowShown::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowExtraWindowShown::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>1000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>vaadin=runcomvaadintestscomponentswindowExtraWindowShown::/VWindow[0]</td>
+	<td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/window/ExtraWindowShown.java b/tests/testbench/com/vaadin/tests/components/window/ExtraWindowShown.java
new file mode 100644
index 0000000000..a7079b2d99
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/ExtraWindowShown.java
@@ -0,0 +1,53 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Window;
+
+public class ExtraWindowShown extends TestBase {
+
+    @Override
+    protected void setup() {
+        Button b = new Button("Open window", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+
+                final Window w = new Window("Sub window");
+                w.center();
+                w.addComponent(new Button("Close", new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        Window main = w.getParent();
+                        // main = w.getWindow();
+                        main.removeWindow(w);
+                    }
+                }));
+                Button iconButton = new Button("A button with icon");
+                iconButton
+                        .setIcon(new ThemeResource("../runo/icons/16/ok.png"));
+                w.addComponent(iconButton);
+                event.getButton().getWindow().addWindow(w);
+            }
+
+        });
+        getLayout().setHeight("100%");
+        getLayout().addComponent(b);
+        getLayout().setComponentAlignment(b, Alignment.MIDDLE_CENTER);
+    }
+
+    @Override
+    protected String getDescription() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/FullSizedWindow.java b/tests/testbench/com/vaadin/tests/components/window/FullSizedWindow.java
new file mode 100644
index 0000000000..3cb5f45712
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/FullSizedWindow.java
@@ -0,0 +1,31 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.NativeButton;
+import com.vaadin.ui.Window;
+
+public class FullSizedWindow extends TestBase {
+
+    @Override
+    protected void setup() {
+        Window w = new Window("full sized window");
+        w.setSizeFull();
+        w.getContent().setSizeFull();
+        NativeButton b = new NativeButton("A large button");
+        b.setSizeFull();
+        w.getContent().addComponent(b);
+        getMainWindow().addWindow(w);
+        setTheme("runo");
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A 100%x100% sub window should not produce scrollbars in the main view or in the sub window. The button inside the sub window is 100%x100%, as is the layout";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3407;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/HugeWindowShouldBeClosable.java b/tests/testbench/com/vaadin/tests/components/window/HugeWindowShouldBeClosable.java
new file mode 100644
index 0000000000..3b8067c726
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/HugeWindowShouldBeClosable.java
@@ -0,0 +1,27 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Window;
+
+public class HugeWindowShouldBeClosable extends TestBase {
+
+    @Override
+    protected void setup() {
+        Window w = new Window("Hueg");
+        w.setWidth("2000px");
+        w.setHeight("2000px");
+        w.setPositionY(500);
+        getMainWindow().addWindow(w);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Huge windows should be closable";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6784;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/LazyWindowResize.java b/tests/testbench/com/vaadin/tests/components/window/LazyWindowResize.java
new file mode 100644
index 0000000000..6c051f4b1e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/LazyWindowResize.java
@@ -0,0 +1,108 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.tests.util.LoremIpsum;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.ResizeEvent;
+import com.vaadin.ui.Window.ResizeListener;
+
+public class LazyWindowResize extends AbstractTestCase {
+
+    private Window mainWindow;
+    private Window subWindow;
+    private Button lazyMode;
+    private Log log = new Log(5);
+    private CheckBox resizeListenerCheckBox;
+
+    protected ResizeListener resizeListener = new ResizeListener() {
+
+        public void windowResized(ResizeEvent e) {
+            if (e.getWindow() == mainWindow) {
+                log.log("Main window resized");
+            } else {
+                log.log("Sub window resized");
+            }
+
+        }
+    };
+    private CheckBox immediateCheckBox;;;
+
+    @Override
+    protected String getDescription() {
+        return "Check or uncheck the checkbox to use lazy or eager resize events. Lazy mode uses a small delay before recalculating layout sizes and can be used to speed up resizes in slow UIs.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6715;
+    }
+
+    @Override
+    public void init() {
+        mainWindow = new Window("Resize test");
+        setMainWindow(mainWindow);
+        subWindow = new Window("Sub window");
+        subWindow.setHeight("50%");
+        subWindow.setWidth("50%");
+        subWindow.center();
+        subWindow.addComponent(new Label(LoremIpsum.get(1000)));
+        getMainWindow().addWindow(subWindow);
+
+        lazyMode = new CheckBox("Lazy resize");
+        lazyMode.setImmediate(true);
+        lazyMode.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                setLazy(lazyMode.booleanValue());
+            }
+        });
+
+        resizeListenerCheckBox = new CheckBox("Resize listener");
+        resizeListenerCheckBox.setImmediate(true);
+        resizeListenerCheckBox.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                if (resizeListenerCheckBox.booleanValue()) {
+                    subWindow.addListener(resizeListener);
+                    mainWindow.addListener(resizeListener);
+                } else {
+                    subWindow.removeListener(resizeListener);
+                    mainWindow.removeListener(resizeListener);
+                }
+
+            }
+
+        });
+        immediateCheckBox = new CheckBox("Windows immediate");
+        immediateCheckBox.setImmediate(true);
+        immediateCheckBox.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                mainWindow.setImmediate(immediateCheckBox.booleanValue());
+                subWindow.setImmediate(immediateCheckBox.booleanValue());
+
+            }
+
+        });
+        mainWindow.addComponent(lazyMode);
+        mainWindow.addComponent(resizeListenerCheckBox);
+        mainWindow.addComponent(immediateCheckBox);
+        mainWindow.addComponent(log);
+        mainWindow.addComponent(new Label("<br/><br/>", Label.CONTENT_XHTML));
+        mainWindow.addComponent(new Label(LoremIpsum.get(10000)));
+
+        setLazy(false);
+    }
+
+    private void setLazy(boolean b) {
+        mainWindow.setResizeLazy(b);
+        subWindow.setResizeLazy(b);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/LongNotifications.java b/tests/testbench/com/vaadin/tests/components/window/LongNotifications.java
new file mode 100644
index 0000000000..c70c14e08e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/LongNotifications.java
@@ -0,0 +1,79 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Window.Notification;
+
+public class LongNotifications extends TestBase {
+    private final String text = "This is a veeeery large notification in the main window which should definitly not exist at all, in any app. But they finally do in real world applications, no matter what you do. People have small screens and desperatly try to run web apps in their iphones.";
+
+    @Override
+    protected String getDescription() {
+        return "Notifications should not be wider than the screen.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2632;
+    }
+
+    @Override
+    protected void setup() {
+        setTheme("tests-tickets");
+
+        Button b = new Button("Show loooong notification",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+
+                        getMainWindow().showNotification(
+                                text,
+                                "This is description for the same notifications."
+                                        + text,
+                                Notification.TYPE_HUMANIZED_MESSAGE);
+                    }
+                });
+        getLayout().addComponent(b);
+
+        b = new Button("Show notifications", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+
+                getMainWindow().showNotification("Example failed",
+                        "This is description for the same notifications.",
+                        Notification.TYPE_HUMANIZED_MESSAGE);
+            }
+        });
+
+        getLayout().addComponent(b);
+
+        b = new Button("Show loooong notification  (error)",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+
+                        getMainWindow()
+                                .showNotification(
+                                        text,
+                                        "This is description for the same notifications."
+                                                + text,
+                                        Notification.TYPE_ERROR_MESSAGE);
+                    }
+                });
+        getLayout().addComponent(b);
+
+        b = new Button("Show notification (error)", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+
+                getMainWindow().showNotification("Example failed",
+                        "This is description for the same notifications.",
+                        Notification.TYPE_ERROR_MESSAGE);
+            }
+        });
+
+        getLayout().addComponent(b);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/ModalWindowNativeSelect.java b/tests/testbench/com/vaadin/tests/components/window/ModalWindowNativeSelect.java
new file mode 100644
index 0000000000..d7672a88d5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/ModalWindowNativeSelect.java
@@ -0,0 +1,32 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.Window;
+
+public class ModalWindowNativeSelect extends TestBase {
+
+    @Override
+    protected void setup() {
+        NativeSelect ns = new NativeSelect();
+
+        Window modalWindow = new Window();
+        modalWindow.setModal(true);
+        modalWindow.center();
+
+        addComponent(ns);
+        getMainWindow().addWindow(modalWindow);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The native select should be behind the modality curtain and user should not be able to interact with it";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4261;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/components/window/PositionedSubWindows.java b/tests/testbench/com/vaadin/tests/components/window/PositionedSubWindows.java
new file mode 100644
index 0000000000..9fe44dd7e8
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/PositionedSubWindows.java
@@ -0,0 +1,41 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Window;
+
+public class PositionedSubWindows extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Subwindows should obey setPositionX/Y methods also if only one is called";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4362;
+    }
+
+    @Override
+    protected void setup() {
+        Window smallWindow = getSmallWindow("Top:200");
+
+        smallWindow.setPositionY(200);
+        getMainWindow().addWindow(smallWindow);
+        smallWindow = getSmallWindow("Left:200");
+        smallWindow.setPositionX(200);
+        getMainWindow().addWindow(smallWindow);
+
+        smallWindow = getSmallWindow("50/50");
+        smallWindow.setPositionX(50);
+        smallWindow.setPositionY(50);
+        getMainWindow().addWindow(smallWindow);
+
+    }
+
+    private Window getSmallWindow(String caption) {
+        Window window2 = new Window(caption);
+        window2.setWidth("100px");
+        window2.setHeight("50px");
+        return window2;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/SubWindowFocus.java b/tests/testbench/com/vaadin/tests/components/window/SubWindowFocus.java
new file mode 100644
index 0000000000..f0dccda66c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/SubWindowFocus.java
@@ -0,0 +1,83 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.event.Action;
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class SubWindowFocus extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "A subwindow that listens to ESC and SPACE can be opened. It "
+                + "should receive focus and thus receive keyboard events when "
+                + "anything within the window is clicked. It should be last in"
+                + "the tabbing order. The window can only be closed using ESC.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3498;
+    }
+
+    @Override
+    protected void setup() {
+
+        // some fields with tabindex
+        for (int i = 1; i < 4; i++) {
+            TextField tf = new TextField();
+            tf.setTabIndex(i);
+            tf.setInputPrompt("Tab index " + i);
+            addComponent(tf);
+        }
+        // field with tabindex 0
+        TextField tf = new TextField();
+        tf.setTabIndex(0);
+        tf.setInputPrompt("Tab index 0");
+        addComponent(tf);
+
+        Button b = new Button("new", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                final Window win = new Window("Subwin");
+                win.getContent().setWidth(null);
+                win.center();
+                win.setClosable(false);
+                getMainWindow().addWindow(win);
+                win.addComponent(new Label("SPACE notifies, ESC closes."));
+
+                win.addActionHandler(new Action.Handler() {
+
+                    ShortcutAction esc = new ShortcutAction("Close",
+                            ShortcutAction.KeyCode.ESCAPE, null);
+                    ShortcutAction spc = new ShortcutAction("Space",
+                            ShortcutAction.KeyCode.SPACEBAR, null);
+
+                    public Action[] getActions(Object target, Object sender) {
+                        return new Action[] { esc, spc };
+                    }
+
+                    public void handleAction(Action action, Object sender,
+                            Object target) {
+                        if (action == esc) {
+                            getMainWindow().removeWindow(win);
+                        } else {
+                            getMainWindow().showNotification(
+                                    action.getCaption());
+                        }
+
+                    }
+
+                });
+
+                win.addComponent(new TextField());
+            }
+
+        });
+        addComponent(b);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/SubWindowFocusAndBlurListeners.java b/tests/testbench/com/vaadin/tests/components/window/SubWindowFocusAndBlurListeners.java
new file mode 100644
index 0000000000..2d9d7bd5b2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/SubWindowFocusAndBlurListeners.java
@@ -0,0 +1,82 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.event.Action;
+import com.vaadin.event.Action.Handler;
+import com.vaadin.event.FieldEvents.BlurEvent;
+import com.vaadin.event.FieldEvents.BlurListener;
+import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.event.FieldEvents.FocusListener;
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class SubWindowFocusAndBlurListeners extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Focus and blur listeners should work. Note the "
+                + "side efect (focusing) when callintg bring to front.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5039;
+    }
+
+    @Override
+    protected void setup() {
+
+        final Window window = new Window("Focus test window");
+        window.getContent().setSizeUndefined();
+
+        window.addComponent(new TextField());
+        window.addListener(new FocusListener() {
+            public void focus(FocusEvent event) {
+                event.getComponent().getWindow()
+                        .showNotification("Focused window");
+            }
+        });
+
+        window.addListener(new BlurListener() {
+            public void blur(BlurEvent event) {
+                event.getComponent().getWindow()
+                        .showNotification("Blurred window");
+            }
+        });
+
+        window.addActionHandler(new Handler() {
+
+            private Action[] s = new Action[] { new ShortcutAction("^Save") };
+
+            public Action[] getActions(Object target, Object sender) {
+                return s;
+            }
+
+            public void handleAction(Action action, Object sender, Object target) {
+                window.showNotification("Action!");
+            }
+        });
+
+        Window main = getLayout().getWindow();
+
+        main.addWindow(window);
+
+        main.addComponent(new TextField());
+
+        Button button = new Button("Bring to front (should focus too)",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        window.bringToFront();
+                    }
+                });
+        main.addComponent(button);
+
+        Window window2 = new Window("Another window for testing");
+        main.addWindow(window2);
+        window2.setPositionX(50);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/SubWindowOrder.html b/tests/testbench/com/vaadin/tests/components/window/SubWindowOrder.html
new file mode 100644
index 0000000000..c59e831582
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/SubWindowOrder.html
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>SubWindowOrder</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">SubWindowOrder</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.window.SubWindowOrder?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>13,10</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>dialog1-should-be-on-top</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item3</td>
+	<td>93,10</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[1]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>dialog-3-modal</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[2]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>11,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item4</td>
+	<td>56,9</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[2]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[1]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[3]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>11,11</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item5</td>
+	<td>76,6</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[3]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[1]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[4]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>11,15</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>window5closed-window-5-modal</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[3]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>6,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[2]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>12,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item3</td>
+	<td>97,6</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[2]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[1]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[2]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>10,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item2</td>
+	<td>101,10</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[2]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindowOrder::/VWindow[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>10,5</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>window2-on-top-of-window1-others-closed</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/window/SubWindowOrder.java b/tests/testbench/com/vaadin/tests/components/window/SubWindowOrder.java
new file mode 100644
index 0000000000..c34f32f275
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/SubWindowOrder.java
@@ -0,0 +1,80 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class SubWindowOrder extends TestBase {
+
+    private BeanItemContainer<Window> windowlist = new BeanItemContainer<Window>(
+            Window.class);
+
+    @Override
+    protected void setup() {
+        Window mainWindow = getMainWindow();
+        HorizontalLayout controlpanels = new HorizontalLayout();
+        for (int i = 1; i <= 5; i++) {
+            Window dialog = new Window("Dialog " + i);
+            dialog.getContent().setSizeUndefined();
+            windowlist.addBean(dialog);
+            dialog.addComponent(new Label("this is dialog number " + i));
+            dialog.addComponent(new ControlPanel());
+            mainWindow.addWindow(dialog);
+        }
+        controlpanels.addComponent(new ControlPanel());
+        getLayout().setSizeFull();
+        getLayout().addComponent(controlpanels);
+        getLayout().setComponentAlignment(controlpanels, Alignment.BOTTOM_LEFT);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Subwindows should be rendered in the same order as they are added.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3363;
+    }
+
+    class ControlPanel extends CssLayout implements ClickListener {
+        private Button bf = new Button("Bring to front");
+        private Button toggleModality = new Button("Toggle modality");
+        private ComboBox winSel = new ComboBox();
+
+        public ControlPanel() {
+            winSel.setCaption("Controlled window:");
+            winSel.setContainerDataSource(windowlist);
+            winSel.setValue(windowlist.firstItemId());
+            winSel.setItemCaptionPropertyId("caption");
+            addComponent(winSel);
+            addComponent(bf);
+            addComponent(toggleModality);
+            bf.addListener(this);
+            toggleModality.addListener(this);
+        }
+
+        public void buttonClick(ClickEvent event) {
+            if (event.getButton() == bf) {
+                getCurWindow().bringToFront();
+            } else if (event.getButton() == toggleModality) {
+                getCurWindow().setModal(!getCurWindow().isModal());
+            }
+
+        }
+
+        private Window getCurWindow() {
+            return (Window) winSel.getValue();
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/SubWindowPositionUpdate.java b/tests/testbench/com/vaadin/tests/components/window/SubWindowPositionUpdate.java
new file mode 100644
index 0000000000..9383dba80f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/SubWindowPositionUpdate.java
@@ -0,0 +1,44 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.ProgressIndicator;
+import com.vaadin.ui.Window;
+
+public class SubWindowPositionUpdate extends TestBase {
+
+    static int delay = 400;
+
+    @Override
+    protected void setup() {
+        Window subWindow = new Window("Draggable sub window") {
+            @Override
+            public void setPositionX(int positionX) {
+                try {
+                    Thread.sleep(delay);
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+                super.setPositionX(positionX);
+            }
+        };
+        getMainWindow().addWindow(subWindow);
+        ProgressIndicator pi = new ProgressIndicator();
+        pi.setIndeterminate(true);
+        pi.setPollingInterval(delay);
+        addComponent(pi);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The window position should not jump inconsistently while "
+                + "dragging, even though external UIDL updates are sent and "
+                + "received by the progress indicator. A small delay is used "
+                + "on the server side to surface the issue (" + delay + "ms).";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4427;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/SubWindows-runo.html b/tests/testbench/com/vaadin/tests/components/window/SubWindows-runo.html
new file mode 100644
index 0000000000..5cbd350174
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/SubWindows-runo.html
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>SubWindows</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">SubWindows</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.window.SubWindows?theme=runo</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>add-button</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindows::/VWindow[0]/FocusableScrollPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindows::/VWindow[0]/FocusableScrollPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>add+2-remove</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindows::/VWindow[0]/FocusableScrollPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindows::/VWindow[0]/FocusableScrollPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>add-button-only</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/window/SubWindows.html b/tests/testbench/com/vaadin/tests/components/window/SubWindows.html
new file mode 100644
index 0000000000..3b2109e3f1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/SubWindows.html
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>SubWindows</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">SubWindows</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.window.SubWindows</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>add-button</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindows::/VWindow[0]/FocusableScrollPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindows::/VWindow[0]/FocusableScrollPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>add+2-remove</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindows::/VWindow[0]/FocusableScrollPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowSubWindows::/VWindow[0]/FocusableScrollPanel[0]/VHorizontalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>add-button-only</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/window/SubWindows.java b/tests/testbench/com/vaadin/tests/components/window/SubWindows.java
new file mode 100644
index 0000000000..e939f0b9a4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/SubWindows.java
@@ -0,0 +1,111 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class SubWindows extends TestBase {
+
+    private Window autoWideWindow;
+
+    @Override
+    protected String getDescription() {
+        return "Three windows should be shown. "
+                + "The width of the one in the upper left corner should be adjusted according to the contents. "
+                + "The centered windows width should be set according to the caption and the second textfield should be clipped. "
+                + "The third window should be initially the width and height of its content and when resizing the window the content width should be updated so it is always 100% of the window.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+    private Component createRemoveButton() {
+        Button b = new Button("Remove");
+        b.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                Button b = event.getButton();
+                ComponentContainer cc = (ComponentContainer) b.getParent();
+                cc.removeComponent(b);
+            }
+        });
+
+        return b;
+    }
+
+    @Override
+    protected void setup() {
+        autoWideWindow = new Window("Dialog - width by contents",
+                new HorizontalLayout());
+        autoWideWindow.getContent().setSizeUndefined();
+        autoWideWindow.addComponent(new TextField("Field 1"));
+        autoWideWindow.addComponent(new TextField("Field 2"));
+        autoWideWindow.addComponent(new Button("Add", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                autoWideWindow.addComponent(createRemoveButton());
+
+            }
+
+        }));
+
+        getMainWindow().addWindow(autoWideWindow);
+
+        {
+            Window dialog = new Window("Dialog - width defined by caption");
+            dialog.addComponent(new TextField("Field 1"));
+
+            TextField tf2 = new TextField("Field 2");
+            tf2.setWidth("500px");
+            dialog.addComponent(tf2);
+            dialog.addComponent(new Button("Ok"));
+
+            dialog.center();
+            getMainWindow().addWindow(dialog);
+        }
+
+        {
+            Window dialog = new Window("Dialog - width defined by content");
+            dialog.getContent().setHeight(null);
+            dialog.getContent().setWidth("100%");
+
+            TextArea ta = new TextArea();
+            ta.setValue("The textfield should fill the window (except margins)."
+                    + "\n - Try to resize the window\n");
+            ta.setRows(5);
+            ta.setWidth("100%");
+            dialog.addComponent(ta);
+
+            dialog.setPositionX(20);
+            dialog.setPositionY(100);
+            getMainWindow().addWindow(dialog);
+        }
+
+        {
+            Window dialog = new Window("Dialog - size defined by content");
+            dialog.getContent().setHeight("100%");
+            dialog.getContent().setWidth("100%");
+
+            TextArea ta = new TextArea();
+            ta.setValue("The textfield should fill the window (except margins)."
+                    + "\n - Try to resize the window\n");
+            ta.setWidth("100%");
+            ta.setHeight("100%");
+            ta.setRows(5);
+            dialog.addComponent(ta);
+
+            dialog.setPositionX(20);
+            dialog.setPositionY(300);
+            getMainWindow().addWindow(dialog);
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/SubwindowDraggability.java b/tests/testbench/com/vaadin/tests/components/window/SubwindowDraggability.java
new file mode 100644
index 0000000000..e1927982cd
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/SubwindowDraggability.java
@@ -0,0 +1,46 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Window;
+
+public class SubwindowDraggability extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Window draggableSubWindow = new Window("Draggable sub window");
+        draggableSubWindow.setHeight("300px");
+        final Window fixedSubWindow = new Window("Fixed sub window");
+        fixedSubWindow.setHeight("200px");
+        fixedSubWindow.setDraggable(false);
+
+        fixedSubWindow.center();
+        getMainWindow().addWindow(draggableSubWindow);
+        getMainWindow().addWindow(fixedSubWindow);
+
+        Button b = new Button("Swap", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                boolean b = draggableSubWindow.isDraggable();
+
+                draggableSubWindow.setDraggable(!b);
+                fixedSubWindow.setDraggable(b);
+
+            }
+
+        });
+        addComponent(b);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Two sub windows. One is draggable, the other one is fixed and cannot be moved by the user";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3133;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/SubwindowInvalidLayout.java b/tests/testbench/com/vaadin/tests/components/window/SubwindowInvalidLayout.java
new file mode 100644
index 0000000000..aeab7f6c97
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/SubwindowInvalidLayout.java
@@ -0,0 +1,35 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class SubwindowInvalidLayout extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The subwindow contains an invalid layout, which analyze layouts should detect.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3096;
+    }
+
+    @Override
+    protected void setup() {
+        Window window = new Window("Sub window");
+        window.center();
+
+        VerticalLayout vl = new VerticalLayout();
+        vl.setWidth(null);
+        Button b = new Button("A 100% wide button, invalid");
+        b.setWidth("100%");
+        vl.addComponent(b);
+        window.addComponent(vl);
+
+        getMainWindow().addWindow(window);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/TestTooSmallSubwindowSize.html b/tests/testbench/com/vaadin/tests/components/window/TestTooSmallSubwindowSize.html
new file mode 100644
index 0000000000..f926696d63
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/TestTooSmallSubwindowSize.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TestTooSmallSubwindowSize</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TestTooSmallSubwindowSize</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.window.TestTooSmallSubwindowSize</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/window/TestTooSmallSubwindowSize.java b/tests/testbench/com/vaadin/tests/components/window/TestTooSmallSubwindowSize.java
new file mode 100644
index 0000000000..859c1b4b5d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/TestTooSmallSubwindowSize.java
@@ -0,0 +1,44 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class TestTooSmallSubwindowSize extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The size of the subwindow (outer size) is set to 60x60 pixels. Minimum size for the content area is 150x100, which means the window and shadow should be around 155x155 and the content area 150x100. The decoration at the lower left corner of the window must not be missing either.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2579;
+    }
+
+    @Override
+    protected void setup() {
+        Window w = new Window("Scroll");
+        Label desc = new Label(
+                "This is a new child window with a preset"
+                        + " width, height and position. Resizing has been"
+                        + " disabled for this window. Additionally, this text label"
+                        + " is intentionally too large to fit the window. You can"
+                        + " use the scrollbars to view different parts of the window content.");
+        w.addComponent(desc);
+
+        // Set window position
+        w.setPositionX(100);
+        w.setPositionY(100);
+
+        // Set window size
+        w.setWidth(60, Window.UNITS_PIXELS);
+        w.setHeight(60, Window.UNITS_PIXELS);
+
+        // Disable resizing
+        w.setResizable(true);
+
+        getMainWindow().addWindow(w);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/WindowCaptionTest.html b/tests/testbench/com/vaadin/tests/components/window/WindowCaptionTest.html
new file mode 100644
index 0000000000..83889aedb8
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/WindowCaptionTest.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.window.WindowTest?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
+	<td>Short</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::PID_Smenu#item0</td>
+	<td>52,19</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::Root/VOverlay[0]/VMenuBar[0]#item1</td>
+	<td>85,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>67,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+	<td>23,11</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
+	<td>This is a semi-long text that might wrap.</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::PID_Smenu#item0</td>
+	<td>52,19</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::Root/VOverlay[0]/VMenuBar[0]#item1</td>
+	<td>85,4</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>67,9</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+	<td>23,11</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowTest::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/window/WindowClickEvents.html b/tests/testbench/com/vaadin/tests/components/window/WindowClickEvents.html
new file mode 100644
index 0000000000..4a41374e41
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/WindowClickEvents.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>setSpeed</td>
+	<td>200</td>
+	<td>To avoid random failures</td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.window.WindowClickEvents?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VVerticalLayout[0]/domChild[0]/domChild[1]</td>
+	<td>154,150</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VLabel[0]</td>
+	<td>1. Click using left on Main window layout</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>2. Click using left on Main window</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]</td>
+	<td>188,16</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VLabel[0]</td>
+	<td>3. Click using left on Sub window layout</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>4. Click using left on Sub window</td>
+</tr>
+<!--Clicking on the button should not produce a window click event-->
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::PID_SLog_row_0</td>
+	<td>5. Click on button</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::PID_SLog_row_2</td>
+	<td>3. Click using left on Sub window layout</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowClickEvents::PID_SLog_row_1</td>
+	<td>4. Click using left on Sub window</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/window/WindowClickEvents.java b/tests/testbench/com/vaadin/tests/components/window/WindowClickEvents.java
new file mode 100644
index 0000000000..041ccaaf30
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/WindowClickEvents.java
@@ -0,0 +1,88 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.event.LayoutEvents.LayoutClickEvent;
+import com.vaadin.event.LayoutEvents.LayoutClickListener;
+import com.vaadin.event.MouseEvents.ClickEvent;
+import com.vaadin.event.MouseEvents.ClickListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class WindowClickEvents extends TestBase {
+
+    private Log log;
+
+    @Override
+    protected String getDescription() {
+        return "Both the sub window and the main window has a click listener. Clicking produces a row in the log below.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5038;
+    }
+
+    @Override
+    protected void setup() {
+        VerticalLayout layout = new VerticalLayout();
+        layout.addListener(new LayoutClickListener() {
+            public void layoutClick(LayoutClickEvent event) {
+                WindowClickEvents.this.click("Sub window layout", event);
+            }
+        });
+
+        ((VerticalLayout) getMainWindow().getContent())
+                .addListener(new LayoutClickListener() {
+                    public void layoutClick(LayoutClickEvent event) {
+                        WindowClickEvents.this.click("Main window layout",
+                                event);
+                    }
+                });
+        layout.setMargin(true);
+        Window centered = new Window("A window with a click listener", layout);
+        centered.addListener(new ClickListener() {
+
+            public void click(ClickEvent event) {
+                WindowClickEvents.this.click("Sub window", event);
+            }
+
+        });
+        centered.setSizeUndefined();
+        centered.getContent().setSizeUndefined();
+        centered.center();
+
+        Label l = new Label("This window is centered");
+        l.setSizeUndefined();
+        Button b = new Button(
+                "Clicking here should not produce a layout click event");
+        b.addListener(new Button.ClickListener() {
+
+            public void buttonClick(com.vaadin.ui.Button.ClickEvent event) {
+                log.log("Click on button");
+            }
+
+        });
+        centered.addComponent(l);
+        centered.addComponent(b);
+
+        getMainWindow().addWindow(centered);
+        log = new Log(5);
+        addComponent(log);
+        getMainWindow().addListener(new ClickListener() {
+
+            public void click(ClickEvent event) {
+                WindowClickEvents.this.click("Main window", event);
+            }
+        });
+
+    }
+
+    private void click(String target, ClickEvent event) {
+        log.log("Click using " + event.getButtonName() + " on " + target);
+        // + " at " + event.getClientX() + "," + event.getClientY());
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/WindowResizeListener.java b/tests/testbench/com/vaadin/tests/components/window/WindowResizeListener.java
new file mode 100644
index 0000000000..62f998e20e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/WindowResizeListener.java
@@ -0,0 +1,102 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.ResizeEvent;
+import com.vaadin.ui.Window.ResizeListener;
+
+public class WindowResizeListener extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Size changes from windows (both sub "
+                + "and browsers level) should get back to server."
+                + " If size changes, a separate server side event should occur.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+    Window subwin = new ResizeListenerWindow();
+
+    @Override
+    protected void setup() {
+
+        final Label l = new Label();
+        getLayout().addComponent(l);
+
+        getMainWindow().addListener(new ResizeListener() {
+            public void windowResized(ResizeEvent e) {
+                l.setValue("Current main window size: "
+                        + getMainWindow().getWidth() + " x "
+                        + getMainWindow().getHeight());
+            }
+        });
+
+        CheckBox subwindow = new CheckBox("show subwindow");
+        subwindow.setImmediate(true);
+        subwindow.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                if (event.getButton().booleanValue()) {
+                    getMainWindow().addWindow(subwin);
+                } else {
+                    getMainWindow().removeWindow(subwin);
+                }
+            }
+        });
+        getLayout().addComponent(subwindow);
+
+        CheckBox immediate = new CheckBox("immediate");
+        immediate.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                boolean booleanValue = event.getButton().booleanValue();
+                getMainWindow().setImmediate(booleanValue);
+                subwin.setImmediate(booleanValue);
+            }
+        });
+        immediate.setImmediate(true);
+        immediate.setValue(true);
+        getMainWindow().setImmediate(true);
+        subwin.setImmediate(true);
+        getLayout().addComponent(immediate);
+
+        getLayout().addComponent(new Button("Sync"));
+
+    }
+}
+
+class ResizeListenerWindow extends Window {
+    Label sizeLabel = new Label();
+
+    public ResizeListenerWindow() {
+        super("Subwindow");
+        setWidth("400px");
+
+        Layout hl = (Layout) getContent();
+        hl.addComponent(new Label("Current size: "));
+        hl.addComponent(sizeLabel);
+
+        addListener(new ResizeListener() {
+            public void windowResized(ResizeEvent e) {
+                updateLabel();
+            }
+        });
+
+        updateLabel();
+    }
+
+    public void updateLabel() {
+        sizeLabel
+                .setValue(getWidth() + Sizeable.UNIT_SYMBOLS[getWidthUnits()]
+                        + " x " + getHeight()
+                        + Sizeable.UNIT_SYMBOLS[getHeightUnits()]);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/WindowScrollingComponentIntoView.java b/tests/testbench/com/vaadin/tests/components/window/WindowScrollingComponentIntoView.java
new file mode 100644
index 0000000000..7889a58f81
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/WindowScrollingComponentIntoView.java
@@ -0,0 +1,137 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class WindowScrollingComponentIntoView extends AbstractTestCase {
+
+    @Override
+    protected String getDescription() {
+        return "Scroll down, click 'up' and the view should scroll to the top";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4206;
+    }
+
+    @Override
+    public void init() {
+        Table table = new Table();
+        table.setPageLength(50);
+
+        final Button up = new Button("up");
+        up.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                up.getWindow().setScrollTop(0);
+            }
+        });
+
+        setMainWindow(new Window(""));
+        getMainWindow().getContent().setSizeUndefined();
+
+        Component l2 = null;
+        for (int i = 0; i < 10; i++) {
+            l2 = l("X" + i);
+            getMainWindow().addComponent(l2);
+        }
+
+        final Component x9 = l2;
+
+        HorizontalLayout horizontalLayout = new HorizontalLayout();
+
+        Component l = null;
+        for (int i = 0; i < 10; i++) {
+            l = l("Y" + i);
+            horizontalLayout.addComponent(l);
+        }
+
+        getMainWindow().addComponent(horizontalLayout);
+        final Component y9 = l;
+
+        final Window window = new Window();
+        window.setHeight("500px");
+        window.setWidth("500px");
+        window.setPositionX(200);
+        window.setPositionY(200);
+
+        window.addComponent(new Button("Scroll mainwin to X9",
+                new ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        getMainWindow().scrollIntoView(x9);
+
+                    }
+                }));
+        window.addComponent(new Button("Scroll mainwin to Y9",
+                new ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        getMainWindow().scrollIntoView(y9);
+
+                    }
+                }));
+
+        Panel panel = new Panel("scrollable panel");
+        panel.setHeight(400, Panel.UNITS_PIXELS);
+        panel.setScrollable(true);
+        panel.setScrollLeft(50);
+        panel.setScrollTop(50);
+        panel.getContent().setSizeUndefined();
+        window.addComponent(l("Spacer", 500, 500));
+
+        l2 = null;
+        for (int i = 0; i < 10; i++) {
+            l2 = l("X" + i);
+            panel.addComponent(l2);
+        }
+
+        final Component x29 = l2;
+
+        horizontalLayout = new HorizontalLayout();
+
+        l = null;
+        for (int i = 0; i < 10; i++) {
+            l = l("Y" + i);
+            horizontalLayout.addComponent(l);
+        }
+        panel.addComponent(horizontalLayout);
+        final Component y29 = l;
+
+        ((VerticalLayout) getMainWindow().getContent()).addComponent(
+                new Button("Scroll win to X9", new ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        window.scrollIntoView(x29);
+                    }
+                }), 0);
+        ((VerticalLayout) getMainWindow().getContent()).addComponent(
+                new Button("Scroll win to Y9", new ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        window.scrollIntoView(y29);
+                    }
+                }), 0);
+
+        window.addComponent(panel);
+        getMainWindow().addWindow(window);
+
+    }
+
+    private Component l(String string) {
+        return l(string, 200, 350);
+    }
+
+    private Component l(String string, int h, int w) {
+        Label label = new Label(string);
+        label.setHeight(h, Label.UNITS_PIXELS);
+        label.setWidth(w, Label.UNITS_PIXELS);
+        return label;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/WindowScrollingUp.java b/tests/testbench/com/vaadin/tests/components/window/WindowScrollingUp.java
new file mode 100644
index 0000000000..476fd22a55
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/WindowScrollingUp.java
@@ -0,0 +1,39 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+public class WindowScrollingUp extends AbstractTestCase {
+
+    @Override
+    protected String getDescription() {
+        return "Scroll down, click 'up' and the view should scroll to the top";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4206;
+    }
+
+    @Override
+    public void init() {
+        Table table = new Table();
+        table.setPageLength(50);
+
+        final Button up = new Button("up");
+        up.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                up.getWindow().setScrollTop(0);
+            }
+        });
+
+        setMainWindow(new Window(""));
+        getMainWindow().addComponent(table);
+        getMainWindow().addComponent(up);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/WindowShouldRemoveActionHandler.html b/tests/testbench/com/vaadin/tests/components/window/WindowShouldRemoveActionHandler.html
new file mode 100644
index 0000000000..4923bff58a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/WindowShouldRemoveActionHandler.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>WindowShouldRemoveActionHandler</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">WindowShouldRemoveActionHandler</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.window.WindowShouldRemoveActionHandler</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowShouldRemoveActionHandler::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowShouldRemoveActionHandler::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTitle</td>
+	<td>A panel with 2 action handlers</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowShouldRemoveActionHandler::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTitle</td>
+	<td>A panel with 3 action handlers</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowShouldRemoveActionHandler::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowShouldRemoveActionHandler::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTitle</td>
+	<td>A panel with 3 action handlers - Removed handler - Removed handler</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestscomponentswindowWindowShouldRemoveActionHandler::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTitle</td>
+	<td>A panel with 2 action handlers</td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/window/WindowShouldRemoveActionHandler.java b/tests/testbench/com/vaadin/tests/components/window/WindowShouldRemoveActionHandler.java
new file mode 100644
index 0000000000..e6d3fb1651
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/WindowShouldRemoveActionHandler.java
@@ -0,0 +1,116 @@
+package com.vaadin.tests.components.window;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.event.Action;
+import com.vaadin.event.Action.Handler;
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.event.ShortcutAction.ModifierKey;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.TextField;
+
+public class WindowShouldRemoveActionHandler extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Adding action handlers to the window should make them appear on the client side. Removing the action handlers should remove them also from the client side, also if all action handlers are removed.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2941;
+    }
+
+    @Override
+    protected void setup() {
+        addComponent(new TextField());
+        Button add = new Button("Add an action handler",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        add();
+                    }
+
+                });
+        Button addAnother = new Button("Add another action handler",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        addAnother();
+                    }
+
+                });
+        Button remove = new Button("Remove an action handler",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        remove();
+                    }
+
+                });
+
+        addComponent(add);
+        addComponent(addAnother);
+        addComponent(remove);
+    }
+
+    public void remove() {
+        getMainWindow().setCaption(
+                getMainWindow().getCaption() + " - Removed handler");
+        getMainWindow().removeActionHandler(
+                actionHandlers.remove(actionHandlers.size() - 1));
+    }
+
+    private List<Handler> actionHandlers = new ArrayList<Handler>();
+
+    public void add() {
+        getMainWindow().setCaption(
+                getMainWindow().getCaption() + " - Added handler");
+        Handler actionHandler = new Handler() {
+
+            public Action[] getActions(Object target, Object sender) {
+                return new Action[] { new ShortcutAction("Ctrl+Left",
+                        ShortcutAction.KeyCode.ARROW_LEFT,
+                        new int[] { ModifierKey.CTRL }) };
+            }
+
+            public void handleAction(Action action, Object sender, Object target) {
+                getMainWindow().showNotification(
+                        "Handling action " + action.getCaption());
+            }
+
+        };
+
+        addHandler(actionHandler);
+    }
+
+    public void addAnother() {
+        Handler actionHandler = new Handler() {
+
+            public Action[] getActions(Object target, Object sender) {
+                return new Action[] { new ShortcutAction("Ctrl+Right",
+                        ShortcutAction.KeyCode.ARROW_RIGHT,
+                        new int[] { ModifierKey.CTRL }) };
+            }
+
+            public void handleAction(Action action, Object sender, Object target) {
+                getMainWindow().showNotification(
+                        "Handling action " + action.getCaption());
+            }
+
+        };
+
+        addHandler(actionHandler);
+    }
+
+    private void addHandler(Handler actionHandler) {
+        actionHandlers.add(actionHandler);
+        getMainWindow().addActionHandler(actionHandler);
+        getMainWindow().setCaption(
+                "A panel with " + actionHandlers.size() + " action handlers");
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/WindowStyleNames.java b/tests/testbench/com/vaadin/tests/components/window/WindowStyleNames.java
new file mode 100644
index 0000000000..3a36926b42
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/WindowStyleNames.java
@@ -0,0 +1,54 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+
+public class WindowStyleNames extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Click 'add style' to add a 'new' style to the window. The 'old' style should disappear and only the 'new' style should be set. Verify using e.g. firebug";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3059;
+    }
+
+    @Override
+    protected void setup() {
+        setWindowStyle("old");
+        addComponent(new Button("Set style to 'new'", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                setWindowStyle("new");
+            }
+
+        }));
+
+        addComponent(new Button("Set style to 'custom'", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                setWindowStyle("custom");
+            }
+
+        }));
+
+        addComponent(new Button("Add 'foo' style", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                getMainWindow().addStyleName("foo");
+            }
+
+        }));
+
+    }
+
+    protected void setWindowStyle(String string) {
+        getMainWindow().setStyleName(string);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/window/WindowTest.java b/tests/testbench/com/vaadin/tests/components/window/WindowTest.java
new file mode 100644
index 0000000000..ae3b0f22df
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/window/WindowTest.java
@@ -0,0 +1,19 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.tests.components.panel.PanelTest;
+import com.vaadin.ui.Window;
+
+public class WindowTest extends PanelTest<Window> {
+
+    @Override
+    protected Class<Window> getTestClass() {
+        return Window.class;
+    }
+
+    @Override
+    protected void addTestComponent(Window c) {
+        getMainWindow().addWindow(c);
+        getTestComponents().add(c);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/containers/BeanItemContainerFilteringTest.java b/tests/testbench/com/vaadin/tests/containers/BeanItemContainerFilteringTest.java
new file mode 100644
index 0000000000..0d47cc426d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/containers/BeanItemContainerFilteringTest.java
@@ -0,0 +1,172 @@
+package com.vaadin.tests.containers;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class BeanItemContainerFilteringTest extends TestBase {
+
+    private Table table;
+    private BeanItemContainer<TestBean> container;
+    private TextField filterString;
+    private TextField position;
+    private int nextToAdd = 1;
+    private Label nextLabel;
+
+    protected static class TestBean {
+        private String id;
+        private String value;
+
+        public TestBean() {
+        }
+
+        public TestBean(String id, String value) {
+            setId(id);
+            setValue(value);
+        }
+
+        public void setId(String id) {
+            this.id = id;
+        }
+
+        public String getId() {
+            return id;
+        }
+
+        public void setValue(String value) {
+            this.value = value;
+        }
+
+        public String getValue() {
+            return value;
+        }
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Test adding items in a filtered BeanItemContainer.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return new Integer(1061);
+    }
+
+    @Override
+    protected void setup() {
+        table = new Table();
+        try {
+            container = new BeanItemContainer<TestBean>(TestBean.class);
+            table.setContainerDataSource(container);
+
+            table.setWidth(300, Sizeable.UNITS_PIXELS);
+            table.setSelectable(true);
+            table.setMultiSelect(false);
+            table.setEditable(true);
+            table.setImmediate(true);
+            // table.addContainerProperty("column1", String.class, "test");
+
+            for (int i = 0; i < 25; ++i) {
+                container.addItem(new TestBean("Item " + i, "Value for " + i));
+            }
+
+            VerticalLayout vl = new VerticalLayout();
+
+            // activate & deactivate filtering
+            filterString = new TextField("Filter string:", "1");
+            vl.addComponent(filterString);
+
+            final CheckBox cb = new CheckBox("Filter on value",
+                    new Button.ClickListener() {
+                        public void buttonClick(ClickEvent event) {
+                            container.removeAllContainerFilters();
+                            if (((CheckBox) event.getSource()).booleanValue()) {
+                                container.addContainerFilter("value",
+                                        filterString.getValue().toString(),
+                                        false, false);
+                            }
+                        }
+                    });
+            cb.setImmediate(true);
+            vl.addComponent(cb);
+
+            nextLabel = new Label();
+            nextLabel.setCaption("Next id: " + nextToAdd);
+            vl.addComponent(nextLabel);
+
+            // addItemAt(idx), addItemAfter(selection), addItem()
+
+            final Button addItemButton = new Button("addItem()",
+                    new Button.ClickListener() {
+                        public void buttonClick(ClickEvent event) {
+                            container.addItem(new TestBean("addItem() "
+                                    + nextToAdd, "value " + nextToAdd));
+                            nextToAdd++;
+                            nextLabel.setCaption("Next id: " + nextToAdd);
+                        }
+                    });
+            addItemButton.setImmediate(true);
+            vl.addComponent(addItemButton);
+
+            final Button addItemAfterButton = new Button("addItemAfter()",
+                    new Button.ClickListener() {
+                        public void buttonClick(ClickEvent event) {
+                            Object selection = table.getValue();
+                            if (selection == null) {
+                                return;
+                            }
+                            TestBean bean = new TestBean("addItemAfter() "
+                                    + nextToAdd, "value " + nextToAdd);
+                            Item item = container.addItemAfter(selection, bean);
+                            if (item == null) {
+                                getMainWindow().showNotification(
+                                        "Adding item after " + selection
+                                                + " failed");
+                            }
+                            nextToAdd++;
+                            nextLabel.setCaption("Next id: " + nextToAdd);
+                        }
+                    });
+            addItemAfterButton.setImmediate(true);
+            vl.addComponent(addItemAfterButton);
+
+            position = new TextField("Position:", "0");
+            vl.addComponent(position);
+
+            final Button addItemAtButton = new Button("addItemAt()",
+                    new Button.ClickListener() {
+                        public void buttonClick(ClickEvent event) {
+                            int index = Integer.parseInt(position.getValue()
+                                    .toString());
+                            TestBean bean = new TestBean("addItemAt() "
+                                    + nextToAdd, "value " + nextToAdd);
+                            Item item = container.addItemAt(index, bean);
+                            if (item == null) {
+                                getMainWindow().showNotification(
+                                        "Adding item at index "
+                                                + position.getValue()
+                                                + " failed");
+                            }
+                            nextToAdd++;
+                            nextLabel.setCaption("Next id: " + nextToAdd);
+                        }
+                    });
+            addItemAtButton.setImmediate(true);
+            vl.addComponent(addItemAtButton);
+
+            getLayout().addComponent(table);
+            getLayout().addComponent(vl);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/containers/BeanItemContainerTest.java b/tests/testbench/com/vaadin/tests/containers/BeanItemContainerTest.java
new file mode 100644
index 0000000000..905ec2f9ff
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/containers/BeanItemContainerTest.java
@@ -0,0 +1,75 @@
+package com.vaadin.tests.containers;
+
+import java.util.Collection;
+import java.util.LinkedList;
+
+import com.vaadin.data.util.BeanItemContainer;
+
+public class BeanItemContainerTest {
+
+    /**
+     * Test class for BeanItemContainer
+     * 
+     * @throws IllegalAccessException
+     * @throws InstantiationException
+     */
+    public static void main(String[] args) throws InstantiationException,
+            IllegalAccessException {
+        BeanItemContainer<Hello> c = new BeanItemContainer<Hello>(Hello.class);
+        c.addItem(new Hello());
+
+        Collection<Hello> col = new LinkedList<Hello>();
+        for (int i = 0; i < 100; i++) {
+            col.add(new Hello());
+        }
+        col.add(new Hello2());
+
+        c = new BeanItemContainer<Hello>(col);
+
+        System.out.println(c + " contains " + c.size() + " objects");
+
+        // test that subclass properties are handled correctly
+        System.out.println(c + " item 0 second = "
+                + c.getContainerProperty(c.getIdByIndex(0), "second"));
+        System.out.println(c + " item 100 second = "
+                + c.getContainerProperty(c.getIdByIndex(100), "second"));
+
+    }
+
+    public static class Hello {
+
+        public String first;
+        public String second;
+
+        public Hello() {
+            first = "f";
+            second = "l";
+        }
+
+        public String getFirst() {
+            return first;
+        }
+
+        public void setFirst(String first) {
+            this.first = first;
+        }
+
+        public String getSecond() {
+            return second;
+        }
+
+        public void setSecond(String second) {
+            this.second = second;
+        }
+
+    }
+
+    public static class Hello2 extends Hello {
+
+        @Override
+        public String getSecond() {
+            return "second";
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/containers/HierarchicalWrapperOrdering.java b/tests/testbench/com/vaadin/tests/containers/HierarchicalWrapperOrdering.java
new file mode 100644
index 0000000000..fb5fe8c27a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/containers/HierarchicalWrapperOrdering.java
@@ -0,0 +1,127 @@
+package com.vaadin.tests.containers;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.util.ContainerHierarchicalWrapper;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Tree;
+
+public class HierarchicalWrapperOrdering extends TestBase {
+
+    private static final long serialVersionUID = 1L;
+
+    IndexedContainer indexedContainer = new IndexedContainer();
+
+    Container.Hierarchical hier = new ContainerHierarchicalWrapper(
+            indexedContainer);
+
+    Tree tree1;
+
+    private static void sort(IndexedContainer container) {
+        Object[] properties = new Object[1];
+        properties[0] = "name";
+
+        boolean[] ascending = new boolean[1];
+        ascending[0] = true;
+
+        container.sort(properties, ascending);
+    }
+
+    private static void populateContainer(Container.Hierarchical container) {
+        container.addContainerProperty("name", String.class, null);
+
+        addItem(container, "Games", null);
+        addItem(container, "Call of Duty", "Games");
+        addItem(container, "Might and Magic", "Games");
+        addItem(container, "Fallout", "Games");
+        addItem(container, "Red Alert", "Games");
+
+        addItem(container, "Cars", null);
+        addItem(container, "Toyota", "Cars");
+        addItem(container, "Volvo", "Cars");
+        addItem(container, "Audi", "Cars");
+        addItem(container, "Ford", "Cars");
+
+        addItem(container, "Natural languages", null);
+        addItem(container, "Swedish", "Natural languages");
+        addItem(container, "English", "Natural languages");
+        addItem(container, "Finnish", "Natural languages");
+
+        addItem(container, "Programming languages", null);
+        addItem(container, "C++", "Programming languages");
+        addItem(container, "PHP", "Programming languages");
+        addItem(container, "Java", "Programming languages");
+        addItem(container, "Python", "Programming languages");
+
+    }
+
+    public static void addItem(Container.Hierarchical container, String string,
+            String parent) {
+        Item item = container.addItem(string);
+        item.getItemProperty("name").setValue(string);
+
+        if (parent != null) {
+            container.setParent(string, parent);
+        }
+
+    }
+
+    @Override
+    protected void setup() {
+        Layout l = getLayout();
+
+        populateContainer(hier);
+
+        // sort(indexedContainer);
+
+        tree1 = new Tree("Tree with wrapped IndexedContainer");
+        tree1.setContainerDataSource(hier);
+        tree1.setItemCaptionPropertyId("name");
+        for (Object id : hier.rootItemIds()) {
+            tree1.expandItemsRecursively(id);
+        }
+        l.addComponent(tree1);
+
+        // This contains a bug, changes not reflected back to client
+        Button modify = new Button("Modify and sort (has a bug)",
+                new ClickListener() {
+                    private static final long serialVersionUID = 1L;
+
+                    public void buttonClick(ClickEvent event) {
+                        // Get first item
+                        Object itemId = indexedContainer.getIdByIndex(0);
+                        Item item = indexedContainer.getItem(itemId);
+                        Property property = item.getItemProperty("name");
+                        // Prepend with Z so item should get sorted later
+                        property.setValue("Z " + property.getValue());
+                        // this does not work alone, requires extraneous
+                        // setContainerDataSource for server-side changes to be
+                        // reflected back to client-side
+                        sort(indexedContainer);
+                    }
+                });
+        l.addComponent(modify);
+
+        Table t = new Table("Table with indexed container", indexedContainer);
+
+        l.addComponent(t);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Items should be in same order as in wrapped container after sorting.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3688;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/containers/IndexedContainerFilteringTest.java b/tests/testbench/com/vaadin/tests/containers/IndexedContainerFilteringTest.java
new file mode 100644
index 0000000000..154118a393
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/containers/IndexedContainerFilteringTest.java
@@ -0,0 +1,139 @@
+package com.vaadin.tests.containers;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class IndexedContainerFilteringTest extends TestBase {
+
+    private Table table;
+    private IndexedContainer container;
+    private TextField filterString;
+    private TextField position;
+    private int nextToAdd = 1;
+    private Label nextLabel;
+
+    @Override
+    protected String getDescription() {
+        return "Adding items to a filtered IndexedContainer inserts the items at the wrong location.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return new Integer(2809);
+    }
+
+    @Override
+    protected void setup() {
+        table = new Table();
+        container = (IndexedContainer) table.getContainerDataSource();
+
+        table.setWidth(300, Sizeable.UNITS_PIXELS);
+        table.setSelectable(true);
+        table.setMultiSelect(false);
+        table.addContainerProperty("column1", String.class, "test");
+
+        for (int i = 0; i < 25; ++i) {
+            table.addItem(new Object[] { "Item " + i }, "Item " + i);
+        }
+
+        VerticalLayout vl = new VerticalLayout();
+
+        // activate & deactivate filtering
+        filterString = new TextField("Filter string:", "1");
+        vl.addComponent(filterString);
+
+        final CheckBox cb = new CheckBox("Filter", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                container.removeAllContainerFilters();
+                if (((CheckBox) event.getSource()).booleanValue()) {
+                    container.addContainerFilter("column1", filterString
+                            .getValue().toString(), false, false);
+                }
+            }
+        });
+        cb.setImmediate(true);
+        vl.addComponent(cb);
+
+        nextLabel = new Label();
+        nextLabel.setCaption("Next id: " + nextToAdd);
+        vl.addComponent(nextLabel);
+
+        // addItemAt(idx), addItemAfter(selection), addItem()
+
+        final Button addItemButton = new Button("addItem()",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        Item item = container.addItem("addItem() " + nextToAdd);
+                        if (item != null) {
+                            item.getItemProperty("column1").setValue(
+                                    "addItem() " + nextToAdd);
+                        }
+                        nextToAdd++;
+                        nextLabel.setCaption("Next id: " + nextToAdd);
+                    }
+                });
+        addItemButton.setImmediate(true);
+        vl.addComponent(addItemButton);
+
+        final Button addItemAfterButton = new Button("addItemAfter()",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        Object selection = table.getValue();
+                        if (selection == null) {
+                            return;
+                        }
+                        String id = "addItemAfter() " + nextToAdd;
+                        Item item = container.addItemAfter(selection, id);
+                        if (item != null) {
+                            item.getItemProperty("column1").setValue(id);
+                            table.setValue(id);
+                        } else {
+                            getMainWindow().showNotification(
+                                    "Adding item after " + selection
+                                            + " failed");
+                        }
+                        nextToAdd++;
+                        nextLabel.setCaption("Next id: " + nextToAdd);
+                    }
+                });
+        addItemAfterButton.setImmediate(true);
+        vl.addComponent(addItemAfterButton);
+
+        position = new TextField("Position:", "0");
+        vl.addComponent(position);
+
+        final Button addItemAtButton = new Button("addItemAt()",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        int index = Integer.parseInt(position.getValue()
+                                .toString());
+                        String id = "addItemAt() " + nextToAdd;
+                        Item item = container.addItemAt(index, id);
+                        if (item != null) {
+                            item.getItemProperty("column1").setValue(id);
+                            table.setValue(id);
+                        } else {
+                            getMainWindow().showNotification(
+                                    "Adding item at index "
+                                            + position.getValue() + " failed");
+                        }
+                        nextToAdd++;
+                        nextLabel.setCaption("Next id: " + nextToAdd);
+                    }
+                });
+        addItemAtButton.setImmediate(true);
+        vl.addComponent(addItemAtButton);
+
+        getLayout().addComponent(table);
+        getLayout().addComponent(vl);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/containers/TableWithFileSystemContainer.java b/tests/testbench/com/vaadin/tests/containers/TableWithFileSystemContainer.java
new file mode 100644
index 0000000000..20567e70af
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/containers/TableWithFileSystemContainer.java
@@ -0,0 +1,33 @@
+package com.vaadin.tests.containers;
+
+import java.io.File;
+
+import com.vaadin.data.util.FilesystemContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+public class TableWithFileSystemContainer extends TestBase {
+
+    private String testPath = "C:/temp/img";
+
+    @Override
+    public void setup() {
+        setMainWindow(new Window(""));
+        Table table = new Table("Documents", new FilesystemContainer(new File(
+                testPath)));
+        table.setWidth("100%");
+        getMainWindow().addComponent(table);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The Table uses a FileSystemContainer as datasource. Scrolling to the end should show the last items, not throw an NPE.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3864;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/containers/TestItemSorter.java b/tests/testbench/com/vaadin/tests/containers/TestItemSorter.java
new file mode 100644
index 0000000000..bf7ce6175a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/containers/TestItemSorter.java
@@ -0,0 +1,94 @@
+package com.vaadin.tests.containers;
+
+import java.util.Collection;
+import java.util.Comparator;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.DefaultItemSorter;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Table;
+
+public class TestItemSorter extends TestBase {
+
+    private static final Object BUTTON = "Button";
+    private static final Object CHECKBOX = "CheckBox";
+    private static final Object STRING = "String";
+
+    private Table table;
+    private IndexedContainer container;
+
+    @Override
+    protected void setup() {
+        table = new Table("DefaultItemSorter with custom comparator");
+        container = createContainer();
+        populateContainer(container);
+        container.setItemSorter(new DefaultItemSorter(new Comparator<Object>() {
+
+            public int compare(Object o1, Object o2) {
+                if (o1 instanceof CheckBox && o2 instanceof CheckBox) {
+                    Boolean b1 = ((CheckBox) o1).booleanValue();
+                    return b1.compareTo(((CheckBox) o2).booleanValue());
+                } else if (o1 instanceof Button && o2 instanceof Button) {
+                    String caption1 = ((Button) o1).getCaption().toLowerCase();
+                    String caption2 = ((Button) o2).getCaption().toLowerCase();
+                    return caption1.compareTo(caption2);
+
+                } else if (o1 instanceof String && o2 instanceof String) {
+                    return ((String) o1).toLowerCase().compareTo(
+                            ((String) o2).toLowerCase());
+                }
+
+                return 0;
+
+            }
+        }));
+        table.setContainerDataSource(container);
+
+        addComponent(table);
+
+    }
+
+    private static void populateContainer(IndexedContainer container) {
+        container.removeAllItems();
+        String[] strings = new String[] { "Text 1", "Text 2", "true", "false",
+                "Caption 1", "Caption 2" };
+        for (String s : strings) {
+            Object id = container.addItem();
+            Item item = container.getItem(id);
+            item.getItemProperty(STRING).setValue(s);
+            item.getItemProperty(BUTTON).setValue(new Button(s));
+            item.getItemProperty(CHECKBOX).setValue(
+                    new CheckBox("", s.equals("true")));
+        }
+
+    }
+
+    private static IndexedContainer createContainer() {
+        IndexedContainer ic = new IndexedContainer() {
+            @Override
+            public Collection<?> getSortableContainerPropertyIds() {
+                // Default implementation allows sorting only if the property
+                // type can be cast to Comparable
+                return getContainerPropertyIds();
+            }
+        };
+        ic.addContainerProperty(BUTTON, Button.class, null);
+        ic.addContainerProperty(CHECKBOX, CheckBox.class, null);
+        ic.addContainerProperty(STRING, String.class, null);
+        return ic;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Test that uses a custom ItemSorter to allow sorting Property types that do not implement Comparable";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/containers/sqlcontainer/CheckboxUpdateProblem.java b/tests/testbench/com/vaadin/tests/containers/sqlcontainer/CheckboxUpdateProblem.java
new file mode 100644
index 0000000000..86aee2d5ab
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/containers/sqlcontainer/CheckboxUpdateProblem.java
@@ -0,0 +1,190 @@
+package com.vaadin.tests.containers.sqlcontainer;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import com.vaadin.Application;
+import com.vaadin.data.Container.ItemSetChangeEvent;
+import com.vaadin.data.Container.ItemSetChangeListener;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.sqlcontainer.AllTests;
+import com.vaadin.data.util.sqlcontainer.SQLContainer;
+import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.query.TableQuery;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+public class CheckboxUpdateProblem extends Application implements
+        Property.ValueChangeListener {
+    private final DatabaseHelper databaseHelper = new DatabaseHelper();
+    private Table testList;
+    private final HorizontalSplitPanel horizontalSplit = new HorizontalSplitPanel();
+
+    private TestForm testForm = new TestForm();
+
+    @Override
+    public void init() {
+        setMainWindow(new Window("Test window"));
+        horizontalSplit.setSizeFull();
+        testList = new Table();
+
+        horizontalSplit.setFirstComponent(testList);
+        testList.setSizeFull();
+        testList.setContainerDataSource(databaseHelper.getTestContainer());
+        testList.setSelectable(true);
+        testList.setImmediate(true);
+        testList.addListener(this);
+
+        databaseHelper.getTestContainer().addListener(
+                new ItemSetChangeListener() {
+                    public void containerItemSetChange(ItemSetChangeEvent event) {
+                        Object selected = testList.getValue();
+                        if (selected != null) {
+                            testForm.setItemDataSource(testList
+                                    .getItem(selected));
+                        }
+                    }
+                });
+
+        testForm = new TestForm();
+        testForm.setItemDataSource(null);
+
+        horizontalSplit.setSecondComponent(testForm);
+
+        getMainWindow().setContent(horizontalSplit);
+    }
+
+    public void valueChange(ValueChangeEvent event) {
+
+        Property property = event.getProperty();
+        if (property == testList) {
+            Item item = testList.getItem(testList.getValue());
+
+            if (item != testForm.getItemDataSource()) {
+                testForm.setItemDataSource(item);
+            }
+        }
+
+    }
+
+    private class TestForm extends Form implements Button.ClickListener {
+
+        private final Button save;
+
+        private TestForm() {
+            setSizeFull();
+            setWriteThrough(false);
+            setInvalidCommitted(false);
+
+            save = new Button("Save", (ClickListener) this);
+            getFooter().addComponent(save);
+            getFooter().setVisible(false);
+        }
+
+        public void buttonClick(ClickEvent event) {
+            if (event.getSource() == save) {
+                super.commit();
+
+                try {
+                    databaseHelper.getTestContainer().commit();
+                    getMainWindow().showNotification("Saved");
+                } catch (SQLException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+
+        @Override
+        public void setItemDataSource(Item newDataSource) {
+            super.setItemDataSource(newDataSource);
+
+            if (newDataSource != null) {
+                getFooter().setVisible(true);
+            } else {
+                getFooter().setVisible(false);
+            }
+        }
+
+    }
+
+    private class DatabaseHelper {
+
+        private JDBCConnectionPool connectionPool = null;
+        private SQLContainer testContainer = null;
+        private static final String TABLENAME = "testtable";
+
+        public DatabaseHelper() {
+            initConnectionPool();
+            initDatabase();
+            initContainers();
+        }
+
+        private void initDatabase() {
+            try {
+                Connection conn = connectionPool.reserveConnection();
+                Statement statement = conn.createStatement();
+                try {
+                    statement.execute("drop table " + TABLENAME);
+                } catch (SQLException e) {
+                    // Will fail if table doesn't exist, which is OK.
+                    conn.rollback();
+                }
+                switch (AllTests.db) {
+                case MYSQL:
+                    statement
+                            .execute("create table "
+                                    + TABLENAME
+                                    + " (id integer auto_increment not null, field1 varchar(100), field2 boolean, primary key(id))");
+                    break;
+                case POSTGRESQL:
+                    statement
+                            .execute("create table "
+                                    + TABLENAME
+                                    + " (\"id\" serial primary key, \"field1\" varchar(100), \"field2\" boolean)");
+                    break;
+                }
+                statement.executeUpdate("insert into " + TABLENAME
+                        + " values(default, 'Kalle', 'true')");
+                statement.close();
+                conn.commit();
+                connectionPool.releaseConnection(conn);
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+
+        private void initContainers() {
+            try {
+                TableQuery q1 = new TableQuery(TABLENAME, connectionPool);
+                q1.setVersionColumn("id");
+                testContainer = new SQLContainer(q1);
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+
+        private void initConnectionPool() {
+            try {
+                connectionPool = new SimpleJDBCConnectionPool(
+                        AllTests.dbDriver, AllTests.dbURL, AllTests.dbUser,
+                        AllTests.dbPwd, 2, 5);
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+
+        public SQLContainer getTestContainer() {
+            return testContainer;
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/containers/sqlcontainer/MassInsertMemoryLeakTestApp.java b/tests/testbench/com/vaadin/tests/containers/sqlcontainer/MassInsertMemoryLeakTestApp.java
new file mode 100644
index 0000000000..419e606bfc
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/containers/sqlcontainer/MassInsertMemoryLeakTestApp.java
@@ -0,0 +1,134 @@
+package com.vaadin.tests.containers.sqlcontainer;
+
+import java.sql.SQLException;
+
+import com.vaadin.Application;
+import com.vaadin.data.util.sqlcontainer.SQLContainer;
+import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.query.TableQuery;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.ProgressIndicator;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+// author table in testdb (MySQL) is set out as follows
+// +-------------+-------------+------+-----+---------+----------------+
+// | Field       | Type        | Null | Key | Default | Extra          |
+// +-------------+-------------+------+-----+---------+----------------+
+// | id          | int(11)     | NO   | PRI | NULL    | auto_increment |
+// | last_name   | varchar(40) | NO   |     | NULL    |                |
+// | first_names | varchar(80) | NO   |     | NULL    |                |
+// +-------------+-------------+------+-----+---------+----------------+
+
+@SuppressWarnings("serial")
+public class MassInsertMemoryLeakTestApp extends Application {
+
+    ProgressIndicator proggress = new ProgressIndicator();
+    Button process = new Button("Mass insert");
+
+    @Override
+    public void init() {
+        setMainWindow(new Window("SQLContainer Test", buildLayout()));
+
+        process.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                MassInsert mi = new MassInsert();
+                mi.start();
+            }
+        });
+    }
+
+    private class MassInsert extends Thread {
+
+        @Override
+        public synchronized void start() {
+            proggress.setVisible(true);
+            proggress.setValue(new Float(0));
+            proggress.setPollingInterval(100);
+            process.setEnabled(false);
+            proggress.setCaption("");
+            super.start();
+        }
+
+        @Override
+        public void run() {
+            JDBCConnectionPool pool = getConnectionPool();
+            if (pool != null) {
+                try {
+                    int cents = 100;
+                    for (int cent = 0; cent < cents; cent++) {
+                        TableQuery q = new TableQuery("AUTHOR", pool);
+                        q.setVersionColumn("ID");
+                        SQLContainer c = new SQLContainer(q);
+                        for (int i = 0; i < 100; i++) {
+                            Object id = c.addItem();
+                            c.getContainerProperty(id, "FIRST_NAMES").setValue(
+                                    getRandonName());
+                            c.getContainerProperty(id, "LAST_NAME").setValue(
+                                    getRandonName());
+                        }
+                        c.commit();
+                        synchronized (MassInsertMemoryLeakTestApp.this) {
+                            proggress
+                                    .setValue(new Float((1.0f * cent) / cents));
+                            proggress.setCaption("" + 100 * cent
+                                    + " rows inserted");
+                        }
+                    }
+                } catch (SQLException e) {
+                    getMainWindow().showNotification(
+                            "SQLException while processing",
+                            e.getLocalizedMessage());
+                    e.printStackTrace();
+                }
+            }
+            synchronized (MassInsertMemoryLeakTestApp.this) {
+                proggress.setVisible(false);
+                proggress.setPollingInterval(0);
+                process.setEnabled(true);
+            }
+        }
+    }
+
+    private ComponentContainer buildLayout() {
+        VerticalLayout lo = new VerticalLayout();
+        lo.setSizeFull();
+        lo.addComponent(proggress);
+        lo.addComponent(process);
+        lo.setComponentAlignment(proggress, Alignment.BOTTOM_CENTER);
+        lo.setComponentAlignment(process, Alignment.TOP_CENTER);
+        lo.setSpacing(true);
+        proggress.setIndeterminate(false);
+        proggress.setVisible(false);
+        return lo;
+    }
+
+    private String getRandonName() {
+        final String[] tokens = new String[] { "sa", "len", "da", "vid", "ma",
+                "ry", "an", "na", "jo", "bri", "son", "mat", "e", "ric", "ge",
+                "eu", "han", "har", "ri", "ja", "lo" };
+        StringBuffer sb = new StringBuffer();
+        int len = (int) (Math.random() * 3 + 2);
+        while (len-- > 0) {
+            sb.append(tokens[(int) (Math.random() * tokens.length)]);
+        }
+        return Character.toUpperCase(sb.charAt(0)) + sb.toString().substring(1);
+    }
+
+    private JDBCConnectionPool getConnectionPool() {
+        SimpleJDBCConnectionPool pool = null;
+        try {
+            pool = new SimpleJDBCConnectionPool("com.mysql.jdbc.Driver",
+                    "jdbc:mysql://localhost:3306/sqlcontainer", "sqlcontainer",
+                    "sqlcontainer");
+        } catch (SQLException e) {
+            getMainWindow().showNotification("Error connecting to database");
+        }
+        return pool;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/dd/AcceptAnythingWindow.java b/tests/testbench/com/vaadin/tests/dd/AcceptAnythingWindow.java
new file mode 100644
index 0000000000..308f002e4f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/AcceptAnythingWindow.java
@@ -0,0 +1,136 @@
+package com.vaadin.tests.dd;
+
+import com.vaadin.event.DataBoundTransferable;
+import com.vaadin.event.Transferable;
+import com.vaadin.event.TransferableImpl;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.acceptcriteria.AcceptAll;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.terminal.gwt.client.MouseEventDetails;
+import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DragAndDropWrapper;
+import com.vaadin.ui.DragAndDropWrapper.DragStartMode;
+import com.vaadin.ui.DragAndDropWrapper.WrapperTargetDetails;
+import com.vaadin.ui.DragAndDropWrapper.WrapperTransferable;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class AcceptAnythingWindow extends Window {
+
+    private AbsoluteLayout layout = new AbsoluteLayout();
+
+    public AcceptAnythingWindow() {
+        setCaption("Drop anything here");
+
+        final DragAndDropWrapper wrapper = new DragAndDropWrapper(layout);
+        wrapper.setDropHandler(new DropHandler() {
+
+            public AcceptCriterion getAcceptCriterion() {
+                return AcceptAll.get();
+            }
+
+            public void drop(DragAndDropEvent event) {
+                WrapperTargetDetails ed = (WrapperTargetDetails) event
+                        .getTargetDetails();
+                Transferable transferable = event.getTransferable();
+                TransferableImpl ctr = (TransferableImpl) transferable;
+                Component component = ctr.getSourceComponent();
+                if (component == wrapper) {
+                    // if the drag source was wrapper we are interested about
+                    // the dragged component
+                    WrapperTransferable tr = (WrapperTransferable) transferable;
+                    component = tr.getDraggedComponent();
+                    // html5 drag created by wrapper set component null
+                }
+
+                if (component != null) {
+
+                    if (component.getParent() != layout) {
+                        if (transferable instanceof DataBoundTransferable) {
+                            // Item has been dragged, construct a Label from
+                            // Item id
+                            Label l = new Label();
+                            l.setSizeUndefined();
+                            l.setValue("ItemId : "
+                                    + ((DataBoundTransferable) transferable)
+                                            .getItemId());
+                            layout.addComponent(l);
+                            component = l;
+
+                        } else {
+                            // we have a component that is been dragged, add
+                            // it to this
+                            layout.addComponent(component);
+                        }
+
+                        Integer left = ed.getAbsoluteLeft();
+                        Integer top = ed.getAbsoluteTop();
+
+                        MouseEventDetails eventDetails = ed.getMouseEvent();
+
+                        int clientX = eventDetails.getClientX();
+                        int clientY = eventDetails.getClientY();
+
+                        try {
+                            layout.getPosition(component).setTopValue(
+                                    Float.valueOf(clientY - top));
+                            layout.getPosition(component).setLeftValue(
+                                    Float.valueOf(clientX - left));
+                        } catch (Exception e) {
+                            // TODO: handle exception
+                        }
+                    } else {
+
+                        WrapperTransferable tr = (WrapperTransferable) transferable;
+                        // drag ended inside the this Pane
+
+                        MouseEventDetails start = tr.getMouseDownEvent();
+                        MouseEventDetails eventDetails = ed.getMouseEvent();
+
+                        int deltaX = eventDetails.getClientX()
+                                - start.getClientX();
+                        int deltaY = eventDetails.getClientY()
+                                - start.getClientY();
+
+                        ComponentPosition p = layout.getPosition(component);
+                        p.setTopValue(p.getTopValue() + deltaY);
+                        p.setLeftValue(p.getLeftValue() + deltaX);
+
+                    }
+
+                } else {
+                    // drag coming outside of Vaadin
+                    String object = (String) transferable.getData("Text");
+
+                    String content = (String) transferable
+                            .getData("fileContents");
+
+                    Label l = new Label();
+                    l.setCaption("Generated from HTML5 drag:");
+                    if (object != null) {
+                        l.setValue(object);
+                    } else {
+                        l.setValue("HTML5 dd");
+                    }
+
+                    l.setDescription(content);
+                    l.setSizeUndefined();
+
+                    layout.addComponent(l);
+
+                }
+                return;
+            }
+        });
+
+        wrapper.setDragStartMode(DragStartMode.COMPONENT);
+        wrapper.setSizeFull();
+        setContent(wrapper);
+
+        setWidth("250px");
+        setHeight("100px");
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/AcceptFromComponent.java b/tests/testbench/com/vaadin/tests/dd/AcceptFromComponent.java
new file mode 100644
index 0000000000..43bdce2ad4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/AcceptFromComponent.java
@@ -0,0 +1,153 @@
+package com.vaadin.tests.dd;
+
+import com.vaadin.event.DataBoundTransferable;
+import com.vaadin.event.Transferable;
+import com.vaadin.event.TransferableImpl;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.event.dd.acceptcriteria.ServerSideCriterion;
+import com.vaadin.terminal.gwt.client.MouseEventDetails;
+import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DragAndDropWrapper;
+import com.vaadin.ui.DragAndDropWrapper.WrapperTargetDetails;
+import com.vaadin.ui.DragAndDropWrapper.WrapperTransferable;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Window;
+
+public class AcceptFromComponent extends Window {
+
+    private AbsoluteLayout layout;
+
+    public AcceptFromComponent(final Tree tree1) {
+        setCaption("Checks the source is tree1 on server");
+
+        layout = new AbsoluteLayout();
+        DragAndDropWrapper wrapper = new DragAndDropWrapper(layout);
+
+        setContent(wrapper);
+
+        wrapper.setSizeFull();
+        layout.setSizeFull();
+        setWidth("450px");
+        setHeight("150px");
+
+        final ServerSideCriterion serverSideCriterion = new ServerSideCriterion() {
+
+            public boolean accept(DragAndDropEvent dragEvent) {
+                Transferable transferable = dragEvent.getTransferable();
+                if (transferable instanceof TransferableImpl) {
+                    TransferableImpl componentTransferrable = (TransferableImpl) transferable;
+                    if (componentTransferrable.getSourceComponent() == tree1) {
+                        return true;
+                    }
+                }
+                return false;
+            }
+        };
+
+        wrapper.setDropHandler(new DropHandler() {
+
+            public AcceptCriterion getAcceptCriterion() {
+                return serverSideCriterion;
+            }
+
+            public void drop(DragAndDropEvent event) {
+
+                WrapperTargetDetails ed = (WrapperTargetDetails) event
+                        .getTargetDetails();
+                Transferable ctr = event.getTransferable();
+                if (ctr.getSourceComponent() != null) {
+                    // use "component" (from DragDropPane) if available, else
+                    // take
+                    // the source component
+                    Component component = (Component) ctr.getData("component");
+                    if (component == null) {
+                        component = ctr.getSourceComponent();
+                    }
+
+                    if (component.getParent() != layout) {
+                        if (ctr instanceof DataBoundTransferable) {
+                            // Item has been dragged, construct a Label from
+                            // Item id
+                            Label l = new Label();
+                            l.setSizeUndefined();
+                            l.setValue("ItemId : "
+                                    + ((DataBoundTransferable) ctr).getItemId());
+                            layout.addComponent(l);
+                            component = l;
+
+                        } else {
+                            // we have a component that is been dragged, add
+                            // it
+                            // to
+                            // this
+                            layout.addComponent(component);
+                        }
+
+                        Integer left = ed.getAbsoluteLeft();
+                        Integer top = ed.getAbsoluteTop();
+
+                        MouseEventDetails eventDetails = ed.getMouseEvent();
+
+                        int clientX = eventDetails.getClientX();
+                        int clientY = eventDetails.getClientY();
+
+                        try {
+                            layout.getPosition(component).setTopValue(
+                                    Float.valueOf(clientY - top));
+                            layout.getPosition(component).setLeftValue(
+                                    Float.valueOf(clientX - left));
+                        } catch (Exception e) {
+                            // TODO: handle exception
+                        }
+                    } else {
+                        // drag started and ended inside the this Pane
+
+                        DragAndDropWrapper.WrapperTransferable tr = (WrapperTransferable) event
+                                .getTransferable();
+
+                        MouseEventDetails start = tr.getMouseDownEvent();
+
+                        MouseEventDetails eventDetails = ed.getMouseEvent();
+
+                        int deltaX = eventDetails.getClientX()
+                                - start.getClientX();
+                        int deltaY = eventDetails.getClientY()
+                                - start.getClientY();
+
+                        ComponentPosition p = layout.getPosition(component);
+                        p.setTopValue(p.getTopValue() + deltaY);
+                        p.setLeftValue(p.getLeftValue() + deltaX);
+
+                    }
+
+                } else {
+                    // drag coming outside of Vaadin
+                    String object = (String) ctr.getData("text/plain");
+
+                    String content = (String) ctr.getData("fileContents");
+
+                    Label l = new Label();
+                    l.setCaption("Generated from HTML5 drag:");
+                    if (object != null) {
+                        l.setValue(object);
+                    } else {
+                        l.setValue("HTML5 dd");
+                    }
+
+                    l.setDescription(content);
+                    l.setSizeUndefined();
+
+                    layout.addComponent(l);
+
+                }
+                return;
+            }
+        });
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/ActiveDragSourceClassName.java b/tests/testbench/com/vaadin/tests/dd/ActiveDragSourceClassName.java
new file mode 100644
index 0000000000..889c6bb47b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/ActiveDragSourceClassName.java
@@ -0,0 +1,117 @@
+package com.vaadin.tests.dd;
+
+import java.util.Iterator;
+
+import com.vaadin.event.Transferable;
+import com.vaadin.event.TransferableImpl;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.DropTarget;
+import com.vaadin.event.dd.TargetDetails;
+import com.vaadin.event.dd.acceptcriteria.AcceptAll;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.TestUtils;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.DragAndDropWrapper;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+public class ActiveDragSourceClassName extends TestBase {
+
+    private static final String GREENBOXES = ".greenblock {float:left; width:60px;height:60px;background: green !important; padding:0; margin:2px;-webkit-transition: width 0.3s ease-in-out;}";
+    private static final String HIDEDRAGSOURCE = ".v-active-drag-source { overflow:hidden; width:0px !important;}";
+
+    protected void setup() {
+        TestUtils.injectCSS(getMainWindow(), GREENBOXES + HIDEDRAGSOURCE);
+        
+        VerticalLayout l = new VerticalLayout();
+        l.setWidth("400px");
+        l.setHeight("100px");
+        DragAndDropWrapper pane = new DragAndDropWrapper(cssLayout);
+        pane.setSizeFull();
+        l.addComponent(pane);
+        
+        addComponent(l);
+        
+        for (int i = 0; i < 4; i++) {
+            cssLayout.addComponent(new WrappedLabel("Block"));
+        }
+        
+    }
+    
+    static int count;
+
+    private CssLayout cssLayout = new CssLayout() {};
+
+    class WrappedLabel extends DragAndDropWrapper {
+
+        private static final long serialVersionUID = 1L;
+
+        public WrappedLabel(String content) {
+            super(new Label(content + " c:" + ++count));
+            getCompositionRoot().setSizeUndefined();
+            setHeight("60px"); // FIXME custom component seems to be broken:
+            // can't set height with css only
+            setWidth("60px");
+            setDragStartMode(DragStartMode.WRAPPER);
+            addStyleName("greenblock");
+        }
+
+        @Override
+        public DropHandler getDropHandler() {
+            return dh;
+        }
+
+    }
+
+    private DropHandler dh = new DropHandler() {
+
+        public AcceptCriterion getAcceptCriterion() {
+            return AcceptAll.get();
+        }
+
+        public void drop(DragAndDropEvent dropEvent) {
+            Transferable transferable = dropEvent.getTransferable();
+            if (transferable instanceof TransferableImpl) {
+                TransferableImpl ct = (TransferableImpl) transferable;
+                Component sourceComponent = ct.getSourceComponent();
+                if (sourceComponent instanceof WrappedLabel) {
+                    int index = 1;
+                    Iterator<Component> componentIterator = cssLayout
+                            .getComponentIterator();
+                    Component next = componentIterator.next();
+                    TargetDetails dropTargetData = dropEvent.getTargetDetails();
+                    DropTarget target = dropTargetData.getTarget();
+                    while (next != target) {
+                        if (next != sourceComponent) {
+                            index++;
+                        }
+                        next = componentIterator.next();
+                    }
+                    if (dropTargetData.getData("horizontalLocation").equals(
+                            "LEFT")) {
+                        index--;
+                        if (index < 0) {
+                            index = 0;
+                        }
+                    }
+
+                    cssLayout.removeComponent(sourceComponent);
+                    cssLayout.addComponent(sourceComponent, index);
+                }
+            }
+        }
+    };
+
+    @Override
+    protected String getDescription() {
+        return "It should be possible to style the source component during the drag.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6813;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/CustomDDImplementation.java b/tests/testbench/com/vaadin/tests/dd/CustomDDImplementation.java
new file mode 100644
index 0000000000..c789ead113
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/CustomDDImplementation.java
@@ -0,0 +1,84 @@
+package com.vaadin.tests.dd;
+
+import java.util.Map;
+
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.DropTarget;
+import com.vaadin.event.dd.TargetDetails;
+import com.vaadin.event.dd.acceptcriteria.AcceptAll;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.ClientWidget;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Layout;
+
+/**
+ * Test/Example/Draft code how to build custom DD implementation using the thing
+ * framework provided by Vaadin.
+ * 
+ */
+public class CustomDDImplementation extends CustomComponent {
+
+    public CustomDDImplementation() {
+        Layout l = new CssLayout();
+        l.addComponent(new MyDropTarget());
+        l.addComponent(new MyDragSource());
+    }
+
+    /**
+     * Server side component that accepts drags must implement HasDropHandler
+     * that have one method to get reference of DropHandler.
+     * 
+     * DropHandler may be implemented directly or probably most commonly using a
+     * half baked implementation {@link AbstractDropHandler}.
+     * 
+     * Check the @ClientWidget
+     * 
+     */
+    @ClientWidget(VMyDropTarget.class)
+    class MyDropTarget extends AbstractComponent implements DropTarget {
+        public DropHandler getDropHandler() {
+            return new DropHandler() {
+
+                public void drop(DragAndDropEvent event) {
+                    // Do something with data
+                    return;
+                }
+
+                public AcceptCriterion getAcceptCriterion() {
+                    return AcceptAll.get();
+                }
+
+            };
+        }
+
+        public TargetDetails translateDropTargetDetails(
+                Map<String, Object> clientVariables) {
+            // If component has some special drop details that it needs to
+            // translate for server side use, developer must return a
+            // DragDropDetails here. If details does not exist or raw client
+            // side data is ok, it is safe to return null here.
+            return null;
+        }
+
+    }
+
+    /**
+     * Server side implementation of source does not necessary need to contain
+     * anything.
+     * 
+     * Check the @ClientWidget
+     * 
+     * However component might have different modes to support starting drag
+     * operations that are controlled via server side api.
+     * 
+     */
+    @ClientWidget(VMyDragSource.class)
+    public class MyDragSource extends AbstractComponent implements Component {
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/DDTest1.java b/tests/testbench/com/vaadin/tests/dd/DDTest1.java
new file mode 100644
index 0000000000..0d709844e9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/DDTest1.java
@@ -0,0 +1,267 @@
+package com.vaadin.tests.dd;
+
+import java.util.Collection;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.event.DataBoundTransferable;
+import com.vaadin.event.Transferable;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.event.dd.acceptcriteria.ServerSideCriterion;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractSelect.AcceptItem;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.TableDragMode;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Tree.TreeDragMode;
+import com.vaadin.ui.Tree.TreeTargetDetails;
+
+/**
+ * DD playground. Better quality example/prototype codes in {@link DDTest2}.
+ */
+public class DDTest1 extends TestBase {
+
+    @Override
+    protected void setup() {
+        GridLayout gl = new GridLayout(3, 2);
+        gl.setSizeFull();
+        gl.setSpacing(true);
+        Layout main = gl;
+
+        DragDropPane pane1 = new DragDropPane();
+        pane1.setSizeFull();
+        pane1.setCaption("Pane1");
+
+        Label label = new Label("Foo");
+        label.setSizeUndefined();
+
+        pane1.addComponent(label);
+
+        Link l = new Link("This is link", new ExternalResource(
+                "http://www.google.com/"));
+        pane1.addComponent(l, "top:100px; left: 20px;");
+
+        label = new Label("Bar");
+        label.setSizeUndefined();
+        pane1.addComponent(label);
+
+        DragDropPane pane2 = new DragDropPane();
+        pane2.setCaption("Pane2 (accept needs server side visit, check for \"Bar\")");
+        final AcceptCriterion crit = new ServerSideCriterion() {
+            /**
+             * 
+             */
+            private static final long serialVersionUID = 1L;
+
+            public boolean accept(DragAndDropEvent dragEvent) {
+                Transferable transferable = dragEvent.getTransferable();
+                // System.out.println("Simulating 500ms processing...");
+                // try {
+                // Thread.sleep(200);
+                // } catch (InterruptedException e) {
+                // // TODO Auto-generated catch block
+                // e.printStackTrace();
+                // }
+                // System.out.println("Done get to work.");
+
+                Component component = (Component) transferable
+                        .getData("component");
+                if (component == null) {
+                    component = transferable.getSourceComponent();
+                }
+
+                if (component != null) {
+                    if (component.toString() != null
+                            && component.toString().contains("Bar")) {
+                        return true;
+                    }
+                }
+                return false;
+            }
+        };
+
+        pane2.setAcceptCriterion(crit);
+
+        pane2.setDebugId("pane2");
+        pane2.setSizeFull();
+
+        DragDropPane pane3 = new DragDropPane();
+        pane3.setSizeFull();
+        pane3.setCaption("Pane3");
+
+        final Tree t = new Tree(
+                "Tree with sorting enabled. Also allows dragging elsewhere.");
+
+        final HierarchicalContainer idx = new HierarchicalContainer();
+        t.setContainerDataSource(idx);
+        t.setDebugId("perseys");
+        t.addItem("Foo");
+        t.addItem("Bar");
+        t.addItem("Bar1");
+        t.addItem("Bar2");
+        t.addItem("Bar3");
+        t.addItem("Bar4");
+        t.addItem("Bar5");
+        t.addItem("Child");
+        t.setParent("Child", "Foo");
+        t.setSizeFull();
+        t.setDragMode(TreeDragMode.NODE);
+
+        /*
+         * Moves items in tree (and could work in Table too). Also supports
+         * "building" tree.
+         * 
+         * TODO fix algorithm, broken in some cases.
+         */
+        DropHandler itemSorter = new DropHandler() {
+
+            @SuppressWarnings("unused")
+            private void populateSubTree(HierarchicalContainer idx,
+                    HierarchicalContainer subtree, Object itemId) {
+                Collection<?> children = subtree.getChildren(itemId);
+                if (children != null) {
+
+                    for (Object childId : children) {
+                        Item addItem = idx.addItem(childId);
+                        if (addItem != null) {
+                            // did not exist, populate properties
+                            Item item = subtree.getItem(itemId);
+                            Collection<?> itemPropertyIds = item
+                                    .getItemPropertyIds();
+                            for (Object propId : itemPropertyIds) {
+                                addItem.getItemProperty(propId)
+                                        .setValue(
+                                                item.getItemProperty(propId)
+                                                        .getValue());
+                            }
+                        }
+                        idx.setParent(childId, itemId);
+                        populateSubTree(idx, subtree, childId);
+                    }
+                }
+
+            }
+
+            @SuppressWarnings("unused")
+            private HierarchicalContainer getSubTree(HierarchicalContainer idx,
+                    Object itemId) {
+                HierarchicalContainer hierarchicalContainer = new HierarchicalContainer();
+                Collection<?> containerPropertyIds = idx
+                        .getContainerPropertyIds();
+                for (Object object : containerPropertyIds) {
+                    hierarchicalContainer.addContainerProperty(object,
+                            idx.getType(object), null);
+                }
+                hierarchicalContainer.addItem(itemId);
+                copyChildren(idx, hierarchicalContainer, itemId);
+                return hierarchicalContainer;
+            }
+
+            private void copyChildren(HierarchicalContainer source,
+                    HierarchicalContainer target, Object itemId) {
+                Collection<?> children = source.getChildren(itemId);
+                if (children != null) {
+                    for (Object childId : children) {
+                        Item item = source.getItem(childId);
+                        Item addedItem = target.addItem(childId);
+                        target.setParent(childId, itemId);
+                        Collection<?> itemPropertyIds = item
+                                .getItemPropertyIds();
+                        for (Object propertyId : itemPropertyIds) {
+                            addedItem.getItemProperty(propertyId)
+                                    .setValue(
+                                            item.getItemProperty(propertyId)
+                                                    .getValue());
+                        }
+                        copyChildren(source, target, childId);
+                    }
+                }
+
+            }
+
+            public void drop(DragAndDropEvent event) {
+                TreeTargetDetails details = (TreeTargetDetails) event
+                        .getTargetDetails();
+                // TODO set properties, so same sorter could be used in Table
+                Transferable transferable = event.getTransferable();
+                if (transferable instanceof DataBoundTransferable) {
+                    DataBoundTransferable transferrable2 = (DataBoundTransferable) transferable;
+
+                    Object itemId = transferrable2.getItemId();
+
+                    Object itemIdOver = details.getItemIdOver();
+
+                    // TODO could use the "folder" node id to make the drop
+                    // logic simpler
+                    Object itemIdInto = details.getItemIdInto();
+                    VerticalDropLocation dropLocation = details
+                            .getDropLocation();
+
+                    Object itemIdAfter = details.getItemIdAfter();
+
+                    if (itemIdOver.equals(itemIdInto)) { // directly on a node
+                        t.setParent(itemId, itemIdOver);
+                        return;
+                    }
+
+                    idx.setParent(itemId, itemIdInto);
+
+                    if (dropLocation == null) {
+                        System.err.println("No detail of drop place available");
+                    }
+                    idx.moveAfterSibling(itemId, itemIdAfter);
+                }
+
+                return;
+            }
+
+            public AcceptCriterion getAcceptCriterion() {
+                // TODO should actually check that source is same as target
+                return AcceptItem.ALL;
+            }
+
+        };
+
+        t.setDropHandler(itemSorter);
+
+        Table ta = new Table("Test table");
+        ta.setContainerDataSource(idx);
+        ta.addContainerProperty("Foos", String.class, "Foo");
+        ta.addContainerProperty("Bars", String.class, "Bar");
+        ta.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+        ta.setSizeFull();
+        ta.setDragMode(TableDragMode.ROW);
+
+        main.addComponent(pane1);
+        main.addComponent(pane2);
+        main.addComponent(pane3);
+        main.addComponent(t);
+        main.addComponent(ta);
+        main.addComponent(new Link("Foo", new ExternalResource(
+                "http://www.itmill.com/")));
+
+        getLayout().setSizeFull();
+        addComponent(main);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Random DD tests";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 119;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/DDTest2.java b/tests/testbench/com/vaadin/tests/dd/DDTest2.java
new file mode 100644
index 0000000000..69af2d3f1d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/DDTest2.java
@@ -0,0 +1,312 @@
+package com.vaadin.tests.dd;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.event.DataBoundTransferable;
+import com.vaadin.event.Transferable;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.event.dd.acceptcriteria.And;
+import com.vaadin.event.dd.acceptcriteria.Or;
+import com.vaadin.event.dd.acceptcriteria.SourceIs;
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Person;
+import com.vaadin.tests.util.PersonContainer;
+import com.vaadin.ui.AbstractSelect;
+import com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails;
+import com.vaadin.ui.AbstractSelect.AcceptItem;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.TableTransferable;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Tree.TargetItemAllowsChildren;
+import com.vaadin.ui.Tree.TreeDragMode;
+import com.vaadin.ui.Window;
+
+public class DDTest2 extends TestBase {
+
+    java.util.Random r = new java.util.Random(1);
+
+    HorizontalLayout hl = new HorizontalLayout();
+    Tree tree1 = new Tree("Tree that accepts table rows to folders");
+    Table table = new Table("Drag rows to Tree on left or right");
+    Tree tree2 = new Tree("Accepts items, copies values");
+
+    private Tree tree3;
+
+    @Override
+    protected void setup() {
+        Window w = getLayout().getWindow();
+        /* darn reindeer has no icons */
+
+        /* Make all trees (their nodes actually) draggable */
+        tree1.setDragMode(TreeDragMode.NODE);
+        tree2.setDragMode(TreeDragMode.NODE);
+
+        hl.addComponent(tree1);
+        hl.addComponent(table);
+        hl.addComponent(tree2);
+        hl.setWidth("100%");
+        hl.setSpacing(true);
+        hl.setExpandRatio(table, 1);
+        popuplateTrees();
+        table.setWidth("100%");
+        table.setPageLength(10);
+        populateTable();
+        addComponent(hl);
+
+        tree3 = new Tree(
+                "Tree with lazy loading criteria, of first server visit caches accept rules for all captions");
+        tree3.setDragMode(TreeDragMode.NODE);
+
+        tree3.addItem("Drag on me");
+        tree3.addItem("Or me");
+        /*
+         * An example of lazy initializing drop criterion with component
+         * specific api for easy rule writing.
+         * 
+         * Example is pretty stupid (accepts drop on all nodes, but by
+         * explicitly defining them here), but demonstrates lazy initialization
+         * option if rules are heavy.
+         */
+        final AcceptCriterion crit = new Tree.TreeDropCriterion() {
+
+            @Override
+            protected Set<Object> getAllowedItemIds(DragAndDropEvent dragEvent,
+                    Tree tree) {
+                return new HashSet<Object>(tree.getItemIds());
+            }
+        };
+
+        tree3.setDropHandler(new DropHandler() {
+            public void drop(DragAndDropEvent dropEvent) {
+                Transferable transferable = dropEvent.getTransferable();
+
+                String data = (String) transferable.getData("Text");
+                if (transferable instanceof TableTransferable) {
+                    TableTransferable tr = (TableTransferable) transferable;
+                    System.out.println("From table row" + tr.getPropertyId());
+                    data = tr.getSourceContainer().getItem(tr.getItemId())
+                            .getItemProperty(tr.getPropertyId()).toString();
+
+                }
+                if (data == null) {
+                    data = "-no Text data flawor-";
+                }
+                tree3.addItem(data);
+                AbstractSelect.AbstractSelectTargetDetails dropTargetData = (AbstractSelect.AbstractSelectTargetDetails) dropEvent
+                        .getTargetDetails();
+                tree3.setParent(data, dropTargetData.getItemIdOver());
+
+            }
+
+            public AcceptCriterion getAcceptCriterion() {
+                return crit;
+            }
+        });
+
+        addComponent(tree3);
+
+        /*
+         * Make table rows draggable
+         */
+        table.setDragMode(Table.TableDragMode.ROW);
+
+        TargetItemAllowsChildren onNode = TargetItemAllowsChildren.get();
+        SourceIs fromTable = new SourceIs(table);
+
+        SourceIs fromTree = new SourceIs(tree1);
+        final Or fromTree1OrTable = new Or(fromTable, fromTree);
+        // Or could in the case be replaced with, keeping here as an example and
+        // test
+        @SuppressWarnings("unused")
+        SourceIs treeOrTable = new SourceIs(table, tree1);
+
+        final And and = new And(fromTree1OrTable, onNode);
+
+        DropHandler dropHandler = new DropHandler() {
+
+            public void drop(DragAndDropEvent event) {
+                /*
+                 * We know transferrable is from table, so it is of type
+                 * DataBindedTransferrable
+                 */
+                DataBoundTransferable tr = (DataBoundTransferable) event
+                        .getTransferable();
+                Object itemId = tr.getItemId();
+                Container sourceContainer = tr.getSourceContainer();
+                if (tr.getSourceComponent() != tree1) {
+                    // if the source is from table (not from tree1 itself),
+                    // transfer Name property and use it as an identifier in
+                    // tree1
+                    String name = sourceContainer.getItem(itemId)
+                            .getItemProperty("Name").toString();
+
+                    tree1.addItem(name);
+                    tree1.setChildrenAllowed(name, false);
+
+                    /*
+                     * Remove the item from table
+                     */
+                    sourceContainer.removeItem(itemId);
+
+                    itemId = name;
+
+                }
+
+                /*
+                 * As we also accept only drops on folders, we know dropDetails
+                 * is from Tree and it contains itemIdOver.
+                 */
+                AbstractSelectTargetDetails details = (AbstractSelectTargetDetails) event
+                        .getTargetDetails();
+                Object idOver = details.getItemIdOver();
+                tree1.setParent(itemId, idOver);
+
+            }
+
+            public AcceptCriterion getAcceptCriterion() {
+                return and;
+            }
+        };
+        tree1.setDropHandler(dropHandler);
+
+        /*
+         * First step done. tree1 now accepts drags only from table and only
+         * over tree nodes aka "folders"
+         */
+
+        /*
+         * Now set the rightmost tree accept any item drag. On drop, copy from
+         * source. Also make drags from tree1 possible.
+         */
+
+        dropHandler = new DropHandler() {
+            public void drop(DragAndDropEvent event) {
+                AbstractSelectTargetDetails details = (AbstractSelectTargetDetails) event
+                        .getTargetDetails();
+                Transferable transferable = event.getTransferable();
+
+                if (transferable instanceof DataBoundTransferable) {
+                    DataBoundTransferable tr = (DataBoundTransferable) transferable;
+
+                    Object itemId = tree2.addItem();
+                    tree2.setParent(itemId, details.getItemIdOver());
+                    if (tr.getSourceComponent() == tree1) {
+                        // use item id from tree1 as caption
+                        tree2.setItemCaption(itemId, (String) tr.getItemId());
+                        // if comes from tree1, move subtree too
+                        copySubTree(tr.getItemId(), itemId);
+                    } else if (tr.getSourceComponent() == table) {
+                        // comes from table, override caption with name
+                        String name = (String) table.getItem(tr.getItemId())
+                                .getItemProperty("Name").getValue();
+                        tree2.setItemCaption(itemId, name);
+                    } else if (tr.getSourceComponent() == tree2) {
+                        tree2.setItemCaption(itemId,
+                                tree2.getItemCaption(tr.getItemId()));
+                    }
+                }
+            }
+
+            private void copySubTree(Object itemId, Object itemIdTo) {
+                Collection<?> children = tree1.getChildren(itemId);
+                if (children != null) {
+                    for (Object childId : children) {
+                        Object newItemId = tree2.addItem();
+                        tree2.setItemCaption(newItemId, (String) childId);
+                        tree2.setParent(newItemId, itemIdTo);
+                        copySubTree(childId, newItemId);
+                    }
+                }
+            }
+
+            public AcceptCriterion getAcceptCriterion() {
+                return AcceptItem.ALL;
+            }
+        };
+
+        tree2.setDropHandler(dropHandler);
+
+        /*
+         * Finally add two windows with DragDropPane. First accept anything,
+         * second has server side accept rule to allow only drops from Tree1.
+         * Check the code in implementing classes.
+         */
+        Window acceptAnyThing = new AcceptAnythingWindow();
+        Window acceptFromTree1viaServerCheck = new AcceptFromComponent(tree1);
+
+        w.addWindow(acceptAnyThing);
+        acceptAnyThing.setPositionY(450);
+        acceptAnyThing.setPositionX(150);
+        w.addWindow(acceptFromTree1viaServerCheck);
+        acceptFromTree1viaServerCheck.setPositionY(450);
+        acceptFromTree1viaServerCheck.setPositionX(450);
+
+    }
+
+    private void populateTable() {
+        table.addContainerProperty("Name", String.class, "");
+        table.addContainerProperty("Weight", Integer.class, 0);
+
+        PersonContainer testData = PersonContainer.createWithTestData();
+
+        for (int i = 0; i < 10; i++) {
+            Item addItem = table.addItem("Item" + i);
+            Person p = testData.getIdByIndex(i);
+            addItem.getItemProperty("Name").setValue(
+                    p.getFirstName() + " " + p.getLastName());
+            addItem.getItemProperty("Weight").setValue(50 + r.nextInt(60));
+        }
+
+    }
+
+    private final static ThemeResource FOLDER = new ThemeResource(
+            "../runo/icons/16/folder.png");
+    private final static ThemeResource DOC = new ThemeResource(
+            "../runo/icons/16/document.png");
+
+    private void popuplateTrees() {
+        HierarchicalContainer hc = new HierarchicalContainer();
+        hc.addContainerProperty("icon", Resource.class, DOC);
+        Item addItem = hc.addItem("Fats");
+        addItem.getItemProperty("icon").setValue(FOLDER);
+        hc.addItem("Tarja");
+        hc.setParent("Tarja", "Fats");
+        hc.setChildrenAllowed("Tarja", false);
+        addItem = hc.addItem("Thins");
+        addItem.getItemProperty("icon").setValue(FOLDER);
+        addItem = hc.addItem("Anorectic");
+        addItem.getItemProperty("icon").setValue(FOLDER);
+        hc.setParent("Anorectic", "Thins");
+        addItem = hc.addItem("Normal weighted");
+        addItem.getItemProperty("icon").setValue(FOLDER);
+
+        tree1.setContainerDataSource(hc);
+        tree1.setItemIconPropertyId("icon");
+
+        tree2.setContainerDataSource(new HierarchicalContainer());
+
+        tree2.addItem("/");
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "dd";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 119;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/DDTest4.java b/tests/testbench/com/vaadin/tests/dd/DDTest4.java
new file mode 100644
index 0000000000..b4da141ce2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/DDTest4.java
@@ -0,0 +1,161 @@
+package com.vaadin.tests.dd;
+
+import java.util.Collection;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.event.DataBoundTransferable;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.event.dd.acceptcriteria.SourceIs;
+import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Person;
+import com.vaadin.tests.util.PersonContainer;
+import com.vaadin.tests.util.TestUtils;
+import com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+public class DDTest4 extends TestBase {
+
+    java.util.Random r = new java.util.Random(1);
+
+    HorizontalLayout hl = new HorizontalLayout();
+    Table table = new Table("Drag and drop sortable table");
+
+    @Override
+    protected void setup() {
+        Window w = getLayout().getWindow();
+
+        TestUtils
+                .injectCSS(
+                        w,
+                        ".v-table-row-drag-middle .v-table-cell-content {"
+                                + "        background-color: inherit ; border-bottom: 1px solid cyan;"
+                                + "}"
+                                + ".v-table-row-drag-middle .v-table-cell-wrapper {"
+                                + "        margin-bottom: -1px;" + "}" + ""
+
+                );
+
+        // hl.addComponent(tree1);
+        hl.addComponent(table);
+        // hl.addComponent(tree2);
+        hl.setWidth("100%");
+        hl.setSpacing(true);
+        hl.setExpandRatio(table, 1);
+        table.setWidth("100%");
+        table.setPageLength(10);
+        table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+        table.setSelectable(true);
+        table.setMultiSelect(true);
+        populateTable();
+        addComponent(hl);
+
+        /*
+         * Make table rows draggable
+         */
+        table.setDragMode(Table.TableDragMode.ROW);
+
+        table.setDropHandler(new DropHandler() {
+            // accept only drags from this table
+            AcceptCriterion crit = new SourceIs(table);
+
+            public AcceptCriterion getAcceptCriterion() {
+                return crit;
+            }
+
+            public void drop(DragAndDropEvent dropEvent) {
+                AbstractSelectTargetDetails dropTargetData = (AbstractSelectTargetDetails) dropEvent
+                        .getTargetDetails();
+                DataBoundTransferable transferable = (DataBoundTransferable) dropEvent
+                        .getTransferable();
+                Object itemIdOver = dropTargetData.getItemIdOver();
+                Object itemId = transferable.getItemId();
+                if (itemId == null || itemIdOver == null
+                        || itemId.equals(itemIdOver)) {
+                    return; // no move happened
+                }
+
+                // IndexedContainer goodies... (hint: don't use it in real apps)
+                IndexedContainer containerDataSource = (IndexedContainer) table
+                        .getContainerDataSource();
+                int newIndex = containerDataSource.indexOfId(itemIdOver) - 1;
+                if (dropTargetData.getDropLocation() != VerticalDropLocation.TOP) {
+                    newIndex++;
+                }
+                if (newIndex < 0) {
+                    newIndex = 0;
+                }
+                Object idAfter = containerDataSource.getIdByIndex(newIndex);
+                Collection<?> selections = (Collection<?>) table.getValue();
+                if (selections != null && selections.contains(itemId)) {
+                    // dragged a selected item, if multiple rows selected, drag
+                    // them too (functionality similar to apple mail)
+                    for (Object object : selections) {
+                        moveAfter(containerDataSource, object, idAfter);
+                    }
+
+                } else {
+                    // move just the dragged row, not considering selection at
+                    // all
+                    moveAfter(containerDataSource, itemId, idAfter);
+                }
+
+            }
+
+            private void moveAfter(IndexedContainer containerDataSource,
+                    Object itemId, Object idAfter) {
+                try {
+                    IndexedContainer clone = null;
+                    clone = (IndexedContainer) containerDataSource.clone();
+                    containerDataSource.removeItem(itemId);
+                    Item newItem = containerDataSource.addItemAfter(idAfter,
+                            itemId);
+                    Item item = clone.getItem(itemId);
+                    for (Object propId : item.getItemPropertyIds()) {
+                        newItem.getItemProperty(propId).setValue(
+                                item.getItemProperty(propId).getValue());
+                    }
+
+                    // TODO Auto-generated method stub
+                } catch (CloneNotSupportedException e) {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                }
+
+            }
+        });
+
+    }
+
+    private void populateTable() {
+        table.addContainerProperty("Name", String.class, "");
+        table.addContainerProperty("Weight", Integer.class, 0);
+
+        PersonContainer testData = PersonContainer.createWithTestData();
+
+        for (int i = 0; i < 10; i++) {
+            Item addItem = table.addItem("Item" + i);
+            Person p = testData.getIdByIndex(i);
+            addItem.getItemProperty("Name").setValue(
+                    p.getFirstName() + " " + p.getLastName());
+            addItem.getItemProperty("Weight").setValue(50 + r.nextInt(60));
+        }
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "dd";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 119;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/DDTest5.java b/tests/testbench/com/vaadin/tests/dd/DDTest5.java
new file mode 100644
index 0000000000..e4f3d5335d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/DDTest5.java
@@ -0,0 +1,177 @@
+package com.vaadin.tests.dd;
+
+import java.util.Iterator;
+
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.DropTarget;
+import com.vaadin.event.dd.acceptcriteria.AcceptAll;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.DragAndDropWrapper;
+import com.vaadin.ui.DragAndDropWrapper.DragStartMode;
+import com.vaadin.ui.DragAndDropWrapper.WrapperTransferable;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class DDTest5 extends TestBase {
+
+    java.util.Random r = new java.util.Random(1);
+
+    HorizontalLayout hl = new HorizontalLayout();
+
+    private DragAndDropWrapper dragAndDropWrapper2;
+
+    private DropHandler dh;
+
+    private static int count;
+
+    class WrappedLabel extends DragAndDropWrapper {
+
+        private static final long serialVersionUID = 1L;
+
+        public WrappedLabel(String content) {
+            super(new Label(content + " c:" + ++count));
+            setDragStartMode(DragStartMode.WRAPPER);
+        }
+
+        @Override
+        public DropHandler getDropHandler() {
+            return dh;
+        }
+
+    }
+
+    @Override
+    protected void setup() {
+        Window w = getLayout().getWindow();
+
+        HorizontalSortableCssLayoutWithWrappers verticalSortableCssLayoutWithWrappers = new HorizontalSortableCssLayoutWithWrappers();
+        w.addWindow(verticalSortableCssLayoutWithWrappers);
+        verticalSortableCssLayoutWithWrappers.setPositionX(200);
+        verticalSortableCssLayoutWithWrappers.setPositionY(40); /*
+                                                                 * FIXME:
+                                                                 * subwindow
+                                                                 * horizontal
+                                                                 * position does
+                                                                 * not work if
+                                                                 * only x set
+                                                                 */
+
+        Label l;
+
+        l = new Label("Drag me");
+        DragAndDropWrapper dragAndDropWrapper = new DragAndDropWrapper(l);
+        dragAndDropWrapper.setDragStartMode(DragStartMode.COMPONENT);
+        dragAndDropWrapper.setWidth("100px");
+        dragAndDropWrapper.setHeight("100px");
+        getLayout().addComponent(dragAndDropWrapper);
+
+        l = new Label("Drag me too");
+        dragAndDropWrapper = new DragAndDropWrapper(l);
+        dragAndDropWrapper.setDragStartMode(DragStartMode.WRAPPER);
+        dragAndDropWrapper.setWidth("100px");
+        dragAndDropWrapper.setHeight("100px");
+        getLayout().addComponent(dragAndDropWrapper);
+
+        final CssLayout cssLayout = new CssLayout();
+        cssLayout.setHeight("300px");
+
+        dragAndDropWrapper2 = new DragAndDropWrapper(cssLayout);
+        dragAndDropWrapper2
+                .setCaption("Drop here or sort with dd (wrapper(csslayout(n*wrapper(label))))");
+
+        dh = new DropHandler() {
+
+            public AcceptCriterion getAcceptCriterion() {
+                return AcceptAll.get();
+            }
+
+            public void drop(DragAndDropEvent dropEvent) {
+
+                /*
+                 * TODO wrap componentns in wrappers (so we can build reordering
+                 * here)
+                 */
+
+                if (dropEvent.getTransferable() instanceof WrapperTransferable) {
+                    WrapperTransferable transferable = (WrapperTransferable) dropEvent
+                            .getTransferable();
+                    Component sourceComponent = transferable
+                            .getSourceComponent();
+
+                    Component draggedComponent = transferable
+                            .getDraggedComponent();
+
+                    DropTarget target = dropEvent.getTargetDetails()
+                            .getTarget();
+
+                    WrappedLabel wrappedLabel = new WrappedLabel(
+                            draggedComponent.toString());
+                    if (target instanceof WrappedLabel) {
+                        int i = 1; // add next to reference by default
+                        Iterator<Component> componentIterator = cssLayout
+                                .getComponentIterator();
+                        Component next = componentIterator.next();
+                        while (next != target && componentIterator.hasNext()) {
+                            if (next != sourceComponent) {
+                                // don't count on index if component is being
+                                // moved
+                                i++;
+                            }
+                            next = componentIterator.next();
+                        }
+
+                        if (sourceComponent instanceof WrappedLabel) {
+                            cssLayout.removeComponent(sourceComponent);
+                            wrappedLabel = (WrappedLabel) sourceComponent;
+                        }
+                        if (dropEvent.getTargetDetails()
+                                .getData("verticalLocation").equals("TOP")) {
+                            // before reference if dropped on topmost part
+                            i--;
+                            if (i < 0) {
+                                i = 0;
+                            }
+                        }
+                        cssLayout.addComponent(wrappedLabel, i);
+
+                    } else {
+                        cssLayout.addComponent(wrappedLabel);
+                    }
+
+                } else {
+                    // no component, add label with "Text"
+
+                    String data = (String) dropEvent.getTransferable().getData(
+                            "text/plain");
+                    if (data == null || "".equals(data)) {
+                        data = "-- no Text --";
+                    }
+                    cssLayout.addComponent(new WrappedLabel(data));
+
+                }
+
+            }
+        };
+
+        dragAndDropWrapper2.setDropHandler(dh);
+
+        getLayout().addComponent(dragAndDropWrapper2);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "dd: DragAndDropWrapper to build various use cases completely on server side";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 119;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/DDTest6.java b/tests/testbench/com/vaadin/tests/dd/DDTest6.java
new file mode 100644
index 0000000000..4299b321c3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/DDTest6.java
@@ -0,0 +1,548 @@
+package com.vaadin.tests.dd;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.data.util.ContainerHierarchicalWrapper;
+import com.vaadin.event.Action;
+import com.vaadin.event.Action.Handler;
+import com.vaadin.event.DataBoundTransferable;
+import com.vaadin.event.LayoutEvents.LayoutClickEvent;
+import com.vaadin.event.LayoutEvents.LayoutClickListener;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.acceptcriteria.AcceptAll;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.event.dd.acceptcriteria.Not;
+import com.vaadin.event.dd.acceptcriteria.SourceIsTarget;
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.StreamResource;
+import com.vaadin.terminal.StreamResource.StreamSource;
+import com.vaadin.terminal.StreamVariable;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.terminal.gwt.client.MouseEventDetails;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.TestUtils;
+import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.DragAndDropWrapper;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Html5File;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Tree.TreeDragMode;
+import com.vaadin.ui.Tree.TreeTargetDetails;
+import com.vaadin.ui.Window;
+
+public class DDTest6 extends TestBase {
+
+    java.util.Random r = new java.util.Random(1);
+
+    File[] files = new File[] { new Folder("Docs"), new Folder("Music"),
+            new Folder("Images"), new File("document.doc"),
+            new File("song.mp3"), new File("photo.jpg") };
+
+    private static Tree tree1;
+
+    private HorizontalSplitPanel sp;
+
+    private BeanItemContainer<File> fs1;
+
+    private static DDTest6 instance;
+
+    @Override
+    protected void setup() {
+        instance = this; // Note, test only works with single app per server if
+        // get()
+        // not converted to thread local
+
+        sp = new HorizontalSplitPanel();
+        sp.setSplitPosition(20);
+        CssLayout l = new CssLayout();
+        sp.setFirstComponent(l);
+
+        tree1 = new Tree("Volume 1");
+        tree1.setImmediate(true);
+
+        fs1 = new BeanItemContainer<File>(File.class);
+        tree1.setContainerDataSource(fs1);
+        for (int i = 0; i < files.length; i++) {
+            fs1.addBean(files[i]);
+            if (files[i] instanceof Folder) {
+                tree1.setChildrenAllowed(files[i], true);
+            } else {
+                tree1.setChildrenAllowed(files[i], false);
+            }
+            if (i >= files.length / 2) {
+                tree1.setParent(files[i], files[i - files.length / 2]);
+            }
+        }
+        tree1.setItemCaptionPropertyId("name");
+        tree1.setItemIconPropertyId("icon");
+
+        tree1.setDragMode(TreeDragMode.NODE);
+
+        DropHandler dropHandler = new DropHandler() {
+            public AcceptCriterion getAcceptCriterion() {
+                return AcceptAll.get();
+            }
+
+            public void drop(DragAndDropEvent dropEvent) {
+                File file = null;
+                Folder folder = null;
+                TreeTargetDetails dropTargetData = (TreeTargetDetails) dropEvent
+                        .getTargetDetails();
+                folder = (Folder) dropTargetData.getItemIdInto();
+                if (dropEvent.getTransferable() instanceof DataBoundTransferable) {
+                    DataBoundTransferable transferable = (DataBoundTransferable) dropEvent
+                            .getTransferable();
+                    file = (File) transferable.getItemId();
+                } else if (dropEvent.getTransferable().getSourceComponent() instanceof FileIcon) {
+                    FileIcon draggedIcon = (FileIcon) dropEvent
+                            .getTransferable().getSourceComponent();
+                    file = draggedIcon.file;
+
+                }
+                setParent(file, folder);
+            }
+        };
+
+        tree1.setDropHandler(dropHandler);
+
+        Handler actionHandler = new Handler() {
+
+            private Action[] actions = new Action[] { new Action("Remove") };
+
+            public void handleAction(Action action, Object sender, Object target) {
+                ContainerHierarchicalWrapper containerDataSource = (ContainerHierarchicalWrapper) tree1
+                        .getContainerDataSource();
+                containerDataSource.removeItemRecursively(target);
+            }
+
+            public Action[] getActions(Object target, Object sender) {
+                return actions;
+            }
+        };
+        tree1.addActionHandler(actionHandler);
+
+        tree1.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                Object value = event.getProperty().getValue();
+                if (value != null && !(value instanceof Folder)) {
+                    value = tree1.getParent(value);
+                }
+                FolderView folderView = FolderView.get((Folder) value);
+                sp.setSecondComponent(folderView);
+                folderView.reload();
+            }
+        });
+
+        l.addComponent(tree1);
+
+        sp.setSecondComponent(FolderView.get(null));
+
+        getLayout().setSizeFull();
+        getLayout().addComponent(sp);
+        TestUtils
+                .injectCSS(
+                        getLayout().getWindow(),
+                        ""
+                                + ".v-tree .v-icon {height:16px;} "
+                                + ".v-tree-node-caption-drag-top {/*border-top: none;*/} "
+                                + ".v-tree-node-caption-drag-bottom {border-bottom: none ;} "
+                                + ".v-tree-node-caption-drag-center {background-color: transparent;}"
+                                + ".v-tree-node-caption-dragfolder { background-color: cyan;} ");
+
+    }
+
+    private final static ThemeResource FOLDER = new ThemeResource(
+            "../runo/icons/64/folder.png");
+    private final static ThemeResource DOC = new ThemeResource(
+            "../runo/icons/64/document.png");
+
+    public static class File {
+        private Resource icon = DOC;
+        private String name;
+        private ByteArrayOutputStream bas;
+        private String type;
+
+        public File(String fileName) {
+            name = fileName;
+        }
+
+        public File(String fileName, ByteArrayOutputStream bas) {
+            this(fileName);
+            this.bas = bas;
+        }
+
+        public void setIcon(Resource icon) {
+            this.icon = icon;
+        }
+
+        public Resource getIcon() {
+            return icon;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setType(String type) {
+            this.type = type;
+        }
+
+        public String getType() {
+            return type;
+        }
+
+        public Resource getResource() {
+            StreamSource streamSource = new StreamSource() {
+                public InputStream getStream() {
+                    if (bas != null) {
+                        byte[] byteArray = bas.toByteArray();
+                        return new ByteArrayInputStream(byteArray);
+                    }
+                    return null;
+                }
+            };
+            return new StreamResource(streamSource, getName(), DDTest6.get());
+        }
+    }
+
+    public static class Folder extends File {
+
+        public Folder(String fileName) {
+            super(fileName);
+            setIcon(FOLDER);
+        }
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "dd: tree and web desktop tests. FF36 supports draggin files from client side. (try dragging png image + double click) TODO more files, auto-opening folders";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 119;
+    }
+
+    private void openFile(File file) {
+        // ATM supports only images.
+        if (file.getType().equals("image/png")) {
+            Embedded embedded = new Embedded(file.getName(), file.getResource());
+            Window w = new Window(file.getName());
+            w.addComponent(embedded);
+            w.getContent().setSizeUndefined();
+            getMainWindow().addWindow(w);
+        } else if (file.getType().equals("text/csv")) {
+            showSpreadsheet(file);
+        }
+    }
+
+    private void showSpreadsheet(File file) {
+        // ApplicationResource resource = (ApplicationResource)
+        // file.getResource();
+        String string = new String(file.bas.toByteArray());
+        String[] rows = string.split("\n");
+        String[] cols = rows[0].split(",");
+        Table table = new Table();
+        for (String string2 : cols) {
+            // String col =
+            string2.replaceAll("\"", ""); // remove surrounding ""
+            table.addContainerProperty(string2, String.class, "");
+        }
+        for (int i = 1; i < rows.length; i++) {
+            String[] split = rows[i].split(",");
+            table.addItem(split, "" + i);
+        }
+        Window w = new Window(file.getName());
+        w.getContent().setSizeUndefined();
+        table.setEditable(true);
+        w.addComponent(table);
+        getMainWindow().addWindow(w);
+
+    }
+
+    static class FolderView extends DragAndDropWrapper implements DropHandler {
+
+        static final HashMap<Folder, FolderView> views = new HashMap<Folder, FolderView>();
+
+        public static FolderView get(Folder f) {
+
+            FolderView folder2 = views.get(f);
+            if (folder2 == null) {
+                folder2 = new FolderView(f);
+                views.put(f, folder2);
+            }
+            return folder2;
+        }
+
+        private Folder folder;
+        private AbsoluteLayout l;
+        private int x;
+        private int y;
+
+        private FolderView(Folder f) {
+            super(new AbsoluteLayout());
+            l = (AbsoluteLayout) getCompositionRoot();
+            setSizeFull();
+            l.setSizeFull();
+            folder = f;
+
+            setDropHandler(this);
+        }
+
+        @Override
+        public void attach() {
+            reload();
+            super.attach();
+        }
+
+        @SuppressWarnings("static-access")
+        void reload() {
+            Collection<?> children = folder == null ? DDTest6.get().tree1
+                    .rootItemIds() : DDTest6.get().tree1.getChildren(folder);
+            if (children == null) {
+                l.removeAllComponents();
+                return;
+            } else {
+                // make modifiable
+                children = new HashSet<Object>(children);
+            }
+            Set<Component> removed = new HashSet<Component>();
+            for (Iterator<Component> componentIterator = l
+                    .getComponentIterator(); componentIterator.hasNext();) {
+                FileIcon next = (FileIcon) componentIterator.next();
+                if (!children.contains(next.file)) {
+                    removed.add(next);
+                } else {
+                    children.remove(next.file);
+                }
+            }
+
+            for (Component component : removed) {
+                l.removeComponent(component);
+            }
+
+            for (Object object : children) {
+                FileIcon fileIcon = new FileIcon((File) object);
+                l.addComponent(fileIcon);
+                ComponentPosition position = l.getPosition(fileIcon);
+                position.setTop(Float.valueOf((y++ / 5) % 5 * 100),
+                        UNITS_PIXELS);
+                position.setLeft(Float.valueOf(x++ % 5 * 100), UNITS_PIXELS);
+            }
+
+        }
+
+        @SuppressWarnings("static-access")
+        public void drop(DragAndDropEvent dropEvent) {
+
+            if (dropEvent.getTransferable().getSourceComponent() instanceof FileIcon) {
+                // update the position
+
+                DragAndDropWrapper.WrapperTransferable transferable = (WrapperTransferable) dropEvent
+                        .getTransferable();
+                MouseEventDetails mouseDownEvent = transferable
+                        .getMouseDownEvent();
+
+                WrapperTargetDetails dropTargetDetails = (WrapperTargetDetails) dropEvent
+                        .getTargetDetails();
+
+                MouseEventDetails mouseEvent = dropTargetDetails
+                        .getMouseEvent();
+
+                int deltaX = mouseEvent.getClientX()
+                        - mouseDownEvent.getClientX();
+                int deltaY = mouseEvent.getClientY()
+                        - mouseDownEvent.getClientY();
+
+                ComponentPosition position = l.getPosition(transferable
+                        .getSourceComponent());
+                position.setTop(position.getTopValue() + deltaY, UNITS_PIXELS);
+                position.setLeft(position.getLeftValue() + deltaX, UNITS_PIXELS);
+
+            } else if (dropEvent.getTransferable().getSourceComponent() == tree1) {
+
+                // dragged something from tree to the folder shown
+
+                File draggedFile = (File) ((DataBoundTransferable) dropEvent
+                        .getTransferable()).getItemId();
+                DDTest6.get().setParent(draggedFile, folder);
+            } else {
+                // expecting this to be an html5 drag
+                WrapperTransferable tr = (WrapperTransferable) dropEvent
+                        .getTransferable();
+                Html5File[] files2 = tr.getFiles();
+                if (files2 != null) {
+                    for (Html5File html5File : files2) {
+                        String fileName = html5File.getFileName();
+                        // int bytes = html5File.getFileSize();
+                        final ByteArrayOutputStream bas = new ByteArrayOutputStream();
+
+                        StreamVariable streamVariable = new StreamVariable() {
+
+                            public OutputStream getOutputStream() {
+                                return bas;
+                            }
+
+                            public boolean listenProgress() {
+                                return false;
+                            }
+
+                            public void onProgress(StreamingProgressEvent event) {
+                            }
+
+                            public void streamingStarted(
+                                    StreamingStartEvent event) {
+                            }
+
+                            public void streamingFinished(
+                                    StreamingEndEvent event) {
+                            }
+
+                            public void streamingFailed(
+                                    StreamingErrorEvent event) {
+                            }
+
+                            public boolean isInterrupted() {
+                                return false;
+                            }
+                        };
+
+                        html5File.setStreamVariable(streamVariable);
+
+                        File file = new File(fileName, bas);
+                        file.setType(html5File.getType());
+                        // FF don't know csv
+                        if (fileName.endsWith(".csv")) {
+                            file.setType("text/csv");
+                        }
+                        DDTest6.get().fs1.addBean(file);
+                        DDTest6.get().tree1.setChildrenAllowed(file, false);
+                        DDTest6.get().setParent(file, folder);
+                    }
+
+                }
+
+            }
+        }
+
+        public AcceptCriterion getAcceptCriterion() {
+            return AcceptAll.get();
+        }
+
+    }
+
+    static class FileIcon extends DragAndDropWrapper {
+        private final File file;
+        private CssLayout l;
+
+        public FileIcon(final File file) {
+            super(new CssLayout());
+            l = (CssLayout) getCompositionRoot();
+            setWidth(null);
+            l.setWidth(null);
+            setDragStartMode(DragStartMode.WRAPPER); // drag all contained
+            // components, not just the
+            // one on it started
+            this.file = file;
+            Resource icon2 = file.getIcon();
+            String name = file.getName();
+            l.addComponent(new Embedded(null, icon2));
+            l.addComponent(new Label(name));
+
+            l.addListener(new LayoutClickListener() {
+                @SuppressWarnings("static-access")
+                public void layoutClick(LayoutClickEvent event) {
+                    if (event.isDoubleClick()) {
+                        if (file instanceof Folder) {
+                            get().tree1.setValue(file);
+                        } else {
+                            String type = file.getType();
+                            if (canDisplay(type)) {
+                                DDTest6.get().openFile(file);
+                            }
+                        }
+                    }
+
+                }
+
+                String[] knownTypes = new String[] { "image/png", "text/csv" };
+
+                private boolean canDisplay(String type) {
+                    if (type != null) {
+                        for (String t : knownTypes) {
+                            if (t.equals(type)) {
+                                return true;
+                            }
+                        }
+                    }
+                    return false;
+                }
+            });
+
+            if (file instanceof Folder) {
+
+                setDropHandler(new DropHandler() {
+
+                    public AcceptCriterion getAcceptCriterion() {
+                        return new Not(SourceIsTarget.get());
+                    }
+
+                    public void drop(DragAndDropEvent dropEvent) {
+                        File f = null;
+
+                        if (dropEvent.getTransferable().getSourceComponent() instanceof FileIcon) {
+                            FileIcon new_name = (FileIcon) dropEvent
+                                    .getTransferable().getSourceComponent();
+                            f = new_name.file;
+                        } else if (dropEvent.getTransferable()
+                                .getSourceComponent() == tree1) {
+                            f = (File) ((DataBoundTransferable) dropEvent
+                                    .getTransferable()).getItemId();
+                        }
+
+                        if (f != null) {
+                            get().setParent(f, (Folder) FileIcon.this.file);
+                        }
+
+                    }
+                });
+
+            }
+        }
+    }
+
+    static DDTest6 get() {
+        return instance;
+    }
+
+    public void setParent(File file, Folder newParent) {
+        tree1.setParent(file, newParent);
+        if (sp.getSecondComponent() instanceof FolderView) {
+            FolderView view = (FolderView) sp.getSecondComponent();
+            view.reload();
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/DDTest7.java b/tests/testbench/com/vaadin/tests/dd/DDTest7.java
new file mode 100644
index 0000000000..6027b3e499
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/DDTest7.java
@@ -0,0 +1,189 @@
+package com.vaadin.tests.dd;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.event.DataBoundTransferable;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Person;
+import com.vaadin.tests.util.PersonContainer;
+import com.vaadin.tests.util.TestUtils;
+import com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+public class DDTest7 extends TestBase {
+
+    java.util.Random r = new java.util.Random(1);
+
+    HorizontalLayout hl = new HorizontalLayout();
+    Table table = new Table(
+            "Drag and drop sortable table with lazy loading rule. Dragged row can only be accepted after hevier row (weigh column). If starting from topmost row in viewport, heviests will end up on top.");
+
+    @Override
+    protected void setup() {
+        Window w = getLayout().getWindow();
+
+        TestUtils
+                .injectCSS(
+                        w,
+                        ".v-table-row-drag-middle .v-table-cell-content {"
+                                + "        background-color: inherit ; border-bottom: 1px solid cyan;"
+                                + "}"
+                                + ".v-table-row-drag-middle .v-table-cell-wrapper {"
+                                + "        margin-bottom: -1px;"
+                                + "}"
+                                + ""
+                                // always show the drop hint below
+                                + ".v-table-row-drag-top .v-table-cell-content {"
+                                + "border-top: 0; margin-top:0;border-bottom:1px solid cyan;"
+                                + "        margin-bottom: -1px;" + "}" + ""
+
+                );
+
+        // hl.addComponent(tree1);
+        hl.addComponent(table);
+        // hl.addComponent(tree2);
+        hl.setWidth("100%");
+        hl.setSpacing(true);
+        hl.setExpandRatio(table, 1);
+        table.setWidth("100%");
+        table.setPageLength(10);
+        table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+        table.setSelectable(true);
+        table.setMultiSelect(true);
+        populateTable();
+        addComponent(hl);
+
+        /*
+         * Make table rows draggable
+         */
+        table.setDragMode(Table.TableDragMode.ROW);
+
+        table.setDropHandler(new DropHandler() {
+            // accept only drags from this table
+            AcceptCriterion crit = new Table.TableDropCriterion() {
+                @Override
+                protected Set<Object> getAllowedItemIds(
+                        DragAndDropEvent dragEvent, Table table,
+                        Collection<Object> visibleItemIds) {
+
+                    Object draggedItemId = ((Table.TableTransferable) dragEvent
+                            .getTransferable()).getItemId();
+                    Integer weightOfDraggedRow = (Integer) table
+                            .getItem(draggedItemId).getItemProperty("Weight")
+                            .getValue();
+
+                    HashSet<Object> accepted = new HashSet<Object>();
+                    for (Object itemId : visibleItemIds) {
+                        Item item = table.getItem(itemId);
+                        Integer w = (Integer) item.getItemProperty("Weight")
+                                .getValue();
+                        if (weightOfDraggedRow < w) {
+                            accepted.add(itemId);
+                        }
+
+                    }
+                    return accepted;
+                }
+            };
+
+            public AcceptCriterion getAcceptCriterion() {
+                return crit;
+            }
+
+            public void drop(DragAndDropEvent dropEvent) {
+                AbstractSelectTargetDetails dropTargetData = (AbstractSelectTargetDetails) dropEvent
+                        .getTargetDetails();
+                DataBoundTransferable transferable = (DataBoundTransferable) dropEvent
+                        .getTransferable();
+                Object itemIdOver = dropTargetData.getItemIdOver();
+                Object itemId = transferable.getItemId();
+                if (itemId == null || itemIdOver == null
+                        || itemId.equals(itemIdOver)) {
+                    return; // no move happened
+                }
+
+                // IndexedContainer goodies... (hint: don't use it in real apps)
+                IndexedContainer containerDataSource = (IndexedContainer) table
+                        .getContainerDataSource();
+                int newIndex = containerDataSource.indexOfId(itemIdOver) - 1;
+                // always add after
+                newIndex++;
+                if (newIndex < 0) {
+                    newIndex = 0;
+                }
+                Object idAfter = containerDataSource.getIdByIndex(newIndex);
+                Collection<?> selections = (Collection<?>) table.getValue();
+                if (selections != null && selections.contains(itemId)) {
+                    // dragged a selected item, if multiple rows selected, drag
+                    // them too (functionality similar to apple mail)
+                    for (Object object : selections) {
+                        moveAfter(containerDataSource, object, idAfter);
+                    }
+
+                } else {
+                    // move just the dragged row, not considering selection at
+                    // all
+                    moveAfter(containerDataSource, itemId, idAfter);
+                }
+
+            }
+
+            private void moveAfter(IndexedContainer containerDataSource,
+                    Object itemId, Object idAfter) {
+                try {
+                    IndexedContainer clone = null;
+                    clone = (IndexedContainer) containerDataSource.clone();
+                    containerDataSource.removeItem(itemId);
+                    Item newItem = containerDataSource.addItemAfter(idAfter,
+                            itemId);
+                    Item item = clone.getItem(itemId);
+                    for (Object propId : item.getItemPropertyIds()) {
+                        newItem.getItemProperty(propId).setValue(
+                                item.getItemProperty(propId).getValue());
+                    }
+
+                } catch (CloneNotSupportedException e) {
+                    e.printStackTrace();
+                }
+
+            }
+        });
+
+    }
+
+    private void populateTable() {
+        table.addContainerProperty("Name", String.class, "");
+        table.addContainerProperty("Weight", Integer.class, 0);
+
+        PersonContainer testData = PersonContainer.createWithTestData();
+
+        for (int i = 0; i < 40; i++) {
+            Item addItem = table.addItem("Item" + i);
+            Person p = testData.getIdByIndex(i);
+            addItem.getItemProperty("Name").setValue(
+                    p.getFirstName() + " " + p.getLastName());
+            addItem.getItemProperty("Weight").setValue(50 + r.nextInt(60));
+        }
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "dd";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 119;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/DDTest8.java b/tests/testbench/com/vaadin/tests/dd/DDTest8.java
new file mode 100644
index 0000000000..fed889b5c1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/DDTest8.java
@@ -0,0 +1,178 @@
+package com.vaadin.tests.dd;
+
+import java.util.Collection;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.event.DataBoundTransferable;
+import com.vaadin.event.Transferable;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.event.dd.acceptcriteria.Or;
+import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractSelect;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Tree.TreeDragMode;
+import com.vaadin.ui.Tree.TreeTargetDetails;
+
+/**
+ * DD playground. Better quality example/prototype codes in {@link DDTest2}.
+ */
+public class DDTest8 extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Tree t = new Tree(
+                "Tree with criteria from AbstractSelect (OverItem, ContainsItem). Foo can be dragged anywhere, anything can be dropped on Foo or Bar. Bar5 subtree is also valid drop target.");
+
+        final HierarchicalContainer idx = new HierarchicalContainer();
+        t.setContainerDataSource(idx);
+        t.addItem("Foo");
+        t.addItem("Bar");
+        t.addItem("Bar1");
+        t.addItem("Bar2");
+        t.addItem("Bar3");
+        t.addItem("Bar4");
+        t.addItem("Bar5");
+        t.addItem("Child");
+        t.setParent("Child", "Foo");
+        t.setSizeFull();
+        t.setDragMode(TreeDragMode.NODE);
+
+        /*
+         * Moves items in tree (and could work in Table too). Also supports
+         * "building" tree.
+         * 
+         * TODO fix algorithm, broken in some cases.
+         */
+        DropHandler itemSorter = new DropHandler() {
+
+            @SuppressWarnings("unused")
+            private void populateSubTree(HierarchicalContainer idx,
+                    HierarchicalContainer subtree, Object itemId) {
+                Collection<?> children = subtree.getChildren(itemId);
+                if (children != null) {
+
+                    for (Object childId : children) {
+                        Item addItem = idx.addItem(childId);
+                        if (addItem != null) {
+                            // did not exist, populate properties
+                            Item item = subtree.getItem(itemId);
+                            Collection<?> itemPropertyIds = item
+                                    .getItemPropertyIds();
+                            for (Object propId : itemPropertyIds) {
+                                addItem.getItemProperty(propId)
+                                        .setValue(
+                                                item.getItemProperty(propId)
+                                                        .getValue());
+                            }
+                        }
+                        idx.setParent(childId, itemId);
+                        populateSubTree(idx, subtree, childId);
+                    }
+                }
+
+            }
+
+            @SuppressWarnings("unused")
+            private HierarchicalContainer getSubTree(HierarchicalContainer idx,
+                    Object itemId) {
+                HierarchicalContainer hierarchicalContainer = new HierarchicalContainer();
+                Collection<?> containerPropertyIds = idx
+                        .getContainerPropertyIds();
+                for (Object object : containerPropertyIds) {
+                    hierarchicalContainer.addContainerProperty(object,
+                            idx.getType(object), null);
+                }
+                hierarchicalContainer.addItem(itemId);
+                copyChildren(idx, hierarchicalContainer, itemId);
+                return hierarchicalContainer;
+            }
+
+            private void copyChildren(HierarchicalContainer source,
+                    HierarchicalContainer target, Object itemId) {
+                Collection<?> children = source.getChildren(itemId);
+                if (children != null) {
+                    for (Object childId : children) {
+                        Item item = source.getItem(childId);
+                        Item addedItem = target.addItem(childId);
+                        target.setParent(childId, itemId);
+                        Collection<?> itemPropertyIds = item
+                                .getItemPropertyIds();
+                        for (Object propertyId : itemPropertyIds) {
+                            addedItem.getItemProperty(propertyId)
+                                    .setValue(
+                                            item.getItemProperty(propertyId)
+                                                    .getValue());
+                        }
+                        copyChildren(source, target, childId);
+                    }
+                }
+
+            }
+
+            public void drop(DragAndDropEvent event) {
+                TreeTargetDetails details = (TreeTargetDetails) event
+                        .getTargetDetails();
+                // TODO set properties, so same sorter could be used in Table
+                Transferable transferable = event.getTransferable();
+                if (transferable instanceof DataBoundTransferable) {
+                    DataBoundTransferable transferrable2 = (DataBoundTransferable) transferable;
+
+                    Object itemId = transferrable2.getItemId();
+
+                    Object itemIdOver = details.getItemIdOver();
+
+                    // TODO could use the "folder" node id to make the drop
+                    // logic simpler
+                    Object itemIdInto = details.getItemIdInto();
+                    VerticalDropLocation dropLocation = details
+                            .getDropLocation();
+
+                    Object itemIdAfter = details.getItemIdAfter();
+
+                    if (itemIdOver.equals(itemIdInto)) { // directly on a node
+                        t.setParent(itemId, itemIdOver);
+                        return;
+                    }
+
+                    idx.setParent(itemId, itemIdInto);
+
+                    if (dropLocation == null) {
+                        System.err.println("No detail of drop place available");
+                    }
+                    idx.moveAfterSibling(itemId, itemIdAfter);
+                }
+
+                return;
+            }
+
+            public AcceptCriterion getAcceptCriterion() {
+                return new Or(new AbstractSelect.TargetItemIs(t, "Foo", "Bar"),
+                        new AbstractSelect.AcceptItem(t, "Foo"),
+                        t.new TargetInSubtree("Bar5") //
+                );
+            }
+
+        };
+
+        t.setDropHandler(itemSorter);
+
+        getLayout().setSizeFull();
+        addComponent(t);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Random DD tests";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 119;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/DragAndDropFiles.java b/tests/testbench/com/vaadin/tests/dd/DragAndDropFiles.java
new file mode 100644
index 0000000000..ad23338bbf
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/DragAndDropFiles.java
@@ -0,0 +1,124 @@
+package com.vaadin.tests.dd;
+
+import java.io.OutputStream;
+
+import org.apache.commons.io.output.NullOutputStream;
+
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.acceptcriteria.AcceptAll;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.terminal.StreamVariable;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.DragAndDropWrapper;
+import com.vaadin.ui.DragAndDropWrapper.WrapperTransferable;
+import com.vaadin.ui.Html5File;
+import com.vaadin.ui.Label;
+
+public class DragAndDropFiles extends TestBase {
+
+    @Override
+    protected void setup() {
+        CssLayout cssLayout = new CssLayout() {
+            @Override
+            protected String getCss(Component c) {
+                return "display: block; padding:20px; border: 2px dotted black; background: #aaa;";
+            }
+        };
+        Component l = new Label("Drag file on me");
+        l.setSizeUndefined();
+        cssLayout.addComponent(l);
+        DragAndDropWrapper dragAndDropWrapper = new DragAndDropWrapper(
+                cssLayout);
+        dragAndDropWrapper.setSizeUndefined();
+        dragAndDropWrapper.setDropHandler(new DropHandler() {
+
+            public AcceptCriterion getAcceptCriterion() {
+                return AcceptAll.get();
+            }
+
+            public void drop(DragAndDropEvent event) {
+                WrapperTransferable transferable = (WrapperTransferable) event
+                        .getTransferable();
+                Html5File[] files = transferable.getFiles();
+                if (files != null) {
+
+                    for (int i = 0; i < files.length; i++) {
+                        Html5File file = files[i];
+                        // Max 1 MB files are uploaded
+                        if (file.getFileSize() > 1024 * 1024) {
+                            getMainWindow()
+                                    .showNotification(
+                                            "File "
+                                                    + file.getFileName()
+                                                    + " was too large, not transferred to the server side.");
+                            continue;
+                        }
+
+                        StreamVariable streamVariable = new StreamVariable() {
+
+                            public OutputStream getOutputStream() {
+                                return new NullOutputStream();
+                            }
+
+                            public boolean listenProgress() {
+                                return true;
+                            }
+
+                            public void onProgress(
+                                    StreamingProgressEvent event) {
+                                System.err.println("Progress"
+                                        + event.getBytesReceived());
+                            }
+
+                            public void streamingStarted(
+                                    StreamingStartEvent event) {
+                                getMainWindow().showNotification(
+                                        "Started uploading "
+                                                + event.getFileName());
+                            }
+
+                            public void streamingFinished(
+                                    StreamingEndEvent event) {
+                                getMainWindow().showNotification(
+                                        "Finished uploading "
+                                                + event.getFileName());
+                            }
+
+                            public void streamingFailed(
+                                    StreamingErrorEvent event) {
+                                getMainWindow().showNotification(
+                                        "Failed uploading "
+                                                + event.getFileName());
+                            }
+
+                            public boolean isInterrupted() {
+                                return false;
+                            }
+                        };
+                        file.setStreamVariable(streamVariable);
+                    }
+                }
+
+            }
+        });
+
+        addComponent(dragAndDropWrapper);
+    }
+
+    /*
+     * TODO implement 'handbrake' for testing, progresss listener, interrupting.
+     */
+    @Override
+    protected String getDescription() {
+        return "Should work. Over 1 MB files will not be posted. TODO implement 'handbrake' for testing, progresss listener, interrupting.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/DragDropPane.java b/tests/testbench/com/vaadin/tests/dd/DragDropPane.java
new file mode 100644
index 0000000000..1b7b7b997b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/DragDropPane.java
@@ -0,0 +1,179 @@
+package com.vaadin.tests.dd;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+
+import com.vaadin.event.DataBoundTransferable;
+import com.vaadin.event.Transferable;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.acceptcriteria.AcceptAll;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.terminal.StreamVariable;
+import com.vaadin.terminal.gwt.client.MouseEventDetails;
+import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DragAndDropWrapper;
+import com.vaadin.ui.Html5File;
+import com.vaadin.ui.Label;
+
+/**
+ * replacement for a proto class to keep tests working
+ */
+public class DragDropPane extends DragAndDropWrapper implements DropHandler {
+
+    private AbsoluteLayout root;
+    private AcceptCriterion crit;
+
+    public DragDropPane() {
+        super(new AbsoluteLayout());
+        root = (AbsoluteLayout) getCompositionRoot();
+        setDropHandler(this);
+        setDragStartMode(DragStartMode.COMPONENT);
+    }
+
+    @Override
+    public void addComponent(Component c) {
+        root.addComponent(c);
+    }
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
+
+    public void addComponent(Component l, String string) {
+        root.addComponent(l, string);
+    }
+
+    public void setAcceptCriterion(AcceptCriterion crit) {
+        this.crit = crit;
+    }
+
+    public void drop(DragAndDropEvent event) {
+
+        WrapperTargetDetails ed = (WrapperTargetDetails) event
+                .getTargetDetails();
+        Transferable ctr = event.getTransferable();
+        // use "component" (from DragDropPane) if available, else take
+        // the source component
+        Component component = null;
+        if (ctr instanceof WrapperTransferable) {
+            component = ((WrapperTransferable) ctr).getDraggedComponent();
+        } else if (ctr instanceof DataBoundTransferable) {
+            // Item has been dragged, construct a Label from
+            // Item id
+            Label l = new Label();
+            l.setSizeUndefined();
+            l.setValue("ItemId : " + ((DataBoundTransferable) ctr).getItemId());
+            component = l;
+        }
+
+        if (component != null) {
+
+            if (component.getParent() != root) {
+
+                root.addComponent(component);
+
+                Integer left = ed.getAbsoluteLeft();
+                Integer top = ed.getAbsoluteTop();
+
+                MouseEventDetails eventDetails = ed.getMouseEvent();
+
+                int clientX = eventDetails.getClientX();
+                int clientY = eventDetails.getClientY();
+
+                try {
+                    root.getPosition(component).setTopValue(
+                            Float.valueOf(clientY - top));
+                    root.getPosition(component).setLeftValue(
+                            Float.valueOf(clientX - left));
+                } catch (Exception e) {
+                }
+            } else {
+                // drag started and ended inside the this Pane
+
+                MouseEventDetails start = ((WrapperTransferable) event
+                        .getTransferable()).getMouseDownEvent();
+                MouseEventDetails eventDetails = ed.getMouseEvent();
+
+                int deltaX = eventDetails.getClientX() - start.getClientX();
+                int deltaY = eventDetails.getClientY() - start.getClientY();
+
+                ComponentPosition p = root.getPosition(component);
+                p.setTopValue(p.getTopValue() + deltaY);
+                p.setLeftValue(p.getLeftValue() + deltaX);
+
+            }
+        }
+
+        else {
+            // drag coming outside of Vaadin
+
+            WrapperTransferable wtr = (WrapperTransferable) ctr;
+
+            String object = wtr.getText();
+            // String html = wtr.getHtml();
+            // String url = (String) ctr.getData("Url");
+
+            final Label l = new Label();
+            l.setCaption("Generated from HTML5 drag:");
+            if (object != null) {
+                if (object.length() > 80) {
+                    object = object.substring(0, 79);
+                }
+                l.setValue(object);
+            } else {
+                l.setValue("HTML5 dd");
+            }
+
+            Html5File[] files = wtr.getFiles();
+            if (files != null) {
+                for (Html5File html5File : files) {
+                    l.setCaption(html5File.getFileName());
+                    html5File.setStreamVariable(new StreamVariable() {
+                        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+
+                        public OutputStream getOutputStream() {
+                            return byteArrayOutputStream;
+                        }
+
+                        public boolean listenProgress() {
+                            return false;
+                        }
+
+                        public void onProgress(StreamingProgressEvent event) {
+                        }
+
+                        public void streamingStarted(StreamingStartEvent event) {
+                        }
+
+                        public void streamingFinished(StreamingEndEvent event) {
+                            l.setValue((new String(byteArrayOutputStream
+                                    .toByteArray()).substring(0, 80) + "..."));
+                        }
+
+                        public void streamingFailed(StreamingErrorEvent event) {
+                        }
+
+                        public boolean isInterrupted() {
+                            return false;
+                        }
+                    });
+                }
+            }
+
+            l.setSizeUndefined();
+
+            root.addComponent(l);
+
+        }
+        return;
+    }
+
+    public AcceptCriterion getAcceptCriterion() {
+        return crit != null ? crit : AcceptAll.get();
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/HorizontalLayoutSortableWithWrappers.java b/tests/testbench/com/vaadin/tests/dd/HorizontalLayoutSortableWithWrappers.java
new file mode 100644
index 0000000000..aa51dd539d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/HorizontalLayoutSortableWithWrappers.java
@@ -0,0 +1,109 @@
+package com.vaadin.tests.dd;
+
+import java.util.Iterator;
+
+import com.vaadin.event.Transferable;
+import com.vaadin.event.TransferableImpl;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.DropTarget;
+import com.vaadin.event.dd.TargetDetails;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.event.dd.acceptcriteria.And;
+import com.vaadin.event.dd.acceptcriteria.Not;
+import com.vaadin.event.dd.acceptcriteria.SourceIsTarget;
+import com.vaadin.event.dd.acceptcriteria.TargetDetailIs;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DragAndDropWrapper;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+/**
+ * Same as with css layout but tests size change propagation on emphasis +
+ * rules.
+ * 
+ * 
+ */
+public class HorizontalLayoutSortableWithWrappers extends Window {
+
+    static int count;
+
+    private HorizontalLayout layout = new HorizontalLayout();
+
+    class WrappedLabel extends DragAndDropWrapper {
+
+        private static final long serialVersionUID = 1L;
+
+        public WrappedLabel(String content) {
+            super(new Label(content + " c:" + ++count));
+            getCompositionRoot().setWidth("60px");
+            getCompositionRoot().setHeight("60px");
+            setSizeUndefined();
+            setDragStartMode(DragStartMode.WRAPPER);
+        }
+
+        @Override
+        public DropHandler getDropHandler() {
+            return dh;
+        }
+
+    }
+
+    private DropHandler dh = new DropHandler() {
+        AcceptCriterion crit = new And(new TargetDetailIs("horizontalLocation",
+                "LEFT"), new Not(SourceIsTarget.get()));
+
+        public AcceptCriterion getAcceptCriterion() {
+            return crit;
+        }
+
+        public void drop(DragAndDropEvent dropEvent) {
+            Transferable transferable = dropEvent.getTransferable();
+            if (transferable instanceof TransferableImpl) {
+                TransferableImpl ct = (TransferableImpl) transferable;
+                Component sourceComponent = ct.getSourceComponent();
+                if (sourceComponent instanceof WrappedLabel) {
+                    int index = 1;
+                    Iterator<Component> componentIterator = layout
+                            .getComponentIterator();
+                    Component next = componentIterator.next();
+                    TargetDetails dropTargetData = dropEvent.getTargetDetails();
+                    DropTarget target = dropTargetData.getTarget();
+                    while (next != target) {
+                        if (next != sourceComponent) {
+                            index++;
+                        }
+                        next = componentIterator.next();
+                    }
+                    if (dropTargetData.getData("horizontalLocation").equals(
+                            "LEFT")) {
+                        index--;
+                        if (index < 0) {
+                            index = 0;
+                        }
+                    }
+
+                    layout.removeComponent(sourceComponent);
+                    layout.addComponent(sourceComponent, index);
+                }
+            }
+            // TODO Auto-generated method stub
+
+        }
+    };
+
+    public HorizontalLayoutSortableWithWrappers() {
+        setCaption("Horizontally sortable layout via (ddwrappers): Try sorting blocks by dragging them");
+        DragAndDropWrapper pane = new DragAndDropWrapper(layout);
+        setContent(pane);
+        pane.setSizeFull();
+        setWidth("400px");
+        setHeight("100px");
+
+        for (int i = 0; i < 4; i++) {
+            layout.addComponent(new WrappedLabel("Block"));
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/HorizontalSortableCssLayoutWithWrappers.java b/tests/testbench/com/vaadin/tests/dd/HorizontalSortableCssLayoutWithWrappers.java
new file mode 100644
index 0000000000..a77faffd2e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/HorizontalSortableCssLayoutWithWrappers.java
@@ -0,0 +1,103 @@
+package com.vaadin.tests.dd;
+
+import java.util.Iterator;
+
+import com.vaadin.event.Transferable;
+import com.vaadin.event.TransferableImpl;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.DropTarget;
+import com.vaadin.event.dd.TargetDetails;
+import com.vaadin.event.dd.acceptcriteria.AcceptAll;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.DragAndDropWrapper;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class HorizontalSortableCssLayoutWithWrappers extends Window {
+
+    static int count;
+
+    private CssLayout cssLayout = new CssLayout() {
+        @Override
+        protected String getCss(Component c) {
+            return "float:left; width:60px;height:60px;background: yellow;padding:2px;";
+        };
+    };
+
+    class WrappedLabel extends DragAndDropWrapper {
+
+        private static final long serialVersionUID = 1L;
+
+        public WrappedLabel(String content) {
+            super(new Label(content + " c:" + ++count));
+            setSizeUndefined(); // via css
+            setHeight("60px"); // FIXME custom component seems to be broken:
+            // can't set height with css only
+            setDragStartMode(DragStartMode.WRAPPER);
+        }
+
+        @Override
+        public DropHandler getDropHandler() {
+            return dh;
+        }
+
+    }
+
+    private DropHandler dh = new DropHandler() {
+
+        public AcceptCriterion getAcceptCriterion() {
+            return AcceptAll.get();
+        }
+
+        public void drop(DragAndDropEvent dropEvent) {
+            Transferable transferable = dropEvent.getTransferable();
+            if (transferable instanceof TransferableImpl) {
+                TransferableImpl ct = (TransferableImpl) transferable;
+                Component sourceComponent = ct.getSourceComponent();
+                if (sourceComponent instanceof WrappedLabel) {
+                    int index = 1;
+                    Iterator<Component> componentIterator = cssLayout
+                            .getComponentIterator();
+                    Component next = componentIterator.next();
+                    TargetDetails dropTargetData = dropEvent.getTargetDetails();
+                    DropTarget target = dropTargetData.getTarget();
+                    while (next != target) {
+                        if (next != sourceComponent) {
+                            index++;
+                        }
+                        next = componentIterator.next();
+                    }
+                    if (dropTargetData.getData("horizontalLocation").equals(
+                            "LEFT")) {
+                        index--;
+                        if (index < 0) {
+                            index = 0;
+                        }
+                    }
+
+                    cssLayout.removeComponent(sourceComponent);
+                    cssLayout.addComponent(sourceComponent, index);
+                }
+            }
+            // TODO Auto-generated method stub
+
+        }
+    };
+
+    public HorizontalSortableCssLayoutWithWrappers() {
+        setCaption("Horizontally sortable csslayout via (ddwrappers):Try sorting blocks by draggin them");
+        DragAndDropWrapper pane = new DragAndDropWrapper(cssLayout);
+        setContent(pane);
+        pane.setSizeFull();
+        setWidth("400px");
+        setHeight("100px");
+
+        for (int i = 0; i < 4; i++) {
+            cssLayout.addComponent(new WrappedLabel("Block"));
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/TreeDragStart.java b/tests/testbench/com/vaadin/tests/dd/TreeDragStart.java
new file mode 100644
index 0000000000..4a719bfa7f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/TreeDragStart.java
@@ -0,0 +1,324 @@
+package com.vaadin.tests.dd;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.event.DataBoundTransferable;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.event.dd.acceptcriteria.Not;
+import com.vaadin.event.dd.acceptcriteria.Or;
+import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails;
+import com.vaadin.ui.AbstractSelect.VerticalLocationIs;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.TableDragMode;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Tree.TreeDragMode;
+import com.vaadin.ui.Tree.TreeTargetDetails;
+
+public class TreeDragStart extends TestBase {
+
+    @Override
+    protected void setup() {
+        final Tree tree = new Tree("Inventory");
+
+        CheckBox checkBox = new CheckBox("Enabled");
+        checkBox.setImmediate(true);
+        checkBox.setValue(true);
+        checkBox.addListener(new ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                tree.setEnabled(!tree.isEnabled());
+            }
+        });
+        addComponent(checkBox);
+        checkBox = new CheckBox("Drag start");
+        checkBox.setImmediate(true);
+        checkBox.setValue(true);
+        checkBox.addListener(new ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                if (((CheckBox) event.getProperty()).booleanValue()) {
+                    tree.setDragMode(TreeDragMode.NODE);
+                } else {
+                    tree.setDragMode(TreeDragMode.NONE);
+                }
+            }
+        });
+        addComponent(checkBox);
+
+        tree.setContainerDataSource(createTreeContent());
+        tree.setItemCaptionMode(Tree.ITEM_CAPTION_MODE_EXPLICIT_DEFAULTS_ID);
+        for (Object item : tree.getItemIds().toArray()) {
+            tree.setItemCaption(item, (String) ((BeanItem<?>) item)
+                    .getItemProperty("name").getValue());
+        }
+        getLayout().addComponent(tree);
+
+        // Expand all items
+        for (Iterator<?> it = tree.rootItemIds().iterator(); it.hasNext();) {
+            tree.expandItemsRecursively(it.next());
+        }
+
+        // Set the tree in drag source mode
+        tree.setDragMode(TreeDragMode.NODE);
+
+        // Allow the tree to receive drag drops and handle them
+        tree.setDropHandler(new DropHandler() {
+            public AcceptCriterion getAcceptCriterion() {
+                // Accept drops in the middle of container items
+                // and below and above all items.
+                return new Or(Tree.TargetItemAllowsChildren.get(), new Not(
+                        VerticalLocationIs.MIDDLE));
+            }
+
+            public void drop(DragAndDropEvent event) {
+                // Wrapper for the object that is dragged
+                DataBoundTransferable t = (DataBoundTransferable) event
+                        .getTransferable();
+
+                TreeTargetDetails target = (TreeTargetDetails) event
+                        .getTargetDetails();
+
+                // Get ids of the dragged item and the target item
+                Object sourceItemId = t.getData("itemId");
+                Object targetItemId = target.getItemIdOver();
+
+                // On which side of the target the item was dropped
+                VerticalDropLocation location = target.getDropLocation();
+
+                HierarchicalContainer container = (HierarchicalContainer) tree
+                        .getContainerDataSource();
+
+                BeanItem<?> beanItem = null;
+                if (sourceItemId instanceof BeanItem<?>) {
+                    beanItem = (BeanItem<?>) sourceItemId;
+                } else if (sourceItemId instanceof InventoryObject) {
+                    beanItem = new BeanItem<InventoryObject>(
+                            (InventoryObject) sourceItemId);
+                }
+
+                // Remove the item from the source container and
+                // add it to the tree's container
+                Container sourceContainer = t.getSourceContainer();
+                sourceContainer.removeItem(sourceItemId);
+                tree.addItem(beanItem);
+                InventoryObject bean = (InventoryObject) beanItem.getBean();
+                tree.setChildrenAllowed(beanItem, bean.isContainer());
+
+                // Drop right on an item -> make it a child
+                if (location == VerticalDropLocation.MIDDLE) {
+                    tree.setParent(beanItem, targetItemId);
+                } else if (location == VerticalDropLocation.TOP) {
+                    Object parentId = container.getParent(targetItemId);
+                    tree.setParent(beanItem, parentId);
+                    container.moveAfterSibling(beanItem, targetItemId);
+                    container.moveAfterSibling(targetItemId, beanItem);
+                }
+
+                // Drop below another item -> make it next
+                else if (location == VerticalDropLocation.BOTTOM) {
+                    Object parentId = container.getParent(targetItemId);
+                    tree.setParent(beanItem, parentId);
+                    container.moveAfterSibling(beanItem, targetItemId);
+                }
+
+                tree.setItemCaption(beanItem, bean.getName());
+            }
+        });
+
+        // Have a table that allows dragging from
+        final Table table = new Table("Inventory List");
+        table.setDragMode(TableDragMode.ROW);
+
+        // Initialize the table container
+        ArrayList<InventoryObject> collection = new ArrayList<InventoryObject>();
+        collection.add(new InventoryObject("Dummy Item", 0.0, false));
+        final BeanItemContainer<InventoryObject> tableContainer = new BeanItemContainer<InventoryObject>(
+                collection);
+        table.setContainerDataSource(tableContainer);
+        table.setVisibleColumns(new String[] { "name", "weight" });
+        table.removeAllItems();
+
+        // Allow the table to receive drops and handle them
+        table.setDropHandler(new DropHandler() {
+            public AcceptCriterion getAcceptCriterion() {
+                return new Not(VerticalLocationIs.MIDDLE);
+            }
+
+            public void drop(DragAndDropEvent event) {
+                // Wrapper for the object that is dragged
+                DataBoundTransferable t = (DataBoundTransferable) event
+                        .getTransferable();
+
+                // Make sure the drag source is the same tree
+                if (t.getSourceComponent() != tree
+                        && t.getSourceComponent() != table) {
+                    return;
+                }
+
+                AbstractSelectTargetDetails target = (AbstractSelectTargetDetails) event
+                        .getTargetDetails();
+
+                // Get ids of the dragged item and the target item
+                Object sourceItemId = t.getData("itemId");
+                Object targetItemId = target.getItemIdOver();
+
+                // Do not allow drop on the item itself
+                if (sourceItemId.equals(targetItemId)) {
+                    return;
+                }
+
+                InventoryObject bean = null;
+                if (sourceItemId instanceof BeanItem<?>) {
+                    bean = (InventoryObject) ((BeanItem<?>) sourceItemId)
+                            .getBean();
+                } else if (sourceItemId instanceof InventoryObject) {
+                    bean = (InventoryObject) sourceItemId;
+                }
+
+                // Remove the item from the source container
+                t.getSourceContainer().removeItem(sourceItemId);
+
+                // On which side of the target the item was dropped
+                VerticalDropLocation location = target.getDropLocation();
+
+                // The table was empty or otherwise not on an item
+                if (targetItemId == null) {
+                    tableContainer.addItem(bean); // Add to the end
+                } else if (location == VerticalDropLocation.TOP) {
+                    tableContainer.addItemAt(
+                            tableContainer.indexOfId(targetItemId), bean);
+                } else if (location == VerticalDropLocation.BOTTOM) {
+                    tableContainer.addItemAfter(targetItemId, bean);
+                }
+            }
+        });
+        getLayout().addComponent(table);
+    }
+
+    public class InventoryObject implements Serializable {
+        private static final long serialVersionUID = -8943498783302996516L;
+
+        String name;
+        double weight;
+        boolean container;
+
+        public InventoryObject(String name, double weight, boolean container) {
+            this.name = name;
+            this.weight = weight;
+            this.container = container;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public double getWeight() {
+            return weight;
+        }
+
+        public void setWeight(double weight) {
+            this.weight = weight;
+        }
+
+        public boolean isContainer() {
+            return container;
+        }
+
+        public void setContainer(boolean container) {
+            this.container = container;
+        }
+    }
+
+    HashMap<String, InventoryObject> inventoryStore = new HashMap<String, InventoryObject>();
+
+    public HierarchicalContainer createTreeContent() {
+        final Object[] inventory = new Object[] {
+                new InventoryObject("root", 0.0, true),
+                new InventoryObject("+5 Quarterstaff (blessed)", 3.5, false),
+                new InventoryObject("+3 Elven Dagger (blessed)", 0.2, false),
+                new InventoryObject("+5 Helmet (greased)", 1.5, false),
+                new Object[] {
+                        new InventoryObject("Sack", 0.2, true),
+                        new InventoryObject("Pick-Axe", 2.5, false),
+                        new InventoryObject("Lock Pick", 0.1, false),
+                        new InventoryObject("Tinning Kit", 0.5, false),
+                        new InventoryObject("Potion of Healing (blessed)", 0.7,
+                                false), },
+                new Object[] {
+                        new InventoryObject("Bag of Holding", 0.1, true),
+                        new InventoryObject("Magic Marker", 0.05, false),
+                        new InventoryObject("Can of Grease (blessed)", 0.5,
+                                false), },
+                new Object[] {
+                        new InventoryObject("Chest", 10.0, true),
+                        new InventoryObject("Scroll of Identify", 0.1, false),
+                        new InventoryObject("Scroll of Genocide", 0.1, false),
+                        new InventoryObject("Towel", 0.3, false),
+                        new Object[] {
+                                new InventoryObject("Large Box", 8.0, true),
+                                new InventoryObject("Figurine of Vaadin", 0.4,
+                                        false),
+                                new InventoryObject("Expensive Camera", 1.5,
+                                        false), },
+                        new InventoryObject("Tin Opener", 0.02, false), }, };
+
+        HierarchicalContainer container = new HierarchicalContainer();
+
+        new Object() {
+            public void put(Object[] data, Object parent,
+                    HierarchicalContainer container) {
+                for (int i = 1; i < data.length; i++) {
+                    BeanItem<InventoryObject> item;
+                    if (data[i].getClass() == InventoryObject.class) {
+                        InventoryObject object = (InventoryObject) data[i];
+                        item = new BeanItem<InventoryObject>(object);
+                        container.addItem(item);
+                        container.setParent(item, parent);
+                        container.setChildrenAllowed(item, false);
+                    } else {// It's an Object[]
+                        Object[] sub = (Object[]) data[i];
+                        InventoryObject object = (InventoryObject) sub[0];
+                        item = new BeanItem<InventoryObject>(object);
+                        container.addItem(item);
+                        container.setParent(item, parent);
+
+                        // Add children recursively
+                        put(sub, item, container);
+                    }
+
+                    inventoryStore
+                            .put(item.getBean().getName(), item.getBean());
+                }
+            }
+        }.put(inventory, null, container);
+
+        return container;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Should work";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6320;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/VMyDragSource.java b/tests/testbench/com/vaadin/tests/dd/VMyDragSource.java
new file mode 100644
index 0000000000..350ee064f3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/VMyDragSource.java
@@ -0,0 +1,92 @@
+package com.vaadin.tests.dd;
+
+import com.google.gwt.dom.client.NativeEvent;
+import com.google.gwt.event.dom.client.MouseDownEvent;
+import com.google.gwt.event.dom.client.MouseDownHandler;
+import com.google.gwt.event.dom.client.MouseMoveEvent;
+import com.google.gwt.event.dom.client.MouseMoveHandler;
+import com.google.gwt.event.dom.client.MouseOutEvent;
+import com.google.gwt.event.dom.client.MouseOutHandler;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.HTML;
+import com.vaadin.terminal.gwt.client.ApplicationConnection;
+import com.vaadin.terminal.gwt.client.Paintable;
+import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.terminal.gwt.client.ui.dd.VDragAndDropManager;
+import com.vaadin.terminal.gwt.client.ui.dd.VTransferable;
+
+/**
+ * Example code to implement Component that has something to drag.
+ */
+public class VMyDragSource extends Composite implements Paintable,
+        MouseDownHandler, MouseMoveHandler, MouseOutHandler {
+
+    private boolean mouseDown;
+    private MouseDownEvent mDownEvent;
+    @SuppressWarnings("unused")
+    private ApplicationConnection client;
+
+    public VMyDragSource() {
+        FlowPanel fp = new FlowPanel();
+        initWidget(fp);
+
+        HTML html = new HTML("DragThis");
+
+        fp.add(html);
+
+        html.addMouseDownHandler(this);
+        html.addMouseMoveHandler(this);
+        html.addMouseOutHandler(this);
+
+    }
+
+    public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
+        if (client.updateComponent(this, uidl, true)) {
+            return;
+        }
+        this.client = client;
+    }
+
+    /*
+     * Below a sophisticated drag start implementation. Drag event is started if
+     * mouse is moved 5 pixels with left mouse key down.
+     */
+
+    public void onMouseDown(MouseDownEvent event) {
+        if (event.getNativeButton() == NativeEvent.BUTTON_LEFT) {
+            mouseDown = true;
+            mDownEvent = event;
+        }
+    }
+
+    public void onMouseMove(MouseMoveEvent event) {
+        if (mouseDown) {
+            int deltaX = Math.abs(mDownEvent.getClientX() - event.getClientX());
+            int deltaY = Math.abs(mDownEvent.getClientY() - event.getClientY());
+            if (deltaX > 5 || deltaY > 5) {
+                // Start the drag and drop operation
+
+                // create Transferable, that contains the payload
+                VTransferable transferable = new VTransferable();
+                transferable.setData("Text", "myPayload");
+
+                // Tell DragAndDropManager to start a drag and drop operation.
+                // Also let it handle all events (last parameter true). Could
+                // also do all event handling here too.
+                VDragAndDropManager.get().startDrag(transferable,
+                        mDownEvent.getNativeEvent(), true);
+
+                mouseDown = false;
+                mDownEvent = null;
+            }
+        }
+
+    }
+
+    public void onMouseOut(MouseOutEvent event) {
+        mouseDown = false;
+        mDownEvent = null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/dd/VMyDropTarget.java b/tests/testbench/com/vaadin/tests/dd/VMyDropTarget.java
new file mode 100644
index 0000000000..743cce3095
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/dd/VMyDropTarget.java
@@ -0,0 +1,52 @@
+package com.vaadin.tests.dd;
+
+import com.google.gwt.user.client.ui.Composite;
+import com.vaadin.terminal.gwt.client.ApplicationConnection;
+import com.vaadin.terminal.gwt.client.Paintable;
+import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.terminal.gwt.client.ui.dd.VDragEvent;
+import com.vaadin.terminal.gwt.client.ui.dd.VDropHandler;
+import com.vaadin.terminal.gwt.client.ui.dd.VHasDropHandler;
+
+public class VMyDropTarget extends Composite implements VHasDropHandler,
+        VDropHandler, Paintable {
+
+    private ApplicationConnection client;
+
+    public void dragEnter(VDragEvent drag) {
+    }
+
+    public void dragLeave(VDragEvent drag) {
+        // TODO Auto-generated method stub
+    }
+
+    public void dragOver(VDragEvent currentDrag) {
+        // TODO Auto-generated method stub
+    }
+
+    public boolean drop(VDragEvent drag) {
+        // TODO Auto-generated method stub
+        // return true to tell DDManager do server visit
+        return false;
+    }
+
+    public Paintable getPaintable() {
+        // Drophandler implemented by Paintable itself
+        return this;
+    }
+
+    public VDropHandler getDropHandler() {
+        // Drophandler implemented by Paintable itself
+        return this;
+    }
+
+    public ApplicationConnection getApplicationConnection() {
+        return client;
+    }
+
+    public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
+        this.client = client;
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/debug/DebugWindowPresent.html b/tests/testbench/com/vaadin/tests/debug/DebugWindowPresent.html
new file mode 100644
index 0000000000..d396c1778e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/debug/DebugWindowPresent.html
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>CssLayoutRemoveComponent</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">CssLayoutRemoveComponent</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.debug.DebugWindowPresent?restartApplication&amp;debug</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementPresent</td>
+	<td>vaadin=runcomvaadintestsdebugDebugWindowPresent::Root/VDebugConsole[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.debug.DebugWindowPresent?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>vaadin=runcomvaadintestsdebugDebugWindowPresent::Root/VDebugConsole[0]</td>
+	<td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/debug/DebugWindowPresent.java b/tests/testbench/com/vaadin/tests/debug/DebugWindowPresent.java
new file mode 100644
index 0000000000..3e04d27628
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/debug/DebugWindowPresent.java
@@ -0,0 +1,22 @@
+package com.vaadin.tests.debug;
+
+import com.vaadin.tests.components.TestBase;
+
+public class DebugWindowPresent extends TestBase {
+
+    @Override
+    protected void setup() {
+        // Nothing to set up
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The debug window should be present with &debug present in the url, but not othervise";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return Integer.valueOf(7555);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/gwtadapter/componentlocator/TestDetachedNotPresent.html b/tests/testbench/com/vaadin/tests/gwtadapter/componentlocator/TestDetachedNotPresent.html
new file mode 100644
index 0000000000..24e5e992ca
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/gwtadapter/componentlocator/TestDetachedNotPresent.html
@@ -0,0 +1,62 @@
+
+<?xml version="1.0" encoding="UTF-8"?> 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
+<head profile="http://selenium-ide.openqa.org/profiles/test-case"> 
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
+<link rel="selenium.base" href="" /> 
+<title>New Test</title> 
+</head> 
+<body> 
+<table cellpadding="1" cellspacing="1" border="1"> 
+<thead> 
+<tr><td rowspan="1" colspan="3">New Test</td></tr> 
+</thead><tbody> 
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+	<td>40,10</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+	<td>29,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+	<td>103,3</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+	<td>34,6</td>
+</tr>
+<tr>
+	<td>contextmenu</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementPresent</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
+	<td>15,8</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+	<td>37,9</td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>vaadin=runcomvaadintestscomponentstableTables::Root/VContextMenu[0]#option0</td>
+	<td>15,8</td>
+</tr>
+</tbody></table> 
+</body> 
+</html> 
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/integration/IntegrationTestApplication.java b/tests/testbench/com/vaadin/tests/integration/IntegrationTestApplication.java
new file mode 100644
index 0000000000..c61d23ae8d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/integration/IntegrationTestApplication.java
@@ -0,0 +1,47 @@
+package com.vaadin.tests.integration;
+
+import com.vaadin.Application;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.terminal.ClassResource;
+import com.vaadin.terminal.Resource;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+public class IntegrationTestApplication extends Application {
+
+    @Override
+    public void init() {
+        Window window = new Window("Vaadin Application");
+        setMainWindow(window);
+
+        final Table table = new Table();
+        table.addContainerProperty("icon", Resource.class, null);
+        table.setItemIconPropertyId("icon");
+        table.addContainerProperty("country", String.class, null);
+        table.setRowHeaderMode(Table.ROW_HEADER_MODE_ICON_ONLY);
+        table.setImmediate(true);
+        table.setSelectable(true);
+        table.setVisibleColumns(new Object[] { "country" });
+        window.addComponent(table);
+
+        Item item = table.addItem("FI");
+        item.getItemProperty("icon")
+                .setValue(new ClassResource("fi.gif", this));
+        item.getItemProperty("country").setValue("Finland");
+        item = table.addItem("SE");
+        item.getItemProperty("icon")
+                .setValue(new ClassResource("se.gif", this));
+        item.getItemProperty("country").setValue("Sweden");
+
+        final Label selectedLabel = new Label();
+        table.addListener(new ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                selectedLabel.setValue(table.getValue());
+            }
+        });
+        window.addComponent(selectedLabel);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/integration/JSR286PortletApplication.java b/tests/testbench/com/vaadin/tests/integration/JSR286PortletApplication.java
new file mode 100644
index 0000000000..57ee762913
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/integration/JSR286PortletApplication.java
@@ -0,0 +1,160 @@
+package com.vaadin.tests.integration;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.EventRequest;
+import javax.portlet.EventResponse;
+import javax.portlet.PortletMode;
+import javax.portlet.PortletRequest;
+import javax.portlet.PortletURL;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.ResourceRequest;
+import javax.portlet.ResourceResponse;
+import javax.portlet.WindowState;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.terminal.gwt.server.PortletApplicationContext2;
+import com.vaadin.terminal.gwt.server.PortletApplicationContext2.PortletListener;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.Notification;
+
+/**
+ * Adapted from old PortletDemo to support integration testing.
+ */
+public class JSR286PortletApplication extends Application {
+
+    Window main = new Window();
+    TextField tf = new TextField("Some value");
+    Label userInfo = new Label();
+    Link portletEdit = new Link();
+    Link portletMax = new Link();
+    Link someAction = null;
+
+    @Override
+    public void init() {
+        main = new Window();
+        setMainWindow(main);
+
+        userInfo.setCaption("User info");
+        userInfo.setContentMode(Label.CONTENT_PREFORMATTED);
+        main.addComponent(userInfo);
+
+        tf.setEnabled(false);
+        tf.setImmediate(true);
+        main.addComponent(tf);
+
+        portletEdit.setEnabled(false);
+        main.addComponent(portletEdit);
+        portletMax.setEnabled(false);
+        main.addComponent(portletMax);
+
+        if (getContext() instanceof PortletApplicationContext2) {
+            PortletApplicationContext2 ctx = (PortletApplicationContext2) getContext();
+            ctx.addPortletListener(this, new DemoPortletListener());
+        } else {
+            getMainWindow().showNotification("Not inited via Portal!",
+                    Notification.TYPE_ERROR_MESSAGE);
+        }
+
+    }
+
+    private class DemoPortletListener implements PortletListener {
+
+        public void handleActionRequest(ActionRequest request,
+                ActionResponse response, Window window) {
+            main.addComponent(new Label("Action received"));
+        }
+
+        public void handleRenderRequest(RenderRequest request,
+                RenderResponse response, Window window) {
+            // Portlet up-and-running, enable stuff
+            portletEdit.setEnabled(true);
+            portletMax.setEnabled(true);
+
+            // Editable if we're in editmode
+            tf.setEnabled((request.getPortletMode() == PortletMode.EDIT));
+
+            // Show notification about current mode and state
+            getMainWindow().showNotification(
+                    "Portlet status",
+                    "Mode: " + request.getPortletMode() + " State: "
+                            + request.getWindowState(),
+                    Notification.TYPE_WARNING_MESSAGE);
+
+            // Display current user info
+            Map<?, ?> uinfo = (Map<?, ?>) request
+                    .getAttribute(PortletRequest.USER_INFO);
+            if (uinfo != null) {
+                String s = "";
+                for (Iterator<?> it = uinfo.keySet().iterator(); it.hasNext();) {
+                    Object key = it.next();
+                    Object val = uinfo.get(key);
+                    s += key + ": " + val + "\n";
+                }
+                if (request.isUserInRole("administrator")) {
+                    s += "(administrator)";
+                }
+                userInfo.setValue(s);
+            } else {
+                userInfo.setValue("-");
+            }
+
+            // Create Edit/Done link (actionUrl)
+            PortletURL url = response.createActionURL();
+            try {
+                url.setPortletMode((request.getPortletMode() == PortletMode.VIEW ? PortletMode.EDIT
+                        : PortletMode.VIEW));
+                portletEdit.setResource(new ExternalResource(url.toString()));
+                portletEdit
+                        .setCaption((request.getPortletMode() == PortletMode.VIEW ? "Edit"
+                                : "Done"));
+            } catch (Exception e) {
+                portletEdit.setEnabled(false);
+            }
+            // Create Maximize/Normal link (actionUrl)
+            url = response.createActionURL();
+            try {
+                url.setWindowState((request.getWindowState() == WindowState.NORMAL ? WindowState.MAXIMIZED
+                        : WindowState.NORMAL));
+                portletMax.setResource(new ExternalResource(url.toString()));
+                portletMax
+                        .setCaption((request.getWindowState() == WindowState.NORMAL ? "Maximize"
+                                : "Back to normal"));
+            } catch (Exception e) {
+                portletMax.setEnabled(false);
+            }
+
+            if (someAction == null) {
+                url = response.createActionURL();
+                try {
+                    someAction = new Link("An action", new ExternalResource(
+                            url.toString()));
+                    main.addComponent(someAction);
+                } catch (Exception e) {
+                    // Oops
+                    System.err.println("Could not create someAction: " + e);
+                }
+
+            }
+        }
+
+        public void handleEventRequest(EventRequest request,
+                EventResponse response, Window window) {
+            // events not used by this test
+        }
+
+        public void handleResourceRequest(ResourceRequest request,
+                ResourceResponse response, Window window) {
+            // nothing special to do here
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/integration/LiferayThemeDemo.java b/tests/testbench/com/vaadin/tests/integration/LiferayThemeDemo.java
new file mode 100644
index 0000000000..4267a7ea91
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/integration/LiferayThemeDemo.java
@@ -0,0 +1,721 @@
+package com.vaadin.tests.integration;
+
+import java.util.Date;
+import java.util.Iterator;
+import java.util.Locale;
+
+import com.vaadin.Application;
+import com.vaadin.event.Action;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.ui.AbstractSelect;
+import com.vaadin.ui.Accordion;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.InlineDateField;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.ListSelect;
+import com.vaadin.ui.MenuBar;
+import com.vaadin.ui.MenuBar.Command;
+import com.vaadin.ui.MenuBar.MenuItem;
+import com.vaadin.ui.NativeButton;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.PopupView;
+import com.vaadin.ui.Slider;
+import com.vaadin.ui.Slider.ValueOutOfBoundsException;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
+import com.vaadin.ui.TabSheet.Tab;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.TwinColSelect;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.VerticalSplitPanel;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.Notification;
+import com.vaadin.ui.themes.LiferayTheme;
+
+@SuppressWarnings("serial")
+public class LiferayThemeDemo extends Application {
+
+    @SuppressWarnings("deprecation")
+    private static final Date DATE = new Date(2009 - 1900, 6 - 1, 2);
+
+    private static final Resource ICON_GLOBE = new ThemeResource(
+            "../runo/icons/16/globe.png");
+    private static final Resource ICON_OK = new ThemeResource(
+            "../runo/icons/16/ok.png");
+
+    private Window main;
+    private VerticalLayout mainLayout;
+    private TabSheet tabs;
+
+    private Action.Handler handler = new Action.Handler() {
+
+        public void handleAction(Action action, Object sender, Object target) {
+            // NOP
+        }
+
+        public Action[] getActions(Object target, Object sender) {
+            return new Action[] {
+                    new Action("Open"),
+                    new Action("Delete", new ThemeResource(
+                            "../runo/icons/16/trash.png")) };
+        }
+    };
+
+    @Override
+    public void init() {
+        main = new Window("Vaadin Liferay Theme");
+        mainLayout = (VerticalLayout) main.getContent();
+        mainLayout.setMargin(false);
+        setMainWindow(main);
+
+        // setTheme("liferay");
+
+        buildMainView();
+    }
+
+    void buildMainView() {
+        mainLayout.setWidth("100%");
+        mainLayout.setHeight("400px");
+        mainLayout.addComponent(getTopMenu());
+
+        CssLayout margin = new CssLayout();
+        margin.setMargin(false, true, true, true);
+        margin.setSizeFull();
+        tabs = new TabSheet();
+        tabs.setSizeFull();
+        margin.addComponent(tabs);
+        mainLayout.addComponent(margin);
+        mainLayout.setExpandRatio(margin, 1);
+
+        tabs.addComponent(buildLabels());
+        tabs.addComponent(buildButtons());
+        tabs.addComponent(buildTextFields());
+        tabs.addComponent(buildSelects());
+        tabs.addComponent(buildDateFields());
+        tabs.addComponent(buildSliders());
+        tabs.addComponent(buildTabSheets());
+        tabs.addComponent(buildAccordions());
+        tabs.addComponent(buildPanels());
+        tabs.addComponent(buildTables());
+        tabs.addComponent(buildTrees());
+        tabs.addComponent(buildWindows());
+        tabs.addComponent(buildSplitPanels());
+        tabs.addComponent(buildNotifications());
+        tabs.addComponent(buildPopupViews());
+    }
+
+    Layout buildLabels() {
+        final GridLayout l = new GridLayout(2, 1);
+        l.setWidth("560px");
+        l.setSpacing(true);
+        l.setMargin(true);
+        l.setCaption("Labels");
+
+        l.addComponent(new Label("Normal Label", Label.CONTENT_XHTML));
+        l.addComponent(new Label(
+                "Lorem ipsum dolor sit amet, consectetur adipiscing elit."));
+        return l;
+    }
+
+    Layout buildButtons() {
+        GridLayout l = new GridLayout(3, 1);
+        l.setCaption("Buttons");
+        l.setMargin(true);
+        l.setSpacing(true);
+
+        Button b = new Button("Normal Button");
+        b.setDescription("This is a tooltip!");
+        l.addComponent(b);
+
+        b = new NativeButton("Native Button");
+        b.setDescription("<h2><img src=\"/html/VAADIN/themes/runo/icons/16/globe.png\"/>A richtext tooltip</h2>"
+                + "<ul>"
+                + "<li>HTML formatting</li><li>Images<br/>"
+                + "</li><li>etc...</li></ul>");
+        l.addComponent(b);
+
+        b = new CheckBox("Checkbox");
+        l.addComponent(b);
+
+        b = new Button("Disabled");
+        b.setEnabled(false);
+        l.addComponent(b);
+
+        b = new NativeButton("Disabled");
+        b.setEnabled(false);
+        l.addComponent(b);
+
+        b = new CheckBox("Disabled");
+        b.setEnabled(false);
+        l.addComponent(b);
+
+        b = new Button("OK");
+        b.setIcon(ICON_OK);
+        l.addComponent(b);
+
+        b = new NativeButton("OK");
+        b.setIcon(ICON_OK);
+        l.addComponent(b);
+
+        b = new CheckBox("OK");
+        b.setIcon(ICON_OK);
+        l.addComponent(b);
+
+        b = new Button("Link Button");
+        b.setStyleName(LiferayTheme.BUTTON_LINK);
+        l.addComponent(b);
+
+        b = new NativeButton("Link Button");
+        b.setStyleName(LiferayTheme.BUTTON_LINK);
+        l.addComponent(b);
+
+        l.newLine();
+
+        b = new Button("Link Button");
+        b.setIcon(ICON_OK);
+        b.setStyleName(LiferayTheme.BUTTON_LINK);
+        l.addComponent(b);
+
+        b = new NativeButton("Link Button");
+        b.setIcon(ICON_OK);
+        b.setStyleName(LiferayTheme.BUTTON_LINK);
+        l.addComponent(b);
+
+        return l;
+    }
+
+    Layout buildTextFields() {
+        GridLayout l = new GridLayout(2, 1);
+        l.setCaption("Text fields");
+        l.setMargin(true);
+        l.setSpacing(true);
+        l.setWidth("400px");
+        l.setColumnExpandRatio(0, 1);
+
+        l.addComponent(new Label("Normal TextField", Label.CONTENT_XHTML));
+        TextField tf = new TextField();
+        tf.setInputPrompt("Enter text");
+        l.addComponent(tf);
+
+        l.addComponent(new Label("Normal TextArea", Label.CONTENT_XHTML));
+
+        tf = new TextField();
+        tf.setHeight("5em");
+        tf.setInputPrompt("Enter text");
+        l.addComponent(tf);
+
+        return l;
+    }
+
+    Layout buildSelects() {
+        VerticalLayout l = new VerticalLayout();
+        l.setCaption("Selects");
+        l.setMargin(true);
+        l.setSpacing(true);
+
+        HorizontalLayout hl = new HorizontalLayout();
+        hl.setSpacing(true);
+        hl.setMargin(true, false, false, false);
+        l.addComponent(hl);
+
+        AbstractSelect cb = new ComboBox();
+        AbstractSelect nat = new NativeSelect();
+        AbstractSelect list = new ListSelect();
+        AbstractSelect twincol = new TwinColSelect();
+
+        for (int i = 0; i < 50; i++) {
+            cb.addItem("Item " + i);
+            nat.addItem("Item " + i);
+            list.addItem("Item " + i);
+            twincol.addItem("Item " + i);
+        }
+
+        hl.addComponent(cb);
+        hl.addComponent(nat);
+        hl.addComponent(list);
+        hl.addComponent(twincol);
+
+        return l;
+    }
+
+    Layout buildDateFields() {
+        VerticalLayout l = new VerticalLayout();
+        l.setCaption("Date fields");
+        l.setMargin(true);
+        l.setSpacing(true);
+
+        HorizontalLayout hl = new HorizontalLayout();
+        hl.setSpacing(true);
+        hl.setMargin(true, false, false, false);
+        l.addComponent(hl);
+
+        DateField df = new DateField();
+        df.setValue(DATE);
+        df.setResolution(DateField.RESOLUTION_MIN);
+        hl.addComponent(df);
+
+        df = new InlineDateField();
+        df.setLocale(new Locale("fi", "FI"));
+        df.setShowISOWeekNumbers(true);
+        df.setValue(DATE);
+        df.setResolution(DateField.RESOLUTION_DAY);
+        hl.addComponent(df);
+
+        df = new InlineDateField();
+        df.setValue(DATE);
+        df.setResolution(DateField.RESOLUTION_YEAR);
+        hl.addComponent(df);
+
+        return l;
+    }
+
+    Layout buildTabSheets() {
+        VerticalLayout l = new VerticalLayout();
+        l.setCaption("Tabs");
+        l.setMargin(true);
+        l.setSpacing(true);
+        l.setWidth("400px");
+
+        CheckBox closable = new CheckBox("Closable tabs");
+        closable.setImmediate(true);
+        l.addComponent(closable);
+
+        final TabSheet ts = new TabSheet();
+        ts.setHeight("100px");
+        l.addComponent(ts);
+
+        for (int i = 1; i < 10; i++) {
+            Tab t = ts.addTab(new Label(), "Tab " + i);
+            if (i % 2 == 0) {
+                t.setIcon(ICON_GLOBE);
+            }
+            if (i == 2) {
+                t.setEnabled(false);
+            }
+        }
+
+        closable.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                Iterator<Component> it = ts.getComponentIterator();
+                for (; it.hasNext();) {
+                    Component c = it.next();
+                    ts.getTab(c).setClosable(event.getButton().booleanValue());
+                }
+            }
+        });
+
+        return l;
+    }
+
+    Layout buildPanels() {
+        GridLayout l = new GridLayout(2, 1);
+        l.setCaption("Panels");
+        l.setMargin(true);
+        l.setSpacing(true);
+        l.setWidth("700px");
+        l.setColumnExpandRatio(0, 2);
+        l.setColumnExpandRatio(1, 5);
+
+        l.addComponent(new Label("Normal Panel", Label.CONTENT_XHTML));
+
+        Panel p = new Panel("Normal Panel");
+        p.setHeight("100px");
+        p.addComponent(new Label("Panel content"));
+        l.addComponent(p);
+
+        l.addComponent(new Label(
+                "Light Style (<code>LiferayTheme.PANEL_LIGHT</code>)",
+                Label.CONTENT_XHTML));
+
+        Panel p2 = new Panel("Light Style Panel");
+        p2.setStyleName(LiferayTheme.PANEL_LIGHT);
+        p2.addComponent(new Label("Panel content"));
+        l.addComponent(p2);
+
+        return l;
+    }
+
+    Layout buildTables() {
+        GridLayout l = new GridLayout(1, 1);
+        l.setCaption("Tables");
+        l.setMargin(true);
+        l.setSpacing(true);
+
+        Table t = new Table();
+        t.setWidth("700px");
+        t.setPageLength(4);
+        t.setSelectable(true);
+        t.setColumnCollapsingAllowed(true);
+        t.setColumnReorderingAllowed(true);
+        t.addActionHandler(handler);
+
+        t.addContainerProperty("First", String.class, null, "First",
+                ICON_GLOBE, Table.ALIGN_RIGHT);
+        t.addContainerProperty("Second", String.class, null);
+        t.addContainerProperty("Third", String.class, null);
+        t.addContainerProperty("Fourth", TextField.class, null);
+        t.setColumnCollapsed("Fourth", true);
+
+        int sum = 0;
+        for (int j = 0; j < 100; j++) {
+            t.addItem(new Object[] { j, "Bar value " + j,
+                    "Last column value " + j, new TextField() }, j);
+            sum += j;
+        }
+
+        t.setFooterVisible(true);
+        t.setColumnFooter("First", "" + sum);
+
+        l.addComponent(t);
+
+        return l;
+    }
+
+    Layout buildWindows() {
+        final CssLayout l = new CssLayout();
+        l.setCaption("Windows");
+
+        final Window w = new Window("Normal window");
+        w.setWidth("280px");
+        w.setHeight("180px");
+        w.setPositionX(40);
+        w.setPositionY(160);
+
+        final Window w2 = new Window("Window, no resize");
+        w2.setResizable(false);
+        w2.setWidth("280px");
+        w2.setHeight("180px");
+        w2.setPositionX(350);
+        w2.setPositionY(160);
+        w2.addComponent(new Label("<code>Window.setResizable(false)</code>",
+                Label.CONTENT_XHTML));
+
+        tabs.addListener(new TabSheet.SelectedTabChangeListener() {
+            public void selectedTabChange(SelectedTabChangeEvent event) {
+                if (event.getTabSheet().getSelectedTab() == l) {
+                    getMainWindow().addWindow(w);
+                    getMainWindow().addWindow(w2);
+                } else {
+                    getMainWindow().removeWindow(w);
+                    getMainWindow().removeWindow(w2);
+                }
+            }
+        });
+
+        return l;
+    }
+
+    Layout buildSplitPanels() {
+        final GridLayout l = new GridLayout(2, 1);
+        l.setCaption("Split panels");
+        l.setMargin(true);
+        l.setSpacing(true);
+        l.setWidth("700px");
+        l.setHeight("100%");
+        l.setColumnExpandRatio(1, 1);
+
+        CheckBox lockCheckBox = new CheckBox("Lock SplitPanels");
+        lockCheckBox.setImmediate(true);
+        l.addComponent(lockCheckBox, 1, 0);
+        l.newLine();
+
+        Label label = new Label("Normal SplitPanel", Label.CONTENT_XHTML);
+        label.setWidth(null);
+        l.addComponent(label);
+        final HorizontalSplitPanel sp = new HorizontalSplitPanel();
+        sp.setWidth("100%");
+        sp.setHeight("100px");
+        final VerticalSplitPanel sp2 = new VerticalSplitPanel();
+        sp2.setSizeFull();
+        sp.setSecondComponent(sp2);
+        l.addComponent(sp);
+
+        label = new Label(
+                "Small Style<br />(<code>LiferayTheme.SPLITPANEL_SMALL</code>)",
+                Label.CONTENT_XHTML);
+        label.setWidth(null);
+        l.addComponent(label);
+
+        final HorizontalSplitPanel sp3 = new HorizontalSplitPanel();
+        sp3.setStyleName(LiferayTheme.SPLITPANEL_SMALL);
+        sp3.setWidth("100%");
+        sp3.setHeight("100px");
+        final VerticalSplitPanel sp4 = new VerticalSplitPanel();
+        sp4.setStyleName(LiferayTheme.SPLITPANEL_SMALL);
+        sp4.setSizeFull();
+        sp3.setSecondComponent(sp4);
+        l.addComponent(sp3);
+
+        lockCheckBox.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                sp.setLocked(event.getButton().booleanValue());
+                sp2.setLocked(event.getButton().booleanValue());
+                sp3.setLocked(event.getButton().booleanValue());
+                sp4.setLocked(event.getButton().booleanValue());
+            }
+        });
+
+        return l;
+    }
+
+    Layout buildAccordions() {
+        final GridLayout l = new GridLayout(2, 1);
+        l.setCaption("Accordions");
+        l.setMargin(true);
+        l.setSpacing(true);
+        l.setWidth("700px");
+
+        Accordion a = new Accordion();
+        a.setWidth("100%");
+        a.setHeight("170px");
+        l.addComponent(a);
+
+        for (int i = 1; i < 5; i++) {
+            Tab t = a.addTab(new Label(), "Sheet " + i);
+            if (i % 2 == 0) {
+                t.setIcon(ICON_GLOBE);
+            }
+            if (i == 2) {
+                t.setEnabled(false);
+            }
+        }
+
+        return l;
+    }
+
+    Layout buildSliders() {
+        final GridLayout l = new GridLayout(2, 1);
+        l.setCaption("Sliders");
+        l.setMargin(true);
+        l.setSpacing(true);
+        l.setWidth("400px");
+        l.setColumnExpandRatio(0, 1);
+
+        l.addComponent(new Label("Horizontal Slider", Label.CONTENT_XHTML));
+        Slider s = new Slider();
+        s.setWidth("200px");
+        try {
+            s.setValue(50);
+        } catch (ValueOutOfBoundsException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        l.addComponent(s);
+
+        l.addComponent(new Label("Vertical Slider", Label.CONTENT_XHTML));
+        s = new Slider();
+        s.setOrientation(Slider.ORIENTATION_VERTICAL);
+        s.setHeight("200px");
+        try {
+            s.setValue(50);
+        } catch (ValueOutOfBoundsException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        l.addComponent(s);
+
+        return l;
+    }
+
+    Layout buildTrees() {
+        final GridLayout l = new GridLayout(1, 1);
+        l.setMargin(true);
+        l.setCaption("Trees");
+
+        Tree tree = new Tree();
+        l.addComponent(tree);
+        tree.addItem("Item 1");
+        tree.setItemIcon("Item 1", ICON_GLOBE);
+        tree.addItem("Child 1");
+        tree.setItemIcon("Child 1", ICON_GLOBE);
+        tree.setParent("Child 1", "Item 1");
+        tree.addItem("Child 2");
+        tree.setParent("Child 2", "Item 1");
+        tree.addItem("Child 3");
+        tree.setChildrenAllowed("Child 3", false);
+        tree.setItemIcon("Child 3", ICON_GLOBE);
+        tree.setParent("Child 3", "Item 1");
+        tree.addItem("Child 4");
+        tree.setChildrenAllowed("Child 4", false);
+        tree.setParent("Child 4", "Item 1");
+        tree.addItem("Item 2");
+        tree.addItem("Item 3");
+        tree.setItemIcon("Item 3", ICON_GLOBE);
+        tree.setChildrenAllowed("Item 3", false);
+        tree.addItem("Item 4");
+        tree.setChildrenAllowed("Item 4", false);
+
+        tree.addActionHandler(handler);
+
+        return l;
+    }
+
+    Layout buildNotifications() {
+        final GridLayout l = new GridLayout(2, 1);
+        l.setCaption("Notifications");
+        l.setMargin(true);
+        l.setSpacing(true);
+        l.setWidth("400px");
+        l.setColumnExpandRatio(0, 1);
+
+        final TextField title = new TextField("Notification caption");
+        title.setValue("Brown Fox!");
+        final TextField message = new TextField("Notification description");
+        message.setValue("Jumped over the lazy dog.");
+        message.setWidth("15em");
+
+        l.addComponent(new Label("<h3>Type</h3>", Label.CONTENT_XHTML));
+        l.addComponent(new Label("<h3>Preview</h3>", Label.CONTENT_XHTML));
+
+        l.addComponent(new Label("Humanized", Label.CONTENT_XHTML));
+        Button show = new Button("Humanized Notification",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        event.getButton()
+                                .getWindow()
+                                .showNotification((String) title.getValue(),
+                                        (String) message.getValue());
+
+                    }
+                });
+        l.addComponent(show);
+
+        l.addComponent(new Label("Warning", Label.CONTENT_XHTML));
+        show = new Button("Warning Notification", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                event.getButton()
+                        .getWindow()
+                        .showNotification((String) title.getValue(),
+                                (String) message.getValue(),
+                                Notification.TYPE_WARNING_MESSAGE);
+
+            }
+        });
+        l.addComponent(show);
+
+        l.addComponent(new Label("Error", Label.CONTENT_XHTML));
+        show = new Button("Error Notification", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                event.getButton()
+                        .getWindow()
+                        .showNotification((String) title.getValue(),
+                                (String) message.getValue(),
+                                Notification.TYPE_ERROR_MESSAGE);
+
+            }
+        });
+        l.addComponent(show);
+
+        l.addComponent(new Label("Tray", Label.CONTENT_XHTML));
+        show = new Button("Tray Notification", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                event.getButton()
+                        .getWindow()
+                        .showNotification((String) title.getValue(),
+                                (String) message.getValue(),
+                                Notification.TYPE_TRAY_NOTIFICATION);
+
+            }
+        });
+        l.addComponent(show);
+
+        l.addComponent(title);
+        l.addComponent(message);
+
+        return l;
+    }
+
+    Layout buildPopupViews() {
+        final GridLayout l = new GridLayout(1, 1);
+        l.setCaption("PopupViews");
+        l.setMargin(true);
+        l.setSpacing(true);
+        l.setWidth("400px");
+
+        Label content = new Label(
+                "Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
+        content.setWidth("200px");
+
+        PopupView pw = new PopupView("Click me!", content);
+        l.addComponent(pw);
+
+        return l;
+    }
+
+    MenuBar getTopMenu() {
+        MenuBar menubar = new MenuBar();
+        menubar.setWidth("100%");
+        final MenuBar.MenuItem file = menubar.addItem("File", null);
+        final MenuBar.MenuItem newItem = file.addItem("New", null);
+        file.addItem("Open file...", new ThemeResource(
+                "../runo/icons/16/folder.png"), null);
+        file.addSeparator();
+
+        newItem.addItem("File", null);
+        newItem.addItem("Folder", null);
+        newItem.addItem("Project...", null);
+
+        file.addItem("Close", null);
+        file.addItem("Close All", null);
+        file.addSeparator();
+
+        file.addItem("Save", null);
+        file.addItem("Save As...", null);
+        file.addItem("Save All", null);
+
+        final MenuBar.MenuItem edit = menubar.addItem("Edit", null);
+        edit.addItem("Undo", null);
+        edit.addItem("Redo", null).setEnabled(false);
+        edit.addSeparator();
+
+        edit.addItem("Cut", null);
+        edit.addItem("Copy", null);
+        edit.addItem("Paste", null);
+        edit.addSeparator();
+
+        final MenuBar.MenuItem find = edit.addItem("Find/Replace", null);
+
+        find.addItem("Google Search", new Command() {
+            public void menuSelected(MenuItem selectedItem) {
+                getMainWindow().open(
+                        new ExternalResource("http://www.google.com"));
+            }
+        });
+        find.addSeparator();
+        find.addItem("Find/Replace...", null);
+        find.addItem("Find Next", null);
+        find.addItem("Find Previous", null);
+
+        final MenuBar.MenuItem view = menubar.addItem("View",
+                new ThemeResource("../runo/icons/16/user.png"), null);
+        MenuItem statusBarItem = view.addItem("Show/Hide Status Bar", null);
+        statusBarItem.setCheckable(true);
+        statusBarItem.setChecked(true);
+        view.addItem("Customize Toolbar...", null);
+        view.addSeparator();
+
+        view.addItem("Actual Size", null);
+        view.addItem("Zoom In", null);
+        view.addItem("Zoom Out", null);
+
+        menubar.addItem("Help", null).setEnabled(false);
+
+        return menubar;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/integration/fi.gif b/tests/testbench/com/vaadin/tests/integration/fi.gif
new file mode 100755
index 0000000000..8d3a191828
Binary files /dev/null and b/tests/testbench/com/vaadin/tests/integration/fi.gif differ
diff --git a/tests/testbench/com/vaadin/tests/integration/se.gif b/tests/testbench/com/vaadin/tests/integration/se.gif
new file mode 100755
index 0000000000..80f6285228
Binary files /dev/null and b/tests/testbench/com/vaadin/tests/integration/se.gif differ
diff --git a/tests/testbench/com/vaadin/tests/layouts/AbsoluteLayoutAddRemove.java b/tests/testbench/com/vaadin/tests/layouts/AbsoluteLayoutAddRemove.java
new file mode 100644
index 0000000000..6193fd238e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/AbsoluteLayoutAddRemove.java
@@ -0,0 +1,50 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+
+public class AbsoluteLayoutAddRemove extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Tests that addComponent() and removeComponent() works";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2915;
+    }
+
+    @Override
+    protected void setup() {
+        Layout main = getLayout();
+
+        final Label l = new Label("A Label");
+        final AbsoluteLayout al = new AbsoluteLayout();
+        al.setWidth("300px");
+        al.setHeight("200px");
+        main.addComponent(al);
+
+        final Button b = new Button("Add", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                if (l.getParent() == null) {
+                    al.addComponent(l);
+                    event.getButton().setCaption("Remove");
+                } else {
+                    al.removeComponent(l);
+                    event.getButton().setCaption("Add");
+                }
+
+            }
+
+        });
+        main.addComponent(b);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/CaptionsInLayouts.java b/tests/testbench/com/vaadin/tests/layouts/CaptionsInLayouts.java
new file mode 100644
index 0000000000..ec825a3404
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/CaptionsInLayouts.java
@@ -0,0 +1,277 @@
+package com.vaadin.tests.layouts;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.terminal.UserError;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractField;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.NativeButton;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class CaptionsInLayouts extends TestBase {
+
+    private static final Object CAPTION = "CAPTION";
+    private static final Object CLASS = "C";
+    private static final Object WIDTH = "W";
+
+    private NativeSelect layoutSelect;
+    private Layout layout;
+    private VerticalLayout verticalLayout;
+    private HorizontalLayout horizontalLayout;
+    private GridLayout gridLayout;
+    private FormLayout formLayout;
+    private List<AbstractField> components = new ArrayList<AbstractField>();
+    private CssLayout cssLayout;
+    private HorizontalLayout layoutParent = new HorizontalLayout();
+
+    @Override
+    protected void setup() {
+        // setTheme("tests-tickets");
+        addComponent(createLayoutSelect());
+        addComponent(toggleRequired());
+        // addComponent(toggleCaptions());
+        addComponent(toggleError());
+        addComponent(toggleIcon());
+        addComponent(addCaptionText());
+        layoutParent.addComponent(new NativeButton("Button right of layout"));
+        addComponent(layoutParent);
+        addComponent(new NativeButton("Button below layout"));
+        createComponents();
+        layoutSelect.setValue(layoutSelect.getItemIds().iterator().next());
+    }
+
+    private Component addCaptionText() {
+        Button b = new Button("Add caption text");
+        b.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                prependCaptions("a");
+            }
+        });
+        return b;
+    }
+
+    protected void prependCaptions(String prepend) {
+        for (AbstractField c : components) {
+            c.setCaption(prepend + c.getCaption());
+        }
+
+    }
+
+    private Component toggleRequired() {
+        CheckBox requiredToggle = new CheckBox();
+        requiredToggle.setImmediate(true);
+        requiredToggle.setCaption("Required");
+        requiredToggle.addListener(new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                setRequired((Boolean) event.getProperty().getValue());
+            }
+        });
+        return requiredToggle;
+    }
+
+    private Component toggleIcon() {
+        CheckBox iconToggle = new CheckBox();
+        iconToggle.setImmediate(true);
+        iconToggle.setCaption("Icons");
+        iconToggle.addListener(new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                setIcon((Boolean) event.getProperty().getValue());
+            }
+        });
+        return iconToggle;
+    }
+
+    protected void setRequired(boolean value) {
+        for (AbstractField c : components) {
+            c.setRequired(value);
+        }
+
+    }
+
+    protected void setIcon(boolean value) {
+        for (AbstractField c : components) {
+            if (!value) {
+                c.setIcon(null);
+            } else {
+                c.setIcon(new ThemeResource("../runo/icons/16/ok.png"));
+            }
+        }
+
+    }
+
+    private Component toggleError() {
+        CheckBox errorToggle = new CheckBox();
+        errorToggle.setImmediate(true);
+        errorToggle.setCaption("Error");
+        errorToggle.addListener(new ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                setError((Boolean) event.getProperty().getValue());
+            }
+        });
+        return errorToggle;
+    }
+
+    protected void setError(boolean value) {
+        for (AbstractField c : components) {
+            if (value) {
+                c.setComponentError(new UserError("error"));
+            } else {
+                c.setComponentError(null);
+
+            }
+        }
+
+    }
+
+    private void createComponents() {
+        TextField tfUndefWide = new TextField(
+                "Undefined wide text field with a very long caption, longer than the field and the layout. Lorem ipsum dolor sit amet.");
+        TextField tf100pxWide = new TextField(
+                "100 px wide text field with a very long caption, longer than 100px.");
+        tf100pxWide.setWidth("100px");
+
+        TextField tf500pxWide = new TextField(
+                "500 px wide text field with a very long caption, longer than 500px. Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
+        tf500pxWide.setWidth("500px");
+
+        components.add(tfUndefWide);
+        components.add(tf100pxWide);
+        components.add(tf500pxWide);
+
+    }
+
+    private void setLayout(Layout newLayout) {
+        if (layout == null) {
+            layoutParent.addComponent(newLayout, 0);
+        } else {
+            layoutParent.replaceComponent(layout, newLayout);
+        }
+        layout = newLayout;
+
+        for (Component c : components) {
+            if (c.getParent() != layout) {
+                layout.addComponent(c);
+            }
+        }
+
+    }
+
+    private Layout getLayout(String caption,
+            Class<? extends Layout> layoutClass, String width) {
+        Layout l;
+        if (layoutClass == VerticalLayout.class) {
+            if (verticalLayout == null) {
+                verticalLayout = new VerticalLayout();
+                verticalLayout.setStyleName("borders");
+            }
+            l = verticalLayout;
+        } else if (layoutClass == HorizontalLayout.class) {
+            if (horizontalLayout == null) {
+                horizontalLayout = new HorizontalLayout();
+                horizontalLayout.setStyleName("borders");
+            }
+            l = horizontalLayout;
+        } else if (layoutClass == GridLayout.class) {
+            if (gridLayout == null) {
+                gridLayout = new GridLayout();
+                gridLayout.setStyleName("borders");
+            }
+            l = gridLayout;
+        } else if (layoutClass == CssLayout.class) {
+            if (cssLayout == null) {
+                cssLayout = new CssLayout();
+                cssLayout.setStyleName("borders");
+            }
+            l = cssLayout;
+        } else if (layoutClass == FormLayout.class) {
+            if (formLayout == null) {
+                formLayout = new FormLayout();
+                formLayout.setStyleName("borders");
+            }
+            l = formLayout;
+        } else {
+            return null;
+        }
+
+        l.setCaption(caption);
+        if (width.equals("auto")) {
+            width = null;
+        }
+
+        l.setWidth(width);
+
+        // addComponent(l);
+
+        return l;
+    }
+
+    private Component createLayoutSelect() {
+        layoutSelect = new NativeSelect("Layout");
+        layoutSelect.addContainerProperty(CAPTION, String.class, "");
+        layoutSelect.addContainerProperty(CLASS, Class.class, "");
+        layoutSelect.addContainerProperty(WIDTH, String.class, "");
+        layoutSelect.setItemCaptionPropertyId(CAPTION);
+        layoutSelect.setNullSelectionAllowed(false);
+
+        for (Class<?> cls : new Class[] { HorizontalLayout.class,
+                VerticalLayout.class, GridLayout.class, CssLayout.class,
+                FormLayout.class }) {
+            for (String width : new String[] { "400px", "auto" }) {
+                Object id = layoutSelect.addItem();
+                Item i = layoutSelect.getItem(id);
+                i.getItemProperty(CAPTION).setValue(
+                        cls.getSimpleName() + ", " + width);
+                i.getItemProperty(CLASS).setValue(cls);
+                i.getItemProperty(WIDTH).setValue(width);
+            }
+
+        }
+        layoutSelect.setImmediate(true);
+        layoutSelect.addListener(new ValueChangeListener() {
+
+            @SuppressWarnings("unchecked")
+            public void valueChange(ValueChangeEvent event) {
+                Item i = layoutSelect.getItem(event.getProperty().getValue());
+
+                setLayout(getLayout((String) i.getItemProperty(CAPTION)
+                        .getValue(), (Class<? extends Layout>) i
+                        .getItemProperty(CLASS).getValue(), (String) i
+                        .getItemProperty(WIDTH).getValue()));
+            }
+        });
+
+        return layoutSelect;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Tests what happens when the caption changes in various layouts. Behavior should be consistent.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5424;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/ComplexGLColumnExpansionWithColSpan.html b/tests/testbench/com/vaadin/tests/layouts/ComplexGLColumnExpansionWithColSpan.html
new file mode 100644
index 0000000000..403bb32a67
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/ComplexGLColumnExpansionWithColSpan.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>ComplexGLColumnExpansionWithColSpan</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ComplexGLColumnExpansionWithColSpan</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.layouts.ComplexGLColumnExpansionWithColSpan?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsComplexGLColumnExpansionWithColSpan::/VVerticalLayout[0]/ChildComponentContainer[0]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>buttons-next-stacked-left</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/layouts/ComplexGLColumnExpansionWithColSpan.java b/tests/testbench/com/vaadin/tests/layouts/ComplexGLColumnExpansionWithColSpan.java
new file mode 100644
index 0000000000..87b04ffcb0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/ComplexGLColumnExpansionWithColSpan.java
@@ -0,0 +1,80 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class ComplexGLColumnExpansionWithColSpan extends AbstractTestCase {
+    private int cols;
+
+    @Override
+    protected String getDescription() {
+        return "Buttons should stay stacked on left when clicking new button";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5227;
+    }
+
+    @Override
+    public void init() {
+        final VerticalLayout mainLayout = new VerticalLayout();
+
+        mainLayout.setSpacing(true);
+        mainLayout.setMargin(true);
+        mainLayout.setHeight(100, Sizeable.UNITS_PERCENTAGE);
+        mainLayout.setWidth(100, Sizeable.UNITS_PERCENTAGE);
+        setMainWindow(new Window("Vaadin Test", mainLayout));
+
+        cols = 1;
+        final GridLayout gl = new GridLayout(cols, 3);
+        gl.setWidth("1000px");
+        // textfield spreads across all cols
+        final TextField textfield = new TextField();
+        textfield.setWidth(100, Sizeable.UNITS_PERCENTAGE);
+        Button b1 = new Button("new button");
+        Button b2 = new Button("nothing");
+        gl.addComponent(textfield, 0, 0);
+        gl.addComponent(b1, 0, 1);
+        gl.addComponent(b2, 0, 2);
+        b1.setWidth(270, Sizeable.UNITS_PIXELS);
+        b2.setWidth(270, Sizeable.UNITS_PIXELS);
+        b1.addListener(new Button.ClickListener() {
+            public void buttonClick(Button.ClickEvent event) {
+                cols++;
+                gl.setColumns(cols);
+                Button b1 = new Button("new button" + cols);
+                Button b2 = new Button("nothing" + cols);
+                gl.addComponent(b1, cols - 1, 1);
+                gl.addComponent(b2, cols - 1, 2);
+                b1.setWidth(270, Sizeable.UNITS_PIXELS);
+                b2.setWidth(270, Sizeable.UNITS_PIXELS);
+                // adjust expand ratios...
+                if (cols > 0) {
+                    // next to last colum 0, last column 100
+                    gl.setColumnExpandRatio(cols - 2, 0);
+                    gl.setColumnExpandRatio(cols - 1, 100);
+                }
+                gl.removeComponent(textfield);
+                gl.addComponent(textfield, 0, 0, cols - 1, 0);
+            }
+        });
+        gl.setSizeFull();
+        mainLayout.addComponent(gl);
+        mainLayout.setExpandRatio(gl, 100);
+        Button restart = new Button("restart");
+        mainLayout.addComponent(restart);
+        restart.addListener(new Button.ClickListener() {
+            public void buttonClick(Button.ClickEvent event) {
+                mainLayout.getWindow().getApplication().close();
+            }
+        });
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/CssLayoutRemoveComponent.html b/tests/testbench/com/vaadin/tests/layouts/CssLayoutRemoveComponent.html
new file mode 100644
index 0000000000..0c4c3ad12c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/CssLayoutRemoveComponent.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>CssLayoutRemoveComponent</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">CssLayoutRemoveComponent</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.layouts.CssLayoutRemoveComponent?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsCssLayoutRemoveComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>Caption2</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextNotPresent</td>
+	<td>Caption1</td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/layouts/CssLayoutRemoveComponent.java b/tests/testbench/com/vaadin/tests/layouts/CssLayoutRemoveComponent.java
new file mode 100644
index 0000000000..4959e0cc3e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/CssLayoutRemoveComponent.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.TextField;
+
+@SuppressWarnings("serial")
+public class CssLayoutRemoveComponent extends TestBase {
+
+    @Override
+    protected void setup() {
+        final CssLayout layout = new CssLayout();
+        final TextField tf = new TextField("Caption1");
+        Button b = new Button("Remove field ", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                layout.removeComponent(tf);
+            }
+
+        });
+        layout.addComponent(tf);
+        layout.addComponent(b);
+        layout.addComponent(new TextField("Caption2"));
+        layout.addComponent(new TextField("Caption3"));
+
+        addComponent(layout);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Clicking on the button should remove one text field but other textfields and their captions should stay intact.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5778;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/CssLayoutRemoveComponentWithCaption.java b/tests/testbench/com/vaadin/tests/layouts/CssLayoutRemoveComponentWithCaption.java
new file mode 100644
index 0000000000..946e778ead
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/CssLayoutRemoveComponentWithCaption.java
@@ -0,0 +1,41 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.TextField;
+
+public class CssLayoutRemoveComponentWithCaption extends TestBase {
+
+    @Override
+    protected void setup() {
+        final CssLayout layout = new CssLayout();
+        final TextField tf = new TextField("Caption");
+        Button b = new Button("Remove field and add new", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                layout.removeComponent(tf);
+                addComponent(new TextField("new field"));
+
+            }
+
+        });
+        layout.addComponent(tf);
+        layout.addComponent(b);
+
+        addComponent(layout);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Clicking on the button should remove the text field and add a new 'new field' text field";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4204;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/CssLayoutSizeChangePropagation.java b/tests/testbench/com/vaadin/tests/layouts/CssLayoutSizeChangePropagation.java
new file mode 100644
index 0000000000..0be605c795
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/CssLayoutSizeChangePropagation.java
@@ -0,0 +1,61 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+public class CssLayoutSizeChangePropagation extends TestBase {
+
+    @Override
+    protected void setup() {
+        getLayout().setSizeFull();
+        final VerticalLayout sp = new VerticalLayout();
+
+        sp.setHeight("100%");
+
+        final CssLayout cssLayout = new CssLayout() {
+            @Override
+            protected String getCss(Component c) {
+                return "background-color: yellow;";
+            }
+        };
+        cssLayout.setSizeFull();
+        Label l = new Label("bö");
+        l.setSizeFull();
+        cssLayout.addComponent(l);
+
+        sp.addComponent(cssLayout);
+
+        Button button = new Button("b");
+        button.addListener(new ClickListener() {
+            boolean bool = true;
+
+            public void buttonClick(ClickEvent event) {
+                sp.setExpandRatio(cssLayout, bool ? 1 : 0);
+                bool = !bool;
+            }
+        });
+
+        sp.addComponent(button);
+        sp.setExpandRatio(button, 1);
+
+        getLayout().addComponent(sp);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Upper part of view should become yellow on button click.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4351;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/DeepComponentTrees.java b/tests/testbench/com/vaadin/tests/layouts/DeepComponentTrees.java
new file mode 100644
index 0000000000..3a6414cff5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/DeepComponentTrees.java
@@ -0,0 +1,114 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+
+public class DeepComponentTrees extends TestBase {
+
+    private Panel root;
+
+    @Override
+    protected String getDescription() {
+        return "Vaadin should not choke on deep component trees. 15 levels should be minimum to survive.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+    private int i = 0;
+    private Class<?> currentValue = VerticalLayout.class;
+
+    @Override
+    protected void setup() {
+        Layout main = getLayout();
+        main.setSizeUndefined();
+        getMainWindow().getContent().setHeight(null);
+
+        Label l = new Label(
+                "This is a nice game to guess how many Layouts your FF2 (or any other browser) can deal with. Due to the worldwide attempt to decrease energy consumption, playing this game is only allowed above 60° longitude betwheen August and May (as excess energy consumed by you CPU is used to heat your room). It is considered wise to save all your work before starting the game.");
+
+        root = new Panel("Test box");
+        root.setWidth("600px");
+        root.setHeight("200px");
+        final Button b = new Button("Go try your luck with " + i + " layouts!");
+        b.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                FF2KILLER(i++);
+                b.setCaption("Go try your luck with " + i + " layouts!");
+            }
+
+        });
+
+        final ComboBox s = new ComboBox("Restart game with select:");
+        s.setNullSelectionAllowed(false);
+        s.addItem("-- Choose value --");
+        s.setValue("-- Choose value --");
+        s.addItem(VerticalLayout.class);
+        s.addItem(HorizontalLayout.class);
+        s.addItem(GridLayout.class);
+        s.addListener(new ComboBox.ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                Object value = s.getValue();
+                if (!value.equals("-- Choose value --")) {
+                    currentValue = (Class<?>) value;
+                    i = 0;
+                    s.setValue("-- Choose value --");
+                    b.setCaption("Go try your luck with " + i + " layouts!");
+                }
+
+            }
+        });
+        s.setImmediate(true);
+
+        main.addComponent(l);
+        main.addComponent(b);
+        main.addComponent(s);
+        main.addComponent(root);
+
+    }
+
+    private void FF2KILLER(int layouts) {
+        Layout layout = getTestLayout();
+        Layout r = layout;
+        for (int i = 0; i < layouts; i++) {
+            Layout lo = getTestLayout();
+            layout.addComponent(lo);
+            layout = lo;
+        }
+        layout.addComponent(new Label(
+                "FF did it! Vaadin, Mozilla and you win! Dare to try again?"));
+        root.setContent(r);
+    }
+
+    Layout getTestLayout() {
+        Layout l = new VerticalLayout();
+        if (currentValue == GridLayout.class) {
+            l = new GridLayout(1, 1);
+        } else {
+            try {
+                l = (Layout) currentValue.newInstance();
+            } catch (InstantiationException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            } catch (IllegalAccessException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+        }
+        return l;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/FormLayoutWithInvisibleComponent.java b/tests/testbench/com/vaadin/tests/layouts/FormLayoutWithInvisibleComponent.java
new file mode 100644
index 0000000000..e29c7559b3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/FormLayoutWithInvisibleComponent.java
@@ -0,0 +1,49 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.TextField;
+
+public class FormLayoutWithInvisibleComponent extends TestBase {
+
+    private TextField messages;
+
+    @Override
+    protected String getDescription() {
+        return "There is an initial invisible text field below the checkbox. Checking the checkbox should show the field as a textarea (40x10) and also show its caption(\"Messages visible\") and a required error (*).";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2706;
+    }
+
+    @Override
+    protected void setup() {
+        FormLayout formLayout = new FormLayout();
+        CheckBox control = new CheckBox("Messages On/Off",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        messages.setVisible(event.getButton().booleanValue());
+                        messages.setRequired(true);
+                        messages.setCaption("Messages visible");
+                    }
+
+                });
+        control.setImmediate(true);
+        formLayout.addComponent(control);
+
+        messages = new TextField("Messages hidden");
+        messages.setRows(10);
+        messages.setColumns(40);
+        messages.setVisible(false);
+        messages.setEnabled(false);
+        formLayout.addComponent(messages);
+
+        addComponent(formLayout);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/GridLayoutCaptions.java b/tests/testbench/com/vaadin/tests/layouts/GridLayoutCaptions.java
new file mode 100644
index 0000000000..08df953e66
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/GridLayoutCaptions.java
@@ -0,0 +1,221 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Validator;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.DefaultFieldFactory;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.FormFieldFactory;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class GridLayoutCaptions extends TestBase {
+
+    class CustomForm extends Form {
+        private com.vaadin.ui.GridLayout layout;
+
+        private VerticalLayout wrapper = new VerticalLayout();
+        private CssLayout wrapper2 = new CssLayout();
+
+        private FormFieldFactory fff = new FormFieldFactory() {
+            public Field createField(Item item, Object propertyId,
+                    Component uiContext) {
+
+                if (propertyId.equals(DataPOJO.Fields.name.name())) {
+                    Field f = DefaultFieldFactory.get().createField(item,
+                            propertyId, uiContext);
+                    f.setCaption("This is a long caption for the name field");
+                    return f;
+
+                } else if (propertyId.equals(DataPOJO.Fields.hp.name())) {
+                    Field f = DefaultFieldFactory.get().createField(item,
+                            propertyId, uiContext);
+                    f.setCaption("This is a long caption for the HP field, but it has a VL as a wrapper");
+
+                    return f;
+
+                } else if (propertyId.equals(DataPOJO.Fields.place.name())) {
+                    Field f = DefaultFieldFactory.get().createField(item,
+                            propertyId, uiContext);
+                    f.setCaption("This is a long caption for the Place field, but it has a CSSLo as a wrapper");
+
+                    return f;
+
+                } else if (propertyId.equals(DataPOJO.Fields.price.name())) {
+                    Field f = DefaultFieldFactory.get().createField(item,
+                            propertyId, uiContext);
+                    f.setCaption("With size undefined the caption behaves like this...");
+                    f.setSizeFull();
+
+                    return f;
+
+                } else {
+                    return DefaultFieldFactory.get().createField(item,
+                            propertyId, uiContext);
+                }
+            }
+        };
+
+        public CustomForm() {
+            super();
+            layout = new GridLayout(3, 3);
+            layout.addComponent(wrapper, 1, 0);
+            layout.addComponent(wrapper2, 2, 0);
+            layout.setSpacing(true);
+
+            setLayout(layout);
+            setFormFieldFactory(fff);
+
+            Label l = new Label("A label with caption");
+            l.setCaption("A really long caption that is clipped");
+
+            layout.addComponent(l, 0, 2);
+
+            Label l2 = new Label("A wrapped label with caption");
+            l2.setCaption("A really long caption that is not clipped");
+
+            VerticalLayout vl = new VerticalLayout();
+            vl.addComponent(l2);
+
+            layout.addComponent(vl, 1, 2);
+
+        }
+
+        public void createErrors() {
+            Validator.InvalidValueException ive = new Validator.InvalidValueException(
+                    "Ipsum lipsum laarum lop... ");
+
+            for (Object propIDs : getItemDataSource().getItemPropertyIds()) {
+                ((TextField) getField(propIDs)).setComponentError(ive);
+
+            }
+
+        }
+
+        public void clearErrors() {
+            for (Object propIDs : getItemDataSource().getItemPropertyIds()) {
+                ((TextField) getField(propIDs)).setComponentError(null);
+
+            }
+        }
+
+        @Override
+        protected void attachField(Object propertyId, Field field) {
+
+            if (propertyId.equals(DataPOJO.Fields.name.name())) {
+                layout.addComponent(field, 0, 0);
+
+            } else if (propertyId.equals(DataPOJO.Fields.hp.name())) {
+                wrapper.removeAllComponents();
+                wrapper.addComponent(field);
+            } else if (propertyId.equals(DataPOJO.Fields.place.name())) {
+                wrapper2.removeAllComponents();
+                wrapper2.addComponent(field);
+            } else if (propertyId.equals(DataPOJO.Fields.price.name())) {
+                layout.addComponent(field, 0, 1);
+            }
+
+        }
+    }
+
+    public static class DataPOJO {
+
+        public enum Fields {
+            name, price, hp, place;
+        }
+
+        private String name;
+        private int price;
+        private String hp;
+        private String place;
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getPrice() {
+            return price;
+        }
+
+        public void setPrice(int price) {
+            this.price = price;
+        }
+
+        public String getHp() {
+            return hp;
+        }
+
+        public void setHp(String hp) {
+            this.hp = hp;
+        }
+
+        public String getPlace() {
+            return place;
+        }
+
+        public void setPlace(String place) {
+            this.place = place;
+        }
+
+    }
+
+    @Override
+    protected void setup() {
+        Window mainWindow = new Window("Formlayoutcaptionboom Application");
+        Label label = new Label("Hello Vaadin user");
+        mainWindow.addComponent(label);
+        setMainWindow(mainWindow);
+
+        DataPOJO forDemo = new DataPOJO();
+
+        BeanItem<DataPOJO> bi = new BeanItem<DataPOJO>(forDemo);
+
+        final CustomForm aFormWithGl = new CustomForm();
+
+        aFormWithGl.setItemDataSource(bi);
+
+        mainWindow.addComponent(aFormWithGl);
+
+        Button b = new Button("Give me an error!", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                aFormWithGl.createErrors();
+
+            }
+        });
+        mainWindow.addComponent(b);
+
+        Button b2 = new Button("Get rid of an error!",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        aFormWithGl.clearErrors();
+
+                    }
+                });
+        mainWindow.addComponent(b2);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Captions in Gridlayout behaves differently than in other layouts";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5424;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/GridLayoutExpandRatioModification.java b/tests/testbench/com/vaadin/tests/layouts/GridLayoutExpandRatioModification.java
new file mode 100644
index 0000000000..e9d206009a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/GridLayoutExpandRatioModification.java
@@ -0,0 +1,83 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class GridLayoutExpandRatioModification extends TestBase implements
+        ClickListener {
+
+    private boolean isVisible = false;
+    private GridLayout mainLayout;
+    private VerticalLayout vl1;
+    private VerticalLayout vl2;
+    private Button button;
+
+    @Override
+    public void setup() {
+        Window main = new Window("The Main Window");
+        mainLayout = new GridLayout(3, 3);
+        main.setContent(mainLayout);
+        setMainWindow(main);
+
+        // The upper layout
+        vl1 = new VerticalLayout();
+        Label label1 = new Label("The upper/left layout");
+        vl1.addComponent(label1);
+
+        // Button that hides or shows the bottom part
+        button = new Button("show / hide", this);
+
+        // The bottom layout
+        vl2 = new VerticalLayout();
+        TextField tf = new TextField("The bottom/right field");
+        tf.setHeight("100%");
+        tf.setWidth("100%");
+        vl2.addComponent(tf);
+
+        // Add everything to the view
+        mainLayout.addComponent(vl1, 0, 0);
+        mainLayout.addComponent(button, 1, 1);
+        mainLayout.addComponent(vl2, 2, 2);
+
+        // Set expand ratios, hide lower
+        mainLayout.setRowExpandRatio(0, 1);
+        mainLayout.setColumnExpandRatio(0, 1);
+        mainLayout.setRowExpandRatio(2, 0);
+        mainLayout.setColumnExpandRatio(2, 0);
+
+        // Maximize everything
+        main.setSizeFull();
+        mainLayout.setSizeFull();
+        vl1.setSizeFull();
+        vl2.setSizeFull();
+    }
+
+    public void buttonClick(ClickEvent event) {
+        if (isVisible) {
+            mainLayout.setRowExpandRatio(2, 0);
+            mainLayout.setColumnExpandRatio(2, 0);
+            isVisible = false;
+        } else {
+            mainLayout.setRowExpandRatio(2, 1);
+            mainLayout.setColumnExpandRatio(2, 1);
+            isVisible = true;
+        }
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Changing the expand ratio should repaint the layout correctly. Changing from 0 to something else should render the previously invisible component";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2454;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/GridLayoutInsidePanel.java b/tests/testbench/com/vaadin/tests/layouts/GridLayoutInsidePanel.java
new file mode 100644
index 0000000000..1c864fdb47
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/GridLayoutInsidePanel.java
@@ -0,0 +1,52 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Panel;
+
+public class GridLayoutInsidePanel extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "The first Panel contains a VerticalLayout, which contains a GridLayout, which contains a Label. The second panel directly contains a GridLayout, which contains a Label. Both should be rendered in the same way.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2652;
+    }
+
+    @Override
+    protected void setup() {
+        {
+            GridLayout gl = new GridLayout(1, 1);
+            gl.setSizeUndefined();
+            gl.addComponent(new Label(
+                    "A label which defines the size of the GL"));
+
+            Panel p = new Panel("Panel 1");
+            ((Layout) p.getContent()).setMargin(false);
+            p.setSizeUndefined();
+            p.getContent().setSizeUndefined();
+
+            p.addComponent(gl);
+            addComponent(p);
+        }
+        {
+            GridLayout gl = new GridLayout(1, 1);
+            gl.setSizeUndefined();
+            gl.addComponent(new Label(
+                    "A label which defines the size of the GL"));
+
+            Panel p = new Panel("Panel 2", gl);
+            ((Layout) p.getContent()).setMargin(false);
+            p.setSizeUndefined();
+            p.getContent().setSizeUndefined();
+
+            addComponent(p);
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/GridLayoutInsidePanel2.java b/tests/testbench/com/vaadin/tests/layouts/GridLayoutInsidePanel2.java
new file mode 100644
index 0000000000..8fb42948fc
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/GridLayoutInsidePanel2.java
@@ -0,0 +1,28 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.Application;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Window;
+
+public class GridLayoutInsidePanel2 extends Application {
+
+    private Layout layout;
+
+    @Override
+    public void init() {
+        Window w = new Window("Main");
+        setMainWindow(w);
+        layout = (Layout) w.getContent();
+        GridLayout gl = new GridLayout(1, 1);
+        gl.setSizeUndefined();
+        Label l = new Label("This should be visible");
+        l.setWidth("100px");
+        gl.addComponent(l);
+
+        layout.setSizeUndefined();
+        layout.addComponent(gl);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/GridLayoutMoveComponent.html b/tests/testbench/com/vaadin/tests/layouts/GridLayoutMoveComponent.html
new file mode 100644
index 0000000000..cde4341030
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/GridLayoutMoveComponent.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.layouts.GridLayoutMoveComponent?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>all-left</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsGridLayoutMoveComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>label-right</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsGridLayoutMoveComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>label-button-right</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsGridLayoutMoveComponent::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>label-button-textfield-right</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/layouts/GridLayoutMoveComponent.java b/tests/testbench/com/vaadin/tests/layouts/GridLayoutMoveComponent.java
new file mode 100644
index 0000000000..265187e878
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/GridLayoutMoveComponent.java
@@ -0,0 +1,66 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+
+public class GridLayoutMoveComponent extends TestBase {
+
+    @Override
+    protected void setup() {
+        final GridLayout grid = new GridLayout(2, 3);
+        grid.setCaption("Fixed size grid");
+        grid.setWidth("300px");
+        grid.setHeight("100px");
+        addComponent(grid);
+
+        final Label l = new Label("100% label");
+        final Button b = new Button("100px button");
+        b.setWidth("100px");
+        final TextField tf = new TextField("Undef textfield");
+
+        // Adding component to grid
+        grid.addComponent(l, 0, 0);
+        grid.addComponent(b, 0, 1);
+        grid.addComponent(tf, 0, 2);
+
+        addComponent(new Button("Shift label right",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        // Moving component from 0,0 -> 1,0
+                        grid.removeComponent(l);
+                        grid.addComponent(l, 1, 0);
+                    }
+                }));
+
+        addComponent(new Button("Shift button right",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        grid.removeComponent(b);
+                        grid.addComponent(b, 1, 1);
+                    }
+                }));
+
+        addComponent(new Button("Shift text field right",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        grid.removeComponent(tf);
+                        grid.addComponent(tf, 1, 2);
+                    }
+                }));
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Click the buttons below the GridLayout to move the components to the right. Should definitely work no matter what.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5525;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/GridLayoutNPE.java b/tests/testbench/com/vaadin/tests/layouts/GridLayoutNPE.java
new file mode 100644
index 0000000000..48ecb5832a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/GridLayoutNPE.java
@@ -0,0 +1,72 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+public class GridLayoutNPE extends TestBase {
+
+    @Override
+    protected void setup() {
+        final VerticalLayout lo = new VerticalLayout();
+
+        final GridLayout gl = new GridLayout(2, 1);
+        gl.setSpacing(true);
+
+        final Label toRemove = new Label("First");
+        gl.addComponent(toRemove);
+        final Label toEdit = new Label("Second");
+        gl.addComponent(toEdit);
+
+        final Button b = new Button("remove 'First'");
+        final Button b2 = new Button("edit 'Second'");
+        b2.setVisible(false);
+
+        lo.addComponent(gl);
+        lo.addComponent(b);
+        lo.addComponent(b2);
+
+        b.addListener(new Button.ClickListener() {
+
+            public void buttonClick(Button.ClickEvent event) {
+                gl.removeComponent(toRemove);
+
+                // move another component to where the first was removed
+                // before rendering to the client
+                gl.removeComponent(toEdit);
+                // this could also be the result of removeAllComponents()
+                // followed by a loop of addComponent(c)
+                gl.addComponent(toEdit, 0, 0);
+
+                b.setVisible(false);
+                b2.setVisible(true);
+
+            }
+
+        });
+
+        b2.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                toEdit.setValue("Second (edited)");
+            }
+
+        });
+
+        addComponent(lo);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "VGridLayout throws an NPE, causing client side to crash";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4019;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/GridLayoutRemoveFinalRow.java b/tests/testbench/com/vaadin/tests/layouts/GridLayoutRemoveFinalRow.java
new file mode 100644
index 0000000000..8689503332
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/GridLayoutRemoveFinalRow.java
@@ -0,0 +1,46 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+
+/**
+ * Tests removing rows from a GridLayout
+ */
+@SuppressWarnings("serial")
+public class GridLayoutRemoveFinalRow extends TestBase {
+
+    @Override
+    protected void setup() {
+        getLayout().setSpacing(true);
+
+        final GridLayout layout = new GridLayout(2, 2);
+        layout.setSpacing(true);
+        layout.addComponent(new Label("Label1"));
+        layout.addComponent(new Label("Label2"));
+        layout.addComponent(new Label("Label3"));
+        layout.addComponent(new Label("Label4"));
+        addComponent(layout);
+
+        Button removeRowBtn = new Button("Remove row",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        layout.removeRow(0);
+                    }
+                });
+        addComponent(removeRowBtn);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Removing last row of a GridLayout throws a IllegalArgumentException";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4542;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/GridLayoutSpanExpansion.html b/tests/testbench/com/vaadin/tests/layouts/GridLayoutSpanExpansion.html
new file mode 100644
index 0000000000..5237d5f49e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/GridLayoutSpanExpansion.html
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.layouts.GridLayoutSpanExpansion?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/layouts/GridLayoutSpanExpansion.java b/tests/testbench/com/vaadin/tests/layouts/GridLayoutSpanExpansion.java
new file mode 100644
index 0000000000..9753526a9e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/GridLayoutSpanExpansion.java
@@ -0,0 +1,67 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+
+public class GridLayoutSpanExpansion extends TestBase {
+
+    @Override
+    protected void setup() {
+        GridLayout heightSpan = new GridLayout(2, 2);
+        heightSpan.setHeight("200px");
+        heightSpan.setWidth("200px");
+        heightSpan.addComponent(new Label("1"), 0, 0);
+        heightSpan.addComponent(new Label("2"), 0, 1);
+        heightSpan.addComponent(new Label(
+                "This is a somewhat long text that spans over a few lines."),
+                1, 0, 1, 1);
+        heightSpan.setRowExpandRatio(1, 1);
+        addComponent(heightSpan);
+
+        GridLayout widthSpan = new GridLayout(2, 2);
+        widthSpan.setHeight("100px");
+        widthSpan.setWidth("200px");
+        widthSpan.addComponent(new Label(
+                "This is a somewhat long text that spans over both columns."),
+                0, 0, 1, 0);
+        Label label1 = new Label("1");
+        label1.setSizeUndefined();
+        widthSpan.addComponent(label1, 0, 1);
+        widthSpan.addComponent(new Label("2"), 1, 1);
+        widthSpan.setColumnExpandRatio(1, 1);
+        addComponent(widthSpan);
+
+        GridLayout multipleSpans = new GridLayout(3, 3);
+        multipleSpans.setWidth("400px");
+        multipleSpans.addComponent(new Button("Button 0,0"), 0, 0);
+        multipleSpans.addComponent(new Button("Button 1,0"), 1, 0);
+        multipleSpans.addComponent(
+                makeWideButton("A wide spanning button at 0,1"), 0, 1, 1, 1);
+        multipleSpans.addComponent(
+                makeWideButton("Another wide spanning button at 1,2"), 1, 2, 2,
+                2);
+        multipleSpans.setColumnExpandRatio(0, 1);
+        multipleSpans.setColumnExpandRatio(1, 3);
+        multipleSpans.setColumnExpandRatio(2, 2);
+        addComponent(multipleSpans);
+    }
+
+    private static Button makeWideButton(String caption) {
+        Button wideButton = new Button(caption);
+        wideButton.setWidth("100%");
+        return wideButton;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "In the two first examples, the 1 and the 2 should be close to each other because of the expansion ratios. In the final example, there should be little extra space in the left column, much extra space in the middle and some extra space to the right";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return Integer.valueOf(5868);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/GridLayoutWidthChange.html b/tests/testbench/com/vaadin/tests/layouts/GridLayoutWidthChange.html
new file mode 100644
index 0000000000..aaad92e56d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/GridLayoutWidthChange.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>GridLayoutWidthChange</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">GridLayoutWidthChange</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.layouts.GridLayoutWidthChange</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsGridLayoutWidthChange::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/layouts/GridLayoutWidthChange.java b/tests/testbench/com/vaadin/tests/layouts/GridLayoutWidthChange.java
new file mode 100644
index 0000000000..08bef51163
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/GridLayoutWidthChange.java
@@ -0,0 +1,64 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.NativeButton;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class GridLayoutWidthChange extends TestBase {
+
+    private GridLayout generateLayout() {
+        VerticalLayout fields1 = new VerticalLayout();
+
+        NativeButton nb = new NativeButton("A button");
+        nb.setHeight("300px");
+        fields1.addComponent(nb);
+
+        VerticalLayout fields3 = new VerticalLayout();
+        fields3.addComponent(new TextField("field14"));
+
+        NativeButton b = new NativeButton("A big button");
+        b.setWidth("200px");
+        b.setHeight("200px");
+
+        GridLayout layout = new GridLayout(3, 2);
+        layout.setWidth("100%");
+        layout.addComponent(fields1, 0, 0, 0, 1);
+        layout.addComponent(b, 2, 1);
+
+        return layout;
+    }
+
+    @Override
+    protected void setup() {
+        final GridLayout layout1 = generateLayout();
+        final CustomComponent cc = new CustomComponent(layout1);
+        cc.setWidth("500px");
+        addComponent(cc);
+
+        Button testButton = new Button("Reduce GridLayout parent width",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        cc.setWidth((cc.getWidth() - 10) + "px");
+                    }
+
+                });
+        addComponent(testButton);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A 100% wide GridLayout is wrapped inside a CustomComponent. When the width of the CustomComponent is reduced, the size of the GridLayout should be reduced accordingly. The Buttons should stay in place vertically and just move closer to each other horizontally.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/HiddenHorizontalLayout.java b/tests/testbench/com/vaadin/tests/layouts/HiddenHorizontalLayout.java
new file mode 100644
index 0000000000..50cf41f095
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/HiddenHorizontalLayout.java
@@ -0,0 +1,57 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+public class HiddenHorizontalLayout extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Test to verify that toggling layout visibility works properly.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3183;
+    }
+
+    @Override
+    public void setup() {
+
+        VerticalLayout vl = new VerticalLayout();
+        vl.setSizeFull();
+        getLayout().addComponent(vl);
+
+        final HorizontalLayout hl = new HorizontalLayout();
+        hl.setWidth("100%");
+        hl.setHeight("30px");
+        hl.addComponent(new Label("label1"));
+        hl.addComponent(new Label("label2"));
+        hl.addComponent(new Label("label3"));
+        hl.addComponent(new Label("label4"));
+        vl.addComponent(hl);
+
+        Label l = new Label("Steps to reproduce with Vaadin 6.0.1:<br/>"
+                + "1. set browser size smaller than fullscreen<br/>"
+                + "2. Refresh page with browser<br/>"
+                + "3. Click \"toggle layout visibility\"<br>"
+                + "4. Resize browser window to full <br/>"
+                + "5. Click \"toggle layout visibility\"<br/>",
+                Label.CONTENT_XHTML);
+        vl.addComponent(l);
+        Button b = new Button("toggle layout visibility",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        hl.setVisible(!hl.isVisible());
+                    }
+
+                });
+        vl.addComponent(b);
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/layouts/MovingComponentsWhileOldParentInvisible.html b/tests/testbench/com/vaadin/tests/layouts/MovingComponentsWhileOldParentInvisible.html
new file mode 100644
index 0000000000..22d81ce11f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/MovingComponentsWhileOldParentInvisible.html
@@ -0,0 +1,514 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>MovingComponentsWhileOldParentInvisible</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">MovingComponentsWhileOldParentInvisible</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.layouts.MovingComponentsWhileOldParentInvisible?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VAbsoluteLayout[0]/VAbsoluteLayout$AbsoluteWrapper[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>Label outside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VAbsoluteLayout[0]/VAbsoluteLayout$AbsoluteWrapper[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<!--Next component container-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
+	<td>10,14</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
+	<td>199,6</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VAccordion[0]/VAccordion$StackItem[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>Label outside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VAccordion[0]/VAccordion$StackItem[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<!--Next component container-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
+	<td>12,1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item2</td>
+	<td>186,11</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>Label outside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCssLayout[0]/VCssLayout$FlowPane[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<!--Next component container-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
+	<td>14,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item3</td>
+	<td>199,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VOrderedLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>Label outside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VOrderedLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<!--Next component container-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
+	<td>14,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item4</td>
+	<td>199,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>Label outside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<!--Next component container-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
+	<td>14,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item5</td>
+	<td>199,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>Label outside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<!--Next component container-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
+	<td>14,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item6</td>
+	<td>199,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>Label outside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<!--Next component container-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
+	<td>14,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item7</td>
+	<td>199,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VSplitPanelHorizontal[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>Label outside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VSplitPanelHorizontal[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<!--Next component container-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
+	<td>14,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item8</td>
+	<td>199,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VOrderedLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>Label outside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VOrderedLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<!--Next component container-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
+	<td>14,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item9</td>
+	<td>199,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>Label outside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<!--Next component container-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
+	<td>14,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item10</td>
+	<td>199,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VSplitPanelVertical[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>Label outside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VSplitPanelVertical[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<!--Next component container-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
+	<td>14,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item11</td>
+	<td>199,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTabsheet[0]/VTabsheetPanel[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>Label outside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTabsheet[0]/VTabsheetPanel[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<!--Next component container-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
+	<td>14,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item12</td>
+	<td>199,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>Label outside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<!--Next component container-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::PID_ScomponentContainerSelect/domChild[1]</td>
+	<td>14,5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item13</td>
+	<td>199,10</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VSplitPanelVertical[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VLabel[0]</td>
+	<td>Label outside the component container</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingComponentsWhileOldParentInvisible::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VSplitPanelVertical[0]/VLabel[0]</td>
+	<td>Label inside the component container</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/layouts/MovingComponentsWhileOldParentInvisible.java b/tests/testbench/com/vaadin/tests/layouts/MovingComponentsWhileOldParentInvisible.java
new file mode 100644
index 0000000000..d21ecdd575
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/MovingComponentsWhileOldParentInvisible.java
@@ -0,0 +1,116 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.tests.VaadinClasses;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.LoginForm;
+import com.vaadin.ui.PopupView;
+import com.vaadin.ui.Window;
+
+public class MovingComponentsWhileOldParentInvisible extends TestBase {
+
+    private ComponentContainer cc = new AbsoluteLayout(); // initial dummy
+                                                          // contents
+    private Label lab;
+
+    @Override
+    protected void setup() {
+        lab = new Label("Label inside the component container");
+        lab.setWidth(null);
+
+        ComboBox componentContainerSelect = new ComboBox("Container") {
+            {
+                pageLength = 0;
+            }
+        };
+        componentContainerSelect.setDebugId("componentContainerSelect");
+        componentContainerSelect.setWidth("300px");
+        componentContainerSelect.setImmediate(true);
+        componentContainerSelect.setNullSelectionAllowed(false);
+        // componentContainer.addContainerProperty(CAPTION, String.class, "");
+        // componentContainer.addContainerProperty(CLASS, Class.class, "");
+
+        for (Class<? extends ComponentContainer> cls : VaadinClasses
+                .getComponentContainers()) {
+            if (cls == LoginForm.class || cls == CustomLayout.class
+                    || CustomComponent.class.isAssignableFrom(cls)
+                    || cls == PopupView.class || cls == Window.class) {
+                // Does not support addComponent
+                continue;
+            }
+            componentContainerSelect.addItem(cls);
+        }
+        componentContainerSelect.addListener(new ValueChangeListener() {
+
+            @SuppressWarnings("unchecked")
+            public void valueChange(ValueChangeEvent event) {
+                ComponentContainer oldCC = cc;
+                cc = createComponentContainer((Class<? extends ComponentContainer>) event
+                        .getProperty().getValue());
+                cc.addComponent(lab);
+
+                replaceComponent(oldCC, cc);
+            }
+        });
+
+        componentContainerSelect.setValue(componentContainerSelect.getItemIds()
+                .iterator().next());
+        Button but1 = new Button("Move in and out of component container",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        cc.setVisible(!cc.isVisible());
+                        if (!cc.isVisible()) {
+                            getLayout().addComponent(lab);
+                            lab.setValue(((String) lab.getValue()).replace(
+                                    "inside", "outside"));
+                        } else {
+                            cc.addComponent(lab);
+                            lab.setValue(((String) lab.getValue()).replace(
+                                    "outside", "inside"));
+                        }
+                    }
+                });
+
+        addComponent(componentContainerSelect);
+        addComponent(cc);
+        addComponent(but1);
+    }
+
+    protected ComponentContainer createComponentContainer(
+            Class<? extends ComponentContainer> value) {
+        try {
+            ComponentContainer cc = value.newInstance();
+            cc.setWidth("300px");
+            cc.setHeight("300px");
+            return cc;
+        } catch (InstantiationException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Client side layouts can easily have a bug where its internal data structures gets messed up when child components from it are moved forth and back when it is invisible (registered, but renders are ignored until becomes visible again). Things are especially easy to mess up when the layout uses wrapper widget over each component (like VOrderedLayout and VGridLayout does). This tests Vertical (Ordered), Grid and CssLayout.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5372;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/MovingInvisibleField.html b/tests/testbench/com/vaadin/tests/layouts/MovingInvisibleField.html
new file mode 100644
index 0000000000..84c2809382
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/MovingInvisibleField.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.layouts.MovingInvisibleField?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>one-field-above-button</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingInvisibleField::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>one-field-below-button</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsMovingInvisibleField::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>one-field-above-button</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/layouts/MovingInvisibleField.java b/tests/testbench/com/vaadin/tests/layouts/MovingInvisibleField.java
new file mode 100644
index 0000000000..23ae31d786
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/MovingInvisibleField.java
@@ -0,0 +1,56 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+@SuppressWarnings("serial")
+public class MovingInvisibleField extends TestBase {
+
+    @Override
+    protected void setup() {
+        final VerticalLayout layout1 = new VerticalLayout();
+        final VerticalLayout layout2 = new VerticalLayout();
+
+        final TextField tfHidden = new TextField("Hidden text field caption",
+                "A hidden text field");
+        final TextField tfVisible = new TextField("Visible text field caption",
+                "A visible text field");
+        tfHidden.setVisible(false);
+        Button b = new Button("Move hidden textfield to other layout");
+        b.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                if (layout1.getComponentIndex(tfHidden) != -1) {
+                    layout2.addComponent(tfVisible);
+                    layout2.addComponent(tfHidden);
+                } else {
+                    layout1.addComponent(tfVisible);
+                    layout1.addComponent(tfHidden);
+                }
+
+            }
+
+        });
+
+        layout1.addComponent(tfVisible);
+        layout1.addComponent(tfHidden);
+
+        addComponent(layout1);
+        addComponent(b);
+        addComponent(layout2);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Above and below the button is a VerticalLayout. Initially the first one contains two components: a visiable and an invisible TextField. Click the button to move the TextFields to the second layout, both should be moved but only the visible rendered.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5278;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/OrderedLayoutBasics.java b/tests/testbench/com/vaadin/tests/layouts/OrderedLayoutBasics.java
new file mode 100644
index 0000000000..620d33d43e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/OrderedLayoutBasics.java
@@ -0,0 +1,1202 @@
+package com.vaadin.tests.layouts;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.terminal.UserError;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class OrderedLayoutBasics extends TestBase {
+
+    String valignName[] = new String[] { "top", "middle", "bottom" };
+
+    Set<AbstractOrderedLayout> layouts = new HashSet<AbstractOrderedLayout>();
+    private AbstractOrderedLayout layoutContainer;
+    private int suffix = 0;
+
+    @Override
+    protected String getDescription() {
+        return "Various layout tests for VerticalLayout and HorizontalLayout";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+    @Override
+    public void setup() {
+        getMainWindow().getContent().setHeight(null);
+
+        layoutContainer = new VerticalLayout();
+        createUI(layoutContainer);
+        addComponent(layoutContainer);
+    }
+
+    private void createUI(Layout layout) {
+        layout.addComponent(wrapLayout(layout_field_100pct_button_field(new HorizontalLayout())));
+        layout.addComponent(wrapLayout(layout_field_100pct_button_field(new VerticalLayout())));
+        layout.addComponent(wrapLayout(layout_overfilled(new HorizontalLayout())));
+        layout.addComponent(wrapLayout(layout_overfilled(new VerticalLayout())));
+        layout.addComponent(wrapLayout(layout_overfilled_dynamic_height(new HorizontalLayout())));
+        layout.addComponent(wrapLayout(layout_overfilled_dynamic_height(new VerticalLayout())));
+        layout.addComponent(wrapLayout(layout_symmetric_fields(new HorizontalLayout())));
+        layout.addComponent(wrapLayout(layout_symmetric_fields(new VerticalLayout())));
+        layout.addComponent(wrapLayout(layout_leftAndRight(new HorizontalLayout())));
+        layout.addComponent(wrapLayout(layout_leftAndRight(new VerticalLayout())));
+        layout.addComponent(wrapLayout(layout_fixed_filled(new HorizontalLayout())));
+        layout.addComponent(wrapLayout(layout_fixed_filled(new VerticalLayout())));
+        layout.addComponent(wrapLayout(layout_dynamic(new HorizontalLayout())));
+        layout.addComponent(wrapLayout(layout_dynamic(new VerticalLayout())));
+        layout.addComponent(wrapLayout(layout_labels(new HorizontalLayout())));
+        layout.addComponent(wrapLayout(layout_labels(new VerticalLayout())));
+        layout.addComponent(wrapLayout(layout_captions(new HorizontalLayout())));
+        layout.addComponent(wrapLayout(layout_captions(new VerticalLayout())));
+        layout.addComponent(wrapLayout(layout_captions_fixed_size(new HorizontalLayout())));
+        layout.addComponent(wrapLayout(layout_captions_fixed_size(new VerticalLayout())));
+        layout.addComponent(wrapLayout(layout_captions_fixed_size_and_relative_size(new HorizontalLayout())));
+        layout.addComponent(wrapLayout(layout_captions_fixed_size_and_relative_size(new VerticalLayout())));
+        layout.addComponent(wrapLayout(layout_captions_fixed_size_and_fixed_size(new HorizontalLayout())));
+        layout.addComponent(wrapLayout(layout_captions_fixed_size_and_fixed_size(new VerticalLayout())));
+        layout.addComponent(wrapLayout(layout_add_remove_components(new HorizontalLayout())));
+        layout.addComponent(wrapLayout(layout_add_remove_components(new VerticalLayout())));
+        layout.addComponent(wrapLayout(layout_pctFilled(new HorizontalLayout())));
+        layout.addComponent(wrapLayout(layout_pctFilled(new VerticalLayout())));
+        layout.addComponent(wrapLayout(layout_underFilled(new HorizontalLayout())));
+        layout.addComponent(wrapLayout(layout_underFilled(new VerticalLayout())));
+        layout.addComponent(wrapLayout(layout_basic_test(new HorizontalLayout())));
+        layout.addComponent(wrapLayout(layout_basic_test(new VerticalLayout())));
+    }
+
+    private Layout wrapLayout(Layout ol) {
+        Panel p = new Panel(ol);
+        p.setSizeUndefined();
+        p.setCaption(ol.getCaption());
+        ol.setCaption(null);
+
+        VerticalLayout l = new VerticalLayout();
+        l.setSizeUndefined();
+        l.addComponent(p);
+        // p.setWidth("600px");
+
+        if (ol instanceof AbstractOrderedLayout) {
+            layouts.add((AbstractOrderedLayout) ol);
+        }
+        return l;
+    }
+
+    /* LAYOUTS */
+
+    @SuppressWarnings({ "unused", "deprecation" })
+    private Layout layout1() {
+        HorizontalLayout ol = new HorizontalLayout();
+        ol.setHeight("200px");
+        ol.setWidth("");
+        ol.setCaption("Fixed height (200px) and dynamic width");
+
+        TextField tf = new TextField("100px high TextField, valign: bottom");
+        tf.setHeight("100px");
+        tf.setWidth("");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
+
+        Select s = new Select("100% high select");
+        s.setMultiSelect(true);
+        s.setHeight("100%");
+        s.setWidth("");
+        ol.addComponent(s);
+
+        s = new Select("200 px high select");
+        s.setMultiSelect(true);
+        s.setHeight("200px");
+        s.setWidth("");
+        ol.addComponent(s);
+
+        // tf = new TextField("100% high TextField, right/bottom");
+        // tf.setHeight("100%");
+        // tf.setWidth("");
+        // ol.addComponent(tf);
+        // ol.setComponentAlignment(tf, AlignmentHandler.ALIGNMENT_RIGHT,
+        // AlignmentHandler.ALIGNMENT_BOTTOM);
+
+        // tf = new TextField("100% high, 200px wide TextField");
+        // tf.setHeight("100%");
+        // tf.setWidth("200px");
+        // ol.addComponent(tf);
+
+        return ol;
+
+    }
+
+    @SuppressWarnings({ "unused", "deprecation" })
+    private Layout layout2() {
+        HorizontalLayout ol = new HorizontalLayout();
+        ol.setHeight("70px");
+        ol.setWidth("");
+        ol.setCaption("Fixed height (50px) and dynamic width");
+
+        TextField tf = new TextField(
+                "100px high TextField, valign: bottom, should be partly outside");
+        tf.setHeight("100px");
+        tf.setWidth("");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
+
+        tf = new TextField(
+                "100% high, 50px wide TextField, valign: bottom, should fill full height");
+        tf.setHeight("100%");
+        tf.setWidth("50px");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
+
+        Label l = new Label(
+                "100% high, 50px wide Label, valign: bottom, does not fill full height, only needed space");
+        tf.setHeight("100%");
+        tf.setWidth("50px");
+        ol.addComponent(l);
+        ol.setComponentAlignment(l, Alignment.BOTTOM_LEFT);
+
+        Select s = new Select("100% high select, should fit into layout");
+        s.setMultiSelect(true);
+        s.setHeight("100%");
+        s.setWidth("");
+        for (int i = 0; i < 10; i++) {
+            s.addItem(new Object());
+        }
+
+        ol.addComponent(s);
+
+        s = new Select("200 px high select, should be partly outside");
+        s.setMultiSelect(true);
+        s.setHeight("200px");
+        s.setWidth("");
+        ol.addComponent(s);
+
+        return ol;
+    }
+
+    @SuppressWarnings({ "unused", "deprecation" })
+    private Layout layout3() {
+        HorizontalLayout ol = new HorizontalLayout();
+        ol.setHeight("");
+        ol.setWidth("500px");
+        ol.setCaption("Fixed width (500px) and dynamic height");
+        TextField tf;
+
+        tf = new TextField("100px high TextField, valign: bottom");
+        tf.setHeight("100px");
+        tf.setWidth("100%");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
+
+        tf = new TextField("100px high TextField, valign: top");
+        tf.setHeight("100px");
+        tf.setWidth("100%");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.TOP_LEFT);
+
+        tf = new TextField("100% high, 50px wide TextField, valign: bottom");
+        tf.setHeight("100%");
+        tf.setWidth("50px");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
+
+        Label l = new Label(
+                "100% high, 50px wide Label, valign: bottom, does not fill full height, only needed space");
+        tf.setHeight("100%");
+        tf.setWidth("50px");
+        ol.addComponent(l);
+        ol.setComponentAlignment(l, Alignment.BOTTOM_LEFT);
+
+        Select s = new Select("100% high select, should fit into layout");
+        s.setMultiSelect(true);
+        s.setHeight("100%");
+        s.setWidth("100%");
+        for (int i = 0; i < 10; i++) {
+            s.addItem(new Object());
+        }
+
+        ol.addComponent(s);
+
+        s = new Select("200 px high select, should make the layout 200px high");
+        s.setMultiSelect(true);
+        s.setHeight("200px");
+        s.setWidth("100%");
+        ol.addComponent(s);
+
+        return ol;
+    }
+
+    @SuppressWarnings({ "unused", "deprecation" })
+    private Layout layout3New() {
+        HorizontalLayout ol = new HorizontalLayout();
+        ol.setHeight("300px");
+        // ol.setWidth("500px");
+        ol.setWidth("");
+        ol.setCaption("Dynamic width and fixed height(300px)");
+        TextField tf;
+
+        tf = new TextField("100px high TextField, valign: bottom");
+        tf.setHeight("100px");
+        tf.setWidth("100%");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
+
+        tf = new TextField("100px high TextField, valign: top");
+        tf.setHeight("100px");
+        tf.setWidth("100%");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.TOP_LEFT);
+
+        tf = new TextField("100% high, 50px wide TextField, valign: bottom");
+        tf.setHeight("100%");
+        tf.setWidth("50px");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
+
+        Label l = new Label(
+                "100% high, 50px wide Label, valign: bottom, does not fill full height, only needed space");
+        tf.setHeight("100%");
+        tf.setWidth("50px");
+        ol.addComponent(l);
+        ol.setComponentAlignment(l, Alignment.BOTTOM_LEFT);
+
+        Select s = new Select("100% high select, should fit into layout");
+        s.setMultiSelect(true);
+        s.setHeight("100%");
+        s.setWidth("100%");
+        for (int i = 0; i < 10; i++) {
+            s.addItem(new Object());
+        }
+
+        ol.addComponent(s);
+
+        s = new Select("200 px high select, should make the layout 200px high");
+        s.setMultiSelect(true);
+        s.setHeight("200px");
+        s.setWidth("100%");
+        ol.addComponent(s);
+
+        return ol;
+    }
+
+    @SuppressWarnings("unused")
+    private Layout layout4(AbstractOrderedLayout ol) {
+        // ol.setHeight("300px");
+        // ol.setWidth("500px");
+        ol.setMargin(true);
+        ol.setSpacing(true);
+        ol.setWidth("");
+        ol.setCaption("Dynamic width and dynamic height");
+        TextArea tf;
+
+        tf = new TextArea("100% high TextField");
+        tf.setCaption(null);
+        tf.setRequired(true);
+        tf.setValue("100% high Field");
+        tf.setHeight("100%");
+        tf.setWidth("100px");
+        tf.setRows(2);
+        ol.addComponent(tf);
+
+        tf = new TextArea("100% high TextField");
+        tf.setCaption("100% high TextField");
+        tf.setRequired(true);
+        tf.setValue("100% high Field");
+        tf.setHeight("100%");
+        tf.setWidth("100px");
+        tf.setRows(2);
+        ol.addComponent(tf);
+
+        for (int i = 1; i < 4; i++) {
+            int w = i * 100;
+            tf = new TextArea("Field " + i);
+            tf.setRows(2);
+            tf.setValue(w + "px high, " + w + "px wide TextField, valign: "
+                    + valignName[i % 3]);
+            tf.setWidth(w + "px");
+            tf.setHeight(w + "px");
+            ol.addComponent(tf);
+            if (i % 3 == 0) {
+                ol.setComponentAlignment(tf, Alignment.TOP_LEFT);
+            } else if (i % 3 == 1) {
+                ol.setComponentAlignment(tf, Alignment.MIDDLE_LEFT);
+            } else {
+                ol.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
+            }
+
+        }
+
+        tf = new TextArea("100% high TextField");
+        tf.setValue("100% high 100px wide");
+        tf.setRows(2);
+        tf.setHeight("100%");
+        tf.setWidth("100px");
+        ol.addComponent(tf);
+        return ol;
+    }
+
+    private Layout layout_field_100pct_button_field(AbstractOrderedLayout ol) {
+        ol.setHeight("500px");
+        ol.setWidth("916px");
+        ol.setMargin(false);
+        ol.setSpacing(true);
+
+        // ol.setWidth("");
+        ol.setCaption("Fixed width (" + ol.getWidth()
+                + "px) and fixed height (" + ol.getHeight()
+                + "px) / layout_field_100pct_button_field");
+        TextArea tf;
+
+        tf = new TextArea("300px x 300px Field");
+        // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
+        tf.setValue("300x300 field");
+        tf.setRows(2);
+        // tf.setSizeFull();
+        tf.setHeight("300px");
+        tf.setWidth("300px");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.TOP_LEFT);
+
+        Button b;
+        b = new Button("This is a 100%x50% valign middle button");
+        b.setSizeFull();
+        b.setHeight("50%");
+        ol.addComponent(b);
+        ol.setExpandRatio(b, 1.0f);
+        ol.setComponentAlignment(b, Alignment.MIDDLE_RIGHT);
+
+        tf = new TextArea("300px x 300px Field");
+        // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
+        tf.setValue("300x300 field");
+        tf.setRows(2);
+        // tf.setSizeFull();
+        tf.setHeight("300px");
+        tf.setWidth("300px");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
+        return ol;
+    }
+
+    private Layout layout_basic_test(AbstractOrderedLayout ol) {
+        ol.setHeight("700px");
+        ol.setWidth("900px");
+        ol.setMargin(true);
+        ol.setSpacing(true);
+
+        // ol.setWidth("");
+        ol.setCaption("Fixed width (" + ol.getWidth()
+                + "px) and fixed height (" + ol.getHeight()
+                + "px) / layout_basic_test");
+        TextArea tf;
+
+        tf = new TextArea("300px x 300px Field");
+        // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
+        tf.setValue("300x300 field");
+        tf.setRows(2);
+        // tf.setSizeFull();
+        tf.setHeight("300px");
+        tf.setWidth("300px");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.TOP_LEFT);
+
+        // Button b;
+        // b = new Button("This is a 100%x50% valign middle button");
+        // b.setSizeFull();
+        // b.setHeight("50%");
+        // ol.addComponent(b, 1.0f);
+        // ol.setComponentAlignment(b, AlignmentHandler.ALIGNMENT_RIGHT,
+        // AlignmentHandler.ALIGNMENT_VERTICAL_CENTER);
+
+        tf = new TextArea("300px x 300px Field");
+        // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
+        tf.setValue("300x300 field");
+        tf.setRows(2);
+        // tf.setSizeFull();
+        tf.setHeight("300px");
+        tf.setWidth("300px");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
+        return ol;
+    }
+
+    private Layout layout_symmetric_fields(AbstractOrderedLayout ol) {
+        ol.setHeight("900px");
+        ol.setWidth("900px");
+        ol.setMargin(false);
+        ol.setSpacing(false);
+
+        // ol.setWidth("");
+        ol.setCaption("Fixed width (" + ol.getWidth()
+                + "px) and fixed height (" + ol.getHeight()
+                + "px) / layout_symmetric_fields");
+        TextArea tf;
+
+        tf = new TextArea("300px x 300px Field");
+        tf.setValue("300x300 field");
+        tf.setRows(2);
+        tf.setHeight("300px");
+        tf.setWidth("300px");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.TOP_LEFT);
+
+        tf = new TextArea("300px x 300px Field");
+        tf.setValue("300x300 field");
+        tf.setRows(2);
+        tf.setHeight("300px");
+        tf.setWidth("300px");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.MIDDLE_CENTER);
+
+        tf = new TextArea("300px x 300px Field");
+        tf.setValue("300x300 field");
+        tf.setRows(2);
+        tf.setHeight("300px");
+        tf.setWidth("300px");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
+
+        return ol;
+    }
+
+    private Layout layout_leftAndRight(AbstractOrderedLayout ol) {
+        ol.setHeight("700px");
+        ol.setWidth("700px");
+        ol.setMargin(true);
+        ol.setSpacing(true);
+
+        // ol.setWidth("");
+        ol.setCaption("Fixed width (" + ol.getWidth()
+                + "px) and fixed height (" + ol.getHeight()
+                + "px) / layout_leftAndRight");
+        TextArea tf;
+
+        // tf = new TextField("100%x100% Field");
+        // tf.setCaption(null);
+        // tf.setValue("100% x 100% TextField");
+        // tf.setSizeFull();
+        // tf.setRequired(true);
+        // // tf.setComponentError(new UserError("It's broken!"));
+        //
+        // // tf.setHeight("100%");
+        // // tf.setWidth("100px");
+        // tf.setRows(2);
+        // ol.addComponent(tf);
+        //
+        // for (int i = 1; i < 5; i++) {
+        // int w = i * 100;
+        // tf = new TextField("Caption field " + i);
+        // tf.setRows(2);
+        // tf.setValue(w + "px high, " + w + "px wide TextField, valign: "
+        // + valignName[i % 3]);
+        // tf.setWidth(w + "px");
+        // tf.setHeight(w + "px");
+        // ol.addComponent(tf);
+        // ol.setComponentAlignment(tf,
+        // AlignmentHandler.ALIGNMENT_HORIZONTAL_CENTER, valign[i % 3]);
+        // }
+        //
+        // tf.setValue(tf.getValue().toString() + " (100% wide)");
+        // tf.setWidth("100%");
+
+        // tf = new TextField("100%x70px Field");
+        // tf.setCaption(null);
+        // tf.setRequired(true);
+        // // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
+        // tf.setComponentError(new UserError("abc"));
+        // tf.setValue("100% high 70px wide TextField");
+        // tf.setRows(2);
+        // // tf.setSizeFull();
+        // tf.setHeight("100%");
+        // tf.setWidth("70px");
+        // ol.setComponentAlignment(tf, AlignmentHandler.ALIGNMENT_RIGHT,
+        // AlignmentHandler.ALIGNMENT_TOP);
+        // ol.addComponent(tf);
+
+        tf = new TextArea("300px x 300px Field");
+        // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
+        tf.setValue("300x300 field");
+        tf.setRows(2);
+        // tf.setSizeFull();
+        tf.setHeight("300px");
+        tf.setWidth("300px");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.TOP_LEFT);
+
+        tf = new TextArea("300px x 300px Field");
+        // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
+        tf.setValue("300x300 field");
+        tf.setRows(2);
+        // tf.setSizeFull();
+        tf.setHeight("300px");
+        tf.setWidth("300px");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
+        return ol;
+    }
+
+    private Layout layout_fixed_filled(AbstractOrderedLayout ol) {
+        ol.setHeight("700px");
+        ol.setWidth("700px");
+        ol.setMargin(true);
+        ol.setSpacing(true);
+
+        // ol.setWidth("");
+        ol.setCaption("Filled with fixed width (" + ol.getWidth()
+                + "px) and fixed height (" + ol.getHeight() + "px)");
+        TextArea tf;
+
+        tf = new TextArea("60%x100% Field");
+        tf.setCaption("This one has a caption");
+        tf.setValue("60% x 100% TextField");
+        tf.setWidth("100%");
+        tf.setHeight("100%");
+        tf.setRequired(true);
+        // tf.setComponentError(new UserError("It's broken!"));
+
+        // tf.setHeight("100%");
+        // tf.setWidth("100px");
+        tf.setRows(2);
+        ol.addComponent(tf);
+        ol.setExpandRatio(tf, 1f);
+        //
+
+        tf = new TextArea("60%x60% Field");
+        tf.setCaption(null);
+        tf.setValue("60% x 60% TextField");
+        tf.setWidth("100%");
+        tf.setHeight("60%");
+        tf.setRequired(true);
+        ol.addComponent(tf);
+        ol.setExpandRatio(tf, 1f);
+        ol.setComponentAlignment(tf, Alignment.MIDDLE_LEFT);
+        // tf.setComponentError(new UserError("It's broken!"));
+
+        // tf.setHeight("100%");
+        // tf.setWidth("100px");
+        tf.setRows(2);
+        //
+        // for (int i = 1; i < 5; i++) {
+        // int w = i * 100;
+        // tf = new TextField("Caption field " + i);
+        // tf.setRows(2);
+        // tf.setValue(w + "px high, " + w + "px wide TextField, valign: "
+        // + valignName[i % 3]);
+        // tf.setWidth(w + "px");
+        // tf.setHeight(w + "px");
+        // ol.addComponent(tf);
+        // ol.setComponentAlignment(tf,
+        // AlignmentHandler.ALIGNMENT_HORIZONTAL_CENTER, valign[i % 3]);
+        // }
+        //
+        // tf.setValue(tf.getValue().toString() + " (100% wide)");
+        // tf.setWidth("100%");
+
+        // tf = new TextField("100%x70px Field");
+        // tf.setCaption(null);
+        // tf.setRequired(true);
+        // // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
+        // tf.setComponentError(new UserError("abc"));
+        // tf.setValue("100% high 70px wide TextField");
+        // tf.setRows(2);
+        // // tf.setSizeFull();
+        // tf.setHeight("100%");
+        // tf.setWidth("70px");
+        // ol.setComponentAlignment(tf, AlignmentHandler.ALIGNMENT_RIGHT,
+        // AlignmentHandler.ALIGNMENT_TOP);
+        // ol.addComponent(tf);
+
+        tf = new TextArea("200px x 200px Field");
+        // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
+        tf.setValue("200x200 field");
+        tf.setRows(2);
+        // tf.setSizeFull();
+        tf.setHeight("200px");
+        tf.setWidth("200px");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.TOP_LEFT);
+
+        tf = new TextArea("200px x 200px Field");
+        // tf.setIcon(new ThemeResource("icons/16/document-add.png"));
+        tf.setValue("200x200 field");
+        tf.setRows(2);
+        // tf.setSizeFull();
+        tf.setHeight("200px");
+        tf.setWidth("200px");
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
+        return ol;
+    }
+
+    private Layout layout_overfilled(AbstractOrderedLayout ol) {
+        ol.setHeight("300px");
+        ol.setWidth("700px");
+        ol.setMargin(true);
+        ol.setSpacing(true);
+
+        // ol.setWidth("");
+        ol.setCaption("OverFilled with fixed width (" + ol.getWidth()
+                + "px) and fixed height (" + ol.getHeight() + "px)");
+        TextArea tf;
+
+        for (int i = 0; i < 5; i++) {
+            tf = new TextArea("200x200px Field");
+            tf.setCaption("This one has a caption");
+            tf.setValue("200x200 TextField");
+            tf.setWidth("200px");
+            tf.setHeight("200px");
+            tf.setRequired(true);
+            // tf.setComponentError(new UserError("It's broken!"));
+
+            // tf.setHeight("100%");
+            // tf.setWidth("100px");
+            tf.setRows(2);
+            ol.addComponent(tf);
+        }
+
+        return ol;
+    }
+
+    private Layout layout_overfilled_dynamic_height(AbstractOrderedLayout ol) {
+        ol.setHeight(null);
+        ol.setWidth("700px");
+        ol.setMargin(true);
+        ol.setSpacing(true);
+
+        // ol.setWidth("");
+        ol.setCaption("OverFilled with fixed width (" + ol.getWidth()
+                + "px) and dynamic height");
+        TextArea tf;
+
+        for (int i = 0; i < 10; i++) {
+            tf = new TextArea("200x200px Field");
+            tf.setCaption("This one has a caption");
+            tf.setWidth("200px");
+            tf.setHeight(((i + 1) * 50) + "px");
+            tf.setValue(tf.getWidth() + "x" + tf.getHeight() + " TextField");
+            tf.setRequired(true);
+            // tf.setComponentError(new UserError("It's broken!"));
+
+            // tf.setHeight("100%");
+            // tf.setWidth("100px");
+            tf.setRows(2);
+            ol.addComponent(tf);
+        }
+
+        return ol;
+    }
+
+    // private Layout layout_add_components(AbstractOrderedLayout ol) {
+    // ol.setHeight("600px");
+    // ol.setWidth("600px");
+    // ol.setMargin(true);
+    // ol.setSpacing(true);
+    //
+    // // ol.setWidth("");
+    // ol.setCaption("Fixed width (" + ol.getWidth()
+    // + "px) and fixed height (" + ol.getHeight() + "px)");
+    //
+    // for (int i = 0; i < 3; i++) {
+    // Button b = createAddButton(ol);
+    // ol.addComponent(b);
+    // }
+    //
+    // return ol;
+    //
+    // }
+
+    private Layout layout_add_remove_components(AbstractOrderedLayout ol) {
+        ol.setHeight("600px");
+        ol.setWidth("600px");
+        ol.setMargin(true);
+        ol.setSpacing(true);
+
+        // ol.setWidth("");
+        ol.setCaption("Fixed width (" + ol.getWidth()
+                + "px) and fixed height (" + ol.getHeight()
+                + "px) / layout_add_remove_components");
+
+        for (int i = 0; i < 2; i++) {
+            AbstractOrderedLayout inner = createAddRemove(ol, "", "");
+            ol.addComponent(inner);
+            ol.setComponentAlignment(inner, Alignment.BOTTOM_RIGHT);
+        }
+
+        return ol;
+
+    }
+
+    private Layout layout_dynamic(AbstractOrderedLayout ol) {
+        ol.setMargin(true);
+        ol.setSpacing(true);
+
+        // ol.setWidth("");
+        ol.setCaption("Dynamic width, dynamic height");
+
+        for (int i = 0; i < 3; i++) {
+            Button b = new Button("Button " + i);
+            if (i == 2) {
+                b.setHeight("200px");
+            } else {
+                b.setHeight("100%");
+            }
+            ol.addComponent(b);
+        }
+
+        return ol;
+
+    }
+
+    private Layout layout_captions(AbstractOrderedLayout ol) {
+        ol.setMargin(true);
+        ol.setSpacing(true);
+
+        // ol.setWidth("");
+        ol.setCaption("Caption test with dynamic width");
+
+        TextField tf;
+        tf = new TextField("Short caption");
+        ol.addComponent(tf);
+
+        tf = new TextField(
+                "A very long caption which is probably much longer than the field");
+        ol.addComponent(tf);
+
+        tf = new TextField(
+                "A very long caption which is probably much longer than the field and includes indicators");
+        tf.setRequired(true);
+        tf.setComponentError(new UserError("abc123"));
+        ol.addComponent(tf);
+
+        // for (int i = 0; i < 3; i++) {
+        // Button b = new Button("Button " + i);
+        // if (i == 2) {
+        // b.setHeight("200px");
+        // } else {
+        // b.setHeight("100%");
+        // }
+        // ol.addComponent(b);
+        // }
+
+        return ol;
+
+    }
+
+    private Layout layout_captions_fixed_size(AbstractOrderedLayout ol) {
+        ol.setWidth("700px");
+        ol.setHeight("250px");
+
+        ol.setMargin(false);
+        ol.setSpacing(false);
+
+        // ol.setWidth("");
+        ol.setCaption("Caption test with fixed size");
+
+        TextField tf;
+        tf = new TextField("Short caption");
+        tf.setValue("Undefined width");
+        tf.setComponentError(new UserError("123"));
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
+
+        tf = new TextField(
+                "A long caption which is probably much longer than the field");
+        tf.setValue("Undefined width");
+        tf.setRequired(true);
+        tf.setComponentError(new UserError("123"));
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
+
+        tf = new TextField(
+                "A very long caption which is probably much longer than the field and includes indicators");
+        tf.setValue("Undefined width");
+        tf.setIcon(new ThemeResource("icons/16/document-add.png"));
+        tf.setRequired(true);
+        tf.setComponentError(new UserError("abc123"));
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
+
+        // for (int i = 0; i < 3; i++) {
+        // Button b = new Button("Button " + i);
+        // if (i == 2) {
+        // b.setHeight("200px");
+        // } else {
+        // b.setHeight("100%");
+        // }
+        // ol.addComponent(b);
+        // }
+
+        return ol;
+
+    }
+
+    private Layout layout_captions_fixed_size_and_relative_size(
+            AbstractOrderedLayout ol) {
+        ol.setWidth("700px");
+        ol.setHeight("250px");
+
+        ol.setMargin(false);
+        ol.setSpacing(false);
+
+        // ol.setWidth("");
+        ol.setCaption("Caption test with fixed width (700x250)");
+
+        TextField tf;
+        tf = new TextField("Short caption");
+        tf.setSizeFull();
+        tf.setValue("100% wide field, ratio 1");
+
+        tf.setComponentError(new UserError("123"));
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
+        ol.setExpandRatio(tf, 1);
+
+        tf = new TextField(
+                "A long caption which is probably much longer than the field");
+        tf.setValue("100% wide field, ratio 2");
+        tf.setSizeFull();
+        tf.setRequired(true);
+        tf.setComponentError(new UserError("123"));
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
+        ol.setExpandRatio(tf, 2);
+
+        tf = new TextField(
+                "A very long caption which is probably much longer than the field and includes indicators");
+        tf.setValue("100% wide field, ratio 3");
+        tf.setSizeFull();
+        tf.setIcon(new ThemeResource("icons/16/document-add.png"));
+        tf.setRequired(true);
+        tf.setComponentError(new UserError("abc123"));
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
+        ol.setExpandRatio(tf, 3);
+
+        // for (int i = 0; i < 3; i++) {
+        // Button b = new Button("Button " + i);
+        // if (i == 2) {
+        // b.setHeight("200px");
+        // } else {
+        // b.setHeight("100%");
+        // }
+        // ol.addComponent(b);
+        // }
+
+        return ol;
+
+    }
+
+    private Layout layout_captions_fixed_size_and_fixed_size(
+            AbstractOrderedLayout ol) {
+        ol.setWidth("700px");
+        ol.setHeight("250px");
+
+        ol.setMargin(false);
+        ol.setSpacing(false);
+
+        // ol.setWidth("");
+        ol.setCaption("Caption test with fixed width");
+
+        TextField tf;
+        tf = new TextField("Short caption");
+        tf.setValue("250px wide field");
+        tf.setWidth("250px");
+        tf.setComponentError(new UserError("123"));
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
+
+        tf = new TextField(
+                "A long caption which is probably much longer than the field");
+        tf.setWidth("250px");
+        tf.setValue("250px wide field");
+        tf.setRequired(true);
+        tf.setComponentError(new UserError("123"));
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
+
+        tf = new TextField(
+                "A very long caption which is probably much longer than the field and includes indicators");
+        tf.setValue("200px wide field");
+        tf.setWidth("200px");
+        tf.setIcon(new ThemeResource("icons/16/document-add.png"));
+        tf.setRequired(true);
+        tf.setComponentError(new UserError("abc123"));
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.BOTTOM_RIGHT);
+
+        // for (int i = 0; i < 3; i++) {
+        // Button b = new Button("Button " + i);
+        // if (i == 2) {
+        // b.setHeight("200px");
+        // } else {
+        // b.setHeight("100%");
+        // }
+        // ol.addComponent(b);
+        // }
+
+        return ol;
+
+    }
+
+    private Layout layout_labels(AbstractOrderedLayout ol) {
+        // ol.setWidth("700px");
+        // ol.setHeight("200px");
+
+        ol.setMargin(true);
+        ol.setSpacing(true);
+
+        // ol.setWidth("");
+        ol.setCaption("Caption test with fixed width");
+
+        Label l;
+        l = new Label(
+                "This is a long text and should remain on one line as there is nothing forcing line breaks");
+        ol.addComponent(l);
+        // ol.setComponentAlignment(l, AlignmentHandler.ALIGNMENT_RIGHT,
+        // AlignmentHandler.ALIGNMENT_BOTTOM);
+
+        l = new Label("WTF OMG LOL");
+        ol.addComponent(l);
+        // ol.setComponentAlignment(l, AlignmentHandler.ALIGNMENT_RIGHT,
+        // AlignmentHandler.ALIGNMENT_BOTTOM);
+
+        return ol;
+
+    }
+
+    private AbstractOrderedLayout createAddRemove(AbstractOrderedLayout ol,
+            String width, String buttonSuffix) {
+        Button b = createAddButton(ol);
+        Button wb = createWideAddButton(ol);
+        Button r = createRemoveButton(ol, buttonSuffix);
+        VerticalLayout inner = new VerticalLayout();
+        inner.setCaption("Width: " + width);
+        inner.setWidth(width);
+
+        inner.addComponent(b);
+        inner.addComponent(wb);
+        inner.addComponent(r);
+
+        // inner.setHeight("132px");
+        return inner;
+    }
+
+    private Button createAddButton(AbstractOrderedLayout ol) {
+        Button b = new Button("Add before", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                addBefore((AbstractOrderedLayout) event.getButton().getData(),
+                        event.getButton().getParent(), "");
+            }
+
+        });
+        b.setData(ol);
+
+        return b;
+    }
+
+    private Button createWideAddButton(AbstractOrderedLayout ol) {
+        Button b = new Button("Add 100% before", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                addBefore((AbstractOrderedLayout) event.getButton().getData(),
+                        event.getButton().getParent(), "100%");
+            }
+
+        });
+        b.setData(ol);
+
+        return b;
+    }
+
+    private Button createRemoveButton(AbstractOrderedLayout ol, String suffix) {
+        Button b = new Button("Remove this " + suffix, new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                remove((AbstractOrderedLayout) event.getButton().getData(),
+                        event.getButton().getParent());
+            }
+
+        });
+        b.setWidth("100%");
+        b.setData(ol);
+
+        return b;
+    }
+
+    protected void remove(AbstractOrderedLayout ol, Component c) {
+        ol.removeComponent(c);
+
+    }
+
+    protected void addBefore(AbstractOrderedLayout ol, Component c, String width) {
+        int index = 0;
+        Iterator<Component> iter = ol.getComponentIterator();
+        while (iter.hasNext()) {
+            if (iter.next() == c) {
+                break;
+            }
+            index++;
+        }
+        AbstractOrderedLayout inner = createAddRemove(ol, width,
+                String.valueOf(suffix++));
+        ol.addComponent(inner, index);
+        if (width.contains("%")) {
+            ol.setExpandRatio(inner, 1.0f);
+        }
+
+        ol.setComponentAlignment(inner, Alignment.BOTTOM_RIGHT);
+
+    }
+
+    private Layout layout_pctFilled(AbstractOrderedLayout ol) {
+        ol.setHeight("600px");
+        ol.setWidth("600px");
+        ol.setMargin(true);
+        ol.setSpacing(true);
+
+        // ol.setWidth("");
+        ol.setCaption("100 % filled with fixed width (" + ol.getWidth()
+                + "px) and fixed height (" + ol.getHeight() + "px)");
+        TextArea ta;
+
+        ta = new TextArea();
+        ta.setCaption("This one has a caption");
+        ta.setValue("60% expand TextField");
+        ta.setWidth("100%");
+        ta.setHeight("100%");
+        // ta.setRequired(true);
+        // ta.setComponentError(new UserError("It's broken!"));
+
+        // ta.setHeight("100%");
+        // ta.setWidth("100px");
+        ta.setRows(2);
+        ol.addComponent(ta);
+        ol.setExpandRatio(ta, 60);
+
+        ta = new TextArea();
+        ta.setValue("100px 100px TextField");
+        ta.setWidth("100px");
+        ta.setHeight("100px");
+        ta.setRows(2);
+        ol.addComponent(ta);
+        ol.setComponentAlignment(ta, Alignment.MIDDLE_CENTER);
+
+        //
+
+        ta = new TextArea("40%x40% Field");
+        // ta.setCaption(null);
+        ta.setValue("40% expand (40% height) TextField");
+        ta.setWidth("100%");
+        ta.setHeight("40%");
+        ol.addComponent(ta);
+        ol.setExpandRatio(ta, 40);
+        // ta.setRequired(true);
+        ol.setComponentAlignment(ta, Alignment.BOTTOM_RIGHT);
+
+        ta.setRows(2);
+
+        return ol;
+    }
+
+    @SuppressWarnings("unused")
+    private Layout layout_pctFilled2(AbstractOrderedLayout ol) {
+        ol.setHeight("600px");
+        ol.setWidth("600px");
+        ol.setMargin(true);
+        ol.setSpacing(false);
+
+        // ol.setWidth("");
+        ol.setCaption("100 % filled with fixed width (" + ol.getWidth()
+                + "px) and fixed height (" + ol.getHeight() + "px)");
+        TextArea ta;
+
+        ta = new TextArea();
+        // ta.setCaption("This one has a caption");
+        ta.setValue("80% x 20% TextField");
+        ta.setWidth("80%");
+        ta.setHeight("20%");
+        // ta.setRequired(true);
+        // ta.setComponentError(new UserError("It's broken!"));
+
+        // ta.setHeight("100%");
+        // ta.setWidth("100px");
+        ta.setRows(2);
+        ol.addComponent(ta);
+        //
+
+        ta = new TextArea("20%x60% Field");
+        ta.setCaption(null);
+        ta.setValue("20% x 60% TextField");
+        ta.setWidth("20%");
+        ta.setHeight("60%");
+        // ta.setRequired(true);
+        ol.setComponentAlignment(ta, Alignment.BOTTOM_RIGHT);
+
+        ta.setRows(2);
+        ol.addComponent(ta);
+
+        return ol;
+    }
+
+    private Layout layout_underFilled(AbstractOrderedLayout ol) {
+        ol.setHeight("700px");
+        ol.setWidth("700px");
+        ol.setMargin(true);
+        ol.setSpacing(true);
+
+        // ol.setWidth("");
+        ol.setCaption("Underfilled with fixed width (" + ol.getWidth()
+                + "px) and fixed height (" + ol.getHeight() + "px)");
+        TextArea ta;
+
+        ta = new TextArea("60%x100% Field");
+        ta.setCaption("Short capt");
+        ta.setValue("60% x 100% TextField");
+        ta.setWidth("60%");
+        ta.setHeight("100%");
+        ta.setRequired(true);
+        ta.setRows(2);
+
+        ol.addComponent(ta);
+        ol.setComponentAlignment(ta, Alignment.MIDDLE_CENTER);
+
+        ta = new TextArea("200px x 200px Field");
+        // ta.setIcon(new ThemeResource("icons/16/document-add.png"));
+        ta.setValue("200x200 field");
+        ta.setRows(2);
+        // ta.setSizeFull();
+        ta.setHeight("200px");
+        ta.setWidth("200px");
+        ol.addComponent(ta);
+        ol.setComponentAlignment(ta, Alignment.TOP_LEFT);
+
+        ta = new TextArea("200px x 200px Field");
+        // ta.setIcon(new ThemeResource("icons/16/document-add.png"));
+        ta.setValue("200x200 field");
+        ta.setRows(2);
+        // ta.setSizeFull();
+        ta.setHeight("200px");
+        ta.setWidth("200px");
+        ol.addComponent(ta);
+        ol.setComponentAlignment(ta, Alignment.BOTTOM_RIGHT);
+        return ol;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/layouts/OrderedLayoutCSSCompatibility.java b/tests/testbench/com/vaadin/tests/layouts/OrderedLayoutCSSCompatibility.java
new file mode 100644
index 0000000000..41f1de2c4a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/OrderedLayoutCSSCompatibility.java
@@ -0,0 +1,31 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.TextField;
+
+public class OrderedLayoutCSSCompatibility extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "This test is to make sure that spacing/margins in OrderedLayout is still backwards compatible";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2463;
+    }
+
+    @Override
+    protected void setup() {
+        HorizontalLayout l = new HorizontalLayout();
+        l.setMargin(true);
+        l.setSpacing(true);
+        l.addComponent(new TextField("abc"));
+        l.addComponent(new TextField("def"));
+
+        addComponent(l);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/TestAbsoluteLayout.java b/tests/testbench/com/vaadin/tests/layouts/TestAbsoluteLayout.java
new file mode 100644
index 0000000000..baf8218922
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/TestAbsoluteLayout.java
@@ -0,0 +1,314 @@
+package com.vaadin.tests.layouts;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DefaultFieldFactory;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.Window;
+
+public class TestAbsoluteLayout extends TestBase {
+
+    private static class MFieldFactory extends DefaultFieldFactory {
+
+        @Override
+        public Field createField(Item item, Object propertyId,
+                Component uiContext) {
+            if (propertyId.equals("CSSString")) {
+                TextArea f = new TextArea();
+                f.setRows(5);
+                f.setHeight("8em");
+                f.setCaption("CSS string");
+                return f;
+            } else if (((String) propertyId).contains("Units")) {
+                NativeSelect s = new NativeSelect() {
+                };
+                s.addContainerProperty("caption", String.class, "");
+                s.setItemCaptionPropertyId("caption");
+                s.setNullSelectionAllowed(false);
+                for (int i = 0; i < Layout.UNIT_SYMBOLS.length; i++) {
+                    Item unitItem = s.addItem(i);
+                    unitItem.getItemProperty("caption").setValue(
+                            Layout.UNIT_SYMBOLS[i]);
+                }
+                return s;
+            }
+
+            return super.createField(item, propertyId, uiContext);
+        }
+
+        private static MFieldFactory instance;
+
+        public static DefaultFieldFactory get() {
+            if (instance == null) {
+                instance = new MFieldFactory();
+            }
+            return instance;
+        }
+    };
+
+    @Override
+    protected String getDescription() {
+        return "This is absolute layout tester.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+    @Override
+    protected void setup() {
+        AbsoluteLayout layout = new AbsoluteLayout();
+        setTheme("tests-tickets");
+        layout.setStyleName("cyan");
+        layout.setWidth("1000px");
+        layout.setHeight("500px");
+
+        layout.addComponent(new Label("Hello World"));
+
+        Button button = new Button("Centered button,z-index:10;");
+        button.setSizeFull();
+        layout.addComponent(button,
+                "top:40%;bottom:40%;right:20%;left:20%;z-index:10;");
+
+        Label label = new Label(
+                "Exotic positioned label. Fullsize, top:100px; left:2cm; right: 3.5in; bottom:12.12mm ");
+        label.setStyleName("yellow");
+        label.setSizeFull();
+        layout.addComponent(label,
+                "top:100px; left:2cm; right: 3.5in; bottom:12.12mm");
+
+        label = new Label("fullize, bottom:80%;left:80%;");
+        label.setStyleName("green");
+        label.setSizeFull();
+        layout.addComponent(label, "bottom:80%;left:80%;");
+
+        label = new Label("bottomright");
+        label.setSizeUndefined();
+        label.setStyleName("green");
+        layout.addComponent(label, "bottom:0px; right:0px;");
+
+        getLayout().setSizeFull();
+        getLayout().addComponent(layout);
+
+        getMainWindow().addWindow(new EditorWindow(layout));
+
+    }
+
+    public class EditorWindow extends Window {
+        private final AbsoluteLayout l;
+        private Form componentEditor;
+        private Form positionEditor;
+
+        public EditorWindow(AbsoluteLayout lo) {
+            super("AbsoluteLayout editor aka köyhän miehen wysiwyg");
+            l = lo;
+
+            setHeight("600px");
+
+            Button componentChooser = new Button("choose component to edit");
+            componentChooser.addListener(new Button.ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    final Window chooser = new Window("Choose component");
+                    chooser.getContent().setSizeUndefined();
+                    chooser.setModal(true);
+
+                    NativeSelect select = new NativeSelect(
+                            "Choose component to edit");
+
+                    select.setNullSelectionAllowed(false);
+
+                    IndexedContainer container = new IndexedContainer();
+                    container.addContainerProperty("caption", String.class, "");
+                    Iterator<Component> componentIterator = l
+                            .getComponentIterator();
+                    while (componentIterator.hasNext()) {
+                        AbstractComponent next = (AbstractComponent) componentIterator
+                                .next();
+                        Item item = container.addItem(next);
+
+                        String caption = next.getClass().getSimpleName();
+
+                        caption += "; cap: " + next.getCaption() + "; debugid"
+                                + getDebugId();
+
+                        if (next instanceof Property) {
+                            caption += " value:" + ((Property) next).getValue();
+                        }
+
+                        item.getItemProperty("caption").setValue(caption);
+                    }
+                    select.setContainerDataSource(container);
+                    select.setItemCaptionPropertyId("caption");
+                    select.setImmediate(true);
+
+                    select.addListener(new ValueChangeListener() {
+                        public void valueChange(ValueChangeEvent event) {
+                            editcomponent((Component) event.getProperty()
+                                    .getValue());
+                            getMainWindow().removeWindow(chooser);
+                        }
+
+                    });
+
+                    chooser.addComponent(select);
+
+                    getMainWindow().addWindow(chooser);
+
+                }
+            });
+
+            addComponent(componentChooser);
+
+            Button addComp = new Button("add component");
+            addComp.addListener(new Button.ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    final Window chooser = new Window(
+                            "Choose component type to add");
+                    chooser.getContent().setSizeUndefined();
+                    chooser.setModal(true);
+
+                    NativeSelect select = new NativeSelect(
+                            "Choose component to edit");
+
+                    select.setNullSelectionAllowed(false);
+
+                    IndexedContainer container = new IndexedContainer();
+
+                    URL resource = AbstractComponent.class.getResource(".");
+                    File directory = new File(resource.getFile());
+                    if (directory.exists()) {
+                        // Get the list of the files contained in the
+                        // package
+                        final String[] files = directory.list();
+                        for (int j = 0; j < files.length; j++) {
+                            // we are only interested in .class files
+                            if (files[j].endsWith(".class")) {
+                                // removes the .class extension
+                                String p = resource.toString()
+                                        + files[j].substring(0,
+                                                files[j].length() - 6);
+                                p = p.replaceAll(".*classes/", "");
+                                p = p.replaceAll("/", ".");
+                                Class<?> c;
+                                try {
+                                    c = Class.forName(p);
+                                    if (AbstractComponent.class
+                                            .isAssignableFrom(c)
+                                            && !p.toLowerCase().contains(
+                                                    "layout")
+                                            && !p.toLowerCase().contains(
+                                                    "abstract")) {
+                                        container.addItem(c);
+                                    }
+                                } catch (ClassNotFoundException e) {
+                                    // TODO Auto-generated catch block
+                                    e.printStackTrace();
+                                }
+                            }
+                        }
+                    }
+                    select.setContainerDataSource(container);
+                    select.setImmediate(true);
+
+                    select.addListener(new ValueChangeListener() {
+                        public void valueChange(ValueChangeEvent event) {
+                            Class<?> c = (Class<?>) event.getProperty()
+                                    .getValue();
+
+                            try {
+                                Component newInstance = (Component) c
+                                        .newInstance();
+                                l.addComponent(newInstance);
+                                editcomponent(newInstance);
+                                getMainWindow().removeWindow(chooser);
+                            } catch (InstantiationException e) {
+                                // TODO Auto-generated catch block
+                                e.printStackTrace();
+                            } catch (IllegalAccessException e) {
+                                // TODO Auto-generated catch block
+                                e.printStackTrace();
+                            }
+
+                        }
+
+                    });
+
+                    chooser.addComponent(select);
+
+                    getMainWindow().addWindow(chooser);
+
+                }
+            });
+
+            addComponent(addComp);
+
+            componentEditor = new Form();
+            componentEditor.setWriteThrough(false);
+            componentEditor.setCaption("Component properties:");
+            componentEditor.setFormFieldFactory(MFieldFactory.get());
+            addComponent(componentEditor);
+
+            positionEditor = new Form();
+            positionEditor.setCaption("Component position");
+            positionEditor.setWriteThrough(false);
+            positionEditor.setFormFieldFactory(MFieldFactory.get());
+            addComponent(positionEditor);
+
+            Button b = new Button("Commit changes", new Button.ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    positionEditor.commit();
+                    componentEditor.commit();
+                }
+            });
+            addComponent(b);
+
+        }
+
+        private void editcomponent(Component value) {
+
+            BeanItem<Component> beanItem = new BeanItem<Component>(value);
+            String c = "Component properties for "
+                    + value.getClass().getSimpleName();
+            ArrayList<String> fields = new ArrayList<String>(
+                    Arrays.asList(new String[] { "width", "widthUnits",
+                            "height", "heightUnits", "caption", "styleName" }));
+            if (value instanceof Label) {
+                c += "(" + ((Label) value).getValue() + ")";
+                fields.add("value");
+            }
+
+            componentEditor.setItemDataSource(beanItem, fields);
+
+            BeanItem<ComponentPosition> positionItem = new BeanItem<ComponentPosition>(
+                    l.getPosition(value));
+            componentEditor.setCaption(c);
+
+            positionEditor.setItemDataSource(positionItem);
+
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/TestLayoutClickListeners.html b/tests/testbench/com/vaadin/tests/layouts/TestLayoutClickListeners.html
new file mode 100644
index 0000000000..743d59c007
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/TestLayoutClickListeners.html
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TestLayoutClickListeners</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TestLayoutClickListeners</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.layouts.TestLayoutClickListeners</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+<!--GridLayout-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>43,11</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>exact:GridLayout: left click on This is label 1</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[4]/VTextField[0]</td>
+	<td>82,14</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>exact:GridLayout: left click on This is tf5</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VGridLayout[0]/domChild[0]/domChild[0]/domChild[1]</td>
+	<td>87,42</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>exact:GridLayout: left click on &lt;none&gt;</td>
+</tr>
+<!--VerticalLayout-->
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VTextField[0]</td>
+	<td>74,13</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>exact:VerticalLayout: left click on This is tf6</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VLabel[0]</td>
+	<td>53,13</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>exact:VerticalLayout: left click on This is label 3</td>
+</tr>
+<!--AbsoluteLayout-->
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[2]/VAbsoluteLayout[0]/VAbsoluteLayout$AbsoluteWrapper[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>exact:Button A button with its own click listener was clicked</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[2]/VAbsoluteLayout[0]/VAbsoluteLayout$AbsoluteWrapper[0]/VTextField[0]</td>
+	<td>101,14</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>exact:AbsoluteLayout: left click on This is its caption</td>
+</tr>
+<!--CssLayout-->
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[3]/VCssLayout[0]/VCssLayout$FlowPane[0]/VTextField[0]</td>
+	<td>108,13</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[3]/VCssLayout[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+	<td>76,12</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VLabel[0]</td>
+	<td>exact:CSSLayout: left click on This is its caption</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>exact:CSSLayout: left click on This is its caption</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[3]/VCssLayout[0]/VCssLayout$FlowPane[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>vaadin=runcomvaadintestslayoutsTestLayoutClickListeners::/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+	<td>exact:Button A button with its own click listener was clicked</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/layouts/TestLayoutClickListeners.java b/tests/testbench/com/vaadin/tests/layouts/TestLayoutClickListeners.java
new file mode 100644
index 0000000000..93c51d6b4a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/TestLayoutClickListeners.java
@@ -0,0 +1,208 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.event.LayoutEvents.LayoutClickEvent;
+import com.vaadin.event.LayoutEvents.LayoutClickListener;
+import com.vaadin.event.MouseEvents.ClickEvent;
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class TestLayoutClickListeners extends AbstractTestCase {
+
+    private Log log = new Log(5).setNumberLogRows(false);
+
+    @Override
+    public void init() {
+        Window w = new Window("main window");
+        setMainWindow(w);
+        setTheme("tests-tickets");
+
+        HorizontalLayout layoutsLayout = new HorizontalLayout();
+        layoutsLayout.setSpacing(true);
+        w.setContent(layoutsLayout);
+
+        layoutsLayout.addComponent(createClickableGridLayout());
+        layoutsLayout.addComponent(createClickableVerticalLayout());
+        layoutsLayout.addComponent(createClickableAbsoluteLayout());
+        layoutsLayout.addComponent(createClickableCSSLayout());
+
+        VerticalLayout mainLayout = new VerticalLayout();
+        mainLayout.setMargin(true);
+        mainLayout.setSpacing(true);
+        w.setContent(mainLayout);
+        mainLayout.addComponent(log);
+        mainLayout.addComponent(layoutsLayout);
+    }
+
+    private Component createClickableAbsoluteLayout() {
+        final AbsoluteLayout al = new AbsoluteLayout();
+        al.setCaption("AbsoluteLayout");
+        al.setStyleName("borders");
+        al.setWidth("300px");
+        al.setHeight("500px");
+        al.addComponent(new TextField("This is its caption",
+                "This is a textfield"), "top: 60px; left: 0px; width: 100px;");
+        al.addComponent(new TextField("Another textfield caption",
+                "This is another textfield"),
+                "top: 120px; left: 20px; width: 100px;");
+
+        al.addComponent(new Button("A button with its own click listener",
+                new Button.ClickListener() {
+
+                    public void buttonClick(
+                            com.vaadin.ui.Button.ClickEvent event) {
+                        log.log("Button " + event.getButton().getCaption()
+                                + " was clicked");
+
+                    }
+                }));
+        al.addListener(new LayoutClickListener() {
+
+            public void layoutClick(LayoutClickEvent event) {
+                logLayoutClick("AbsoluteLayout", event);
+            }
+        });
+
+        return al;
+
+    }
+
+    private Component createClickableCSSLayout() {
+        final CssLayout cl = new CssLayout();
+        cl.setCaption("CSSLayout");
+        cl.setStyleName("borders");
+        cl.setWidth("300px");
+        cl.setHeight("500px");
+        cl.addComponent(new TextField("This is its caption",
+                "This is a textfield"));
+        cl.addComponent(new TextField("Another textfield caption",
+                "This is another textfield"));
+
+        cl.addComponent(new Button("A button with its own click listener",
+                new Button.ClickListener() {
+
+                    public void buttonClick(
+                            com.vaadin.ui.Button.ClickEvent event) {
+                        log.log("Button " + event.getButton().getCaption()
+                                + " was clicked");
+
+                    }
+                }));
+        cl.addListener(new LayoutClickListener() {
+
+            public void layoutClick(LayoutClickEvent event) {
+                logLayoutClick("CSSLayout", event);
+            }
+        });
+
+        return cl;
+
+    }
+
+    private Layout createClickableGridLayout() {
+
+        GridLayout gl = new GridLayout(4, 4);
+        gl.setHeight("400px");
+        gl.setWidth("564px");
+        gl.setStyleName("borders");
+        gl.setSpacing(true);
+        addContent(gl, 4);
+        TextField largeTextarea = new TextField("Large textarea");
+        largeTextarea.setWidth("100%");
+        largeTextarea.setHeight("99%");
+        gl.addComponent(largeTextarea, 0, 3, 3, 3);
+
+        gl.addListener(new LayoutClickListener() {
+
+            public void layoutClick(LayoutClickEvent event) {
+                logLayoutClick("GridLayout", event);
+            }
+        });
+        gl.setRowExpandRatio(3, 1);
+        return wrap(gl, "GridLayout");
+    }
+
+    protected void logLayoutClick(String layout, LayoutClickEvent event) {
+        String target = "&lt;none>";
+        Component component = event.getChildComponent();
+        if (component != null) {
+            target = component.getCaption();
+            if (target == null && component instanceof Label) {
+                target = ((Label) component).getValue().toString();
+            }
+        }
+        String button = "left";
+        if (event.getButton() == ClickEvent.BUTTON_RIGHT) {
+            button = "right";
+        } else if (event.getButton() == ClickEvent.BUTTON_MIDDLE) {
+            button = "middle";
+
+        }
+        String type = "click";
+        if (event.isDoubleClick()) {
+            type = "double-click";
+        }
+        log.log(layout + ": " + button + " " + type + " on " + target);
+        // + ", coordinates relative to the layout ("
+        // + event.getRelativeX() + ", " + event.getRelativeY() + ")");
+
+    }
+
+    private Layout createClickableVerticalLayout() {
+
+        VerticalLayout gl = new VerticalLayout();
+        addContent(gl, 5);
+
+        gl.addListener(new LayoutClickListener() {
+
+            public void layoutClick(LayoutClickEvent event) {
+                logLayoutClick("VerticalLayout", event);
+
+            }
+        });
+
+        return wrap(gl, "Clickable VerticalLayout");
+    }
+
+    private void addContent(Layout gl, int nr) {
+        for (int i = 1; i < nr; i++) {
+            Label l = new Label("This is label " + i);
+            l.setWidth(null);
+            gl.addComponent(l);
+        }
+        for (int i = nr; i < nr * 2; i++) {
+            gl.addComponent(new TextField("This is tf" + i, "this is tf " + i));
+        }
+    }
+
+    private Layout wrap(Component c, String caption) {
+        VerticalLayout vl = new VerticalLayout();
+        Label l = new Label(caption);
+        l.setWidth(null);
+        vl.addComponent(l);
+        vl.addComponent(c);
+
+        return vl;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "All layouts have click listeners attached and the events are shown in the event log at the top";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3541;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/TestLayoutPerformance.java b/tests/testbench/com/vaadin/tests/layouts/TestLayoutPerformance.java
new file mode 100644
index 0000000000..31ee15983e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/TestLayoutPerformance.java
@@ -0,0 +1,133 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class TestLayoutPerformance extends TestBase {
+    private NativeSelect ns;
+    private int i;
+    private NativeSelect ns2;
+    private VerticalLayout testarea = new VerticalLayout();
+
+    @Override
+    protected String getDescription() {
+        return "Test app to test simple rendering to various layouts.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return null;
+    }
+
+    @Override
+    protected void setup() {
+        Label label = new Label("<h1>CssLayout performance test.</h1>",
+                Label.CONTENT_XHTML);
+        getLayout().addComponent(label);
+
+        label = new Label(
+                "<em>Hint</em>. Use debug dialog to measure rendering times TODO: extend with size settings (to both layout and content).",
+                Label.CONTENT_XHTML);
+        getLayout().addComponent(label);
+
+        ns = new NativeSelect("Select component to test");
+        ns.addItem(CssLayout.class);
+        ns.addItem(GridLayout.class);
+        ns.addItem(VerticalLayout.class);
+        ns.setNullSelectionAllowed(false);
+        ns.setValue(CssLayout.class);
+
+        ns2 = new NativeSelect("Select component to render inside layout.");
+        ns2.addItem(Label.class);
+        ns2.addItem(Button.class);
+        ns2.setNullSelectionAllowed(false);
+        ns2.setValue(Label.class);
+
+        final TextField n = new TextField("Number of components");
+
+        n.setValue("1000");
+
+        final CheckBox cb = new CheckBox("Generate captions", false);
+
+        Button b = new Button("Render component");
+
+        b.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                int components = Integer.parseInt((String) n.getValue());
+                Layout layout = getCurrentLayout();
+                for (int i = 0; i < components; i++) {
+                    Component component = newTestComponent();
+                    if (cb.booleanValue()) {
+                        component.setCaption("caption " + i);
+                    }
+                    layout.addComponent(component);
+                }
+
+                testarea.removeAllComponents();
+                testarea.addComponent(layout);
+            }
+
+        });
+
+        getLayout().addComponent(ns);
+        getLayout().addComponent(ns2);
+        getLayout().addComponent(n);
+        getLayout().addComponent(cb);
+        getLayout().addComponent(b);
+        getLayout().addComponent(testarea);
+
+    }
+
+    private Layout getCurrentLayout() {
+        Class<?> value = (Class<?>) ns.getValue();
+        if (value == GridLayout.class) {
+            return new GridLayout(10, 1);
+        }
+
+        try {
+            return (Layout) value.newInstance();
+        } catch (InstantiationException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return null;
+
+    }
+
+    private Component newTestComponent() {
+        Class<?> componentClass = (Class<?>) ns2.getValue();
+        AbstractComponent newInstance = null;
+        try {
+            newInstance = (AbstractComponent) componentClass.newInstance();
+        } catch (InstantiationException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        if (componentClass == Label.class) {
+            ((Label) newInstance).setValue("Test l " + (i++));
+            ((Label) newInstance).setSizeUndefined();
+        } else {
+            newInstance.setCaption("Test l " + (i++));
+        }
+        return newInstance;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/TreeWithBordersInLayout.html b/tests/testbench/com/vaadin/tests/layouts/TreeWithBordersInLayout.html
new file mode 100644
index 0000000000..cd4c8756cc
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/TreeWithBordersInLayout.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.layouts.TreeWithBordersInLayout?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>tree-with-borders</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/layouts/TreeWithBordersInLayout.java b/tests/testbench/com/vaadin/tests/layouts/TreeWithBordersInLayout.java
new file mode 100644
index 0000000000..27b1ce6462
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/TreeWithBordersInLayout.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class TreeWithBordersInLayout extends AbstractTestCase {
+
+    private static final Object CAPTION = "caption";
+
+    @Override
+    public void init() {
+        Layout mainLayout = new VerticalLayout();
+        mainLayout.setSizeUndefined();
+        setMainWindow(new Window("main window", mainLayout));
+
+        setTheme("tests-tickets");
+
+        Tree t = new Tree();
+        t.addContainerProperty(CAPTION, String.class, "");
+        t.setItemCaptionPropertyId(CAPTION);
+        t.addItem("Item 1").getItemProperty(CAPTION).setValue("Item 1");
+
+        t.setSizeUndefined();
+        t.setStyleName("redblueborders");
+        mainLayout.addComponent(t);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "The tree consists of one node and has a 10px blue red border and a 10px red right border. The tree node should be visible between the borders.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3915;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/VerticalLayoutExpandRatioModification.java b/tests/testbench/com/vaadin/tests/layouts/VerticalLayoutExpandRatioModification.java
new file mode 100644
index 0000000000..bbac07d20f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/VerticalLayoutExpandRatioModification.java
@@ -0,0 +1,77 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class VerticalLayoutExpandRatioModification extends TestBase implements
+        ClickListener {
+
+    private boolean isVisible = false;
+    private VerticalLayout mainLayout;
+    private VerticalLayout vl1;
+    private VerticalLayout vl2;
+    private Button button;
+
+    @Override
+    public void setup() {
+        Window main = new Window("The Main Window");
+        mainLayout = new VerticalLayout();
+        main.setContent(mainLayout);
+        setMainWindow(main);
+
+        // The upper layout
+        vl1 = new VerticalLayout();
+        Label label1 = new Label("The upper layout");
+        vl1.addComponent(label1);
+
+        // Button that hides or shows the bottom part
+        button = new Button("show / hide", this);
+
+        // The bottom layout
+        vl2 = new VerticalLayout();
+        TextField tf = new TextField("The bottom field");
+        tf.setHeight("100%");
+        vl2.addComponent(tf);
+
+        // Add everything to the view
+        mainLayout.addComponent(vl1);
+        mainLayout.addComponent(button);
+        mainLayout.addComponent(vl2);
+
+        // Set expand ratios, hide lower
+        mainLayout.setExpandRatio(vl1, 1);
+        mainLayout.setExpandRatio(vl2, 0);
+
+        // Maximize everything
+        main.setSizeFull();
+        mainLayout.setSizeFull();
+        vl1.setSizeFull();
+        vl2.setSizeFull();
+    }
+
+    public void buttonClick(ClickEvent event) {
+        if (isVisible) {
+            mainLayout.setExpandRatio(vl2, 0);
+            isVisible = false;
+        } else {
+            mainLayout.setExpandRatio(vl2, 1);
+            isVisible = true;
+        }
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Changing the expand ratio should repaint the layout correctly. Changing from 0 to something else should render the previously invisible component";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2454;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/VerticalLayoutWithRelativeSizeComponents.java b/tests/testbench/com/vaadin/tests/layouts/VerticalLayoutWithRelativeSizeComponents.java
new file mode 100644
index 0000000000..361707a86c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/VerticalLayoutWithRelativeSizeComponents.java
@@ -0,0 +1,38 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Label;
+
+public class VerticalLayoutWithRelativeSizeComponents extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "A undefined wide VerticalLayout containing a 100% wide label, a Button and another identical label. The labels should be as wide as the button (400px) and there should be no extra space between the bottom of the first label and the button.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2591;
+    }
+
+    @Override
+    protected void setup() {
+        getLayout().setSizeUndefined();
+        getMainWindow().getContent().setHeight(null);
+
+        Label l = new Label(
+                "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc condimentum urna quis leo. In hac habitasse platea dictumst. Pellentesque tincidunt. Sed libero nisl, faucibus in, laoreet pellentesque, consectetur non, dolor. Sed tortor. Ut pretium sapien. Cras elementum enim non lacus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla velit est, aliquam a, pellentesque a, iaculis nec, sapien. Ut ultrices ligula vitae nulla. Morbi sem pede, iaculis ac, condimentum a, ornare eget, nisi. Aliquam hendrerit pulvinar massa. Vestibulum pretium purus eu augue. Sed posuere elit ut magna. Cras consequat faucibus nunc. Vestibulum quis diam.");
+        Label l2 = new Label(
+                "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc condimentum urna quis leo. In hac habitasse platea dictumst. Pellentesque tincidunt. Sed libero nisl, faucibus in, laoreet pellentesque, consectetur non, dolor. Sed tortor. Ut pretium sapien. Cras elementum enim non lacus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla velit est, aliquam a, pellentesque a, iaculis nec, sapien. Ut ultrices ligula vitae nulla. Morbi sem pede, iaculis ac, condimentum a, ornare eget, nisi. Aliquam hendrerit pulvinar massa. Vestibulum pretium purus eu augue. Sed posuere elit ut magna. Cras consequat faucibus nunc. Vestibulum quis diam.");
+        l.setWidth("100%");
+        l2.setWidth("100%");
+
+        Button b = new Button("This defines the width");
+        b.setWidth("400px");
+        addComponent(l);
+        addComponent(b);
+        addComponent(l2);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/VerticalLayoutWithRelativeSizeComponentsInitiallyHidden.java b/tests/testbench/com/vaadin/tests/layouts/VerticalLayoutWithRelativeSizeComponentsInitiallyHidden.java
new file mode 100644
index 0000000000..360cc73f5e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/VerticalLayoutWithRelativeSizeComponentsInitiallyHidden.java
@@ -0,0 +1,58 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+public class VerticalLayoutWithRelativeSizeComponentsInitiallyHidden extends
+        TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Size calculations fail if expanded component is relative sized "
+                + "and initially invisible and when becoming visible at the "
+                + "same time some other component size changes.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4608;
+    }
+
+    @Override
+    protected void setup() {
+
+        VerticalLayout verticalLayout = getLayout();
+        verticalLayout.setHeight("500px");
+
+        final Label bar = new Label("Bar");
+        bar.setSizeUndefined();
+        final Label foobar = new Label("FooBar");
+        foobar.setSizeFull();
+        foobar.setVisible(false);
+
+        bar.setHeight("100px");
+
+        // bar.setHeight("100px");
+        bar.setVisible(false);
+
+        Button b = new Button(
+                "Click to set bar visible. Button should stay visible.");
+        b.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                bar.setVisible(true);
+                foobar.setVisible(true);
+            }
+        });
+
+        verticalLayout.addComponent(bar);
+        verticalLayout.addComponent(foobar);
+        verticalLayout.setExpandRatio(foobar, 1);
+        verticalLayout.addComponent(b);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/WidgetImplementationSwap.html b/tests/testbench/com/vaadin/tests/layouts/WidgetImplementationSwap.html
new file mode 100644
index 0000000000..c335f5df5a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/WidgetImplementationSwap.html
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.layouts.WidgetImplementationSwap?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementPresent</td>
+	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VAbsoluteLayout[0]/VAbsoluteLayout$AbsoluteWrapper[0]/VTextArea[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementPresent</td>
+	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextArea[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementPresent</td>
+	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextArea[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[7]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementPresent</td>
+	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[6]/VGridLayout[0]/AbsolutePanel[0]/ChildComponentContainer[0]/VTextArea[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[9]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[9]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementPresent</td>
+	<td>vaadin=runcomvaadintestslayoutsWidgetImplementationSwap::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[8]/VCssLayout[0]/VCssLayout$FlowPane[0]/VTextArea[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/layouts/WidgetImplementationSwap.java b/tests/testbench/com/vaadin/tests/layouts/WidgetImplementationSwap.java
new file mode 100644
index 0000000000..283e9f7a54
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/WidgetImplementationSwap.java
@@ -0,0 +1,157 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.AbstractLayout;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+@SuppressWarnings("deprecation")
+public class WidgetImplementationSwap extends TestBase {
+
+    @Override
+    protected void setup() {
+        setTheme("tests-tickets");
+
+        {
+            final AbstractLayout layout = new AbsoluteLayout();
+            layout.setCaption(layout.getClass().getSimpleName());
+            layout.setStyleName("borders");
+            layout.setWidth("500px");
+            layout.setHeight("50px");
+            addComponent(layout);
+            final TextField tf = new TextField();
+            layout.addComponent(tf);
+            Button b = new Button("-> TextArea", new Button.ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    if (tf.getRows() == 0) {
+                        tf.setRows(3);
+                        event.getButton().setCaption("Move");
+                    } else {
+                        layout.setCaption(layout.getClass().getSimpleName()
+                                + " done");
+                        event.getButton().setCaption("done");
+                    }
+
+                }
+            });
+            addComponent(b);
+        }
+        {
+            final AbstractLayout layout = new VerticalLayout();
+            layout.setCaption(layout.getClass().getSimpleName());
+            layout.setStyleName("borders");
+            layout.setWidth("500px");
+            layout.setHeight("50px");
+            addComponent(layout);
+            final TextField tf = new TextField();
+            layout.addComponent(tf);
+            Button b = new Button("-> TextArea", new Button.ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    if (tf.getRows() == 0) {
+                        tf.setRows(3);
+                        event.getButton().setCaption("Move");
+                    } else {
+                        layout.setCaption(layout.getClass().getSimpleName()
+                                + " done");
+                        event.getButton().setCaption("done");
+                    }
+
+                }
+            });
+            addComponent(b);
+        }
+
+        {
+            final AbstractLayout layout = new HorizontalLayout();
+            layout.setCaption(layout.getClass().getSimpleName());
+            layout.setStyleName("borders");
+            layout.setWidth("500px");
+            layout.setHeight("50px");
+            addComponent(layout);
+            final TextField tf = new TextField();
+            layout.addComponent(tf);
+            Button b = new Button("-> TextArea", new Button.ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    if (tf.getRows() == 0) {
+                        tf.setRows(3);
+                        event.getButton().setCaption("Move");
+                    } else {
+                        layout.setCaption(layout.getClass().getSimpleName()
+                                + " done");
+                        event.getButton().setCaption("done");
+                    }
+
+                }
+            });
+            addComponent(b);
+        }
+
+        {
+            final AbstractLayout layout = new GridLayout();
+            layout.setCaption(layout.getClass().getSimpleName());
+            layout.setStyleName("borders");
+            layout.setWidth("500px");
+            layout.setHeight("50px");
+            addComponent(layout);
+            final TextField tf = new TextField();
+            layout.addComponent(tf);
+            Button b = new Button("-> TextArea", new Button.ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    if (tf.getRows() == 0) {
+                        tf.setRows(3);
+                        event.getButton().setCaption("Move");
+                    } else {
+                        layout.setCaption(layout.getClass().getSimpleName()
+                                + " done");
+                        event.getButton().setCaption("done");
+                    }
+
+                }
+            });
+            addComponent(b);
+        }
+
+        {
+            final AbstractLayout layout = new CssLayout();
+            layout.setCaption(layout.getClass().getSimpleName());
+            layout.setStyleName("borders");
+            layout.setWidth("500px");
+            layout.setHeight("50px");
+            addComponent(layout);
+            final TextField tf = new TextField();
+            layout.addComponent(tf);
+            Button b = new Button("-> TextArea", new Button.ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    if (tf.getRows() == 0) {
+                        tf.setRows(3);
+                        event.getButton().setCaption("Move");
+                    } else {
+                        layout.setCaption(layout.getClass().getSimpleName()
+                                + " done");
+                        event.getButton().setCaption("done");
+                    }
+
+                }
+            });
+            addComponent(b);
+        }
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "First click turns TextField into a TextArea (on the client); second click modifies the layout - widget should still be a TextArea.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5457;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/layouttester/AbstractLayoutTests.java b/tests/testbench/com/vaadin/tests/layouts/layouttester/AbstractLayoutTests.java
new file mode 100644
index 0000000000..9bfbebc439
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/layouttester/AbstractLayoutTests.java
@@ -0,0 +1,30 @@
+package com.vaadin.tests.layouts.layouttester;
+
+import com.vaadin.ui.Layout;
+
+public abstract class AbstractLayoutTests {
+
+    protected static final String FOLDER_16_PNG = "../icons/runo/16/folder.png";
+    protected static final String CALENDAR_32_PNG = "../runo/icons/32/calendar.png";
+    protected static final String LOCK_16_PNG = "../runo/icons/16/lock.png";
+    protected static final String GLOBE_16_PNG = "../runo/icons/16/globe.png";
+
+    abstract protected Layout getCaptionsTests();
+
+    abstract protected Layout getIconsTests();
+
+    abstract protected Layout getRequiredErrorIndicatorsTests();
+
+    abstract protected Layout getAlignmentTests();
+
+    abstract protected Layout getExpandRatiosTests();
+
+    abstract protected Layout getMarginSpacingTests();
+
+    abstract protected Layout getComponentAddReplaceMoveTests();
+
+    abstract protected Layout getComponentSizingTests();
+
+    abstract protected Layout getLayoutSizingTests();
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/layouttester/GridLayoutTests.java b/tests/testbench/com/vaadin/tests/layouts/layouttester/GridLayoutTests.java
new file mode 100644
index 0000000000..6b56d93a30
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/layouttester/GridLayoutTests.java
@@ -0,0 +1,593 @@
+package com.vaadin.tests.layouts.layouttester;
+
+import java.util.Date;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.SystemError;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.AbstractField;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.InlineDateField;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.themes.Reindeer;
+
+public class GridLayoutTests extends AbstractLayoutTests {
+
+    private AbstractComponent rc1, col1, col2, col3, row1, row2, row3, x3, x22;
+
+    public GridLayoutTests(Application application) {
+        super();
+    }
+
+    @Override
+    protected Layout getAlignmentTests() {
+        HorizontalLayout hlo = new HorizontalLayout();
+        hlo.setSpacing(true);
+        GridLayout glo = getTestGrid();
+        glo.addStyleName(Reindeer.LAYOUT_WHITE);
+        Alignment[] alignments = new Alignment[] { Alignment.BOTTOM_LEFT,
+                Alignment.BOTTOM_CENTER, Alignment.BOTTOM_RIGHT,
+                Alignment.MIDDLE_LEFT, Alignment.MIDDLE_CENTER,
+                Alignment.MIDDLE_RIGHT, Alignment.TOP_LEFT,
+                Alignment.TOP_CENTER, Alignment.TOP_RIGHT };
+
+        glo.replaceComponent(col1, col1 = new TextField());
+        glo.replaceComponent(col2, col2 = new TextField());
+        glo.replaceComponent(col3, col3 = new TextField());
+        ((TextField) col1).setValue("BOTTOM_RIGHT");
+        ((TextField) col2).setValue("BOTTOM_LEFT");
+        ((TextField) col3).setValue("BOTTOM_CENTER");
+        glo.setComponentAlignment(col2, alignments[0]);
+        glo.setComponentAlignment(col3, alignments[1]);
+        glo.setComponentAlignment(col1, alignments[2]);
+
+        glo.setComponentAlignment(row1, alignments[3]);
+        glo.setComponentAlignment(row2, alignments[4]);
+        glo.setComponentAlignment(row3, alignments[5]);
+        hlo.addComponent(glo);
+        glo = getTestGrid();
+        glo.replaceComponent(row1, row1 = new DateField());
+        glo.replaceComponent(row2, row2 = new DateField());
+        glo.replaceComponent(row3, row3 = new DateField());
+        glo.setComponentAlignment(col2, alignments[6]);
+        glo.setComponentAlignment(col3, alignments[7]);
+        glo.setComponentAlignment(col1, alignments[8]);
+        hlo.addComponent(glo);
+        return hlo;
+    }
+
+    @Override
+    protected Layout getCaptionsTests() {
+        GridLayout glo = getTestGrid();
+        glo.setWidth("600px");
+        String[] captions = new String[] {
+                "",
+                "abcdefghijklmnopq",
+                "abc def hij klm nop qrs tuv xyz qaz wsx edc rfv tgb yhn ujm mko nji bhu vgy cft cde" };
+        glo.replaceComponent(col1, col1 = new TextField());
+        glo.replaceComponent(col2, col2 = new TextField());
+        glo.replaceComponent(col3, col3 = new TextField());
+
+        col1.setCaption(captions[0]);
+        col2.setCaption(captions[1]);
+        col3.setCaption(captions[2]);
+        col3.setIcon(new ThemeResource(LOCK_16_PNG));
+
+        glo.replaceComponent(row1, row1 = new Label());
+        glo.replaceComponent(row2, row2 = new Label());
+        glo.replaceComponent(row3, row3 = new Label());
+
+        row1.setCaption(captions[0]);
+        row2.setCaption(captions[1]);
+        row3.setCaption(captions[2]);
+
+        glo.replaceComponent(x3, x3 = getTestTabsheet());
+        glo.replaceComponent(x22, x22 = getTestTable());
+        x22.setComponentError(new UserError("component error, user error"));
+
+        x3.setCaption(captions[1]);
+        x22.setCaption(captions[2]);
+
+        return glo;
+    }
+
+    @Override
+    protected Layout getComponentAddReplaceMoveTests() {
+        final GridLayout glo = getTestGrid();
+        glo.setHeight("350px");
+        Layout baseLayout = getBaseLayout();
+        final Button button1 = new Button("Test add");
+        final Button button2 = new Button("Test replace");
+        final Button button3 = new Button("Test move");
+        final Button button4 = new Button("Test remove comp 1,1");
+        final Button button5 = new Button("Test remove row 0");
+        final Button button6 = new Button("Test remove comp row3");
+
+        baseLayout.addComponent(button1);
+        baseLayout.addComponent(button2);
+        baseLayout.addComponent(button3);
+        baseLayout.addComponent(button4);
+        baseLayout.addComponent(button5);
+        baseLayout.addComponent(button6);
+        baseLayout.addComponent(glo);
+        button1.setEnabled(true);
+        button2.setEnabled(false);
+        button3.setEnabled(false);
+        button4.setEnabled(false);
+        button5.setEnabled(false);
+        button6.setEnabled(false);
+
+        final HorizontalLayout source = new HorizontalLayout();
+        source.addComponent(new Label("MOVE LABEL 1"));
+        source.addComponent(new Label("MOVE LABEL 2"));
+
+        final AbstractComponent cc1 = getTestTabsheet();
+        cc1.setCaption("ADDED COMPONENT");
+
+        final AbstractComponent cc2 = getTestTabsheet();
+        cc2.setCaption("REPLACEMENT COMPONENT");
+
+        button1.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.addComponent(cc1);
+                button1.setEnabled(false);
+                button2.setEnabled(true);
+            }
+        });
+        button2.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.replaceComponent(x22, cc2);
+                button2.setEnabled(false);
+                button3.setEnabled(true);
+            }
+        });
+        button3.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.moveComponentsFrom(source);
+                button3.setEnabled(false);
+                button4.setEnabled(true);
+            }
+        });
+        button4.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.removeComponent(1, 1);
+                button4.setEnabled(false);
+                button5.setEnabled(true);
+            }
+        });
+
+        button5.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.removeRow(0);
+                button5.setEnabled(false);
+                button6.setEnabled(true);
+            }
+        });
+        button6.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.removeComponent(row3);
+                button6.setEnabled(false);
+            }
+        });
+
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getComponentSizingTests() {
+        final GridLayout glo = getTestGrid();
+        glo.setHeight("350px");
+        Layout baseLayout = getBaseLayout();
+        final Button button1 = new Button("full size, 3x1");
+        final Button button2 = new Button("200 px width, 3x1");
+        final Button button3 = new Button("200 px width, table");
+        final Button button4 = new Button("undefined size+add, table");
+
+        glo.replaceComponent(x22, x22 = getTestTable());
+
+        baseLayout.addComponent(button1);
+        baseLayout.addComponent(button2);
+        baseLayout.addComponent(button3);
+        baseLayout.addComponent(button4);
+        baseLayout.addComponent(glo);
+        button1.setEnabled(true);
+        button2.setEnabled(false);
+        button3.setEnabled(false);
+        button4.setEnabled(false);
+
+        button1.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                x3.setSizeFull();
+                button1.setEnabled(false);
+                button2.setEnabled(true);
+            }
+        });
+        button2.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                x3.setWidth("200px");
+                button2.setEnabled(false);
+                button3.setEnabled(true);
+            }
+        });
+        button3.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                x22.setWidth("200px");
+                button3.setEnabled(false);
+                button4.setEnabled(true);
+            }
+        });
+        button4.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                x22.setSizeUndefined();
+                ((Table) x22).addItem(new Object[] { "NEW ROW1" }, 3);
+                ((Table) x22).addItem(new Object[] { "NEW ROW2" }, 4);
+                button4.setEnabled(false);
+            }
+        });
+
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getExpandRatiosTests() {
+        final GridLayout glo = getTestGrid();
+        Layout baseLayout = getBaseLayout();
+        final Button button1 = new Button("set col 3 expand 1");
+        final Button button2 = new Button("set all cols expand 0.25");
+        final Button button3 = new Button("set row 0 expand 0.5");
+        final Button button4 = new Button("set row 3 expand 0.2");
+        glo.setHeight("400px");
+        glo.replaceComponent(x22, x22 = getTestTable());
+
+        baseLayout.addComponent(button1);
+        baseLayout.addComponent(button2);
+        baseLayout.addComponent(button3);
+        baseLayout.addComponent(button4);
+        baseLayout.addComponent(glo);
+        button1.setEnabled(true);
+        button2.setEnabled(false);
+        button3.setEnabled(false);
+        button4.setEnabled(false);
+
+        button1.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.setColumnExpandRatio(3, 1);
+                button1.setEnabled(false);
+                button2.setEnabled(true);
+            }
+        });
+        button2.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.setColumnExpandRatio(0, 0.25f);
+                glo.setColumnExpandRatio(1, 0.25f);
+                glo.setColumnExpandRatio(2, 0.25f);
+                glo.setColumnExpandRatio(3, 0.25f);
+                button2.setEnabled(false);
+                button3.setEnabled(true);
+            }
+        });
+        button3.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.setRowExpandRatio(0, 0.5f);
+                button3.setEnabled(false);
+                button4.setEnabled(true);
+            }
+        });
+        button4.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.setRowExpandRatio(3, 0.3f);
+                button4.setEnabled(false);
+            }
+        });
+
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getIconsTests() {
+        GridLayout glo = getTestGrid();
+        glo.setWidth("600px");
+        Resource[] icons = new Resource[] { new ThemeResource(CALENDAR_32_PNG),
+                new ThemeResource(LOCK_16_PNG) };
+
+        glo.replaceComponent(col1, col1 = new TextField("TEXTFIELD"));
+        glo.replaceComponent(col2, col2 = new Label("LABEL"));
+        glo.replaceComponent(col3, col3 = new Link("LINK", null));
+
+        col1.setIcon(icons[0]);
+        col2.setIcon(icons[1]);
+        col3.setIcon(icons[0]);
+        rc1.setIcon(icons[1]);
+        col3.setCaption("long test caption bewucbwuebco or bmort b cbwecubw wbeucwe asdasd asdasda asdasd");
+        col3.setComponentError(new UserError("component error, user error"));
+
+        glo.replaceComponent(row1, row1 = new DateField());
+        glo.replaceComponent(row2, row2 = new NativeSelect());
+        glo.replaceComponent(row3, row3 = getTestTabsheet());
+
+        row1.setIcon(icons[1]);
+        row2.setIcon(icons[0]);
+        row3.setIcon(icons[1]);
+
+        glo.replaceComponent(x3, x3 = new CheckBox("CHECKBOX"));
+        glo.replaceComponent(x22, x22 = new Panel("PANEL"));
+        x22.setIcon(new ThemeResource(CALENDAR_32_PNG));
+
+        x3.setIcon(icons[0]);
+        x22.setIcon(icons[1]);
+
+        return glo;
+    }
+
+    @Override
+    protected Layout getLayoutSizingTests() {
+        final GridLayout glo = getTestGrid();
+        Layout baseLayout = getBaseLayout();
+        baseLayout.setWidth("500px");
+        baseLayout.setHeight("500px");
+        final Button button1 = new Button("Set fixed height 350px");
+        final Button button2 = new Button(
+                "Set undefined size and add component");
+        final Button button3 = new Button("Set fixed width and height 75%");
+        final Button button4 = new Button("Set size full");
+
+        glo.replaceComponent(x22, x22 = getTestTable());
+
+        baseLayout.addComponent(button1);
+        baseLayout.addComponent(button2);
+        baseLayout.addComponent(button3);
+        baseLayout.addComponent(button4);
+        baseLayout.addComponent(glo);
+        button1.setEnabled(true);
+        button2.setEnabled(false);
+        button3.setEnabled(false);
+        button4.setEnabled(false);
+
+        button1.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.setHeight("350px");
+                button1.setEnabled(false);
+                button2.setEnabled(true);
+            }
+        });
+        button2.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.setSizeUndefined();
+                glo.addComponent(new Label("--- NEW LABEL ---"));
+                button2.setEnabled(false);
+                button3.setEnabled(true);
+            }
+        });
+        button3.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.setWidth("75%");
+                glo.setHeight("75%");
+                button3.setEnabled(false);
+                button4.setEnabled(true);
+            }
+        });
+        button4.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.setSizeFull();
+                button4.setEnabled(false);
+            }
+        });
+
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getMarginSpacingTests() {
+        final GridLayout glo = getTestGrid();
+        Layout baseLayout = getBaseLayout();
+        baseLayout.setWidth("500px");
+        baseLayout.setHeight("500px");
+        final Button button1 = new Button("Set margin on");
+        final Button button2 = new Button("Set spacing on");
+        final Button button3 = new Button("Set margin off");
+        final Button button4 = new Button("Set spacing off");
+
+        baseLayout.addComponent(button1);
+        baseLayout.addComponent(button2);
+        baseLayout.addComponent(button3);
+        baseLayout.addComponent(button4);
+        button1.setEnabled(true);
+        button2.setEnabled(false);
+        button3.setEnabled(false);
+        button4.setEnabled(false);
+
+        baseLayout.addComponent(glo);
+
+        button1.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.setMargin(true);
+                button1.setEnabled(false);
+                button2.setEnabled(true);
+            }
+        });
+        button2.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.setSpacing(true);
+                button2.setEnabled(false);
+                button3.setEnabled(true);
+            }
+        });
+        button3.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.setMargin(false);
+                button3.setEnabled(false);
+                button4.setEnabled(true);
+            }
+        });
+        button4.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                glo.setSpacing(false);
+                button4.setEnabled(false);
+            }
+        });
+
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getRequiredErrorIndicatorsTests() {
+        GridLayout glo = getTestGrid();
+        glo.setWidth("600px");
+        Resource[] icons = new Resource[] { new ThemeResource(CALENDAR_32_PNG),
+                new ThemeResource(LOCK_16_PNG) };
+
+        glo.replaceComponent(col1, col1 = new TextField("TEXTFIELD"));
+        glo.replaceComponent(col2, col2 = new Label("LABEL"));
+        glo.replaceComponent(col3, col3 = new Link("LINK", null));
+
+        col1.setIcon(icons[0]);
+        col1.setComponentError(new UserError("component error, user error"));
+        col2.setComponentError(new SystemError("component error, system error"));
+        col3.setComponentError(new UserError("component error, user error"));
+
+        glo.replaceComponent(row1, row1 = new DateField());
+        glo.replaceComponent(row2, row2 = new NativeSelect());
+        glo.replaceComponent(row3, row3 = getTestTabsheet());
+
+        ((AbstractField) col1).setRequired(true);
+        ((AbstractField) col1).setValidationVisible(true);
+        ((AbstractField) col1).setRequiredError("required error");
+
+        ((AbstractField) row1).setRequired(true);
+        ((AbstractField) row1).setValidationVisible(true);
+        ((AbstractField) row1).setRequiredError("required error");
+
+        ((AbstractField) row2).setRequired(true);
+        ((AbstractField) row2).setValidationVisible(true);
+        ((AbstractField) row2).setRequiredError("required error");
+        row2.setComponentError(new UserError("component error, user error"));
+
+        row3.setComponentError(new UserError("component error, user error"));
+        row3.setIcon(icons[1]);
+        row3.setCaption("long test caption bewucbwuebco or bmort b cbwecubw wbeucwe asdasd asdasda asdasd");
+
+        glo.replaceComponent(x3, x3 = new CheckBox("CHECKBOX"));
+        glo.replaceComponent(x22, x22 = new Panel("PANEL"));
+
+        x3.setComponentError(new UserError("component error, user error"));
+        x22.setComponentError(new UserError("component error, user error"));
+        x22.setIcon(icons[0]);
+
+        return glo;
+    }
+
+    private GridLayout getTestGrid() {
+        // Create a 4 by 4 grid layout.
+        GridLayout grid = new GridLayout(4, 4);
+        // Fill out the first row using the cursor.
+        grid.addComponent(rc1 = new Button("R/C 1"));
+
+        grid.addComponent(col1 = new Button("Col " + (grid.getCursorX() + 1)));
+        grid.addComponent(col2 = new Button("Col " + (grid.getCursorX() + 1)));
+        grid.addComponent(col3 = new Button("Col " + (grid.getCursorX() + 1)));
+
+        // Fill out the first column using coordinates.
+
+        grid.addComponent(row1 = new Button("Row " + 1), 0, 1);
+        grid.addComponent(row2 = new Button("Row " + 2), 0, 2);
+        grid.addComponent(row3 = new Button("Row " + 3), 0, 3);
+
+        // Add some components of various shapes.
+        grid.addComponent(x3 = new Button("3x1 button"), 1, 1, 3, 1);
+        grid.addComponent(new Label("1x2 cell"), 1, 2, 1, 3);
+        x22 = new InlineDateField("A 2x2 date field");
+        ((InlineDateField) x22).setResolution(DateField.RESOLUTION_DAY);
+        ((InlineDateField) x22).setValue(new Date(128028960000l));
+        grid.addComponent(x22, 2, 2, 3, 3);
+        grid.setWidth("450px");
+        grid.setHeight("450px");
+        return grid;
+    }
+
+    private VerticalLayout getBaseLayout() {
+        VerticalLayout vlo = new VerticalLayout();
+        vlo.setSizeUndefined();
+        return vlo;
+    }
+
+    private AbstractComponent getTestTabsheet() {
+        TabSheet tabsheet = new TabSheet();
+        tabsheet.setSizeUndefined();
+        tabsheet.addTab(new UndefWideLabel("TAB1"), "TAB1", new ThemeResource(
+                GLOBE_16_PNG));
+        tabsheet.addTab(new UndefWideLabel("TAB2"), "TAB2", null);
+        return tabsheet;
+    }
+
+    private Table getTestTable() {
+        Table t = new Table();
+        t.setSizeUndefined();
+        t.setPageLength(5);
+        t.addContainerProperty("test", String.class, null);
+        t.addItem(new Object[] { "qwertyuiop asdfghjklzxccvbnm,m,." }, 1);
+        t.addItem(new Object[] { "YGVYTCTCTRXRXRXRX" }, 2);
+        return t;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java b/tests/testbench/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java
new file mode 100644
index 0000000000..ff6e76e480
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java
@@ -0,0 +1,559 @@
+package com.vaadin.tests.layouts.layouttester;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.SystemError;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.AbstractField;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.themes.Reindeer;
+
+public class HorizontalLayoutTests extends AbstractLayoutTests {
+
+    public HorizontalLayoutTests(Application application) {
+        super();
+    }
+
+    @Override
+    protected Layout getAlignmentTests() {
+        Layout baseLayout = getBaseLayout();
+        HorizontalLayout vlo = getTestLaytout();
+        AbstractComponent[] components = new AbstractComponent[9];
+        String[] styles = { Reindeer.LAYOUT_BLUE, Reindeer.LAYOUT_WHITE };
+        Alignment[] alignments = new Alignment[] { Alignment.BOTTOM_LEFT,
+                Alignment.BOTTOM_CENTER, Alignment.BOTTOM_RIGHT,
+                Alignment.MIDDLE_LEFT, Alignment.MIDDLE_CENTER,
+                Alignment.MIDDLE_RIGHT, Alignment.TOP_LEFT,
+                Alignment.TOP_CENTER, Alignment.TOP_RIGHT };
+
+        vlo.addStyleName(Reindeer.LAYOUT_WHITE);
+        baseLayout.addComponent(vlo);
+        int index = 0;
+        for (int i = 0; i < components.length; i++) {
+            if (i > 0 && i % 3 == 0) {
+                vlo = getTestLaytout();
+                vlo.addStyleName(styles[index++]);
+                baseLayout.addComponent(vlo);
+            }
+            components[i] = new TextField();
+            ((TextField) components[i]).setValue("FIELD " + i);
+            vlo.addComponent(components[i]);
+            vlo.setComponentAlignment(components[i], alignments[i]);
+        }
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getCaptionsTests() {
+        Layout baseLayout = getBaseLayout();
+        AbstractComponent component = null;
+
+        String[] captions = new String[] {
+                "",
+                "abcdefghijklmnopq",
+                "abc def hij klm nop qrs tuv xyz qaz wsx edc rfv tgb yhn ujm mko nji bhu vgy cft cde" };
+
+        HorizontalLayout vlo = getTestLaytout();
+        for (int i = 0; i < captions.length; i++) {
+            component = new TextField();
+            ((TextField) component).setValue("FIELD " + i);
+            component.setCaption(captions[i]);
+            vlo.addComponent(component);
+        }
+        baseLayout.addComponent(vlo);
+        vlo = getTestLaytout();
+        for (int i = 0; i < captions.length; i++) {
+            component = new Label();
+            ((Label) component).setValue("Label " + i);
+            component.setCaption(captions[i]);
+            vlo.addComponent(component);
+        }
+        baseLayout.addComponent(vlo);
+        vlo = getTestLaytout();
+        for (int i = 0; i < captions.length; i++) {
+            component = new Select();
+            component.setCaption(captions[i]);
+            component.setIcon(new ThemeResource(LOCK_16_PNG));
+            vlo.addComponent(component);
+        }
+        baseLayout.addComponent(vlo);
+        vlo = getTestLaytout();
+        for (int i = 0; i < captions.length; i++) {
+            component = getTestTabsheet();
+            component.setCaption(captions[i]);
+            component.setComponentError(new UserError(
+                    "component error, user error"));
+            vlo.addComponent(component);
+        }
+        baseLayout.addComponent(vlo);
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getComponentAddReplaceMoveTests() {
+        final HorizontalLayout vlo = getTestLaytout();
+        Layout baseLayout = getBaseLayout();
+        final HorizontalLayout source = new HorizontalLayout();
+        source.addComponent(new Label("OTHER LABEL 1"));
+        source.addComponent(new Label("OTHER LABEL 2"));
+
+        final AbstractComponent c1 = new Button("BUTTON");
+        final AbstractComponent c2 = new Label("<b>LABEL</b>",
+                Label.CONTENT_XHTML);
+        final AbstractComponent c3 = new Table("TABLE");
+        c3.setHeight("100px");
+        c3.setWidth("100%");
+
+        final Button addButton = new Button("Test add");
+        final Button replaceButton = new Button("Test replace");
+        final Button moveButton = new Button("Test move");
+        final Button removeButton = new Button("Test remove");
+
+        replaceButton.setEnabled(false);
+        moveButton.setEnabled(false);
+        removeButton.setEnabled(false);
+
+        addButton.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo.addComponent(new TextField());
+                addButton.setEnabled(false);
+                replaceButton.setEnabled(true);
+            }
+        });
+        replaceButton.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo.replaceComponent(c1, c3);
+                replaceButton.setEnabled(false);
+                moveButton.setEnabled(true);
+            }
+        });
+        moveButton.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo.moveComponentsFrom(source);
+                moveButton.setEnabled(false);
+                removeButton.setEnabled(true);
+            }
+        });
+        removeButton.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo.removeComponent(c1);
+                vlo.removeComponent(c2);
+                removeButton.setEnabled(false);
+            }
+        });
+
+        baseLayout.addComponent(addButton);
+        baseLayout.addComponent(replaceButton);
+        baseLayout.addComponent(moveButton);
+        baseLayout.addComponent(removeButton);
+
+        vlo.addComponent(c1);
+        vlo.addComponent(c2);
+        vlo.addComponent(c3);
+        baseLayout.addComponent(vlo);
+
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getComponentSizingTests() {
+        final HorizontalLayout vlo = getTestLaytout();
+        Layout baseLayout = getBaseLayout();
+
+        final AbstractComponent c = getTestTable();
+
+        final Button biggerButton = new Button("full size");
+        final Button smallerButton = new Button("200 px width");
+        final Button originalButton = new Button("undefined size+add");
+
+        baseLayout.addComponent(biggerButton);
+        baseLayout.addComponent(smallerButton);
+        baseLayout.addComponent(originalButton);
+        vlo.addComponent(c);
+        baseLayout.addComponent(vlo);
+
+        biggerButton.setEnabled(true);
+        smallerButton.setEnabled(false);
+        originalButton.setEnabled(false);
+
+        biggerButton.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                c.setSizeFull();
+                biggerButton.setEnabled(false);
+                smallerButton.setEnabled(true);
+            }
+        });
+        smallerButton.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                c.setWidth("200px");
+                smallerButton.setEnabled(false);
+                originalButton.setEnabled(true);
+            }
+        });
+        originalButton.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                originalButton.setEnabled(false);
+                c.setSizeUndefined();
+                ((Table) c)
+                        .addItem(
+                                new Object[] { "VYVTCTC VYVYV ECECCE NIDSD SDMPOM" },
+                                3);
+            }
+        });
+
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getLayoutSizingTests() {
+        final HorizontalLayout vlo = getTestLaytout();
+        vlo.setSpacing(false);
+        vlo.setMargin(false);
+        Layout baseLayout = getBaseLayout();
+        final AbstractComponent c1 = getTestTable();
+        c1.setSizeFull();
+        final AbstractComponent c2 = getTestTable();
+        c2.setSizeFull();
+
+        final Button button1 = new Button("Set fixed height 350px");
+        final Button button2 = new Button(
+                "Set undefined size and add component");
+        final Button button3 = new Button("Set fixed width and height 75%");
+        final Button button4 = new Button("Set size full");
+
+        baseLayout.addComponent(button1);
+        baseLayout.addComponent(button2);
+        baseLayout.addComponent(button3);
+        baseLayout.addComponent(button4);
+        button1.setEnabled(true);
+        button2.setEnabled(false);
+        button3.setEnabled(false);
+        button4.setEnabled(false);
+
+        vlo.addComponent(c1);
+        vlo.addComponent(c2);
+        vlo.setExpandRatio(c1, 0.5f);
+        vlo.setExpandRatio(c2, 0.5f);
+
+        baseLayout.addComponent(vlo);
+
+        button1.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo.setHeight("350px");
+                button1.setEnabled(false);
+                button2.setEnabled(true);
+            }
+        });
+        button2.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo.setSizeUndefined();
+                vlo.addComponent(new Label("--- NEW LABEL ---"));
+                button2.setEnabled(false);
+                button3.setEnabled(true);
+            }
+        });
+        button3.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo.setWidth("75%");
+                vlo.setHeight("75%");
+                button3.setEnabled(false);
+                button4.setEnabled(true);
+            }
+        });
+        button4.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo.setSizeFull();
+                button4.setEnabled(false);
+            }
+        });
+
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getExpandRatiosTests() {
+        final HorizontalLayout vlo = getTestLaytout();
+        Layout baseLayout = getBaseLayout();
+        final AbstractComponent c1 = getTestTable();
+        c1.setSizeFull();
+        final AbstractComponent c2 = getTestTable();
+        c2.setSizeFull();
+
+        final Button button1 = new Button("Expand to 1/undefined");
+        final Button button2 = new Button("Expand to 0.5/0.5");
+        final Button button3 = new Button("Expand to 0.75/0.25");
+
+        baseLayout.addComponent(button1);
+        baseLayout.addComponent(button2);
+        baseLayout.addComponent(button3);
+        button1.setEnabled(true);
+        button2.setEnabled(false);
+        button3.setEnabled(false);
+
+        vlo.addComponent(c1);
+        vlo.addComponent(c2);
+        baseLayout.addComponent(vlo);
+
+        button1.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo.setExpandRatio(c1, 1.0f);
+                button1.setEnabled(false);
+                button2.setEnabled(true);
+            }
+        });
+        button2.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo.setExpandRatio(c1, 0.5f);
+                vlo.setExpandRatio(c2, 0.5f);
+                button2.setEnabled(false);
+                button3.setEnabled(true);
+            }
+        });
+        button3.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo.setExpandRatio(c1, 0.75f);
+                vlo.setExpandRatio(c2, 0.25f);
+                button3.setEnabled(false);
+            }
+        });
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getIconsTests() {
+        HorizontalLayout vlo = getTestLaytout();
+        AbstractComponent[] components = new AbstractComponent[2];
+        Layout baseLayout = getBaseLayout();
+        Resource[] icons = new Resource[] { new ThemeResource(CALENDAR_32_PNG),
+                new ThemeResource(LOCK_16_PNG) };
+
+        for (int i = 0; i < components.length; i++) {
+            components[i] = new TextField();
+            ((TextField) components[i]).setValue("FIELD " + i);
+            components[i].setIcon(icons[i]);
+            components[i]
+                    .setCaption("long test caption bewucbwuebco or bmort b cbwecubw wbeucwe asdasd asdasda asdasd");
+            vlo.addComponent(components[i]);
+        }
+        for (int i = 0; i < components.length; i++) {
+            components[i] = new Label();
+            ((Label) components[i]).setValue("Label " + i);
+            components[i].setIcon(icons[i]);
+            vlo.addComponent(components[i]);
+        }
+        baseLayout.addComponent(vlo);
+        vlo = getTestLaytout();
+        for (int i = 0; i < components.length; i++) {
+            components[i] = new Select();
+            components[i].setIcon(icons[i]);
+            vlo.addComponent(components[i]);
+        }
+        for (int i = 0; i < components.length; i++) {
+            components[i] = new Button();
+            components[i].setComponentError(new UserError(
+                    "component error, user error"));
+            components[i].setIcon(icons[i]);
+            vlo.addComponent(components[i]);
+        }
+        for (int i = 0; i < components.length; i++) {
+            components[i] = new Link("Link", null);
+            components[i].setIcon(icons[i]);
+            vlo.addComponent(components[i]);
+        }
+        baseLayout.addComponent(vlo);
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getMarginSpacingTests() {
+        final HorizontalLayout vlo = getTestLaytout();
+        vlo.setSpacing(false);
+        vlo.setMargin(false);
+        Layout baseLayout = getBaseLayout();
+        final AbstractComponent c1 = getTestTable();
+        c1.setSizeFull();
+        final AbstractComponent c2 = getTestTable();
+        c2.setSizeFull();
+
+        final Button button1 = new Button("Set margin on");
+        final Button button2 = new Button("Set spacing on");
+        final Button button3 = new Button("Set margin off");
+        final Button button4 = new Button("Set spacing off");
+
+        baseLayout.addComponent(button1);
+        baseLayout.addComponent(button2);
+        baseLayout.addComponent(button3);
+        baseLayout.addComponent(button4);
+        button1.setEnabled(true);
+        button2.setEnabled(false);
+        button3.setEnabled(false);
+        button4.setEnabled(false);
+
+        vlo.addComponent(c1);
+        vlo.addComponent(c2);
+        vlo.setExpandRatio(c1, 0.5f);
+        vlo.setExpandRatio(c2, 0.5f);
+        baseLayout.addComponent(vlo);
+
+        button1.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo.setMargin(true);
+                button1.setEnabled(false);
+                button2.setEnabled(true);
+            }
+        });
+        button2.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo.setSpacing(true);
+                button2.setEnabled(false);
+                button3.setEnabled(true);
+            }
+        });
+        button3.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo.setMargin(false);
+                button3.setEnabled(false);
+                button4.setEnabled(true);
+            }
+        });
+        button4.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo.setSpacing(false);
+                button4.setEnabled(false);
+            }
+        });
+
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getRequiredErrorIndicatorsTests() {
+        HorizontalLayout vlo = getTestLaytout();
+        Layout baseLayout = getBaseLayout();
+        AbstractComponent[] components = new AbstractComponent[4];
+        components[0] = new Label("LABEL");
+        components[0].setSizeUndefined();
+        components[1] = new Button("BUTTON");
+        components[2] = getTestTable();
+        components[3] = getTestTabsheet();
+        components[3].setIcon(new ThemeResource(LOCK_16_PNG));
+
+        AbstractField[] fields = new AbstractField[5];
+        fields[0] = new TextField();
+        fields[0].setRequired(true);
+        fields[0].setValidationVisible(true);
+        fields[0].setRequiredError("required error");
+
+        fields[1] = new TextField();
+        fields[1].setValue("TEXTFIELD2");
+        fields[1]
+                .setComponentError(new UserError("component error, user error"));
+
+        fields[2] = new Select();
+        fields[2].setComponentError(new SystemError(
+                "component error, system error"));
+        fields[3] = new DateField();
+        fields[3].setComponentError(new SystemError(
+                "component error, system error"));
+
+        fields[4] = new CheckBox();
+        fields[4]
+                .setComponentError(new UserError("component error, user error"));
+
+        for (int i = 0; i < components.length; i++) {
+            components[i].setComponentError(new UserError(
+                    "component error, user error"));
+            vlo.addComponent(components[i]);
+        }
+        baseLayout.addComponent(vlo);
+        vlo = getTestLaytout();
+        for (int i = 0; i < fields.length; i++) {
+            vlo.addComponent(fields[i]);
+        }
+        baseLayout.addComponent(vlo);
+        return baseLayout;
+    }
+
+    private VerticalLayout getBaseLayout() {
+        VerticalLayout vlo = new VerticalLayout();
+        vlo.setSizeUndefined();
+        return vlo;
+    }
+
+    private HorizontalLayout getTestLaytout() {
+        HorizontalLayout vlo = new HorizontalLayout();
+        vlo.setHeight("100px");
+        vlo.setWidth("750px");
+        return vlo;
+    }
+
+    private AbstractComponent getTestTabsheet() {
+        TabSheet tabsheet = new TabSheet();
+        tabsheet.setSizeUndefined();
+        tabsheet.addTab(new UndefWideLabel("TAB1"), "TAB1", new ThemeResource(
+                GLOBE_16_PNG));
+        tabsheet.addTab(new UndefWideLabel("TAB2"), "TAB2", null);
+        return tabsheet;
+    }
+
+    private Table getTestTable() {
+        Table t = new Table();
+        t.setSizeUndefined();
+        t.setPageLength(5);
+        t.addContainerProperty("test", String.class, null);
+        t.addItem(new Object[] { "qwertyuiop asdfghjkl zxccvbnm,m,." }, 1);
+        t.addItem(new Object[] { "YGVYTCTCTRXRXRXRX" }, 2);
+        return t;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/layouttester/LayoutTesterApplication.html b/tests/testbench/com/vaadin/tests/layouts/layouttester/LayoutTesterApplication.html
new file mode 100644
index 0000000000..b0e2444986
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/layouttester/LayoutTesterApplication.html
@@ -0,0 +1,902 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>LayoutTesterApplication</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">LayoutTesterApplication</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.layouts.layouttester.LayoutTesterApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>1</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>2</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>3</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>4</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>5</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>6</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>7</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>8</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>9</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>10</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>11</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>12</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>13</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>14</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>15</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>16</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>17</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>18</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>19</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>20</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>21</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>22</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>23</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>24</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>25</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>26</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>27</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>28</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=class com.vaadin.ui.HorizontalLayout</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>29</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>30</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<!-- Only for IE6 so it has time to load images and adjust -->
+<tr>
+	<td>pause</td>
+	<td>2000</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>31</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>32</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>33</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>34</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>35</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>36</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>37</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>38</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>39</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>40</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>41</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>42</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>43</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>44</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>45</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>46</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>47</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>48</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>49</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>50</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>51</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>52</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>53</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>54</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>55</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>56</td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=class com.vaadin.ui.GridLayout</td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>57</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>58</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>59</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>60</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>61</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>62</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>63</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>64</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>65</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>66</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>67</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>68</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>69</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>70</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>71</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>72</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>73</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>74</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>75</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>76</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>77</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>78</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>79</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>80</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>81</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>82</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>83</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>84</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>85</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>86</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>87</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestslayoutslayouttesterLayoutTesterApplication::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>88</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/layouts/layouttester/LayoutTesterApplication.java b/tests/testbench/com/vaadin/tests/layouts/layouttester/LayoutTesterApplication.java
new file mode 100644
index 0000000000..6f73a42497
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/layouttester/LayoutTesterApplication.java
@@ -0,0 +1,128 @@
+package com.vaadin.tests.layouts.layouttester;
+
+import java.lang.reflect.Method;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.themes.Reindeer;
+
+@SuppressWarnings("serial")
+public class LayoutTesterApplication extends AbstractTestCase {
+    Button nextButton = new Button("Next");
+    private int layoutIndex = -1;
+    private int layoutCount = 1;
+
+    private Method[] layoutGetters;
+    private Window mainWindow;
+    private NativeSelect layoutSelector;
+
+    @Override
+    public void init() {
+        mainWindow = new Window("LayoutTesterApplication");
+        setMainWindow(mainWindow);
+        loadLayoutGetters();
+        nextLaytout();
+
+        nextButton.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = -1577298910202253538L;
+
+            public void buttonClick(ClickEvent event) {
+                nextLaytout();
+            }
+        });
+    }
+
+    private void nextLaytout() {
+        try {
+            mainWindow.removeAllComponents();
+            HorizontalLayout vlo = new HorizontalLayout();
+            vlo.setSpacing(true);
+            ++layoutIndex;
+            if (layoutIndex >= layoutCount) {
+                layoutIndex = 0;
+            }
+            mainWindow.addComponent(vlo);
+            vlo.addComponent(nextButton);
+            vlo.addComponent(getLayoutTypeSelect());
+            vlo.addComponent(new UndefWideLabel(layoutGetters[layoutIndex]
+                    .getName()));
+
+            Layout lo = null;
+            if (layoutSelector.getValue() == VerticalLayout.class) {
+                lo = getVerticalTestLayout(layoutIndex);
+            } else if (layoutSelector.getValue() == HorizontalLayout.class) {
+                lo = getHorizontalTestLayout(layoutIndex);
+            } else if (layoutSelector.getValue() == GridLayout.class) {
+                lo = getGridTestLayout(layoutIndex);
+            }
+            if (lo != null) {
+                lo.addStyleName(Reindeer.LAYOUT_BLUE);
+                mainWindow.addComponent(lo);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void loadLayoutGetters() {
+        layoutGetters = AbstractLayoutTests.class.getDeclaredMethods();
+        layoutCount = layoutGetters.length;
+    }
+
+    public Layout getVerticalTestLayout(int index) throws Exception {
+        VerticalLayoutTests vlotest = new VerticalLayoutTests(this);
+        return (Layout) layoutGetters[index].invoke(vlotest, (Object[]) null);
+    }
+
+    public Layout getHorizontalTestLayout(int index) throws Exception {
+        HorizontalLayoutTests hlotest = new HorizontalLayoutTests(this);
+        return (Layout) layoutGetters[index].invoke(hlotest, (Object[]) null);
+    }
+
+    public Layout getGridTestLayout(int index) throws Exception {
+        GridLayoutTests hlotest = new GridLayoutTests(this);
+        return (Layout) layoutGetters[index].invoke(hlotest, (Object[]) null);
+    }
+
+    private NativeSelect getLayoutTypeSelect() {
+        if (layoutSelector == null) {
+            layoutSelector = new NativeSelect();
+            layoutSelector.addItem(VerticalLayout.class);
+            layoutSelector.addItem(HorizontalLayout.class);
+            layoutSelector.addItem(GridLayout.class);
+            layoutSelector.setNullSelectionAllowed(false);
+            layoutSelector.setImmediate(true);
+            layoutSelector.select(VerticalLayout.class);
+            layoutSelector.addListener(new Property.ValueChangeListener() {
+                private static final long serialVersionUID = -605319614765838359L;
+
+                public void valueChange(ValueChangeEvent event) {
+                    layoutIndex = -1;
+                    nextLaytout();
+                }
+            });
+        }
+        return layoutSelector;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Test application for VerticalLayout, HorizontalLayout, and GridLayout";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5334;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/layouttester/UndefWideLabel.java b/tests/testbench/com/vaadin/tests/layouts/layouttester/UndefWideLabel.java
new file mode 100644
index 0000000000..c998ce458a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/layouttester/UndefWideLabel.java
@@ -0,0 +1,12 @@
+package com.vaadin.tests.layouts.layouttester;
+
+import com.vaadin.ui.Label;
+
+public class UndefWideLabel extends Label {
+
+    public UndefWideLabel(String value) {
+        super(value);
+        setWidth(null);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java b/tests/testbench/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java
new file mode 100644
index 0000000000..8019ae5aca
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java
@@ -0,0 +1,589 @@
+package com.vaadin.tests.layouts.layouttester;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.SystemError;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.AbstractField;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class VerticalLayoutTests extends AbstractLayoutTests {
+
+    public VerticalLayoutTests(Application application) {
+        super();
+    }
+
+    @Override
+    protected Layout getAlignmentTests() {
+        Layout baseLayout = getBaseLayout();
+        ((HorizontalLayout) baseLayout).setSpacing(true);
+        VerticalLayout vlo = getTestLaytout();
+        AbstractComponent[] components = new AbstractComponent[9];
+        Alignment[] alignments = new Alignment[] { Alignment.BOTTOM_CENTER,
+                Alignment.BOTTOM_LEFT, Alignment.BOTTOM_RIGHT,
+                Alignment.MIDDLE_CENTER, Alignment.MIDDLE_LEFT,
+                Alignment.MIDDLE_RIGHT, Alignment.TOP_CENTER,
+                Alignment.TOP_LEFT, Alignment.TOP_RIGHT };
+
+        for (int i = 0; i < components.length / 2; i++) {
+            components[i] = new TextField();
+            ((TextField) components[i]).setValue("FIELD " + i);
+            vlo.addComponent(components[i]);
+            vlo.setComponentAlignment(components[i], alignments[i]);
+            vlo.addComponent(new Label("<hr />", Label.CONTENT_XHTML));
+        }
+        baseLayout.addComponent(vlo);
+        vlo = getTestLaytout();
+        for (int i = components.length / 2; i < components.length; i++) {
+            components[i] = new TextField();
+            ((TextField) components[i]).setValue("FIELD " + i);
+            vlo.addComponent(components[i]);
+            vlo.setComponentAlignment(components[i], alignments[i]);
+            vlo.addComponent(new Label("<hr />", Label.CONTENT_XHTML));
+        }
+        baseLayout.addComponent(vlo);
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getCaptionsTests() {
+        Layout baseLayout = getBaseLayout();
+        VerticalLayout vlo = getTestLaytout();
+        AbstractComponent component = null;
+
+        String[] captions = new String[] {
+                "",
+                "abcdefghijklmnopq",
+                "abc def hij klm nop qrs tuv xyz qaz wsx edc rfv tgb yhn ujm mko nji bhu vgy cft cde" };
+
+        for (int i = 0; i < captions.length; i++) {
+            component = new TextField();
+            ((TextField) component).setValue("FIELD " + i);
+            component.setCaption(captions[i]);
+            vlo.addComponent(component);
+        }
+        for (int i = 0; i < captions.length; i++) {
+            component = new Label();
+            ((Label) component).setValue("Label " + i);
+            component.setCaption(captions[i]);
+            vlo.addComponent(component);
+        }
+        baseLayout.addComponent(vlo);
+        vlo = getTestLaytout();
+        for (int i = 0; i < captions.length; i++) {
+            component = new Select();
+            component.setCaption(captions[i]);
+            component.setIcon(new ThemeResource(LOCK_16_PNG));
+            vlo.addComponent(component);
+        }
+        for (int i = 0; i < captions.length; i++) {
+            component = getTestTabsheet();
+            component.setCaption(captions[i]);
+            component.setComponentError(new UserError(
+                    "component error, user error"));
+            vlo.addComponent(component);
+        }
+        baseLayout.addComponent(vlo);
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getComponentAddReplaceMoveTests() {
+        Layout baseLayout = getBaseLayout();
+        final VerticalLayout vlo = getTestLaytout();
+        final VerticalLayout vlo2 = getTestLaytout();
+
+        final HorizontalLayout source = new HorizontalLayout();
+        source.addComponent(new Label("OTHER LABEL 1"));
+        source.addComponent(new Label("OTHER LABEL 2"));
+
+        final AbstractComponent c1 = new Button("BUTTON");
+        final AbstractComponent c2 = new Label("<b>LABEL</b>",
+                Label.CONTENT_XHTML);
+        final AbstractComponent c3 = new Table("TABLE");
+        c3.setHeight("100px");
+        c3.setWidth("100%");
+
+        final Button addButton = new Button("Test add");
+        final Button replaceButton = new Button("Test replace");
+        final Button moveButton = new Button("Test move");
+        final Button removeButton = new Button("Test remove");
+
+        replaceButton.setEnabled(false);
+        moveButton.setEnabled(false);
+        removeButton.setEnabled(false);
+
+        addButton.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo2.addComponent(new TextField());
+                addButton.setEnabled(false);
+                replaceButton.setEnabled(true);
+            }
+        });
+        replaceButton.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo2.replaceComponent(c1, c3);
+                replaceButton.setEnabled(false);
+                moveButton.setEnabled(true);
+            }
+        });
+        moveButton.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo2.moveComponentsFrom(source);
+                moveButton.setEnabled(false);
+                removeButton.setEnabled(true);
+            }
+        });
+        removeButton.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo2.removeComponent(c1);
+                vlo2.removeComponent(c2);
+                removeButton.setEnabled(false);
+            }
+        });
+
+        vlo.addComponent(addButton);
+        vlo.addComponent(replaceButton);
+        vlo.addComponent(moveButton);
+        vlo.addComponent(removeButton);
+
+        baseLayout.addComponent(vlo);
+        vlo2.addComponent(c1);
+        vlo2.addComponent(c2);
+        vlo2.addComponent(c3);
+        baseLayout.addComponent(vlo2);
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getComponentSizingTests() {
+        Layout baseLayout = getBaseLayout();
+        final VerticalLayout vlo = getTestLaytout();
+
+        final AbstractComponent c = getTestTable();
+
+        final Button biggerButton = new Button("full size");
+        final Button smallerButton = new Button("200 px width");
+        final Button originalButton = new Button("undefined size and add");
+
+        vlo.addComponent(biggerButton);
+        vlo.addComponent(smallerButton);
+        vlo.addComponent(originalButton);
+        baseLayout.addComponent(vlo);
+        final VerticalLayout vlo2 = getTestLaytout();
+        vlo2.addComponent(c);
+        baseLayout.addComponent(vlo2);
+
+        biggerButton.setEnabled(true);
+        smallerButton.setEnabled(false);
+        originalButton.setEnabled(false);
+
+        biggerButton.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                c.setSizeFull();
+                biggerButton.setEnabled(false);
+                smallerButton.setEnabled(true);
+            }
+        });
+        smallerButton.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                c.setWidth("200px");
+                smallerButton.setEnabled(false);
+                originalButton.setEnabled(true);
+            }
+        });
+        originalButton.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                originalButton.setEnabled(false);
+                c.setSizeUndefined();
+                ((Table) c)
+                        .addItem(
+                                new Object[] { "VYVTCTC VYVYV ECECCE NIDSD SDMPOM" },
+                                3);
+            }
+        });
+
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getLayoutSizingTests() {
+        Layout baseLayout = getBaseLayout();
+        final VerticalLayout vlo = getTestLaytout();
+
+        vlo.setSpacing(false);
+        vlo.setMargin(false);
+
+        final AbstractComponent c1 = getTestTable();
+        c1.setSizeFull();
+        final AbstractComponent c2 = getTestTable();
+        c2.setSizeFull();
+
+        final Button button1 = new Button("Set fixed height 350px");
+        final Button button2 = new Button(
+                "Set undefined size and add component");
+        final Button button3 = new Button("Set fixed width and height 75%");
+        final Button button4 = new Button("Set size full");
+
+        vlo.addComponent(button1);
+        vlo.addComponent(button2);
+        vlo.addComponent(button3);
+        vlo.addComponent(button4);
+        baseLayout.addComponent(vlo);
+        final VerticalLayout vlo2 = getTestLaytout();
+
+        button1.setEnabled(true);
+        button2.setEnabled(false);
+        button3.setEnabled(false);
+        button4.setEnabled(false);
+
+        vlo2.addComponent(c1);
+        vlo2.addComponent(new Label("<hr />", Label.CONTENT_XHTML));
+        vlo2.addComponent(c2);
+        vlo2.setExpandRatio(c1, 0.5f);
+        vlo2.setExpandRatio(c2, 0.5f);
+        baseLayout.addComponent(vlo2);
+
+        button1.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo2.setHeight("350px");
+                button1.setEnabled(false);
+                button2.setEnabled(true);
+            }
+        });
+        button2.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo2.setSizeUndefined();
+                vlo2.addComponent(new Label("--- NEW LABEL ---"));
+                button2.setEnabled(false);
+                button3.setEnabled(true);
+            }
+        });
+        button3.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo2.setWidth("75%");
+                vlo2.setHeight("75%");
+                button3.setEnabled(false);
+                button4.setEnabled(true);
+            }
+        });
+        button4.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo2.setSizeFull();
+                button4.setEnabled(false);
+            }
+        });
+
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getExpandRatiosTests() {
+        Layout baseLayout = getBaseLayout();
+        final VerticalLayout vlo = getTestLaytout();
+
+        final AbstractComponent c1 = getTestTable();
+        c1.setSizeFull();
+        final AbstractComponent c2 = getTestTable();
+        c2.setSizeFull();
+
+        final Button button1 = new Button("Expand to 1/undefined");
+        final Button button2 = new Button("Expand to 0.5/0.5");
+        final Button button3 = new Button("Expand to 0.75/0.25");
+
+        vlo.addComponent(button1);
+        vlo.addComponent(button2);
+        vlo.addComponent(button3);
+        button1.setEnabled(true);
+        button2.setEnabled(false);
+        button3.setEnabled(false);
+
+        baseLayout.addComponent(vlo);
+        final VerticalLayout vlo2 = getTestLaytout();
+
+        vlo2.addComponent(c1);
+        vlo2.addComponent(c2);
+        baseLayout.addComponent(vlo2);
+
+        button1.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo2.setExpandRatio(c1, 1.0f);
+                button1.setEnabled(false);
+                button2.setEnabled(true);
+            }
+        });
+        button2.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo2.setExpandRatio(c1, 0.5f);
+                vlo2.setExpandRatio(c2, 0.5f);
+                button2.setEnabled(false);
+                button3.setEnabled(true);
+            }
+        });
+        button3.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo2.setExpandRatio(c1, 0.75f);
+                vlo2.setExpandRatio(c2, 0.25f);
+                button3.setEnabled(false);
+            }
+        });
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getIconsTests() {
+        Layout baseLayout = getBaseLayout();
+        VerticalLayout vlo = getTestLaytout();
+        AbstractComponent[] components = new AbstractComponent[2];
+
+        Resource[] icons = new Resource[] { new ThemeResource(CALENDAR_32_PNG),
+                new ThemeResource(LOCK_16_PNG) };
+
+        for (int i = 0; i < components.length; i++) {
+            components[i] = new TextField();
+            ((TextField) components[i]).setValue("FIELD " + i);
+            components[i].setIcon(icons[i]);
+            components[i]
+                    .setCaption("long test caption bewucbwuebco or bmort b cbwecubw wbeucwe asdasd asdasda asdasd");
+            vlo.addComponent(components[i]);
+        }
+
+        for (int i = 0; i < components.length; i++) {
+            components[i] = new Label();
+            ((Label) components[i]).setValue("Label " + i);
+            components[i].setIcon(icons[i]);
+            vlo.addComponent(components[i]);
+        }
+
+        for (int i = 0; i < components.length; i++) {
+            components[i] = new Select();
+            components[i].setIcon(icons[i]);
+            vlo.addComponent(components[i]);
+        }
+        baseLayout.addComponent(vlo);
+        final VerticalLayout vlo2 = getTestLaytout();
+        for (int i = 0; i < components.length; i++) {
+            components[i] = new Button();
+            components[i].setComponentError(new UserError(
+                    "component error, user error"));
+            components[i].setIcon(icons[i]);
+            vlo2.addComponent(components[i]);
+        }
+
+        for (int i = 0; i < components.length; i++) {
+            components[i] = new Link("Link", null);
+            components[i].setIcon(icons[i]);
+            vlo2.addComponent(components[i]);
+        }
+        baseLayout.addComponent(vlo2);
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getMarginSpacingTests() {
+        Layout baseLayout = getBaseLayout();
+        final VerticalLayout vlo = getTestLaytout();
+        vlo.setSpacing(false);
+        vlo.setMargin(false);
+
+        final AbstractComponent c1 = getTestTable();
+        c1.setSizeFull();
+        final AbstractComponent c2 = getTestTable();
+        c2.setSizeFull();
+
+        final Button button1 = new Button("Set margin on");
+        final Button button2 = new Button("Set spacing on");
+        final Button button3 = new Button("Set margin off");
+        final Button button4 = new Button("Set spacing off");
+
+        vlo.addComponent(button1);
+        vlo.addComponent(button2);
+        vlo.addComponent(button3);
+        vlo.addComponent(button4);
+        button1.setEnabled(true);
+        button2.setEnabled(false);
+        button3.setEnabled(false);
+        button4.setEnabled(false);
+
+        baseLayout.addComponent(vlo);
+        final VerticalLayout vlo2 = getTestLaytout();
+
+        vlo2.addComponent(c1);
+        vlo2.addComponent(new Label("<hr />", Label.CONTENT_XHTML));
+        vlo2.addComponent(c2);
+        vlo2.setExpandRatio(c1, 0.5f);
+        vlo2.setExpandRatio(c2, 0.5f);
+        baseLayout.addComponent(vlo2);
+
+        button1.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo2.setMargin(true);
+                button1.setEnabled(false);
+                button2.setEnabled(true);
+            }
+        });
+        button2.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo2.setSpacing(true);
+                button2.setEnabled(false);
+                button3.setEnabled(true);
+            }
+        });
+        button3.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo2.setMargin(false);
+                button3.setEnabled(false);
+                button4.setEnabled(true);
+            }
+        });
+        button4.addListener(new Button.ClickListener() {
+            private static final long serialVersionUID = 7716267156088629379L;
+
+            public void buttonClick(ClickEvent event) {
+                vlo2.setSpacing(false);
+                button4.setEnabled(false);
+            }
+        });
+
+        return baseLayout;
+    }
+
+    @Override
+    protected Layout getRequiredErrorIndicatorsTests() {
+        Layout baseLayout = getBaseLayout();
+        VerticalLayout vlo = getTestLaytout();
+        AbstractComponent[] components = new AbstractComponent[4];
+        components[0] = new Label("LABEL");
+        components[0].setSizeUndefined();
+        components[1] = new Button("BUTTON");
+        components[2] = getTestTable();
+        components[3] = getTestTabsheet();
+        components[3].setIcon(new ThemeResource(LOCK_16_PNG));
+
+        AbstractField[] fields = new AbstractField[6];
+        fields[0] = new TextField();
+        fields[0].setRequired(true);
+        fields[0].setValidationVisible(true);
+        fields[0].setRequiredError("required error");
+
+        fields[1] = new TextField();
+        fields[1].setValue("TEXTFIELD2");
+        fields[1]
+                .setComponentError(new UserError("component error, user error"));
+
+        fields[2] = new Select();
+        fields[2].setComponentError(new SystemError(
+                "component error, system error"));
+        fields[3] = new DateField();
+        fields[3].setComponentError(new SystemError(
+                "component error, system error"));
+
+        fields[4] = new CheckBox();
+        fields[4]
+                .setComponentError(new UserError("component error, user error"));
+
+        fields[5] = new NativeSelect();
+        fields[5].setRequired(true);
+        fields[5].setValidationVisible(true);
+        fields[5].setRequiredError("required error");
+        fields[5]
+                .setComponentError(new UserError("component error, user error"));
+        fields[5].setIcon(new ThemeResource(CALENDAR_32_PNG));
+
+        for (int i = 0; i < components.length; i++) {
+            components[i].setComponentError(new UserError(
+                    "component error, user error"));
+            vlo.addComponent(components[i]);
+        }
+        baseLayout.addComponent(vlo);
+        final VerticalLayout vlo2 = getTestLaytout();
+        for (int i = 0; i < fields.length; i++) {
+            vlo2.addComponent(fields[i]);
+        }
+
+        baseLayout.addComponent(vlo2);
+        return baseLayout;
+    }
+
+    private HorizontalLayout getBaseLayout() {
+        HorizontalLayout hlo = new HorizontalLayout();
+        hlo.setSizeUndefined();
+        return hlo;
+    }
+
+    private VerticalLayout getTestLaytout() {
+        VerticalLayout vlo = new VerticalLayout();
+        vlo.setHeight("500px");
+        vlo.setWidth("400px");
+        return vlo;
+    }
+
+    private AbstractComponent getTestTabsheet() {
+        TabSheet tabsheet = new TabSheet();
+        tabsheet.setSizeUndefined();
+        tabsheet.addTab(new UndefWideLabel("TAB1"), "TAB1", new ThemeResource(
+                GLOBE_16_PNG));
+        tabsheet.addTab(new UndefWideLabel("TAB2"), "TAB2", null);
+        return tabsheet;
+    }
+
+    private Table getTestTable() {
+        Table t = new Table();
+        t.setSizeUndefined();
+        t.setPageLength(5);
+        t.addContainerProperty("test", String.class, null);
+        t.addItem(new Object[] { "qwertyuiop asdfghjköäxccvbnm,m,." }, 1);
+        t.addItem(new Object[] { "YGVYTCTCTRXRXRXRX" }, 2);
+        return t;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/m.gif b/tests/testbench/com/vaadin/tests/m.gif
new file mode 100644
index 0000000000..2201bdfc1c
Binary files /dev/null and b/tests/testbench/com/vaadin/tests/m.gif differ
diff --git a/tests/testbench/com/vaadin/tests/resources/DownloadLargeFileResource.java b/tests/testbench/com/vaadin/tests/resources/DownloadLargeFileResource.java
new file mode 100644
index 0000000000..3d7379aafe
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/resources/DownloadLargeFileResource.java
@@ -0,0 +1,71 @@
+package com.vaadin.tests.resources;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import com.vaadin.terminal.FileResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+
+public class DownloadLargeFileResource extends TestBase {
+
+    private FileResource hugeFileResource = null;
+    private long fileSize = (long) (1233.2 * 1024.0 * 1024.0);
+
+    @Override
+    protected void setup() {
+        Button b = new Button(
+                "Download a "
+                        + String.format("%.1f", fileSize / 1024.0 / 1024.0)
+                        + "MB file", new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        download();
+                    }
+                });
+        addComponent(b);
+    }
+
+    protected void download() {
+        if (hugeFileResource == null) {
+            createFile();
+        }
+
+        getMainWindow().open(hugeFileResource);
+
+    }
+
+    private void createFile() {
+        try {
+            File hugeFile = File.createTempFile("huge", ".txt");
+            hugeFile.deleteOnExit();
+            BufferedOutputStream os = new BufferedOutputStream(
+                    new FileOutputStream(hugeFile));
+            int writeAtOnce = 1024 * 1024;
+            byte[] b = new byte[writeAtOnce];
+            for (int i = 0; i < fileSize; i += writeAtOnce) {
+                os.write(b);
+            }
+            os.close();
+            hugeFileResource = new FileResource(hugeFile, this);
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Click the button to download huge-file.txt. The file is generated on the first download.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 5356;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/resources/NonExistingFileResource.java b/tests/testbench/com/vaadin/tests/resources/NonExistingFileResource.java
new file mode 100644
index 0000000000..2299ba4d26
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/resources/NonExistingFileResource.java
@@ -0,0 +1,48 @@
+package com.vaadin.tests.resources;
+
+import java.io.File;
+
+import com.vaadin.terminal.FileResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+
+public class NonExistingFileResource extends TestBase {
+
+    @Override
+    protected void setup() {
+        Button existing = createButton("WEB-INF/web.xml");
+        Button nonExisting = createButton("WEB-INF/web2.xml");
+        addComponent(existing);
+        addComponent(nonExisting);
+
+    }
+
+    private Button createButton(final String filename) {
+        Button b = new Button("Download " + filename);
+        b.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                FileResource res = new FileResource(new File(getContext()
+                        .getBaseDirectory() + "/" + filename),
+                        NonExistingFileResource.this);
+                getMainWindow().open(res);
+
+            }
+        });
+        return b;
+    }
+
+    @Override
+    protected String getDescription() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/resources/ResourceDownload.java b/tests/testbench/com/vaadin/tests/resources/ResourceDownload.java
new file mode 100644
index 0000000000..d7da9c2d63
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/resources/ResourceDownload.java
@@ -0,0 +1,89 @@
+package com.vaadin.tests.resources;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+
+import com.vaadin.terminal.StreamResource;
+import com.vaadin.terminal.StreamResource.StreamSource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+
+public class ResourceDownload extends TestBase {
+
+    @Override
+    public void setup() {
+
+        Button b = new Button("Download (_new)", new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                download("_new");
+            }
+        });
+        addComponent(b);
+
+        b = new Button("Download (_blank)", new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                download("_blank");
+            }
+        });
+        addComponent(b);
+
+        b = new Button("Download ()", new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                download("");
+            }
+        });
+        addComponent(b);
+
+        b = new Button("Download (_top)", new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                download("_top");
+            }
+        });
+        addComponent(b);
+
+        b = new Button("Test", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                ResourceDownload.this.getMainWindow().showNotification(
+                        "Still working");
+            }
+
+        });
+        addComponent(b);
+
+    }
+
+    protected void download(String target) {
+        String filename = "filename";
+        StreamResource streamResource = new StreamResource(new StreamSource() {
+
+            public InputStream getStream() {
+                try {
+                    return new FileInputStream("FIXME C:/temp/file.xls");
+                } catch (FileNotFoundException e) {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                    return null;
+                }
+            }
+        }, filename + ".xls", this);
+        streamResource.setCacheTime(5000); // no cache (<=0) does not work with
+        // IE8
+        streamResource.setMIMEType("application/x-msexcel");
+
+        getMainWindow().open(streamResource, target);
+
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Downloading with target _new should work, aswell as with target _blank and _top.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3289;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/themes/ButtonsTest.java b/tests/testbench/com/vaadin/tests/themes/ButtonsTest.java
new file mode 100644
index 0000000000..9425cd9bd2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/themes/ButtonsTest.java
@@ -0,0 +1,158 @@
+package com.vaadin.tests.themes;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.NativeButton;
+import com.vaadin.ui.Window;
+
+@SuppressWarnings("serial")
+public class ButtonsTest extends com.vaadin.Application {
+
+    final Window main = new Window("Button states & themes");
+
+    CheckBox styleToggle;
+    CheckBox iconToggle;
+    CheckBox nativeToggle;
+    CheckBox themeToggle;
+    boolean largeIcons = false;
+    boolean nativeButtons = false;
+
+    final HorizontalLayout toggles = new HorizontalLayout();
+
+    @Override
+    public void init() {
+        setMainWindow(main);
+        setTheme("reindeer");
+
+        themeToggle = new CheckBox("Runo theme", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                if (getTheme() == "reindeer") {
+                    setTheme("runo");
+                } else {
+                    setTheme("reindeer");
+                }
+            }
+        });
+        themeToggle.setStyleName("small");
+        themeToggle.setImmediate(true);
+
+        styleToggle = new CheckBox("Black style", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                if (!main.getContent().getStyleName().contains("black")) {
+                    main.getContent().setStyleName("black");
+                } else {
+                    main.getContent().setStyleName("");
+                }
+            }
+        });
+        styleToggle.setImmediate(true);
+        styleToggle.setStyleName("small");
+
+        iconToggle = new CheckBox("64x icons", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                largeIcons = !largeIcons;
+                recreateAll();
+            }
+        });
+        iconToggle.setImmediate(true);
+        iconToggle.setStyleName("small");
+
+        nativeToggle = new CheckBox("Native buttons",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        nativeButtons = !nativeButtons;
+                        recreateAll();
+                    }
+                });
+        nativeToggle.setImmediate(true);
+        nativeToggle.setStyleName("small");
+
+        toggles.setSpacing(true);
+        toggles.addComponent(themeToggle);
+        toggles.addComponent(styleToggle);
+        toggles.addComponent(iconToggle);
+        toggles.addComponent(nativeToggle);
+        main.addComponent(toggles);
+
+        recreateAll();
+
+    }
+
+    private void recreateAll() {
+        main.removeAllComponents();
+        main.addComponent(toggles);
+
+        main.addComponent(buildButtons(false, false, false, false));
+        main.addComponent(buildButtons(false, false, true, false));
+        main.addComponent(buildButtons(false, true, false, false));
+        main.addComponent(buildButtons(false, true, true, false));
+        main.addComponent(buildButtons(true, false, false, false));
+        main.addComponent(buildButtons(true, false, true, false));
+        main.addComponent(buildButtons(true, true, false, false));
+        main.addComponent(buildButtons(true, true, true, false));
+
+        main.addComponent(buildButtons(false, false, false, true));
+        main.addComponent(buildButtons(false, false, true, true));
+        main.addComponent(buildButtons(false, true, false, true));
+        main.addComponent(buildButtons(false, true, true, true));
+        main.addComponent(buildButtons(true, false, false, true));
+        main.addComponent(buildButtons(true, false, true, true));
+        main.addComponent(buildButtons(true, true, false, true));
+        main.addComponent(buildButtons(true, true, true, true));
+
+        final Button b = new Button("Tabindex");
+        b.setTabIndex(1);
+        main.addComponent(b);
+
+        Button c = new Button("toggle enabled", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                b.setEnabled(!b.isEnabled());
+            }
+        });
+        main.addComponent(c);
+    }
+
+    private Layout buildButtons(boolean disabled, boolean icon, boolean error,
+            boolean sized) {
+
+        String[] buttonStyles = new String[] { "Normal", "Primary", "Small",
+                "Link" };
+
+        HorizontalLayout hl = new HorizontalLayout();
+        hl.setSpacing(true);
+        hl.setMargin(true);
+
+        for (int i = 0; i < buttonStyles.length; i++) {
+            Button b;
+            if (nativeButtons) {
+                b = new NativeButton(buttonStyles[i] + " style");
+            } else {
+                b = new Button(buttonStyles[i] + " style");
+            }
+            b.setStyleName(buttonStyles[i].toLowerCase());
+            if (icon) {
+                b.setIcon(new ThemeResource("../runo/icons/"
+                        + (largeIcons ? "64" : "16") + "/document.png"));
+            }
+            if (error) {
+                b.setComponentError(new UserError("Error"));
+            }
+            if (disabled) {
+                b.setEnabled(false);
+            }
+            if (sized) {
+                b.setWidth("250px");
+                b.setCaption(b.getCaption() + " (250px)");
+            }
+            hl.addComponent(b);
+        }
+
+        return hl;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1225.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1225.java
new file mode 100644
index 0000000000..0596fd4d49
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1225.java
@@ -0,0 +1,68 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.tests.TestForTablesInitialColumnWidthLogicRendering;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.VerticalSplitPanel;
+import com.vaadin.ui.Window;
+
+/**
+ * With IE7 extra scrollbars appear in content area all though content fits
+ * properly. Scrollbars will disappear if "shaking" content a bit, like
+ * selecting tests in area.
+ */
+public class Ticket1225 extends Application {
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window(
+                "Test app to break layout fuction in IE7");
+        setMainWindow(mainWin);
+
+        VerticalSplitPanel sp = new VerticalSplitPanel();
+
+        sp.setFirstComponent(new Label("First"));
+
+        VerticalLayout el = new VerticalLayout();
+
+        sp.setSecondComponent(el);
+        el.setMargin(true);
+        el.setSizeFull();
+
+        el.addComponent(new Label("Top"));
+
+        Table testTable = TestForTablesInitialColumnWidthLogicRendering
+                .getTestTable(5, 50);
+        testTable.setSizeFull();
+
+        TabSheet ts = new TabSheet();
+        ts.setSizeFull();
+
+        Label red = new Label(
+                "<div style='background:red;width:100%;height:100%;'>??</div>",
+                Label.CONTENT_XHTML);
+        // red.setCaption("cap");
+        // red.setSizeFull();
+
+        // el.addComponent(testTable);
+        // el.setExpandRatio(testTable,1);
+
+        el.addComponent(ts);
+        el.setExpandRatio(ts, 1);
+        ts.addComponent(red);
+        ts.getTab(red).setCaption("REd tab");
+
+        Label l = new Label("<div style='background:blue;'>sdf</div>",
+                Label.CONTENT_XHTML);
+        el.addComponent(l);
+        el.setComponentAlignment(l, Alignment.MIDDLE_RIGHT);
+
+        mainWin.setContent(sp);
+
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1230.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1230.java
new file mode 100644
index 0000000000..fd859459c0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1230.java
@@ -0,0 +1,152 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Item;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.Window;
+
+public class Ticket1230 extends Application {
+
+    private static final Object PROPERTY_ID = new Object();
+    private static final Object NULL_ITEM_ID = new Object();
+    private Select selectWithoutNullItem;
+    private Select selectWithNullItem;
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getName());
+        setMainWindow(w);
+
+        GridLayout layout = new GridLayout(5, 5);
+        w.setContent(layout);
+
+        layout.setSpacing(true);
+
+        {
+            selectWithoutNullItem = createSelect();
+
+            layout.addComponent(selectWithoutNullItem);
+            Button b = new Button("Select NULL_PROPERTY", new ClickListener() {
+
+                public void buttonClick(ClickEvent event) {
+                    selectWithoutNullItem.select(NULL_ITEM_ID);
+                    printState();
+
+                }
+            });
+            layout.addComponent(b);
+            b = new Button("Select 1", new ClickListener() {
+
+                public void buttonClick(ClickEvent event) {
+                    selectWithoutNullItem.select("1");
+                    printState();
+
+                }
+            });
+            layout.addComponent(b);
+            b = new Button("Select 2", new ClickListener() {
+
+                public void buttonClick(ClickEvent event) {
+                    selectWithoutNullItem.select("2");
+                    printState();
+
+                }
+            });
+            layout.addComponent(b);
+
+            b = new Button("Select null", new ClickListener() {
+
+                public void buttonClick(ClickEvent event) {
+                    selectWithoutNullItem.select(null);
+                    printState();
+
+                }
+            });
+            layout.addComponent(b);
+        }
+
+        {
+            selectWithNullItem = createSelect();
+            Item nullItem = selectWithNullItem.addItem(NULL_ITEM_ID);
+            nullItem.getItemProperty(PROPERTY_ID).setValue("NULL");
+            selectWithNullItem.setNullSelectionItemId(NULL_ITEM_ID);
+
+            layout.addComponent(selectWithNullItem);
+            selectWithNullItem.setCaption("Select with null item id");
+            Button b = new Button("Select NULL_PROPERTY", new ClickListener() {
+
+                public void buttonClick(ClickEvent event) {
+                    selectWithNullItem.select(NULL_ITEM_ID);
+                    printState();
+
+                }
+            });
+            layout.addComponent(b);
+
+            b = new Button("Select 1", new ClickListener() {
+
+                public void buttonClick(ClickEvent event) {
+                    selectWithNullItem.select("1");
+                    printState();
+
+                }
+            });
+            layout.addComponent(b);
+            b = new Button("Select 2", new ClickListener() {
+
+                public void buttonClick(ClickEvent event) {
+                    selectWithNullItem.select("2");
+                    printState();
+                }
+            });
+            layout.addComponent(b);
+
+            b = new Button("Select null", new ClickListener() {
+
+                public void buttonClick(ClickEvent event) {
+                    selectWithNullItem.select(null);
+                    printState();
+                }
+            });
+            layout.addComponent(b);
+
+        }
+
+        w.addComponent(new Button("print select values",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        printState();
+                    }
+                }));
+    }
+
+    @SuppressWarnings("deprecation")
+    private Select createSelect() {
+        Select select = new Select();
+        select.setMultiSelect(false);
+        select.addContainerProperty(PROPERTY_ID, String.class, "");
+        select.setItemCaptionPropertyId(PROPERTY_ID);
+
+        Item item1 = select.addItem("1");
+        item1.getItemProperty(PROPERTY_ID).setValue("1");
+        Item item2 = select.addItem("2");
+        item2.getItemProperty(PROPERTY_ID).setValue("2");
+
+        select.setNullSelectionAllowed(true);
+
+        return select;
+    }
+
+    void printState() {
+        System.out.println(" Select without null item "
+                + selectWithoutNullItem.getValue());
+        System.out.println(" Select with null item "
+                + selectWithNullItem.getValue());
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket124.java b/tests/testbench/com/vaadin/tests/tickets/Ticket124.java
new file mode 100644
index 0000000000..985d8bccac
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket124.java
@@ -0,0 +1,90 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket124 extends Application {
+
+    private TextField tf;
+    private GridLayout gl;
+
+    @Override
+    public void init() {
+        Window w = new Window("#124: Insert & remove row for GridLayout");
+        setMainWindow(w);
+        setTheme("tests-tickets");
+        // gl = new GridLayout(4, 4);
+        gl = new GridLayout(2, 2);
+
+        tf = new TextField("Row nr");
+        Button insert = new Button("Insert row", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                insertRow();
+
+            }
+        });
+        Button delete = new Button("Delete row", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                deleteRow();
+
+            }
+        });
+
+        // gl.addComponent(new Label("0-0"), 0, 0);
+        // gl.addComponent(new Label("0-1"), 1, 0);
+        gl.addComponent(new Label("1-0"), 1, 0);
+        gl.addComponent(new Label("1-1"), 1, 1);
+        gl.addComponent(new Label("0,0-1,0"), 0, 0, 1, 0);
+        gl.addComponent(new Label("2,0-3,0"), 2, 0, 3, 0);
+        Label l = new Label("Large cell 0,1-2,2<br/>yadayada<br/>lorem ipsum");
+        l.setContentMode(Label.CONTENT_XHTML);
+        gl.addComponent(l, 0, 1, 2, 2);
+        gl.addComponent(new Label("3-1"), 3, 1);
+        gl.addComponent(new Label("3,2-3,3"), 3, 2, 3, 3);
+        gl.addComponent(tf, 0, 3);
+        gl.addComponent(insert, 1, 3);
+        gl.addComponent(delete, 2, 3);
+
+        gl.setStyleName("border");
+        w.addComponent(gl);
+    }
+
+    protected void deleteRow() {
+        int pos = Integer.parseInt(tf.getValue().toString());
+        gl.removeRow(pos);
+
+    }
+
+    protected void clearRow() {
+        int pos = Integer.parseInt(tf.getValue().toString());
+        for (int col = 0; col < gl.getColumns(); col++) {
+            try {
+                gl.removeComponent(col, pos);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+    }
+
+    protected void insertRow() {
+        int pos = Integer.parseInt(tf.getValue().toString());
+        gl.insertRow(pos);
+        try {
+            TextField t = new TextField("", "Newly added row");
+            t.setWidth("100%");
+            gl.addComponent(t, 0, pos, 3, pos);
+        } catch (Exception e) {
+            // TODO: handle exception
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1245.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1245.java
new file mode 100644
index 0000000000..e83ac6aded
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1245.java
@@ -0,0 +1,93 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.ui.AbstractSelect;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.themes.Reindeer;
+
+public class Ticket1245 extends com.vaadin.Application {
+
+    TextField f = new TextField();
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        main.addComponent(new TreeExample());
+    }
+}
+
+class TreeExample extends CustomComponent {
+
+    // Id for the caption property
+    private static final Object CAPTION_PROPERTY = "caption";
+
+    private static final String desc = "non-first tree in non-sized orderedlayout seems to be the problem";
+
+    Tree tree;
+
+    public TreeExample() {
+        final VerticalLayout main = new VerticalLayout();
+        setCompositionRoot(main);
+
+        // Panel w/ Tree
+        main.setStyleName(Reindeer.PANEL_LIGHT);
+        main.setWidth("200px");
+        // // Description, this is needed. Works in first slot
+        main.addComponent(new Label(desc));
+
+        // setting either width or height fixes the issue
+        // p.setWidth(500);
+        // p.setHeight(800);
+
+        // Tree with a few items
+        tree = new Tree();
+        tree.setImmediate(true);
+        // we'll use a property for caption instead of the item id ("value"),
+        // so that multiple items can have the same caption
+        tree.addContainerProperty(CAPTION_PROPERTY, String.class, "");
+        tree.setItemCaptionMode(AbstractSelect.ITEM_CAPTION_MODE_PROPERTY);
+        tree.setItemCaptionPropertyId(CAPTION_PROPERTY);
+        for (int i = 1; i <= 3; i++) {
+            final Object id = addCaptionedItem("Section " + i, null);
+            tree.expandItem(id);
+            addCaptionedItem("Team A", id);
+            addCaptionedItem("Team B", id);
+        }
+        main.addComponent(tree);
+    }
+
+    /**
+     * Helper to add an item with specified caption and (optional) parent.
+     * 
+     * @param caption
+     *            The item caption
+     * @param parent
+     *            The (optional) parent item id
+     * @return the created item's id
+     */
+    private Object addCaptionedItem(String caption, Object parent) {
+        // add item, let tree decide id
+        final Object id = tree.addItem();
+        // get the created item
+        final Item item = tree.getItem(id);
+        // set our "caption" property
+        final Property p = item.getItemProperty(CAPTION_PROPERTY);
+        p.setValue(caption);
+        if (parent != null) {
+            tree.setChildrenAllowed(parent, true);
+            tree.setParent(id, parent);
+            tree.setChildrenAllowed(id, false);
+        }
+        return id;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1362Login.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1362Login.java
new file mode 100644
index 0000000000..d8fdefbd38
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1362Login.java
@@ -0,0 +1,275 @@
+package com.vaadin.tests.tickets;
+
+import java.io.ByteArrayInputStream;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Map;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.ApplicationResource;
+import com.vaadin.terminal.DownloadStream;
+import com.vaadin.terminal.ParameterHandler;
+import com.vaadin.terminal.URIHandler;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.Notification;
+
+/**
+ * Proof of concept how to create a decent login screen that works with browsers
+ * PW managers. (Browsers don't autofill generated login forms)
+ * 
+ * TODO generalize js to work inside iframes (if a Vaadin application is inside
+ * iframe)
+ * 
+ * TODO extract login form to a external template.
+ * 
+ * TODO theme
+ * 
+ * TODO refine docs, make LoginBox a standard Vaadin component
+ * 
+ * TODO article
+ * 
+ */
+public class Ticket1362Login extends Application {
+
+    public class LoginBox extends CustomComponent {
+
+        Embedded iframe = new Embedded();
+
+        ApplicationResource loginPage = new ApplicationResource() {
+
+            private byte[] loginHTML = (""
+                    + "<html>"
+                    + "<head><script type='text/javascript'>"
+                    + "var setTarget = function() {document.getElementById('loginf').action = top.location;};"
+                    + "</script></head>"
+                    + "<body onload='setTarget();'>"
+                    + "Iframe generated by LoginBox. PW managers can autofill form. Form handled by LoginBox "
+                    + "that will fire LoginEvents. Will post into another iframe, from where the script "
+                    + "will find Vaadin client that will be force synced. <form id='loginf' target='logintarget'>"
+                    + "Username : <input type='text' name='username'>"
+                    + "Password : <input type='password' name='password'>"
+                    + "<input type='submit' value='login'>" + "</form>"
+                    + "<iframe name='logintarget'></iframe>" + "</body>"
+                    + "</html>").getBytes();
+
+            public Application getApplication() {
+                return LoginBox.this.getApplication();
+            }
+
+            public int getBufferSize() {
+                return loginHTML.length;
+            }
+
+            public long getCacheTime() {
+                return 0;
+            }
+
+            public String getFilename() {
+                return "login.html";
+            }
+
+            public DownloadStream getStream() {
+                return new DownloadStream(new ByteArrayInputStream(loginHTML),
+                        getMIMEType(), getFilename());
+            }
+
+            public String getMIMEType() {
+                return "text/html";
+            }
+        };
+
+        private ParameterHandler paramHandler = new ParameterHandler() {
+
+            public void handleParameters(Map<String, String[]> parameters) {
+                if (parameters.containsKey("username")) {
+                    getWindow().addURIHandler(uriHandler);
+
+                    HashMap<String, String> params = new HashMap<String, String>();
+                    // expecting single params
+                    for (Iterator<String> it = parameters.keySet().iterator(); it
+                            .hasNext();) {
+                        String key = it.next();
+                        String value = (parameters.get(key))[0];
+                        params.put(key, value);
+                    }
+                    LoginEvent event = new LoginEvent(params);
+                    for (Iterator<LoginListener> iterator = listeners
+                            .iterator(); iterator.hasNext();) {
+                        LoginListener listener = iterator.next();
+                        listener.onLogin(event);
+                    }
+                }
+            }
+        };
+
+        private URIHandler uriHandler = new URIHandler() {
+            public DownloadStream handleURI(URL context, String relativeUri) {
+                if (window != null) {
+                    window.removeURIHandler(this);
+                }
+                return new DownloadStream(
+                        new ByteArrayInputStream(
+                                "<html><body>Login form handeled.<script type='text/javascript'>top.vaadin.forceSync();</script></body></html>"
+                                        .getBytes()), "text/html",
+                        "loginSuccesfull.html");
+            }
+        };
+
+        private LinkedList<LoginListener> listeners = new LinkedList<LoginListener>();
+
+        private Window window;
+
+        LoginBox() {
+            iframe.setType(Embedded.TYPE_BROWSER);
+            iframe.setSizeFull();
+            setCompositionRoot(iframe);
+        }
+
+        @Override
+        public void attach() {
+            super.attach();
+            getApplication().addResource(loginPage);
+            getWindow().addParameterHandler(paramHandler);
+            iframe.setSource(loginPage);
+        }
+
+        @Override
+        public void detach() {
+            getApplication().removeResource(loginPage);
+            getWindow().removeParameterHandler(paramHandler);
+            // store window temporary to properly remove uri handler once
+            // response is handled. (May happen if login handler removes login
+            // box
+            window = getWindow();
+            super.detach();
+        }
+
+        /**
+         * This event is sent when login form is submitted.
+         */
+        public class LoginEvent {
+
+            private Map<String, String> params;
+
+            private LoginEvent(Map<String, String> params) {
+                this.params = params;
+            }
+
+            /**
+             * Returns form value by field name.
+             * 
+             * @param name
+             * @return value in given field
+             */
+            public String getLoginParameter(String name) {
+                if (params.containsKey(name)) {
+                    return params.get(name);
+                } else {
+                    return null;
+                }
+            }
+        }
+
+        /**
+         * Adds LoginListener to handle login logic
+         * 
+         * @param listener
+         */
+        public void addLoginListener(LoginListener listener) {
+            listeners.add(listener);
+        }
+
+        /**
+         * Removes LoginListener
+         * 
+         * @param listener
+         */
+        public void removeLoginListener(LoginListener listener) {
+            listeners.remove(listener);
+        }
+
+    }
+
+    /**
+     * Login listener is a class capable to listen LoginEvents sent from
+     * LoginBox
+     */
+    public interface LoginListener {
+        /**
+         * This method is fired on each login form post.
+         * 
+         * @param event
+         */
+        public void onLogin(LoginBox.LoginEvent event);
+    }
+
+    final static String GUEST = "guest";
+
+    LoginBox loginBox = new LoginBox();
+
+    Label currentUser = new Label(GUEST);
+
+    private Panel mainPanel;
+
+    private VerticalLayout el;
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window(
+                "Test app with password manager savvy login functionality");
+
+        el = new VerticalLayout();
+
+        currentUser.setCaption("Currennt user");
+        el.addComponent(currentUser);
+
+        el.addComponent(loginBox);
+        el.setExpandRatio(loginBox, 1);
+
+        mainWin.setContent(el);
+
+        setMainWindow(mainWin);
+
+        mainPanel = new Panel("Test app");
+        mainPanel.setSizeFull();
+        mainPanel.addComponent(new Label("User is logged in"));
+        mainPanel.addComponent(new Button("Logout", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                Ticket1362Login.this.close();
+            }
+        }));
+
+        loginBox.addLoginListener(new LoginListener() {
+            public void onLogin(LoginBox.LoginEvent event) {
+                String pw = event.getLoginParameter("password");
+                String username = event.getLoginParameter("username");
+                if (pw.equals("1234")) {
+                    setUser(username);
+                    currentUser.setValue(username);
+                    currentUser.getWindow().showNotification(
+                            "Logged in user: " + username);
+                    getMainWindow().getContent().replaceComponent(loginBox,
+                            mainPanel);
+                    el.setExpandRatio(mainPanel, 1);
+                } else {
+                    getMainWindow().showNotification(
+                            "Wrong password. Hint, try '1234' ",
+                            Notification.TYPE_WARNING_MESSAGE);
+                }
+            }
+        });
+
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1365.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1365.java
new file mode 100644
index 0000000000..be549ebf8c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1365.java
@@ -0,0 +1,45 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.event.Action;
+import com.vaadin.event.Action.Handler;
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket1365 extends com.vaadin.Application implements Handler {
+
+    TextField f = new TextField();
+
+    Label status = new Label("ENTER and CTRL-S fires shortcut action.");
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        main.addComponent(f);
+        main.addComponent(status);
+        main.addActionHandler(this);
+        f.focus();
+
+    }
+
+    final static private Action[] actions = new Action[] {
+            new ShortcutAction("Enter", ShortcutAction.KeyCode.ENTER,
+                    new int[] {}),
+            new ShortcutAction("CTRL-S", ShortcutAction.KeyCode.S,
+                    new int[] { ShortcutAction.ModifierKey.CTRL }), };
+
+    public Action[] getActions(Object target, Object sender) {
+        return actions;
+    }
+
+    public void handleAction(Action action, Object sender, Object target) {
+        status.setValue("Pressed " + action.getCaption()
+                + " to fire shortcut. Texfield value: " + f.getValue());
+        f.focus();
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1368.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1368.java
new file mode 100644
index 0000000000..9df316fdcb
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1368.java
@@ -0,0 +1,36 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.tests.TestForTablesInitialColumnWidthLogicRendering;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+/**
+ */
+public class Ticket1368 extends Application {
+
+    private Table t;
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window("Test app to #1368");
+        setMainWindow(mainWin);
+
+        t = TestForTablesInitialColumnWidthLogicRendering.getTestTable(3, 5);
+
+        mainWin.addComponent(t);
+
+        ComboBox addColumn = new ComboBox();
+        addColumn.setImmediate(true);
+        addColumn.setNewItemsAllowed(true);
+        addColumn.setNewItemHandler(new ComboBox.NewItemHandler() {
+            public void addNewItem(String newItemCaption) {
+                t.addContainerProperty(newItemCaption, String.class, "-");
+            }
+        });
+        mainWin.addComponent(addColumn);
+
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1397.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1397.java
new file mode 100644
index 0000000000..282df33d89
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1397.java
@@ -0,0 +1,149 @@
+package com.vaadin.tests.tickets;
+
+import java.util.Date;
+
+import com.vaadin.Application;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.InlineDateField;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.PopupView;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket1397 extends Application {
+
+    Window main;
+
+    @Override
+    public void init() {
+        setTheme("runo");
+        main = new Window("PopupView test");
+        setMainWindow(main);
+        Panel panel = new Panel("PopupTest");
+
+        // First test component
+        final ObjectProperty<String> prop = new ObjectProperty<String>(
+                "fooTextField");
+
+        PopupView.Content content = new PopupView.Content() {
+            public String getMinimizedValueAsHTML() {
+                return prop.toString();
+            }
+
+            public Component getPopupComponent() {
+                return new TextField("Edit foo", prop);
+            }
+        };
+
+        PopupView pe = new PopupView(content);
+        pe.setDescription("Click to edit");
+        panel.addComponent(pe);
+
+        // Second test component
+        PopupView pe2 = new PopupView("fooLabel", new Label("Foooooooooo..."));
+        pe2.setDescription("Click to view");
+        panel.addComponent(pe2);
+
+        // Third test component
+        final ObjectProperty<StringBuffer> prop2 = new ObjectProperty<StringBuffer>(
+                new StringBuffer("Text for button"));
+
+        class myButton extends Button {
+            public myButton() {
+                super("Reverse the property");
+                this.addListener(new Button.ClickListener() {
+                    public void buttonClick(Button.ClickEvent event) {
+                        StringBuffer getContents = prop2.getValue();
+                        getContents.reverse();
+
+                    }
+                });
+            }
+        }
+
+        final Panel panel2 = new Panel("Editor with a button");
+        panel2.addComponent(new myButton());
+        PopupView.Content content2 = new PopupView.Content() {
+            public String getMinimizedValueAsHTML() {
+                return prop2.toString();
+            }
+
+            public Component getPopupComponent() {
+                return panel2;
+            }
+        };
+
+        PopupView p3 = new PopupView(content2);
+        panel.addComponent(p3);
+
+        // Fourth test component
+        final Panel panel3 = new Panel("Editor popup for a property");
+        TextField tf2 = new TextField("TextField for editing a property");
+        final ObjectProperty<String> op = new ObjectProperty<String>(
+                "This is property text.");
+        tf2.setPropertyDataSource(op);
+        panel3.addComponent(tf2);
+        PopupView.Content content3 = new PopupView.Content() {
+
+            public String getMinimizedValueAsHTML() {
+                return op.toString();
+            }
+
+            public Component getPopupComponent() {
+                return panel3;
+            }
+
+        };
+        PopupView p4 = new PopupView(content3);
+        panel.addComponent(p4);
+
+        // Fifth test component
+        Table table = new Table("Table for testing purposes");
+        for (int i = 0; i < 5; i++) {
+            table.addContainerProperty("" + (i + 1), String.class, "");
+        }
+        table.addContainerProperty("" + 6, PopupView.class, null);
+        table.addContainerProperty("" + 7, PopupView.class, null);
+        table.setPageLength(20);
+        for (int i = 0; i < 1000; i++) {
+
+            final InlineDateField df = new InlineDateField("", new Date());
+            PopupView pp = new PopupView(new PopupView.Content() {
+                public String getMinimizedValueAsHTML() {
+                    return df.toString();
+                }
+
+                public Component getPopupComponent() {
+                    return df;
+                }
+            });
+            final int lineNum = i;
+            PopupView pp2 = new PopupView(new PopupView.Content() {
+
+                TextField tf = new TextField("Editor for line " + lineNum,
+
+                "Try to edit the contents for this textfield on line "
+                        + lineNum
+                        + " and see how the overview-version changes.");
+
+                public String getMinimizedValueAsHTML() {
+                    return "" + tf.toString().length() + " characters of info";
+                }
+
+                public Component getPopupComponent() {
+                    return tf;
+                }
+
+            });
+            table.addItem(new Object[] { "1 " + i, "2 " + i, "3 " + i,
+                    "4 " + i, "5 " + i, pp, pp2 }, new Integer(i));
+        }
+
+        main.addComponent(table);
+        main.addComponent(panel);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1435.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1435.java
new file mode 100644
index 0000000000..b961c0d6b1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1435.java
@@ -0,0 +1,230 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1435 extends Application {
+
+    private static final boolean useWorkaround = true;
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window("ButtonPanel containing a table test");
+        setMainWindow(mainWin);
+        ((AbstractOrderedLayout) mainWin.getContent()).setSpacing(true);
+
+        ButtonPanel dataCardView1 = buildButtonPanel("My Tickets");
+        ButtonPanel dataCardView2 = buildButtonPanel("My Tickets 2");
+
+        mainWin.addComponent(dataCardView1);
+        mainWin.addComponent(dataCardView2);
+
+    }
+
+    /**
+     * A ButtonPanel is a Panel, which has context specific Buttons in its
+     * header.
+     * 
+     * ButtonPanel also provides buttons for controlling its visibility
+     * (collapse/expand).
+     */
+    public class ButtonPanel extends CustomComponent {
+
+        VerticalLayout root = new VerticalLayout();
+
+        // In header are the panel's title and the control buttons.
+        // Panel title is expanded by default.
+        HorizontalLayout header = new HorizontalLayout();
+
+        // This is where the actual data is put.
+        Panel container = new Panel();
+
+        // Last known height before the panel was collapsed
+        private float lastHeight = -1;
+        private int lastHeightUnit = -1;
+
+        public ButtonPanel(String labelString) {
+            setCompositionRoot(root);
+            root.setSizeFull();
+
+            root.setStyleName("toolbarpanel");
+            header.setStyleName("toolbar");
+
+            initHeader(labelString);
+
+            initContainer();
+        }
+
+        private void initHeader(String labelString) {
+            root.addComponent(header);
+            header.setWidth("100%");
+            header.setHeight("26px");
+            Label label = new Label(labelString);
+            label.setStyleName("caption");
+            header.addComponent(label);
+
+            final Layout buttonContainer;
+            if (useWorkaround) {
+                buttonContainer = header;
+
+            } else {
+                buttonContainer = new HorizontalLayout();
+                header.addComponent(buttonContainer);
+
+            }
+
+            Button edit = new Button("Edit");
+            edit.setStyleName("link");
+            buttonContainer.addComponent(edit);
+
+            Button copy = new Button("Copy");
+            copy.setStyleName("link");
+            buttonContainer.addComponent(copy);
+
+            Button move = new Button("Move");
+            move.setStyleName("link");
+            buttonContainer.addComponent(move);
+
+            Button delete = new Button("Delete");
+            delete.setStyleName("link");
+            buttonContainer.addComponent(delete);
+
+            Button bind = new Button("Bind");
+            bind.setStyleName("link");
+            buttonContainer.addComponent(bind);
+
+            Button options = new Button("Options...");
+            options.setStyleName("link");
+            buttonContainer.addComponent(options);
+
+            final Button expand = new Button("Expand");
+
+            final Button collapse = new Button("Collapse");
+            buttonContainer.addComponent(collapse);
+
+            collapse.setStyleName("collapse");
+            collapse.addListener(new Button.ClickListener() {
+                public void buttonClick(Button.ClickEvent event) {
+                    if (useWorkaround) {
+                        container.setVisible(false);
+                        lastHeight = root.getHeight();
+                        lastHeightUnit = root.getHeightUnits();
+                        root.setHeight("26px");
+                        buttonContainer.replaceComponent(collapse, expand);
+                    } else {
+                        boolean visible = container.isVisible();
+                        container.setVisible(!visible);
+                        if (visible) {
+                            lastHeight = root.getHeight();
+                            lastHeightUnit = root.getHeightUnits();
+                            root.setHeight("26px");
+                        } else {
+                            root.setHeight(lastHeight, lastHeightUnit);
+                        }
+                        event.getButton().setCaption(
+                                visible ? "Expand" : "Collapse");
+                    }
+                }
+            });
+
+            if (useWorkaround) {
+                expand.addListener(new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        container.setVisible(true);
+                        root.setHeight(lastHeight, lastHeightUnit);
+                        buttonContainer.replaceComponent(expand, collapse);
+                    }
+                });
+            }
+
+        }
+
+        private void initContainer() {
+            container.setStyleName("custompanel");
+            container.setSizeFull();
+            ((Layout) container.getContent()).setMargin(false);
+            container.getContent().setSizeFull();
+            root.addComponent(container);
+            root.setExpandRatio(container, 1);
+        }
+
+        public void setHeight(int height, int unit) {
+            root.setHeight(height, unit);
+            lastHeight = height;
+            lastHeightUnit = unit;
+            container.setHeight("100%");
+        }
+
+        @Override
+        public void setHeight(String height) {
+            root.setHeight(height);
+            lastHeight = root.getHeight();
+            lastHeightUnit = root.getHeightUnits();
+            container.setHeight("100%");
+        }
+
+        @Override
+        public void setWidth(String width) {
+            root.setWidth(width);
+        }
+
+        public void setWidth(int width, int unit) {
+            root.setWidth(width, unit);
+        }
+
+        @Override
+        public void setSizeFull() {
+            setWidth("100%");
+            setHeight("100%");
+        }
+
+        public void setPanelComponent(Component component) {
+            container.removeAllComponents();
+            container.addComponent(component);
+        }
+    }
+
+    public ButtonPanel buildButtonPanel(String caption) {
+        ButtonPanel panel = new ButtonPanel(caption);
+
+        panel.setHeight("250px");
+        panel.setWidth("500px");
+
+        Table table = new Table();
+
+        table.setSizeFull();
+
+        table.addContainerProperty("checkbox", CheckBox.class, new CheckBox());
+        table.setColumnWidth("checkbox", 30);
+        table.setColumnHeader("checkbox", "");
+
+        table.addContainerProperty("Tickets", String.class, null);
+        table.setColumnWidth("Tickets", 150);
+
+        table.addContainerProperty("Deadline", String.class, null);
+
+        for (int i = 0; i < 10; i++) {
+            String name = "Name " + i;
+            table.addItem(new Object[] { new CheckBox(), name,
+                    "02-22-2007 13:37" }, new Integer(i));
+        }
+
+        panel.setPanelComponent(table);
+
+        return panel;
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1444.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1444.java
new file mode 100644
index 0000000000..003b50240b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1444.java
@@ -0,0 +1,30 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1444 extends Application {
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window(
+                "Test app to break layout fuction in IE7");
+        setMainWindow(mainWin);
+
+        VerticalLayout ol = new VerticalLayout();
+        ol.setHeight("250px");
+        ol.setWidth("500px");
+
+        Label red = new Label(
+                "<div style='background:red;width:100%;height:100%;'>??</div>",
+                Label.CONTENT_XHTML);
+        red.setSizeFull();
+
+        ol.addComponent(red);
+        mainWin.addComponent(ol);
+
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1465ModalNotification.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1465ModalNotification.java
new file mode 100644
index 0000000000..ff716aefc1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1465ModalNotification.java
@@ -0,0 +1,77 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket1465ModalNotification extends Application {
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window("ButtonPanel containing a table test");
+        setMainWindow(mainWin);
+
+        final Window modal = new Window("Modal window");
+        modal.setModal(true);
+
+        Button b = new Button("click to show notification",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        modal.showNotification(
+                                "Try clicking the button in main window!",
+                                Window.Notification.TYPE_ERROR_MESSAGE);
+
+                    }
+                });
+        modal.addComponent(b);
+
+        b = new Button("click to warning notification",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        modal.showNotification(
+                                "Try clicking the button in main window!",
+                                Window.Notification.TYPE_WARNING_MESSAGE);
+                    }
+                });
+        modal.addComponent(b);
+
+        b = new Button("click to Humanized notification",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        modal.showNotification(
+                                "Try clicking the button in main window!",
+                                Window.Notification.TYPE_HUMANIZED_MESSAGE);
+                    }
+                });
+        modal.addComponent(b);
+
+        b = new Button("click to test modality!", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                mainWin.addComponent(new Label("clicked"));
+
+            }
+        });
+
+        modal.addComponent(b);
+
+        mainWin.addWindow(modal);
+
+        b = new Button("click to test modality!", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                mainWin.addComponent(new Label("clicked"));
+
+            }
+        });
+
+        mainWin.addComponent(b);
+
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1506.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1506.java
new file mode 100644
index 0000000000..4788d27aad
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1506.java
@@ -0,0 +1,15 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Panel;
+
+public class Ticket1506 extends CustomComponent {
+
+    Panel p;
+
+    public Ticket1506() {
+        p = new Ticket1506_Panel();
+        setCompositionRoot(p);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1506_Panel.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1506_Panel.java
new file mode 100644
index 0000000000..37690612ed
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1506_Panel.java
@@ -0,0 +1,48 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Select;
+
+/**
+ * @author Efecte R&D
+ * @version $Revision$, $Date$
+ */
+public class Ticket1506_Panel extends Panel {
+
+    public Ticket1506_Panel() {
+        ObjectProperty<String> property1 = new ObjectProperty<String>(null,
+                String.class);
+        addComponent(initSelect(new Ticket1506_TestContainer(), "Test select",
+                property1));
+        addComponent(initButton(property1));
+        addComponent(initSelect(new Ticket1506_TestContainer2(),
+                "Test select 2", new ObjectProperty<String>(null, String.class)));
+    }
+
+    private Component initButton(final ObjectProperty<?> property) {
+        Button button = new Button("Clear select");
+        button.addListener(new Button.ClickListener() {
+            public void buttonClick(Button.ClickEvent event) {
+                property.setValue(null);
+            }
+        });
+        return button;
+    }
+
+    private Component initSelect(Container containerDataSource, String caption,
+            ObjectProperty<?> property) {
+        Select select = new Select(caption);
+        select.setFilteringMode(Select.FILTERINGMODE_CONTAINS);
+        select.setImmediate(true);
+        select.setNullSelectionAllowed(false);
+        select.setItemCaptionPropertyId(Ticket1506_TestContainer.PROPERTY_2_ID);
+
+        select.setContainerDataSource(containerDataSource);
+        select.setPropertyDataSource(property);
+        return select;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1506_TestContainer.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1506_TestContainer.java
new file mode 100644
index 0000000000..b8b6cfe5dd
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1506_TestContainer.java
@@ -0,0 +1,126 @@
+package com.vaadin.tests.tickets;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.data.util.PropertysetItem;
+
+/**
+ * @author Efecte R&D
+ * @version $Revision$, $Date$
+ */
+public class Ticket1506_TestContainer implements Container {
+    private Map<String, PropertysetItem> items = new HashMap<String, PropertysetItem>();
+    public static final String ITEM_1_ID = "1";
+    public static final String ITEM_2_ID = "2";
+    public static final String PROPERTY_1_ID = "property 1";
+    public static final String PROPERTY_2_ID = "property 2";
+
+    private void loadItems() {
+        final PropertysetItem item1 = new PropertysetItem();
+        item1.addItemProperty(PROPERTY_1_ID, new ObjectProperty<String>(
+                "value 1", String.class));
+        item1.addItemProperty(PROPERTY_2_ID, new ObjectProperty<String>(
+                "name 1", String.class));
+        items.put(ITEM_1_ID, item1);
+
+        final PropertysetItem item2 = new PropertysetItem();
+        item2.addItemProperty(PROPERTY_1_ID, new ObjectProperty<String>(
+                "value 2", String.class));
+        item2.addItemProperty(PROPERTY_2_ID, new ObjectProperty<String>(
+                "name 2", String.class));
+        items.put(ITEM_2_ID, item2);
+    }
+
+    public Item getItem(Object itemId) {
+        if (items.isEmpty()) {
+            loadItems();
+        }
+        return items.get(itemId);
+    }
+
+    public Collection<String> getContainerPropertyIds() {
+        if (items.isEmpty()) {
+            loadItems();
+        }
+        ArrayList<String> a = new ArrayList<String>();
+        a.add(PROPERTY_1_ID);
+        a.add(PROPERTY_2_ID);
+        return a;
+    }
+
+    public Collection<String> getItemIds() {
+        if (items.isEmpty()) {
+            loadItems();
+        }
+        ArrayList<String> a = new ArrayList<String>();
+        a.add(ITEM_1_ID);
+        a.add(ITEM_2_ID);
+        return a;
+    }
+
+    public Property getContainerProperty(Object itemId, Object propertyId) {
+        if (items.isEmpty()) {
+            loadItems();
+        }
+        Item item = items.get(itemId);
+        if (item != null) {
+            return item.getItemProperty(propertyId);
+        }
+        return null;
+    }
+
+    public Class<String> getType(Object propertyId) {
+        if (items.isEmpty()) {
+            loadItems();
+        }
+        return String.class;
+    }
+
+    public int size() {
+        if (items.isEmpty()) {
+            loadItems();
+        }
+        return items.size();
+    }
+
+    public boolean containsId(Object itemId) {
+        if (items.isEmpty()) {
+            loadItems();
+        }
+        return items.containsKey(itemId);
+    }
+
+    public Item addItem(Object itemId) throws UnsupportedOperationException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    public Object addItem() throws UnsupportedOperationException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    public boolean removeItem(Object itemId)
+            throws UnsupportedOperationException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    public boolean addContainerProperty(Object propertyId, Class<?> type,
+            Object defaultValue) throws UnsupportedOperationException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    public boolean removeContainerProperty(Object propertyId)
+            throws UnsupportedOperationException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    public boolean removeAllItems() throws UnsupportedOperationException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1506_TestContainer2.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1506_TestContainer2.java
new file mode 100644
index 0000000000..c39454027a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1506_TestContainer2.java
@@ -0,0 +1,118 @@
+package com.vaadin.tests.tickets;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.data.util.PropertysetItem;
+
+/**
+ * @author Efecte R&D
+ * @version $Revision$, $Date$
+ */
+public class Ticket1506_TestContainer2 implements Container {
+    private Map<String, PropertysetItem> items = new HashMap<String, PropertysetItem>();
+    public static final String ITEM_1_ID = "1";
+    public static final String ITEM_2_ID = "2";
+    public static final String PROPERTY_1_ID = "property 1";
+    public static final String PROPERTY_2_ID = "property 2";
+
+    private void loadItems() {
+        for (int i = 1; i < 15; i++) {
+            final PropertysetItem item = new PropertysetItem();
+            item.addItemProperty(PROPERTY_1_ID, new ObjectProperty<String>(
+                    "value " + i, String.class));
+            item.addItemProperty(PROPERTY_2_ID, new ObjectProperty<String>(
+                    "name " + i, String.class));
+            items.put(String.valueOf(i), item);
+        }
+    }
+
+    public Item getItem(Object itemId) {
+        if (items.isEmpty()) {
+            loadItems();
+        }
+        return items.get(itemId);
+    }
+
+    public Collection<String> getContainerPropertyIds() {
+        if (items.isEmpty()) {
+            loadItems();
+        }
+        ArrayList<String> a = new ArrayList<String>();
+        a.add(PROPERTY_1_ID);
+        a.add(PROPERTY_2_ID);
+        return a;
+    }
+
+    public Collection<String> getItemIds() {
+        if (items.isEmpty()) {
+            loadItems();
+        }
+        return items.keySet();
+    }
+
+    public Property getContainerProperty(Object itemId, Object propertyId) {
+        if (items.isEmpty()) {
+            loadItems();
+        }
+        Item item = items.get(itemId);
+        if (item != null) {
+            return item.getItemProperty(propertyId);
+        }
+        return null;
+    }
+
+    public Class<String> getType(Object propertyId) {
+        if (items.isEmpty()) {
+            loadItems();
+        }
+        return String.class;
+    }
+
+    public int size() {
+        if (items.isEmpty()) {
+            loadItems();
+        }
+        return items.size();
+    }
+
+    public boolean containsId(Object itemId) {
+        if (items.isEmpty()) {
+            loadItems();
+        }
+        return items.containsKey(itemId);
+    }
+
+    public Item addItem(Object itemId) throws UnsupportedOperationException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    public Object addItem() throws UnsupportedOperationException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    public boolean removeItem(Object itemId)
+            throws UnsupportedOperationException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    public boolean addContainerProperty(Object propertyId, Class<?> type,
+            Object defaultValue) throws UnsupportedOperationException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    public boolean removeContainerProperty(Object propertyId)
+            throws UnsupportedOperationException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    public boolean removeAllItems() throws UnsupportedOperationException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1519.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1519.java
new file mode 100644
index 0000000000..ff6d340372
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1519.java
@@ -0,0 +1,25 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Window;
+
+public class Ticket1519 extends Application {
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window("Test app to #1519");
+        setMainWindow(mainWin);
+
+        mainWin.setTheme("tests-tickets");
+        TabSheet ts = new TabSheet();
+
+        ts.addTab(new CustomLayout("Ticket1519_News"), "News", null);
+        ts.addTab(new CustomLayout("Ticket1519_Support"), "Support", null);
+
+        mainWin.addComponent(ts);
+
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1572.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1572.java
new file mode 100644
index 0000000000..a928e0f69c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1572.java
@@ -0,0 +1,118 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Window;
+
+public class Ticket1572 extends com.vaadin.Application {
+
+    private Label state;
+    private GridLayout gl;
+    private Label spacingstate;
+
+    @Override
+    public void init() {
+
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        Panel p = new Panel("Test wrapper for gridlayout margin/spacing");
+
+        p.setContent(new HorizontalLayout());
+
+        gl = new GridLayout(3, 3);
+        gl.setMargin(true);
+        for (int i = 0; i < 3 * 3; i++) {
+            gl.addComponent(new Button("test"));
+        }
+        p.addComponent(gl);
+        p.addComponent(new Label("| next component"));
+
+        Button b = new Button("next margin state");
+        b.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                nextMarginState();
+            }
+
+        });
+
+        state = new Label();
+        state.setCaption("Current margin state:");
+        main.addComponent(state);
+        main.addComponent(b);
+
+        Button b2 = new Button("next spacing state");
+        b2.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                nextSpacingState();
+            }
+
+        });
+
+        spacingstate = new Label();
+        spacingstate.setCaption("Current Spacing State:");
+        main.addComponent(spacingstate);
+        main.addComponent(b2);
+
+        main.addComponent(p);
+
+        nextMarginState();
+        nextSpacingState();
+
+    }
+
+    private int stateCounter = -1;
+
+    private void nextMarginState() {
+        stateCounter++;
+        switch (stateCounter) {
+        case 0:
+            gl.setMargin(false);
+            state.setValue("Margin off");
+            break;
+        case 1:
+            gl.setMargin(true);
+            state.setValue("Margin on");
+            break;
+        case 2:
+            gl.setMargin(true, false, false, false);
+            state.setValue("Margin top");
+            break;
+        case 3:
+            gl.setMargin(false, true, false, false);
+            state.setValue("Margin right");
+            break;
+        case 4:
+            gl.setMargin(false, false, true, false);
+            state.setValue("Margin bottom");
+            break;
+        case 5:
+            gl.setMargin(false, false, false, true);
+            state.setValue("Margin left");
+            break;
+        default:
+            stateCounter = -1;
+            nextMarginState();
+            break;
+        }
+    }
+
+    private boolean spacing = true;
+
+    private void nextSpacingState() {
+        spacing = !spacing;
+        if (spacing) {
+            gl.setSpacing(true);
+            spacingstate.setValue("Spacing on");
+        } else {
+            gl.setSpacing(false);
+            spacingstate.setValue("Spacing off");
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1581.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1581.java
new file mode 100644
index 0000000000..6780b3c9de
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1581.java
@@ -0,0 +1,71 @@
+package com.vaadin.tests.tickets;
+
+import java.util.Date;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.ProgressIndicator;
+import com.vaadin.ui.Window;
+
+public class Ticket1581 extends com.vaadin.Application {
+
+    private Label time;
+    private ProgressIndicator poller;
+    private Thread thread;
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        main.addComponent(new Label("Test the second issue in ticket #1581"));
+
+        time = new Label();
+        poller = new ProgressIndicator();
+        poller.setPollingInterval(200);
+        main.addComponent(time);
+        main.addComponent(poller);
+
+        thread = new Thread() {
+
+            @Override
+            public void run() {
+                super.run();
+                while (true) {
+                    time.setValue(new Date());
+                    try {
+                        sleep(200);
+                    } catch (InterruptedException e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+                }
+            }
+
+        };
+
+        thread.start();
+
+        final Button stop = new Button("Stop updating", new ClickListener() {
+            boolean active = true;
+
+            public void buttonClick(ClickEvent event) {
+
+                if (active) {
+                    main.removeComponent(poller);
+                    event.getButton().setCaption("Resume");
+                } else {
+                    main.addComponent(poller);
+                    event.getButton().setCaption("Stop updating");
+                }
+                active = !active;
+            }
+        });
+
+        main.addComponent(stop);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1589.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1589.java
new file mode 100644
index 0000000000..5a2bf0c793
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1589.java
@@ -0,0 +1,94 @@
+package com.vaadin.tests.tickets;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Date;
+
+import javax.imageio.ImageIO;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.DownloadStream;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.terminal.URIHandler;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Window;
+
+public class Ticket1589 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+
+        MyDynamicResource res = new MyDynamicResource();
+
+        w.addURIHandler(res);
+
+        w.addComponent(new Link(
+                "Test (without Content-Disposition, should suggest generatedFile.png when saving, browser default for actual disposition)",
+                new ExternalResource("myresource")));
+
+        w.addComponent(new Link(
+                "Test (with Content-Disposition, should popup download dialog that suggests  filename downloadedPNG.png)",
+                new ExternalResource("myresource_download")));
+    }
+}
+
+class MyDynamicResource implements URIHandler {
+    String textToDisplay = (new Date()).toString();
+
+    /**
+     * Provides the dynamic resource if the URI matches the resource URI. The
+     * matching URI is "/myresource" under the application URI context.
+     * 
+     * Returns null if the URI does not match. Otherwise returns a download
+     * stream that contains the response from the server.
+     */
+    public DownloadStream handleURI(URL context, String relativeUri) {
+        // Catch the given URI that identifies the resource, otherwise let other
+        // URI handlers or the Application to handle the response.
+        if (!relativeUri.startsWith("myresource")) {
+            return null;
+        }
+
+        // Create an image and draw some background on it.
+        BufferedImage image = new BufferedImage(200, 200,
+                BufferedImage.TYPE_INT_RGB);
+        Graphics drawable = image.getGraphics();
+        drawable.setColor(Color.lightGray);
+        drawable.fillRect(0, 0, 200, 200);
+        drawable.setColor(Color.yellow);
+        drawable.fillOval(25, 25, 150, 150);
+        drawable.setColor(Color.blue);
+        drawable.drawRect(0, 0, 199, 199);
+
+        // Use the parameter to create dynamic content.
+        drawable.setColor(Color.black);
+        drawable.drawString("Time: " + textToDisplay, 75, 100);
+
+        try {
+            // Write the image to a buffer.
+            ByteArrayOutputStream imagebuffer = new ByteArrayOutputStream();
+            ImageIO.write(image, "png", imagebuffer);
+
+            // Return a stream from the buffer.
+            ByteArrayInputStream istream = new ByteArrayInputStream(
+                    imagebuffer.toByteArray());
+            DownloadStream downloadStream = new DownloadStream(istream,
+                    "image/png", "generatedFile.png");
+
+            if (relativeUri.startsWith("myresource_download")) {
+                downloadStream.setParameter("Content-Disposition",
+                        "attachment; filename=\"downloadedPNG.png\"");
+            }
+            return downloadStream;
+        } catch (IOException e) {
+            return null;
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1598.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1598.java
new file mode 100644
index 0000000000..20f1d4d985
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1598.java
@@ -0,0 +1,126 @@
+package com.vaadin.tests.tickets;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.ui.MenuBar;
+import com.vaadin.ui.MenuBar.Command;
+import com.vaadin.ui.MenuBar.MenuItem;
+import com.vaadin.ui.Window;
+
+public class Ticket1598 extends Application {
+
+    Window main = new Window("MenuBar test");
+
+    final MenuBar menuBar = new MenuBar();
+
+    @Override
+    public void init() {
+        setMainWindow(main);
+        setTheme("runo");
+
+        List<MenuItem> itemList = new ArrayList<MenuItem>();
+        // Populate the menu bar
+        for (int i = 0; i < 6; i++) {
+            itemList.add(menuBar.addItem(new String("Menu " + i), null, null));
+        }
+
+        MenuItem first = itemList.get(0);
+
+        for (int i = 0; i < 5; i++) {
+            first.addItem(new String("Submenu item" + i), null, new Command() {
+
+                public void menuSelected(MenuItem selected) {
+                    main.showNotification("Action " + selected.getText());
+                }
+            });
+        }
+
+        MenuItem firstSubItem1 = first.getChildren().get(1);
+
+        for (int i = 0; i < 3; i++) {
+            firstSubItem1.addItem(new String("Subsubmenu item" + i), null,
+                    new Command() {
+
+                        public void menuSelected(MenuItem selected) {
+                            main.showNotification("Action "
+                                    + selected.getText());
+                        }
+                    });
+        }
+        MenuItem firstSubItem2 = first.getChildren().get(3);
+
+        for (int i = 0; i < 3; i++) {
+            firstSubItem2.addItem(new String("Subsubmenu item" + i), null,
+                    new Command() {
+
+                        public void menuSelected(MenuItem selected) {
+                            main.showNotification("Action "
+                                    + selected.getText());
+                        }
+                    });
+        }
+
+        MenuItem second = menuBar.getItems().get(1);
+
+        for (int i = 0; i < 5; i++) {
+            second.addItem(new String("Second submenu item" + i), null,
+                    new Command() {
+
+                        public void menuSelected(MenuItem selected) {
+                            main.showNotification("Action "
+                                    + selected.getText());
+                        }
+                    });
+        }
+
+        MenuItem third = menuBar.getItems().get(2);
+        third.setIcon(new ThemeResource("icons/16/document.png"));
+
+        for (int i = 2; i <= 3; i++) {
+            (menuBar.getItems().get(i)).setCommand(new Command() {
+
+                public void menuSelected(MenuItem selectedItem) {
+                    main.showNotification("Action " + selectedItem.getText());
+                }
+            });
+        }
+
+        final MenuItem fourth = menuBar.getItems().get(3);
+        fourth.setText("Add new item");
+
+        fourth.setCommand(new Command() {
+            public void menuSelected(MenuItem selected) {
+                menuBar.addItem("Newborn", null, null);
+            }
+        });
+
+        final MenuItem fifth = menuBar.getItems().get(4);
+        for (int i = 0; i < 5; i++) {
+            fifth.addItem("Another subitem " + i, null);
+        }
+
+        final MenuItem last = menuBar.getItems().get(menuBar.getSize() - 1);
+        last.setText("Remove me!");
+
+        // A command for removing the selected menuitem
+        Command removeCommand = new Command() {
+
+            public void menuSelected(MenuItem selected) {
+                MenuItem parent = selected.getParent();
+                if (parent != null) {
+                    parent.removeChild(selected);
+                } else {
+                    menuBar.removeItem(selected);
+                }
+            }
+        };
+
+        last.setCommand(removeCommand);
+
+        main.addComponent(menuBar);
+
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket161.java b/tests/testbench/com/vaadin/tests/tickets/Ticket161.java
new file mode 100644
index 0000000000..b2998c687d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket161.java
@@ -0,0 +1,47 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Container;
+import com.vaadin.tests.TestForTablesInitialColumnWidthLogicRendering;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+/**
+ */
+public class Ticket161 extends Application {
+
+    private Table t;
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window("Test app to #1368");
+        setMainWindow(mainWin);
+
+        t = TestForTablesInitialColumnWidthLogicRendering.getTestTable(3, 100);
+        t.setCurrentPageFirstItemIndex(50);
+
+        mainWin.addComponent(t);
+
+        Button b = new Button("Truncate to 20 rows");
+        b.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+
+                Container containerDataSource = t.getContainerDataSource();
+                Object[] itemIds = containerDataSource.getItemIds().toArray();
+                @SuppressWarnings("unused")
+                int c = 0;
+                for (int i = 0; i < itemIds.length; i++) {
+                    if (i > 19) {
+                        containerDataSource.removeItem(itemIds[i]);
+                    }
+                }
+            }
+        });
+
+        mainWin.addComponent(b);
+
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1632.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1632.java
new file mode 100644
index 0000000000..e156752450
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1632.java
@@ -0,0 +1,64 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Item;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+/**
+ */
+public class Ticket1632 extends Application {
+
+    private Table t;
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window("Test app");
+        setMainWindow(mainWin);
+
+        t = new Table();
+
+        t.addContainerProperty("col1", String.class, "");
+        t.addContainerProperty("col2", String.class, "");
+        t.addContainerProperty("col3", String.class, "");
+
+        t.addItem(new Object[] { "jep", "foo", "bar" }, "1");
+        t.addItem(new Object[] { "jep", "foo", "bar" }, "2");
+        t.addItem(new Object[] { "jep", "foo", "bar" }, "3");
+
+        t.setVisibleColumns(new Object[] { "col1", "col2" });
+
+        t.addItem(new Object[] { "foo", "bar" }, "4");
+
+        // workaround to add item with all values
+        Item i = t.addItem("5");
+        i.getItemProperty("col1").setValue("jep");
+        i.getItemProperty("col2").setValue("foo");
+        i.getItemProperty("col3").setValue("bar");
+
+        mainWin.addComponent(t);
+
+        Button b = new Button("Toggle col3");
+        b.addListener(new Button.ClickListener() {
+            boolean visible = false;
+
+            public void buttonClick(ClickEvent event) {
+                visible = !visible;
+                if (visible) {
+                    t.setVisibleColumns(new Object[] { "col1", "col2", "col3" });
+
+                } else {
+                    t.setVisibleColumns(new Object[] { "col1", "col2" });
+
+                }
+
+            }
+        });
+
+        mainWin.addComponent(b);
+
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1659.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1659.java
new file mode 100644
index 0000000000..8bba5a103e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1659.java
@@ -0,0 +1,34 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Window;
+
+public class Ticket1659 extends Application {
+
+    @Override
+    public void init() {
+        final Window mainWin = new Window();
+        setMainWindow(mainWin);
+        mainWin.addComponent(new Button(
+                "Change URI using Application.getURL()",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        mainWin.open(new ExternalResource(getURL() + "#"
+                                + System.currentTimeMillis()));
+                    }
+                }));
+        mainWin.addComponent(new Button("Change URI uring Window.getURL()",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        mainWin.open(new ExternalResource(mainWin.getURL()
+                                + "#" + System.currentTimeMillis()));
+                    }
+                }));
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1663.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1663.java
new file mode 100644
index 0000000000..e7b98a4c99
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1663.java
@@ -0,0 +1,22 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.terminal.SystemError;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket1663 extends com.vaadin.Application {
+
+    @Override
+    public void init() {
+
+        Window main = new Window("#1663");
+        setMainWindow(main);
+
+        TextField tf = new TextField("First name");
+        tf.setDescription("The first name is used for the administration user interfaces only.");
+        tf.setComponentError(new SystemError(
+                "You must enter only one first name."));
+
+        main.addComponent(tf);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1673.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1673.java
new file mode 100644
index 0000000000..845e49daed
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1673.java
@@ -0,0 +1,28 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Window;
+
+public class Ticket1673 extends com.vaadin.Application {
+
+    @Override
+    public void init() {
+
+        final Window main = new Window("#1673");
+        setMainWindow(main);
+
+        main.addComponent(new Button("close", this, "close"));
+
+    }
+
+    public static Application.SystemMessages getSystemMessages() {
+        Application.CustomizedSystemMessages msgs = new Application.CustomizedSystemMessages();
+
+        msgs.setSessionExpiredURL("http://www.vaadin.com/");
+        msgs.setSessionExpiredCaption("Foo");
+        msgs.setSessionExpiredMessage("Bar");
+
+        return msgs;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1710.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1710.java
new file mode 100644
index 0000000000..404301dfa5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1710.java
@@ -0,0 +1,411 @@
+package com.vaadin.tests.tickets;
+
+import java.util.Iterator;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.MethodProperty;
+import com.vaadin.terminal.SystemError;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Layout.AlignmentHandler;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1710 extends com.vaadin.Application {
+
+    @Override
+    public void init() {
+
+        setTheme("tests-tickets");
+
+        VerticalLayout lo = new VerticalLayout();
+        setMainWindow(new Window("#1710", lo));
+        lo.setMargin(true);
+        lo.setSpacing(true);
+        lo.setWidth("100%");
+
+        // Hiding controls
+        HorizontalLayout hidingControls = new HorizontalLayout();
+        lo.addComponent(hidingControls);
+
+        // OrderedLayout
+        final VerticalLayout orderedLayout = new VerticalLayout();
+        LayoutTestingPanel oltp = new LayoutTestingPanel("OrderedLayout",
+                orderedLayout);
+        CheckBox cb = new CheckBox("OrderedLayout",
+                new MethodProperty<Boolean>(oltp, "visible"));
+        cb.setImmediate(true);
+        hidingControls.addComponent(cb);
+        lo.addComponent(oltp);
+        orderedLayout.setSpacing(false);
+        addFields(orderedLayout);
+
+        // GridLayout
+        GridLayout grid = new GridLayout(1, 1);
+        Panel g1tp = new LayoutTestingPanel("Gridlayout with 1 column", grid);
+        cb = new CheckBox("GridLayout (1col)", new MethodProperty<Boolean>(
+                g1tp, "visible"));
+        cb.setImmediate(true);
+        hidingControls.addComponent(cb);
+        g1tp.setVisible(false);
+        lo.addComponent(g1tp);
+        grid.setSpacing(true);
+        addFields(grid);
+        GridLayout grid2 = new GridLayout(2, 1);
+        Panel g2tp = new LayoutTestingPanel("Gridlayout with 2 columns", grid2);
+        cb = new CheckBox("GridLayout (2cols)", new MethodProperty<Boolean>(
+                g2tp, "visible"));
+        cb.setImmediate(true);
+        hidingControls.addComponent(cb);
+        g2tp.setVisible(false);
+        lo.addComponent(g2tp);
+        grid2.setSpacing(true);
+        addFields(grid2);
+
+        // ExpandLayout
+        VerticalLayout el = new VerticalLayout();
+        Panel elp = new LayoutTestingPanel(
+                "ExpandLayout width first component expanded", el);
+        cb = new CheckBox("ExpandLayout (vertical)",
+                new MethodProperty<Boolean>(elp, "visible"));
+        cb.setImmediate(true);
+        hidingControls.addComponent(cb);
+        elp.setVisible(false);
+        el.setHeight("700px");
+        addFields(el);
+        Component firstComponent = el.getComponentIterator().next();
+        firstComponent.setSizeFull();
+        el.setExpandRatio(firstComponent, 1);
+        lo.addComponent(elp);
+        HorizontalLayout elh = new HorizontalLayout();
+        Panel elhp = new LayoutTestingPanel(
+                "ExpandLayout width first component expanded; horizontal", elh);
+        cb = new CheckBox("ExpandLayout (horizontal)",
+                new MethodProperty<Boolean>(elhp, "visible"));
+        cb.setImmediate(true);
+        hidingControls.addComponent(cb);
+        elhp.setVisible(false);
+        elhp.setScrollable(true);
+        elh.setWidth("2000px");
+        elh.setHeight("100px");
+        addFields(elh);
+        Component firstComponentElh = elh.getComponentIterator().next();
+        firstComponentElh.setSizeFull();
+        elh.setExpandRatio(firstComponentElh, 1);
+        lo.addComponent(elhp);
+
+        // CustomLayout
+        VerticalLayout cl = new VerticalLayout();
+        Panel clp = new LayoutTestingPanel("CustomLayout", cl);
+        cb = new CheckBox("CustomLayout", new MethodProperty<Boolean>(clp,
+                "visible"));
+        cb.setImmediate(true);
+        hidingControls.addComponent(cb);
+        clp.setVisible(false);
+        lo.addComponent(clp);
+        cl.addComponent(new Label("<<< Add customlayout testcase here >>>"));
+
+        // Form
+        Panel formPanel = new Panel("Form");
+        cb = new CheckBox("Form", new MethodProperty<Boolean>(formPanel,
+                "visible"));
+        cb.setImmediate(true);
+        hidingControls.addComponent(cb);
+        formPanel.setVisible(false);
+        formPanel.addComponent(getFormPanelExample());
+        lo.addComponent(formPanel);
+
+        for (Iterator<Component> i = hidingControls.getComponentIterator(); i
+                .hasNext();) {
+            ((AbstractComponent) i.next()).setImmediate(true);
+        }
+
+    }
+
+    private Form getFormPanelExample() {
+        Form f = new Form();
+        f.setCaption("Test form");
+        Button fb1 = new Button("Test button");
+        fb1.setComponentError(new SystemError("Test error"));
+        f.addField("fb1", fb1);
+        CheckBox fb2 = new CheckBox("Test button", true);
+        fb2.setComponentError(new SystemError("Test error"));
+        f.addField("fb2", fb2);
+        TextField ft1 = new TextField("With caption");
+        ft1.setComponentError(new SystemError("Error"));
+        f.addField("ft1", ft1);
+        TextField ft2 = new TextField();
+        ft2.setComponentError(new SystemError("Error"));
+        ft2.setValue("Without caption");
+        f.addField("ft2", ft2);
+        TextField ft3 = new TextField("With caption and required");
+        ft3.setComponentError(new SystemError("Error"));
+        ft3.setRequired(true);
+        f.addField("ft3", ft3);
+        return f;
+    }
+
+    private void addFields(ComponentContainer lo) {
+        Button button = new Button("Test button");
+        button.setComponentError(new SystemError("Test error"));
+        lo.addComponent(button);
+
+        CheckBox b2 = new CheckBox("Test button");
+        b2.setComponentError(new SystemError("Test error"));
+        lo.addComponent(b2);
+
+        TextField t1 = new TextField("With caption");
+        t1.setComponentError(new SystemError("Error"));
+        lo.addComponent(t1);
+
+        TextField t2 = new TextField("With caption and required");
+        t2.setComponentError(new SystemError("Error"));
+        t2.setRequired(true);
+        lo.addComponent(t2);
+
+        TextField t3 = new TextField();
+        t3.setValue("Without caption");
+        t3.setComponentError(new SystemError("Error"));
+        lo.addComponent(t3);
+
+        lo.addComponent(new TextField("Textfield with no error in it"));
+
+        TextField tt1 = new TextField("100% wide Textfield with no error in it");
+        tt1.setWidth("100%");
+        lo.addComponent(tt1);
+
+        TextField tt2 = new TextField();
+        tt2.setWidth("100%");
+        tt2.setValue("100% wide Textfield with no error in it and no caption");
+        lo.addComponent(tt2);
+
+        TextField t4 = new TextField();
+        t4.setValue("Without caption, With required");
+        t4.setComponentError(new SystemError("Error"));
+        t4.setRequired(true);
+        lo.addComponent(t4);
+
+        TextField t5 = new TextField();
+        t5.setValue("Without caption,  WIDE");
+        t5.setComponentError(new SystemError("Error"));
+        t5.setWidth("100%");
+        lo.addComponent(t5);
+
+        TextField t6 = new TextField();
+        t6.setValue("Without caption, With required, WIDE");
+        t6.setComponentError(new SystemError("Error"));
+        t6.setRequired(true);
+        t6.setWidth("100%");
+        lo.addComponent(t6);
+
+        TextField t7 = new TextField();
+        t7.setValue("With icon and required and icon");
+        t7.setComponentError(new SystemError("Error"));
+        t7.setRequired(true);
+        t7.setIcon(new ThemeResource("../runo/icons/16/ok.png"));
+        lo.addComponent(t7);
+
+        DateField d1 = new DateField(
+                "Datefield with caption and icon, next one without caption");
+        d1.setComponentError(new SystemError("Error"));
+        d1.setRequired(true);
+        d1.setIcon(new ThemeResource("../runo/icons/16/ok.png"));
+        lo.addComponent(d1);
+
+        DateField d2 = new DateField();
+        d2.setComponentError(new SystemError("Error"));
+        d2.setRequired(true);
+        lo.addComponent(d2);
+    }
+
+    public class LayoutTestingPanel extends Panel {
+
+        Layout testedLayout;
+
+        HorizontalLayout controls = new HorizontalLayout();
+        CheckBox marginLeft = new CheckBox("m-left", false);
+        CheckBox marginRight = new CheckBox("m-right", false);
+        CheckBox marginTop = new CheckBox("m-top", false);
+        CheckBox marginBottom = new CheckBox("m-bottom", false);
+        CheckBox spacing = new CheckBox("spacing", false);
+        VerticalLayout testPanelLayout = new VerticalLayout();
+
+        LayoutTestingPanel(String caption, Layout layout) {
+            super(caption);
+            VerticalLayout internalLayout = new VerticalLayout();
+            internalLayout.setWidth("100%");
+            setContent(internalLayout);
+            testedLayout = layout;
+            testPanelLayout.setWidth("100%");
+            Panel controlWrapper = new Panel();
+            controlWrapper.addComponent(controls);
+            controlWrapper.setWidth("100%");
+            controlWrapper.setScrollable(true);
+            controlWrapper.setStyleName("controls");
+            internalLayout.addComponent(controlWrapper);
+            Panel testPanel = new Panel(testPanelLayout);
+            testPanel.setStyleName("testarea");
+            testPanelLayout.addComponent(testedLayout);
+            internalLayout.addComponent(testPanel);
+            internalLayout.setMargin(true);
+            internalLayout.setSpacing(true);
+            controls.setSpacing(true);
+            controls.setMargin(false);
+            controls.addComponent(new Label("width"));
+            controls.addComponent(new TextField(new MethodProperty<Float>(
+                    testedLayout, "width")));
+            controls.addComponent(new CheckBox("%",
+                    new MethodProperty<Boolean>(this, "widthPercents")));
+            controls.addComponent(new Label("height"));
+            controls.addComponent(new TextField(new MethodProperty<Float>(
+                    testedLayout, "height")));
+            controls.addComponent(new CheckBox("%",
+                    new MethodProperty<Boolean>(this, "heightPercents")));
+            controls.addComponent(marginLeft);
+            controls.addComponent(marginRight);
+            controls.addComponent(marginTop);
+            controls.addComponent(marginBottom);
+            if (testedLayout instanceof Layout.SpacingHandler) {
+                controls.addComponent(spacing);
+            }
+
+            Property.ValueChangeListener marginSpacingListener = new Property.ValueChangeListener() {
+                public void valueChange(ValueChangeEvent event) {
+                    updateMarginsAndSpacing();
+                }
+            };
+
+            marginBottom.addListener(marginSpacingListener);
+            marginTop.addListener(marginSpacingListener);
+            marginLeft.addListener(marginSpacingListener);
+            marginRight.addListener(marginSpacingListener);
+            spacing.addListener(marginSpacingListener);
+            updateMarginsAndSpacing();
+
+            addAlignmentControls();
+
+            testedLayout.setStyleName("tested-layout");
+            setStyleName("layout-testing-panel");
+
+            for (Iterator<Component> i = controls.getComponentIterator(); i
+                    .hasNext();) {
+                ((AbstractComponent) i.next()).setImmediate(true);
+            }
+        }
+
+        @SuppressWarnings("deprecation")
+        private void addAlignmentControls() {
+            if (!(testedLayout instanceof Layout.AlignmentHandler)) {
+                return;
+            }
+            @SuppressWarnings("unused")
+            final Layout.AlignmentHandler ah = (AlignmentHandler) testedLayout;
+
+            final NativeSelect vAlign = new NativeSelect();
+            final NativeSelect hAlign = new NativeSelect();
+            controls.addComponent(new Label("component alignment"));
+            controls.addComponent(hAlign);
+            controls.addComponent(vAlign);
+            hAlign.setNullSelectionAllowed(false);
+            vAlign.setNullSelectionAllowed(false);
+
+            vAlign.addItem(new Integer(Layout.AlignmentHandler.ALIGNMENT_TOP));
+            vAlign.setItemCaption(new Integer(
+                    Layout.AlignmentHandler.ALIGNMENT_TOP), "top");
+            vAlign.addItem(new Integer(
+                    Layout.AlignmentHandler.ALIGNMENT_VERTICAL_CENTER));
+            vAlign.setItemCaption(new Integer(
+                    Layout.AlignmentHandler.ALIGNMENT_VERTICAL_CENTER),
+                    "center");
+            vAlign.addItem(new Integer(Layout.AlignmentHandler.ALIGNMENT_BOTTOM));
+            vAlign.setItemCaption(new Integer(
+                    Layout.AlignmentHandler.ALIGNMENT_BOTTOM), "bottom");
+
+            hAlign.addItem(new Integer(Layout.AlignmentHandler.ALIGNMENT_LEFT));
+            hAlign.setItemCaption(new Integer(
+                    Layout.AlignmentHandler.ALIGNMENT_LEFT), "left");
+            hAlign.addItem(new Integer(
+                    Layout.AlignmentHandler.ALIGNMENT_HORIZONTAL_CENTER));
+            hAlign.setItemCaption(new Integer(
+                    Layout.AlignmentHandler.ALIGNMENT_HORIZONTAL_CENTER),
+                    "center");
+            hAlign.addItem(new Integer(Layout.AlignmentHandler.ALIGNMENT_RIGHT));
+            hAlign.setItemCaption(new Integer(
+                    Layout.AlignmentHandler.ALIGNMENT_RIGHT), "right");
+
+            Property.ValueChangeListener alignmentChangeListener = new Property.ValueChangeListener() {
+                public void valueChange(ValueChangeEvent event) {
+                    updateAlignments(((Integer) hAlign.getValue()).intValue(),
+                            ((Integer) vAlign.getValue()).intValue());
+                }
+
+            };
+
+            hAlign.setValue(new Integer(Layout.AlignmentHandler.ALIGNMENT_LEFT));
+            vAlign.addListener(alignmentChangeListener);
+            hAlign.addListener(alignmentChangeListener);
+            vAlign.setValue(new Integer(Layout.AlignmentHandler.ALIGNMENT_TOP));
+
+            controls.addComponent(new Label("layout alignment"));
+            final NativeSelect lAlign = new NativeSelect();
+            controls.addComponent(lAlign);
+            lAlign.setNullSelectionAllowed(false);
+            lAlign.addItem(new Integer(Layout.AlignmentHandler.ALIGNMENT_LEFT));
+            lAlign.setItemCaption(new Integer(
+                    Layout.AlignmentHandler.ALIGNMENT_LEFT), "left");
+            lAlign.addItem(new Integer(
+                    Layout.AlignmentHandler.ALIGNMENT_HORIZONTAL_CENTER));
+            lAlign.setItemCaption(new Integer(
+                    Layout.AlignmentHandler.ALIGNMENT_HORIZONTAL_CENTER),
+                    "center");
+            lAlign.addItem(new Integer(Layout.AlignmentHandler.ALIGNMENT_RIGHT));
+            lAlign.setItemCaption(new Integer(
+                    Layout.AlignmentHandler.ALIGNMENT_RIGHT), "right");
+
+            lAlign.addListener(new Property.ValueChangeListener() {
+                public void valueChange(ValueChangeEvent event) {
+                    testPanelLayout.setComponentAlignment(testedLayout,
+                            ((Integer) lAlign.getValue()).intValue(),
+                            VerticalLayout.ALIGNMENT_TOP);
+                }
+            });
+        }
+
+        @SuppressWarnings("deprecation")
+        private void updateAlignments(int h, int v) {
+            for (Iterator<Component> i = testedLayout.getComponentIterator(); i
+                    .hasNext();) {
+                ((Layout.AlignmentHandler) testedLayout).setComponentAlignment(
+                        i.next(), h, v);
+            }
+        }
+
+        private void updateMarginsAndSpacing() {
+            testedLayout.setMargin(
+                    ((Boolean) marginTop.getValue()).booleanValue(),
+                    ((Boolean) marginRight.getValue()).booleanValue(),
+                    ((Boolean) marginBottom.getValue()).booleanValue(),
+                    ((Boolean) marginLeft.getValue()).booleanValue());
+            if (testedLayout instanceof Layout.SpacingHandler) {
+                ((Layout.SpacingHandler) testedLayout)
+                        .setSpacing(((Boolean) spacing.getValue())
+                                .booleanValue());
+            }
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1737.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1737.java
new file mode 100644
index 0000000000..f45fe88889
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1737.java
@@ -0,0 +1,52 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.ClassResource;
+import com.vaadin.terminal.DownloadStream;
+import com.vaadin.terminal.Resource;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1737 extends Application {
+
+    Resource slowRes = new ClassResource(Ticket1737.class, "m-bullet-blue.gif",
+            this) {
+        @Override
+        public DownloadStream getStream() {
+            try {
+                Thread.sleep(4000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            return super.getStream();
+        }
+    };
+
+    @Override
+    public void init() {
+
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        VerticalLayout el = new VerticalLayout();
+        main.setContent(el);
+
+        Panel p = new Panel("Test panel");
+        p.setSizeFull();
+
+        p.addComponent(new Label(
+                "Second component is embedded with a slow resource "
+                        + "and thus should break layout if Embedded cannot"
+                        + " request re-layout after load."));
+
+        Embedded em = new Embedded("TestEmbedded", slowRes);
+
+        el.addComponent(p);
+        el.addComponent(em);
+
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1767.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1767.java
new file mode 100644
index 0000000000..a65a601175
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1767.java
@@ -0,0 +1,30 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Window;
+
+public class Ticket1767 extends com.vaadin.Application {
+
+    @Override
+    public void init() {
+
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        ComboBox cb = new ComboBox(" '<' item is not seen in populist?");
+        cb.addItem("Te<strong>st</strong> < jep >");
+        cb.addItem("<");
+        cb.addItem(">");
+
+        cb.addItem("< dsf");
+        cb.addItem("> sdf");
+
+        cb.addItem("dsfs <");
+        cb.addItem("sdfsd >");
+
+        main.addComponent(cb);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1772.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1772.java
new file mode 100644
index 0000000000..68e00e7f94
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1772.java
@@ -0,0 +1,37 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket1772 extends com.vaadin.Application {
+
+    @Override
+    public void init() {
+
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        Button b = new Button("Add content");
+        main.addComponent(b);
+
+        final GridLayout gridLayout = new GridLayout(2, 2);
+        main.addComponent(gridLayout);
+
+        b.addListener(new Button.ClickListener() {
+            int counter = 0;
+
+            public void buttonClick(ClickEvent event) {
+
+                gridLayout
+                        .addComponent(new TextField("Content " + (++counter)));
+
+            }
+        });
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1775.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1775.java
new file mode 100644
index 0000000000..f37737e929
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1775.java
@@ -0,0 +1,48 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket1775 extends com.vaadin.Application {
+
+    @Override
+    public void init() {
+
+        final Window main = new Window("#1775");
+        setMainWindow(main);
+        main.setTheme("tests-tickets");
+        String layoutName = "Ticket1775";
+        final CustomLayout layout = new CustomLayout(layoutName);
+
+        main.addComponent(layout);
+
+        Button button2 = new Button("Populate content");
+        main.addComponent(button2);
+
+        final Button button = new Button("Change content");
+        main.addComponent(button);
+
+        button2.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                Label mainComponent = new Label("Main");
+                Label header = new Label("Header");
+                final Label anotherComponent = new Label("another");
+                layout.addComponent(mainComponent, "body");
+                layout.addComponent(header, "loginUser");
+                button.addListener(new Button.ClickListener() {
+                    public void buttonClick(Button.ClickEvent event) {
+                        layout.addComponent(anotherComponent, "body");
+                        layout.removeComponent("loginUser");
+                    }
+                });
+
+            }
+        });
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1804.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1804.java
new file mode 100644
index 0000000000..265f3041e9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1804.java
@@ -0,0 +1,150 @@
+package com.vaadin.tests.tickets;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import com.vaadin.data.Validator;
+import com.vaadin.data.util.MethodProperty;
+import com.vaadin.terminal.SystemError;
+import com.vaadin.ui.AbstractField;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.Window;
+
+public class Ticket1804 extends com.vaadin.Application {
+
+    LinkedList<Select> listOfAllFields = new LinkedList<Select>();
+
+    @Override
+    public void init() {
+
+        final Window main = new Window("#1804");
+        setMainWindow(main);
+
+        com.vaadin.ui.Select s;
+
+        s = new Select("Select with null selection allowed; required=true");
+        s.setNullSelectionAllowed(true);
+        s.setRequired(true);
+        listOfAllFields.add(s);
+
+        s = new Select("Select with null selection NOT allowed; required=true");
+        s.setNullSelectionAllowed(false);
+        s.setRequired(true);
+        listOfAllFields.add(s);
+
+        s = new Select("Testcase from the ticket #1804");
+        s.setNullSelectionAllowed(false);
+        s.setPropertyDataSource(new MethodProperty<String>(new TestPojo(), "id"));
+        s.addValidator(new EmptyStringValidator(
+                "Selection required for test-field"));
+        s.setRequired(true);
+        listOfAllFields.add(s);
+
+        s = new Select("Testcase from the ticket #1804, but without validator");
+        s.setNullSelectionAllowed(false);
+        s.setPropertyDataSource(new MethodProperty<String>(new TestPojo(), "id"));
+        s.setRequired(true);
+        listOfAllFields.add(s);
+
+        s = new Select(
+                "Testcase from the ticket #1804, but with required=false");
+        s.setNullSelectionAllowed(false);
+        s.setPropertyDataSource(new MethodProperty<String>(new TestPojo(), "id"));
+        s.addValidator(new EmptyStringValidator(
+                "Selection required for test-field"));
+        listOfAllFields.add(s);
+
+        s = new Select(
+                "Testcase from the ticket #1804, but without validator and with required=false");
+        s.setNullSelectionAllowed(false);
+        s.setPropertyDataSource(new MethodProperty<String>(new TestPojo(), "id"));
+        listOfAllFields.add(s);
+
+        s = new Select(
+                "Required=true, custom error message, null selection not allowed");
+        s.setRequired(true);
+        s.setNullSelectionAllowed(false);
+        s.setPropertyDataSource(new MethodProperty<String>(new TestPojo(), "id"));
+        s.setValue(null);
+        s.setComponentError(new SystemError("Test error message"));
+        listOfAllFields.add(s);
+
+        for (Iterator<Select> i = listOfAllFields.iterator(); i.hasNext();) {
+            s = i.next();
+            main.addComponent(s);
+            s.addItem("foo");
+            s.addItem("");
+            s.addItem("bar");
+            if (s.isNullSelectionAllowed()) {
+                s.addItem("<null>");
+                s.setNullSelectionItemId("<null>");
+            }
+            s.setImmediate(true);
+        }
+
+        Button checkValidity = new Button("Check validity of the fields");
+        main.addComponent(checkValidity);
+        checkValidity.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                StringBuffer msg = new StringBuffer();
+                for (Iterator<Select> i = listOfAllFields.iterator(); i
+                        .hasNext();) {
+                    AbstractField af = i.next();
+                    msg.append("<h1>" + af.getCaption() + "</h1>\n");
+                    msg.append("Value=" + af.getValue() + "<br/>\n");
+                    if (af.isValid()) {
+                        msg.append("VALID\n<hr/>");
+                    } else {
+                        msg.append("INVALID<br/><i>" + af.getErrorMessage()
+                                + "</i><hr/>");
+                    }
+                }
+                Window w = new Window("Status of the fields");
+                w.setModal(true);
+                w.setScrollable(true);
+                w.setHeight("80%");
+                w.addComponent(new Label(msg.toString(), Label.CONTENT_XHTML));
+                main.addWindow(w);
+            }
+        });
+    }
+
+    public class TestPojo {
+        String id = "";
+
+        public String getId() {
+            return id;
+        }
+
+        public void setId(String id) {
+            this.id = id;
+        }
+
+    }
+
+    /** Throws an exception when the string is empty or null. */
+    class EmptyStringValidator implements Validator {
+
+        String msg;
+
+        EmptyStringValidator(String msg) {
+            this.msg = msg;
+        }
+
+        public boolean isValid(Object value) {
+            return !(value == null || value.toString().length() == 0);
+        }
+
+        public void validate(Object value) throws InvalidValueException {
+            if (!isValid(value)) {
+                throw new InvalidValueException(msg);
+            }
+        }
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1805.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1805.java
new file mode 100644
index 0000000000..ad7a61d81f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1805.java
@@ -0,0 +1,57 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket1805 extends com.vaadin.Application {
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+        ((Layout) main.getContent()).setMargin(false);
+
+        Label description = new Label(
+                "GridLayout with 100% (no height), is wanted to "
+                        + "share all available width with columns "
+                        + "relatively to their natural width. And it "
+                        + "should still work with margins and spacings");
+        main.addComponent(description);
+
+        final GridLayout grid = new GridLayout(4, 1);
+
+        final TextField size = new TextField("Grid width in css unit");
+        size.addListener(new ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                String width = size.getValue().toString();
+                if (width == null || width.equals("")) {
+                    grid.setSizeUndefined();
+                } else {
+                    grid.setWidth(width);
+                }
+            }
+        });
+        main.addComponent(size);
+        main.addComponent(new Button("set size"));
+
+        grid.setMargin(true);
+        grid.setSpacing(true);
+
+        grid.addComponent(new Label("WIDE"));
+        grid.addComponent(new Label("_I_"));
+        grid.addComponent(new Label("VEEEEEEEEEEERY_WIDE"));
+        Label label = new Label("|");
+        grid.addComponent(label);
+        grid.setComponentAlignment(label, Alignment.TOP_RIGHT);
+        main.addComponent(grid);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1806.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1806.java
new file mode 100644
index 0000000000..f3406a9155
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1806.java
@@ -0,0 +1,45 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket1806 extends com.vaadin.Application {
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        final ObjectProperty<String> prop = new ObjectProperty<String>("");
+        final TextField tf1 = new TextField(
+                "Buffered TextField bound to ObjectProperty");
+        tf1.setWriteThrough(false);
+        tf1.setReadThrough(false);
+        tf1.setPropertyDataSource(prop);
+        main.addComponent(tf1);
+        main.addComponent(new Button(
+                "This button does nothing (but flushes queued variable changes)"));
+        main.addComponent(new Button("Commit the field to property",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        tf1.commit();
+                    }
+                }));
+        main.addComponent(new Button("Show property value",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        main.showNotification("'" + prop.getValue() + "'");
+                    }
+                }));
+        main.addComponent(new Button("Show field value",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        main.showNotification("'" + tf1.getValue() + "'");
+                    }
+                }));
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1811.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1811.java
new file mode 100644
index 0000000000..8f373de6bf
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1811.java
@@ -0,0 +1,78 @@
+package com.vaadin.tests.tickets;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import com.vaadin.data.Validator;
+import com.vaadin.data.validator.StringLengthValidator;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket1811 extends com.vaadin.Application {
+
+    LinkedList<TextField> listOfAllFields = new LinkedList<TextField>();
+
+    @Override
+    public void init() {
+
+        final Window main = new Window("#1811");
+        setMainWindow(main);
+
+        Validator strLenValidator = new StringLengthValidator(
+                "String must be at least 3 chars long and non-null", 3, -1,
+                false);
+
+        TextField tf1 = new TextField(
+                "Text field with default settings (required=false)");
+        listOfAllFields.add(tf1);
+
+        TextField tf2 = new TextField("Text field with required=true");
+        tf2.setRequired(true);
+        listOfAllFields.add(tf2);
+
+        TextField tf3 = new TextField(
+                "Text field with required=true and strlen >= 3");
+        tf3.setRequired(true);
+        tf3.addValidator(strLenValidator);
+        listOfAllFields.add(tf3);
+
+        TextField tf4 = new TextField(
+                "Text field with required=false (default) and strlen >= 3");
+        tf4.addValidator(strLenValidator);
+        listOfAllFields.add(tf4);
+
+        for (Iterator<TextField> i = listOfAllFields.iterator(); i.hasNext();) {
+            TextField tf = i.next();
+            main.addComponent(tf);
+            tf.setImmediate(true);
+        }
+
+        Button checkValidity = new Button("Check validity of the fields");
+        main.addComponent(checkValidity);
+        checkValidity.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                StringBuffer msg = new StringBuffer();
+                for (Iterator<TextField> i = listOfAllFields.iterator(); i
+                        .hasNext();) {
+                    TextField tf = i.next();
+                    msg.append("<h1>" + tf.getCaption() + "</h1>\n");
+                    if (tf.isValid()) {
+                        msg.append("VALID\n<hr/>");
+                    } else {
+                        msg.append("INVALID<br/><i>" + tf.getErrorMessage()
+                                + "</i><hr/>");
+                    }
+                }
+                Window w = new Window("Status of the fields");
+                w.setModal(true);
+                w.addComponent(new Label(msg.toString(), Label.CONTENT_XHTML));
+                main.addWindow(w);
+            }
+        });
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1819.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1819.java
new file mode 100644
index 0000000000..6f06055fc4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1819.java
@@ -0,0 +1,64 @@
+package com.vaadin.tests.tickets;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import com.vaadin.ui.AbstractField;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.Window;
+
+public class Ticket1819 extends com.vaadin.Application {
+
+    LinkedList<Select> listOfAllFields = new LinkedList<Select>();
+
+    @Override
+    public void init() {
+
+        final Window main = new Window("#1819");
+        setMainWindow(main);
+
+        com.vaadin.ui.Select s;
+
+        s = new Select("Select with null selection allowed");
+        s.setNullSelectionAllowed(true);
+        listOfAllFields.add(s);
+
+        s = new Select("Select with null selection NOT allowed");
+        s.setNullSelectionAllowed(false);
+        listOfAllFields.add(s);
+
+        for (Iterator<Select> i = listOfAllFields.iterator(); i.hasNext();) {
+            s = i.next();
+            main.addComponent(s);
+            s.addItem("-null-");
+            s.addItem("");
+            s.addItem("foo");
+            s.addItem("bar");
+            s.setNullSelectionItemId("-null-");
+            s.setImmediate(true);
+        }
+
+        Button checkValidity = new Button("Check validity of the fields");
+        main.addComponent(checkValidity);
+        checkValidity.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                StringBuffer msg = new StringBuffer();
+                for (Iterator<Select> i = listOfAllFields.iterator(); i
+                        .hasNext();) {
+                    AbstractField af = i.next();
+                    msg.append("<h1>" + af.getCaption() + "</h1>\n");
+                    msg.append("Value=" + af.getValue() + "<br/>\n");
+                }
+                Window w = new Window("Status of the fields");
+                w.setModal(true);
+                w.addComponent(new Label(msg.toString(), Label.CONTENT_XHTML));
+                main.addWindow(w);
+            }
+        });
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1834PanelScrolling.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1834PanelScrolling.java
new file mode 100644
index 0000000000..7c9104e750
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1834PanelScrolling.java
@@ -0,0 +1,89 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Window;
+
+public class Ticket1834PanelScrolling extends com.vaadin.Application {
+
+    private static final int ROWS = 50;
+
+    private Label state = new Label("State");
+
+    private Panel p;
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        HorizontalLayout currentState = new HorizontalLayout();
+
+        currentState.addComponent(state);
+        Button b = new Button("update");
+        currentState.addComponent(b);
+        b.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                state.setValue("ScrollTop: " + p.getScrollTop()
+                        + " ScrollLeft: " + p.getScrollLeft());
+            }
+        });
+        main.addComponent(currentState);
+
+        b = new Button("ScrollBy 50px");
+        b.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                p.setScrollLeft(p.getScrollLeft() + 50);
+                p.setScrollTop(p.getScrollTop() + 50);
+                state.setValue("ScrollTop: " + p.getScrollTop()
+                        + " ScrollLeft: " + p.getScrollLeft());
+            }
+        });
+
+        main.addComponent(b);
+
+        b = new Button("Add row");
+        b.addListener(new ClickListener() {
+            int i = 0;
+
+            public void buttonClick(ClickEvent event) {
+                p.addComponent(new Label("new Row" + ++i));
+            }
+        });
+
+        main.addComponent(b);
+
+        b = new Button("Repaint Panel");
+        b.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                p.requestRepaint();
+            }
+        });
+
+        main.addComponent(b);
+
+        p = new Panel("TestPanel");
+        p.setScrollable(true);
+
+        for (int i = 0; i < ROWS; i++) {
+            p.addComponent(new Label(
+                    "Label"
+                            + i
+                            + "................................................................................................................."));
+        }
+
+        p.setHeight("300px");
+        p.setWidth("250px");
+
+        p.setScrollTop(100);
+        p.setScrollLeft(100);
+
+        main.addComponent(p);
+
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1857.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1857.java
new file mode 100644
index 0000000000..f82467b519
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1857.java
@@ -0,0 +1,109 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.event.Action;
+import com.vaadin.event.Action.Handler;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1857 extends Application implements Handler {
+
+    @Override
+    public void init() {
+
+        setTheme("tests-tickets");
+
+        VerticalLayout el = new VerticalLayout();
+        Window main = new Window("Testcase for #1857", el);
+        setMainWindow(main);
+        el.setMargin(true);
+        el.setSpacing(true);
+
+        final Table t = new Table();
+        el.addComponent(t);
+        el.setExpandRatio(t, 1);
+        t.setSizeFull();
+        addContentsToTable(t);
+        t.setStyleName("foo");
+
+        HorizontalLayout footer = new HorizontalLayout();
+        el.addComponent(footer);
+        footer.setSpacing(true);
+
+        final CheckBox actionHandlerEnabler = new CheckBox("Action handlers",
+                false);
+        footer.addComponent(actionHandlerEnabler);
+        actionHandlerEnabler.setImmediate(true);
+        actionHandlerEnabler.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                if (((Boolean) actionHandlerEnabler.getValue()).booleanValue()) {
+                    t.addActionHandler(Ticket1857.this);
+                } else {
+                    t.removeActionHandler(Ticket1857.this);
+                }
+            }
+        });
+
+        final CheckBox cellStylesEnabler = new CheckBox("Cell styles", false);
+        footer.addComponent(cellStylesEnabler);
+        cellStylesEnabler.setImmediate(true);
+        cellStylesEnabler.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                if (((Boolean) cellStylesEnabler.getValue()).booleanValue()) {
+                    t.setCellStyleGenerator(new Table.CellStyleGenerator() {
+                        public String getStyle(Object itemId, Object propertyId) {
+                            Object cell = t.getContainerProperty(itemId,
+                                    propertyId).getValue();
+                            if (!(cell instanceof Integer)) {
+                                return null;
+                            }
+                            int age = ((Integer) cell).intValue();
+                            return age > 65 ? "old" : (age < 18 ? "young"
+                                    : null);
+                        }
+                    });
+                } else {
+                    t.setCellStyleGenerator(null);
+                }
+            }
+        });
+        cellStylesEnabler.setValue(Boolean.TRUE);
+
+    }
+
+    private void addContentsToTable(Table t) {
+
+        t.addContainerProperty("First name", String.class, "");
+        t.addContainerProperty("Last name", String.class, "");
+        t.addContainerProperty("Age", Integer.class, "");
+
+        String firstNames[] = { "Quentin", "Marc", "Peter", "David", "Mary",
+                "Jani", "Jane", "Brita" };
+        String lastNames[] = { "Heiskanen", "Bjorn", "Torwalds", "Autere",
+                "Smith", "Lindström" };
+
+        for (int i = 0; i < 1000; i++) {
+            t.addItem(new Object[] {
+                    firstNames[((int) (Math.random() * firstNames.length))],
+                    lastNames[((int) (Math.random() * lastNames.length))],
+                    new Integer((int) (Math.random() * 100) + 10) },
+                    new Integer(i));
+        }
+    }
+
+    private final Action removeAction = new Action("Remove");
+
+    public Action[] getActions(Object target, Object sender) {
+        return new Action[] { removeAction };
+    }
+
+    public void handleAction(Action action, Object sender, Object target) {
+        getMainWindow().showNotification("Removing row number:" + target);
+        ((Table) sender).removeItem(target);
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1868.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1868.java
new file mode 100644
index 0000000000..edf9c1207d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1868.java
@@ -0,0 +1,20 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Window;
+
+public class Ticket1868 extends com.vaadin.Application {
+
+    @Override
+    public void init() {
+
+        setMainWindow(new Window("#1868"));
+
+        Panel p = new Panel(
+                "This is a really long caption for the panel, too long in fact!");
+        p.setWidth("300px");
+        p.setHeight("300px");
+
+        getMainWindow().addComponent(p);
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1869.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1869.java
new file mode 100644
index 0000000000..953217f907
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1869.java
@@ -0,0 +1,55 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1869 extends com.vaadin.Application {
+
+    @Override
+    public void init() {
+
+        GridLayout lo = new GridLayout(2, 1);
+        setMainWindow(new Window("#1869", lo));
+        lo.setMargin(true);
+        lo.setSpacing(true);
+
+        VerticalLayout el = new VerticalLayout();
+        Panel elp = new Panel(
+                "Vertical ExpandLayout /w first component expanded", el);
+        el.setHeight("1000px");
+        for (int i = 0; i < 3; i++) {
+            Button b = new Button("x");
+            el.addComponent(b);
+            if (i == 0) {
+                b.setSizeFull();
+                el.setExpandRatio(b, 1);
+            }
+        }
+        lo.addComponent(elp);
+        elp.setWidth("300px");
+        elp.setHeight("300px");
+        elp.setScrollable(true);
+
+        HorizontalLayout elh = new HorizontalLayout();
+        Panel elph = new Panel(
+                "Horizontal ExpandLayout /w first component expanded", elh);
+        elh.setWidth("1000px");
+        for (int i = 0; i < 3; i++) {
+            Button b = new Button("x");
+            elh.addComponent(b);
+            if (i == 0) {
+                b.setSizeFull();
+                elh.setExpandRatio(b, 1);
+            }
+        }
+        lo.addComponent(elph);
+        elph.setWidth("300px");
+        elph.setHeight("300px");
+        elph.setScrollable(true);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1878.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1878.java
new file mode 100644
index 0000000000..0bb631aab5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1878.java
@@ -0,0 +1,384 @@
+package com.vaadin.tests.tickets;
+
+import java.util.Date;
+import java.util.Iterator;
+import java.util.Random;
+
+import com.vaadin.Application;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.data.validator.StringLengthValidator;
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Layout.AlignmentHandler;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1878 extends Application {
+
+    private Layout orderedLayout;
+    private Layout gridLayout;
+    private Layout formLayout;
+    private GridLayout mainLayout;
+    private Button switchToGridButton;
+    private Button switchToOrderedButton;
+    private Button switchToFormsButton;
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+
+        mainLayout = new GridLayout(1, 2);
+        w.setContent(mainLayout);
+        orderedLayout = createOL();
+        gridLayout = createGL();
+        formLayout = createForms();
+
+        switchToGridButton = new Button("Switch to GridLayout",
+                new ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        changeLayout(switchToGridButton, gridLayout);
+                    }
+
+                });
+        switchToOrderedButton = new Button("Switch to OrderedLayout",
+                new ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        changeLayout(switchToOrderedButton, orderedLayout);
+                    }
+
+                });
+        switchToOrderedButton.setEnabled(false);
+
+        switchToFormsButton = new Button("Switch to Form", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                changeLayout(switchToFormsButton, formLayout);
+            }
+
+        });
+
+        HorizontalLayout buttonLayout = new HorizontalLayout();
+        buttonLayout.addComponent(switchToOrderedButton);
+        buttonLayout.addComponent(switchToGridButton);
+        buttonLayout.addComponent(switchToFormsButton);
+
+        mainLayout.addComponent(buttonLayout);
+        mainLayout.addComponent(orderedLayout);
+        // w.setContent(orderedLayout);
+    }
+
+    private static Layout createOL() {
+        GridLayout layout = new GridLayout(1, 5);
+
+        GridLayout l1 = new GridLayout(1, 3);
+        createLayout(l1, new HorizontalLayout(), "1000px", "150px", "100%",
+                null, true);
+        createLayout(l1, new HorizontalLayout(), "1000px", "150px", "50px",
+                null, false);
+        GridLayout l2 = new GridLayout(6, 1);
+        createLayout(l2, new VerticalLayout(), "200px", "500px", true);
+        createLayout(l2, new VerticalLayout(), "200px", "500px", "100%", null,
+                true);
+        createLayout(l2, new VerticalLayout(), "150px", "500px", true);
+        createLayout(l2, new VerticalLayout(), "150px", "500px", "100%", null,
+                true);
+        createLayout(l2, new VerticalLayout(), "100px", "500px", true);
+        createLayout(l2, new VerticalLayout(), "100px", "500px", "100%", null,
+                true);
+        layout.addComponent(l1);
+        layout.addComponent(l2);
+
+        return layout;
+    }
+
+    private static Layout createGL() {
+        GridLayout layout = new GridLayout(1, 5);
+
+        GridLayout l1 = new GridLayout(1, 3);
+        createLayout(l1, new GridLayout(8, 1), "1000px", "150px", "100%", null,
+                true);
+        createLayout(l1, new GridLayout(8, 1), "1000px", "150px", "50px", null,
+                false);
+        GridLayout l2 = new GridLayout(6, 1);
+        createLayout(l2, new GridLayout(1, 8), "200px", "500px", true);
+        createLayout(l2, new GridLayout(1, 8), "200px", "500px", "100%", null,
+                true);
+        createLayout(l2, new GridLayout(1, 8), "150px", "500px", true);
+        createLayout(l2, new GridLayout(1, 8), "150px", "500px", "100%", null,
+                true);
+        createLayout(l2, new GridLayout(1, 8), "100px", "500px", true);
+        createLayout(l2, new GridLayout(1, 8), "100px", "500px", "100%", null,
+                true);
+        layout.addComponent(l1);
+        layout.addComponent(l2);
+
+        return layout;
+    }
+
+    public class FormObject {
+        private String stringValue = "abc";
+        private int intValue = 1;
+        private long longValue = 2L;
+        private Date dateValue = new Date(34587034750L);
+
+        public String getStringValue() {
+            return stringValue;
+        }
+
+        public void setStringValue(String stringValue) {
+            this.stringValue = stringValue;
+        }
+
+        public int getIntValue() {
+            return intValue;
+        }
+
+        public void setIntValue(int intValue) {
+            this.intValue = intValue;
+        }
+
+        public long getLongValue() {
+            return longValue;
+        }
+
+        public void setLongValue(long longValue) {
+            this.longValue = longValue;
+        }
+
+        public Date getDateValue() {
+            return dateValue;
+        }
+
+        public void setDateValue(Date dateValue) {
+            this.dateValue = dateValue;
+        }
+
+    }
+
+    private Layout createForms() {
+        GridLayout layout = new GridLayout(1, 5);
+        Form form;
+
+        Random r = new Random();
+        GridLayout l1 = new GridLayout(1, 3);
+        form = createForm(l1, "200px", "500px");
+        BeanItem<FormObject> item = new BeanItem<FormObject>(new FormObject());
+        form.setItemDataSource(item);
+        for (Iterator<?> i = item.getItemPropertyIds().iterator(); i.hasNext();) {
+            Object property = i.next();
+            Field f = form.getField(property);
+
+            f.setRequired(r.nextBoolean());
+            if (r.nextBoolean()) {
+                f.setIcon(new ThemeResource("icons/16/document-add.png"));
+            }
+            if (r.nextBoolean()) {
+                f.setCaption(null);
+            }
+
+            f.addValidator(new StringLengthValidator("Error", 10, 8, false));
+        }
+        // createLayout(l1, new
+        // ExpandLayout(ExpandLayout.ORIENTATION_HORIZONTAL),
+        // "1000px", "150px", "50px", null, false);
+
+        // GridLayout l2 = new GridLayout(6, 1);
+        // createLayout(l2, new ExpandLayout(ExpandLayout.ORIENTATION_VERTICAL),
+        // "200px", "500px", true);
+        // createLayout(l2, new ExpandLayout(ExpandLayout.ORIENTATION_VERTICAL),
+        // "200px", "500px", "100%", null, true);
+        // createLayout(l2, new ExpandLayout(ExpandLayout.ORIENTATION_VERTICAL),
+        // "150px", "500px", true);
+        // createLayout(l2, new ExpandLayout(ExpandLayout.ORIENTATION_VERTICAL),
+        // "150px", "500px", "100%", null, true);
+        // createLayout(l2, new ExpandLayout(ExpandLayout.ORIENTATION_VERTICAL),
+        // "100px", "500px", true);
+        // createLayout(l2, new ExpandLayout(ExpandLayout.ORIENTATION_VERTICAL),
+        // "100px", "500px", "100%", null, true);
+        layout.addComponent(l1);
+        // layout.addComponent(l2);
+
+        return layout;
+    }
+
+    private Form createForm(GridLayout parentLayout, String w, String h) {
+        FormLayout formLayout = new FormLayout();
+        Form form = new Form(formLayout);
+
+        Panel p = new Panel("Form " + w + "x" + h);
+
+        p.setWidth(w);
+        p.setHeight(h);
+
+        p.getContent().setSizeFull();
+
+        parentLayout.addComponent(p);
+        p.addComponent(form);
+        formLayout.setSizeFull();
+
+        return form;
+    }
+
+    protected void changeLayout(Button b, Layout newLayout) {
+        switchToOrderedButton.setEnabled(true);
+        switchToGridButton.setEnabled(true);
+        switchToFormsButton.setEnabled(true);
+
+        b.setEnabled(false);
+        Iterator<Component> i = mainLayout.getComponentIterator();
+        i.next();
+        Layout l = (Layout) i.next();
+
+        mainLayout.replaceComponent(l, newLayout);
+    }
+
+    private static void createLayout(GridLayout parentLayout, Layout newLayout,
+            String w, String h, boolean align) {
+        createLayout(parentLayout, newLayout, w, h, null, null, align);
+    }
+
+    private static void createLayout(GridLayout parentLayout, Layout newLayout,
+            String w, String h, String componentWidth, String componentHeight,
+            boolean align) {
+        String dirText = "V";
+        String type;
+        if (newLayout instanceof VerticalLayout) {
+            type = "OL";
+        } else if (newLayout instanceof HorizontalLayout) {
+            dirText = "H";
+            type = "OL";
+        } else {
+            if (((GridLayout) newLayout).getColumns() != 1) {
+                dirText = "H";
+            }
+            type = "GL";
+        }
+        String alignText = align ? "-A" : "";
+        String cWidth = componentWidth == null ? "" : " - " + componentWidth;
+        Panel p = new Panel(type + "/" + dirText + alignText + " " + w + "x"
+                + h + cWidth, newLayout);
+
+        p.setWidth(w);
+        p.setHeight(h);
+
+        newLayout.setSizeFull();
+
+        String captions[] = new String[] { "TextField with caption", null };
+        Resource icons[] = new Resource[] {
+                new ThemeResource("icons/16/document-delete.png"), null };
+        boolean required[] = new boolean[] { true, false };
+        TextField fields[][] = new TextField[captions.length][icons.length];
+        for (int caption = 0; caption < captions.length; caption++) {
+            for (int icon = 0; icon < icons.length; icon++) {
+                for (int req = 0; req < required.length; req++) {
+                    TextField tf = createTextFieldWithError(captions[caption],
+                            icons[icon], required[req]);
+
+                    fields[caption][icon] = tf;
+                    if (componentWidth != null) {
+                        tf.setWidth(componentWidth);
+                        tf.setValue(tf.getValue() + " w:" + componentWidth);
+                    }
+
+                    if (componentHeight != null) {
+                        tf.setHeight(componentWidth);
+                        tf.setValue(tf.getValue() + " h:" + componentHeight);
+                    }
+
+                    p.addComponent(tf);
+
+                    if (align) {
+                        ((AlignmentHandler) newLayout).setComponentAlignment(
+                                tf, Alignment.BOTTOM_RIGHT);
+                    }
+                }
+            }
+        }
+
+        parentLayout.addComponent(p);
+
+    }
+
+    // private static void createGridLayout(GridLayout parentLayout, int dir,
+    // String w, String h) {
+    // createGridLayout(parentLayout, dir, w, h, null, null);
+    // }
+
+    // private static void createGridLayout(GridLayout parentLayout, int dir,
+    // String w, String h, String componentWidth, String componentHeight) {
+    // GridLayout gl;
+    // if (dir == OrderedLayout.ORIENTATION_HORIZONTAL) {
+    // gl = new GridLayout(8, 1);
+    // } else {
+    // gl = new GridLayout(1, 8);
+    // }
+    //
+    // String dirText = (dir == OrderedLayout.ORIENTATION_HORIZONTAL ? "H"
+    // : "V");
+    // String cWidth = componentWidth == null ? "" : " - " + componentWidth;
+    // Panel p = new Panel("GL/" + dirText + " " + w + "x" + h + cWidth, gl);
+    //
+    // p.setWidth(w);
+    // p.setHeight(h);
+    //
+    // gl.setSizeFull();
+    //
+    // String captions[] = new String[] { "TextField with caption", null };
+    // Resource icons[] = new Resource[] {
+    // new ThemeResource("icons/16/document-delete.png"), null };
+    // boolean required[] = new boolean[] { true, false };
+    // TextField fields[][] = new TextField[captions.length][icons.length];
+    // for (int caption = 0; caption < captions.length; caption++) {
+    // for (int icon = 0; icon < icons.length; icon++) {
+    // for (int req = 0; req < required.length; req++) {
+    // TextField tf = createTextFieldWithError(captions[caption],
+    // icons[icon], required[req]);
+    //
+    // fields[caption][icon] = tf;
+    // if (componentWidth != null) {
+    // tf.setWidth(componentWidth);
+    // }
+    //
+    // if (componentHeight != null) {
+    // tf.setHeight(componentWidth);
+    // }
+    //
+    // p.addComponent(tf);
+    // gl.setComponentAlignment(tf, OrderedLayout.ALIGNMENT_LEFT,
+    // OrderedLayout.ALIGNMENT_BOTTOM);
+    // }
+    // }
+    // }
+    //
+    // parentLayout.addComponent(p);
+    //
+    // }
+
+    private static TextField createTextFieldWithError(String caption,
+            Resource icon, boolean required) {
+        TextField tf = new TextField();
+        tf.setCaption(caption);
+        tf.setIcon(icon);
+        tf.setRequired(required);
+        tf.setComponentError(new UserError("Test error message"));
+        return tf;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1900.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1900.java
new file mode 100644
index 0000000000..2047b4698c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1900.java
@@ -0,0 +1,76 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Validator;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket1900 extends Application {
+
+    TextField f[] = new TextField[5];
+    Window main = new Window("#1900 test");
+
+    @Override
+    public void init() {
+
+        setMainWindow(main);
+
+        for (int i = 0; i < 5; i++) {
+            final int j = i;
+            f[i] = new TextField("Testcase " + i);
+            f[i].setImmediate(true);
+            f[i].setRequired(true);
+            main.addComponent(f[i]);
+            f[i].addListener(new Property.ValueChangeListener() {
+                public void valueChange(ValueChangeEvent event) {
+                    main.showNotification("Validity test", "Testcase " + j
+                            + " is " + (f[j].isValid() ? "valid" : "invalid"));
+                }
+            });
+            f[i].addValidator(new ContainsValidator("1"));
+            f[i].addValidator(new ContainsValidator("2"));
+
+        }
+
+        f[0].setDescription("Field is empty, requiredError(null): *");
+
+        f[1].setDescription("Field is empty, requiredError(\"foo\"): * (popup shows the validation error)");
+        f[1].setRequiredError("The field must not be empty");
+
+        f[2].setDescription("Field is non-empty, validators do not give validation error: *");
+        f[2].setValue("valid 12");
+
+        f[3].setDescription("Field is non-empty, requiredError(null), validators "
+                + "give validation error: * ! (popup shows the validation error)");
+        f[3].setValue("invalid");
+
+        f[4].setDescription("Field is non-empty, requiredError(\"foo\"), validators "
+                + "give validation error: * ! (popup shows the validation error)");
+        f[4].setValue("invalid");
+        f[4].setRequiredError("The field must not be empty");
+
+    }
+
+    class ContainsValidator implements Validator {
+        private final String c;
+
+        public ContainsValidator(String c) {
+            this.c = c;
+        }
+
+        public boolean isValid(Object value) {
+            return value != null && value.toString().contains(c);
+        }
+
+        public void validate(Object value) throws InvalidValueException {
+            if (!isValid(value)) {
+                throw new InvalidValueException("Value does not contain " + c);
+            }
+
+        }
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1904.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1904.java
new file mode 100644
index 0000000000..1d79158333
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1904.java
@@ -0,0 +1,46 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1904 extends Application {
+
+    @Override
+    public void init() {
+        setMainWindow(new Window("#1904"));
+        setTheme("tests-tickets");
+
+        addOL("defaults", null, false);
+        addOL("l5,r10,t20,b40,vs20,hs40", "ticket1904", false);
+        addOL("l5,r10,t20,b40,vs20,hs40", "ticket1904", true);
+    }
+
+    private void addOL(String descr, String style, boolean horizontal) {
+        AbstractOrderedLayout ol;
+        if (horizontal) {
+            ol = new HorizontalLayout();
+        } else {
+            ol = new VerticalLayout();
+        }
+        ol.setMargin(true);
+        ol.setSpacing(true);
+        if (style != null) {
+            ol.setStyleName(style);
+        }
+        ol.addComponent(new Label(descr));
+        for (int i = 0; i < 3; i++) {
+            Button b = new Button("Row " + (i + 1));
+            if (!horizontal) {
+                b.setWidth("500px");
+            }
+            ol.addComponent(b);
+        }
+        getMainWindow().addComponent(ol);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1916.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1916.java
new file mode 100644
index 0000000000..d340bf144a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1916.java
@@ -0,0 +1,28 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket1916 extends Application {
+
+    @Override
+    public void init() {
+
+        HorizontalLayout test = new HorizontalLayout();
+        test.setSizeFull();
+
+        TextField tf = new TextField();
+        tf.setComponentError(new UserError("Error message"));
+
+        test.addComponent(tf);
+        test.setComponentAlignment(tf, Alignment.MIDDLE_CENTER);
+
+        Window w = new Window("Test #1916", test);
+        setMainWindow(w);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1919.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1919.java
new file mode 100644
index 0000000000..1e578cd8f5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1919.java
@@ -0,0 +1,53 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Window;
+
+public class Ticket1919 extends com.vaadin.Application {
+
+    private GridLayout lo;
+    private boolean on = true;
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        main.setTheme("tests-tickets");
+
+        lo = new GridLayout(2, 2);
+        lo.setSizeFull();
+        lo.setMargin(true);
+        lo.setSpacing(true);
+
+        lo.addComponent(getTestComponent());
+        lo.addComponent(getTestComponent());
+        lo.addComponent(getTestComponent());
+        lo.addComponent(getTestComponent());
+
+        main.setContent(lo);
+
+    }
+
+    public void toggleStyleName() {
+        if (on) {
+            lo.setStyleName("test");
+        } else {
+            lo.setStyleName("");
+        }
+        on = !on;
+    }
+
+    private Component getTestComponent() {
+        Panel p = new Panel();
+        p.setSizeFull();
+
+        Button b = new Button("toggle Values", this, "toggleStyleName");
+        p.addComponent(b);
+        return p;
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1921.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1921.java
new file mode 100644
index 0000000000..71c45c34ce
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1921.java
@@ -0,0 +1,109 @@
+package com.vaadin.tests.tickets;
+
+import java.util.Map;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.ParameterHandler;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1921 extends Application implements ParameterHandler {
+
+    int state = -1;
+    int round = 1;
+    Button button;
+    VerticalLayout outer, inner;
+
+    @Override
+    public void init() {
+
+        outer = new VerticalLayout();
+        setMainWindow(new Window("#1921", outer));
+        setTheme("tests-tickets");
+        inner = new VerticalLayout();
+        outer.addComponent(inner);
+        button = new Button("foo", this, "newState");
+        inner.addComponent(button);
+
+        outer.setStyleName("red");
+        inner.setStyleName("blue");
+
+        newState();
+
+        getMainWindow().addParameterHandler(this);
+    }
+
+    public void newState() {
+
+        if (state >= 6) {
+            state = 0;
+            round++;
+        } else {
+            state++;
+        }
+
+        button.setCaption("state " + round + "." + state);
+
+        switch (state) {
+
+        case 0:
+            outer.setMargin(true);
+            inner.setMargin(true);
+            inner.setSizeFull();
+            outer.setSizeFull();
+            button.setSizeFull();
+            break;
+
+        case 1:
+            button.setSizeUndefined();
+            break;
+
+        case 2:
+            inner.setMargin(false);
+            break;
+
+        case 3:
+            outer.setMargin(false);
+            break;
+
+        case 4:
+            inner.setMargin(true);
+            break;
+
+        case 5:
+            inner.addComponent(new Label("Added at " + button.getCaption()));
+            break;
+
+        case 6:
+            outer.addComponent(new Label("Added at " + button.getCaption()));
+            break;
+
+        }
+    }
+
+    public void handleParameters(Map<String, String[]> parameters) {
+        String[] s = parameters.get("state");
+        if (s == null || s.length != 1) {
+            return;
+        }
+        String v[] = s[0].split("\\.");
+        if (v == null || v.length != 2) {
+            return;
+        }
+        try {
+            int rr = Integer.parseInt(v[0]);
+            int rs = Integer.parseInt(v[1]);
+            if (rr < round || (rr == round && rs < state)) {
+                getMainWindow().showNotification(
+                        "Already past requested " + s[0]);
+                return;
+            }
+            while (round < rr || state < rs) {
+                newState();
+            }
+        } catch (NumberFormatException ignored) {
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1923.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1923.java
new file mode 100644
index 0000000000..9fc0ecc586
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1923.java
@@ -0,0 +1,80 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1923 extends com.vaadin.Application {
+
+    private static final int ROWS = 50;
+
+    private Panel p;
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        p = new Panel("TestPanel 250x300");
+        // p.getLayout().setWidth("100%");
+        p.setScrollable(true);
+        // p.setContent(new GridLayout(1, 100));
+        for (int i = 0; i < ROWS; i++) {
+            p.addComponent(new Label(
+                    "Label"
+                            + i
+                            + " 5067w09adsfasdjfahlsdfjhalfjhaldjfhalsjdfhlajdhflajhdfljahdslfjahldsjfhaljdfhaljfdhlajsdhflajshdflkajhsdlfkjahsldfkjahsldfhalskjfdhlksjfdh857idifhaljsdfhlajsdhflajhdflajhdfljahldfjhaljdfhalsjdfhalkjdhflkajhdfljahsdlfjahlsdjfhaldjfhaljfdhlajdhflajshdfljahsdlfjhalsjdfhalskjhfdlhusfglksuhdflgjshflgjhslfghslfjghsljfglsjhfglsjhfgljshfgljshflgjhslfghsljfgsljdfglsdjhfglsjhflgkjshfldjgh"));
+        }
+        // main.getLayout().setSizeFull();
+
+        p.setHeight("300px");
+        p.setWidth("250px");
+        // p.setWidth("50%");
+
+        p.setScrollTop(100);
+        p.setScrollLeft(100);
+
+        main.addComponent(p);
+
+        VerticalLayout ol = new VerticalLayout();
+        p = new Panel("a");
+        p.addComponent(new Label("Longer than caption"));
+        ol.addComponent(p);
+
+        main.addComponent(ol);
+
+        ol = new VerticalLayout();
+        p = new Panel("captionasdfjahsdjfh this should be clipped god damn it");
+        // p.getLayout().setSizeFull();
+        p.setWidth("50px");
+        p.setHeight("100px");
+        p.addComponent(new Label(
+                "aasdfaasdfja dslkfj lakfdj lakjdf lkaj dflkaj ldfkj alsdfj laksdj flkajs dflkj sdfsadfasdfasd"));
+        ol.addComponent(p);
+
+        main.addComponent(ol);
+
+        ol = new VerticalLayout();
+        p = new Panel("300x-1");
+        // p.getLayout().setSizeFull();
+        p.setWidth("300px");
+        p.addComponent(new Label("Short"));
+        p.addComponent(new Label("Short"));
+        p.addComponent(new Label("Short"));
+        p.addComponent(new Label("Short"));
+        p.addComponent(new Label("Short"));
+        p.addComponent(new Label("Short"));
+        p.addComponent(new Label("Short"));
+        p.addComponent(new Label("Short"));
+        p.addComponent(new Label("Short"));
+        p.addComponent(new Label("Short"));
+        p.addComponent(new Label("Short"));
+        p.addComponent(new Label("Short"));
+        p.addComponent(new Label("Short"));
+        ol.addComponent(p);
+
+        main.addComponent(ol);
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1924ThemeChanging.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1924ThemeChanging.java
new file mode 100644
index 0000000000..981fd9cd5c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1924ThemeChanging.java
@@ -0,0 +1,51 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Window;
+
+public class Ticket1924ThemeChanging extends com.vaadin.Application {
+
+    private Label l = new Label("Background should be red with test theme");
+
+    @SuppressWarnings("unused")
+    private Panel p;
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        l.setStyleName("red");
+        main.addComponent(l);
+
+        Button b = new Button("Toggle tests-tickets theme");
+        b.addListener(new ClickListener() {
+            boolean flag = false;
+
+            public void buttonClick(ClickEvent event) {
+                if (flag == !flag) {
+                    main.setTheme("tests-tickets");
+                } else {
+                    main.setTheme(null);
+                }
+            }
+        });
+
+        main.addComponent(b);
+
+        b = new Button("Modify caption (should not reload page)");
+        b.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                main.setCaption(main.getCaption() + ".");
+            }
+        });
+
+        main.addComponent(b);
+
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1925.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1925.java
new file mode 100644
index 0000000000..83e5e1cfd4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1925.java
@@ -0,0 +1,15 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Window;
+
+public class Ticket1925 extends Application {
+
+    @Override
+    public void init() {
+        Window mainWindow = new Window("Test åäö");
+        setMainWindow(mainWindow);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1939.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1939.java
new file mode 100644
index 0000000000..2970335d83
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1939.java
@@ -0,0 +1,36 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1939 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getName());
+        setMainWindow(w);
+
+        final VerticalLayout l = new VerticalLayout();
+        l.setWidth("400px");
+        l.setHeight("100px");
+        l.addComponent(new TextField("This one works fine"));
+        TextField t = new TextField();
+        t.setRequired(true);
+        t.setValue("This one bugs");
+        l.addComponent(t);
+        w.addComponent(l);
+
+        w.addComponent(new Button("show me the bug",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        l.setWidth(null);
+                    }
+                }));
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1940.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1940.java
new file mode 100644
index 0000000000..a3264ecba4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1940.java
@@ -0,0 +1,25 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1940 extends Application {
+
+    @Override
+    public void init() {
+        final Window w = new Window(getClass().getName());
+        setMainWindow(w);
+
+        final VerticalLayout l = new VerticalLayout();
+        l.setWidth("200px");
+        l.setHeight(null);
+        TextField t = new TextField();
+        l.addComponent(t);
+        t.setRequired(true);
+        w.addComponent(l);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1953.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1953.java
new file mode 100644
index 0000000000..43e7f10220
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1953.java
@@ -0,0 +1,114 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket1953 extends Application {
+    public static final String cellStyle = "test-cell";
+    public static final String colHeadStyle = "test-col-head";
+    public static final String headingStyle = "test-heading";
+    public static final String spacerStyle = "test-spacer";
+    public static final String pageButtonStyle = "test-page-change";
+
+    @Override
+    public void init() {
+
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        main.setTheme("tests-tickets");
+        GridLayout gl = new GridLayout(5, 5);
+
+        gl.setStyleName("borders");
+
+        gl.addComponent(new Label("0,0"), 0, 0);
+        gl.addComponent(new Label("0,1"), 0, 1);
+        gl.addComponent(new Label("0,2"), 0, 2);
+        gl.addComponent(new Label("0,3"), 0, 3);
+        gl.addComponent(new Label("0,4"), 0, 4);
+        gl.addComponent(new Label("1,0"), 1, 0);
+        gl.addComponent(new Label("2,0"), 2, 0);
+        gl.addComponent(new Label("3,0"), 3, 0);
+        gl.addComponent(new Label("4,0"), 4, 0);
+
+        gl.addComponent(new Label("1,4"), 1, 4);
+        gl.addComponent(new Label("2,4"), 2, 4);
+        gl.addComponent(new Label("3,4"), 3, 4);
+        gl.addComponent(new Label("4,4"), 4, 4);
+
+        gl.addComponent(new Label("1-1 -> 2-2"), 1, 1, 2, 2);
+        gl.addComponent(new Label("3,1"), 3, 1);
+        gl.addComponent(new Label("3,2"), 3, 2);
+        gl.addComponent(new Label("3,3"), 3, 3);
+
+        main.addComponent(gl);
+
+        // create grid
+        GridLayout grid = new GridLayout(7, 7);
+
+        grid.setStyleName("borders");
+
+        // add upper row
+        Button up = new Button("UP");
+
+        up.setStyleName(pageButtonStyle);
+        grid.addComponent(up, 0, 0);
+
+        Label space = new Label();
+        space.setStyleName(spacerStyle);
+        grid.addComponent(space, 1, 0);
+
+        Button single = null;
+        String headingStyle = "foo";
+        for (int i = 1; i < grid.getColumns() - 2; i++) {
+            single = new Button(Integer.toString(i));
+            single.setStyleName(headingStyle);
+            grid.addComponent(single, i + 1, 0);
+        }
+
+        space = new Label();
+        space.setStyleName(spacerStyle);
+        grid.addComponent(space, grid.getColumns() - 1, 0);
+
+        // middle rows
+        char rowChar = 'A';
+        for (int i = 1; i < grid.getRows() - 1; i++) {
+            space = new Label(Character.toString(rowChar++));
+            space.setStyleName(colHeadStyle);
+            grid.addComponent(space, 0, i);
+
+            space = new Label();
+            space.setStyleName(spacerStyle);
+            grid.addComponent(space, 1, i);
+
+            space = new Label();
+            space.setStyleName(spacerStyle);
+            grid.addComponent(space, grid.getColumns() - 1, i);
+        }
+
+        // bottom row
+        Button dn = new Button("DOWN");
+        dn.setStyleName(pageButtonStyle);
+        grid.addComponent(dn, 0, grid.getRows() - 1);
+
+        space = new Label();
+        space.setStyleName(spacerStyle);
+        grid.addComponent(space, 1, grid.getRows() - 1);
+
+        for (int i = 1; i < grid.getColumns() - 2; i++) {
+            single = new Button(Integer.toString(i));
+            single.setStyleName(headingStyle);
+            grid.addComponent(single, i + 1, grid.getRows() - 1);
+        }
+
+        space = new Label();
+        space.setStyleName(spacerStyle);
+        grid.addComponent(space, grid.getColumns() - 1, grid.getRows() - 1);
+
+        main.addComponent(grid);
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1966.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1966.java
new file mode 100644
index 0000000000..5f1f152f3f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1966.java
@@ -0,0 +1,111 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Layout.AlignmentHandler;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1966 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        w.setContent(new GridLayout(2, 2));
+        // w.getLayout().setSizeFull();
+        createUI((Layout) w.getContent());
+    }
+
+    private void createUI(Layout layout) {
+        orderedLayout(layout);
+        gridLayout(layout);
+    }
+
+    private void gridLayout(Layout layout) {
+        Panel p = new Panel("GridLayout");
+        layout.addComponent(p);
+
+        GridLayout gl = new GridLayout(1, 4);
+        gl.setCaption("Horizontal");
+        Button b;
+
+        b = new Button("Wide button");
+        b.setWidth("500px");
+        gl.addComponent(b);
+
+        addButtons(gl);
+
+        p.addComponent(gl);
+
+        /* VERTICAL */
+
+        gl = new GridLayout(4, 1);
+        gl.setCaption("Vertical");
+
+        addButtons(gl);
+
+        b = new Button("High button");
+        b.setHeight("200px");
+        gl.addComponent(b);
+
+        p.addComponent(gl);
+
+    }
+
+    private void orderedLayout(Layout layout) {
+        Panel p = new Panel("OrderedLayout");
+        layout.addComponent(p);
+
+        AbstractOrderedLayout ol = new VerticalLayout();
+        ol.setCaption("Horizontal");
+        // ol.setWidth("100%");
+
+        Button b;
+
+        b = new Button("Wide button");
+        b.setWidth("500px");
+        ol.addComponent(b);
+
+        addButtons(ol);
+        p.addComponent(ol);
+
+        /* VERTICAL */
+
+        ol = new HorizontalLayout();
+        ol.setCaption("Vertical");
+
+        addButtons(ol);
+        b = new Button("High button");
+        b.setHeight("200px");
+        ol.addComponent(b);
+
+        p.addComponent(ol);
+
+    }
+
+    private void addButtons(Layout ol) {
+        ol.addComponent(getButton(ol, Alignment.TOP_LEFT));
+        ol.addComponent(getButton(ol, Alignment.MIDDLE_CENTER));
+        ol.addComponent(getButton(ol, Alignment.BOTTOM_RIGHT));
+
+    }
+
+    private Button getButton(Layout l, Alignment align) {
+        Button b = new Button("Narrow Button - "
+                + align.getHorizontalAlignment() + " - "
+                + align.getVerticalAlignment());
+        b.setWidth("100px");
+        ((AlignmentHandler) l).setComponentAlignment(b, align);
+
+        return b;
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1966_2.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1966_2.java
new file mode 100644
index 0000000000..65fe2cc2ff
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1966_2.java
@@ -0,0 +1,168 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Layout.AlignmentHandler;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1966_2 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getName());
+        setMainWindow(w);
+        w.setContent(new GridLayout(2, 2));
+
+        // Panel p = new Panel("test");
+        // p.setWidth(500);
+        // p.setHeight(500);
+        // p.setContent(new GridLayout(1, 2));
+        // p.getLayout().setSizeFull();
+        //
+        // p.addComponent(new Button("asjkdfhakshdf"));
+        // p.addComponent(new Button("öalijgto8aq5"));
+
+        // GridLayout gl = new GridLayout(4, 1);
+        // // gl.setCaption("Vertical");
+        // gl.setWidth("100%");
+        // gl.setHeight(500);
+
+        // addButtons(gl);
+        // gl.addComponent(new Label("abc"));
+        // p.addComponent(gl);
+
+        // w.getLayout().addComponent(p);
+        createUI((Layout) w.getContent());
+    }
+
+    private void createUI(Layout layout) {
+        orderedLayout(layout);
+        gridLayout(layout);
+        expandLayout(layout);
+    }
+
+    private void gridLayout(Layout layout) {
+        Panel p = new Panel("GridLayout");
+        p.setWidth("500px");
+        p.setHeight("500px");
+        p.getContent().setSizeFull();
+        layout.addComponent(p);
+
+        GridLayout gl = new GridLayout(1, 4);
+        gl.setCaption("Horizontal");
+        gl.setWidth("100%");
+
+        // Button b;
+
+        // b = new Button("Wide button");
+        // b.setWidth("500");
+        // gl.addComponent(b);
+
+        addButtons(gl);
+
+        p.addComponent(gl);
+
+        /* VERTICAL */
+
+        gl = new GridLayout(4, 1);
+        // gl.setCaption("Vertical");
+        gl.setHeight("100%");
+        addButtons(gl);
+
+        // Button b = new Button("High button");
+        // b.setHeight(200);
+        // gl.addComponent(b);
+
+        p.addComponent(gl);
+
+    }
+
+    private void orderedLayout(Layout layout) {
+        Panel p = new Panel("OrderedLayout");
+        p.setWidth("500px");
+        p.setHeight("500px");
+        p.getContent().setWidth("100%");
+        layout.addComponent(p);
+
+        AbstractOrderedLayout ol = new VerticalLayout();
+        // ol.setCaption("Horizontal");
+        ol.setWidth("100%");
+        addButtons(ol);
+        p.addComponent(ol);
+
+        /* VERTICAL */
+
+        ol = new HorizontalLayout();
+        // ol.setCaption("Vertical");
+        ol.setHeight("200px");
+        addButtons(ol);
+        // Button b = new Button("High button");
+        // b.setHeight(200);
+        // ol.addComponent(b);
+        p.addComponent(ol);
+
+    }
+
+    private void expandLayout(Layout layout) {
+        Panel p = new Panel("ExpandLayout");
+        layout.addComponent(p);
+        p.getContent().setWidth("500");
+        p.getContent().setHeight("400");
+
+        AbstractOrderedLayout el = new VerticalLayout();
+        // el.setCaption("Horizontal");
+        // el.setSizeUndefined();
+        // el.setWidth("100%");
+        // ol.setWidth("100%");
+        Button b;
+
+        b = new Button("Wide button");
+        b.setWidth("100%");
+        // b.setHeight(200);
+        // el.setExpandRatio(b,1);
+        // el.addComponent(b);
+
+        addButtons(el);
+        p.addComponent(el);
+
+        /* VERTICAL */
+
+        el = new HorizontalLayout();
+        // el.setHeight(400);
+        // el.setWidth("100%");
+        // el.setCaption("Vertical");
+
+        addButtons(el);
+        // b = new Button("High button");
+        // el.setExpandRatio(b,1);
+        // b.setHeight(100);
+        // el.addComponent(b);
+
+        p.addComponent(el);
+
+    }
+
+    private void addButtons(Layout ol) {
+        ol.addComponent(getButton(ol, Alignment.TOP_LEFT));
+        ol.addComponent(getButton(ol, Alignment.MIDDLE_CENTER));
+        ol.addComponent(getButton(ol, Alignment.BOTTOM_RIGHT));
+
+    }
+
+    private Button getButton(Layout l, Alignment align) {
+        Button b = new Button(align.getHorizontalAlignment() + " - "
+                + align.getVerticalAlignment());
+        // b.setWidth("100");
+        ((AlignmentHandler) l).setComponentAlignment(b, align);
+
+        return b;
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1966_3.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1966_3.java
new file mode 100644
index 0000000000..e4f99b9023
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1966_3.java
@@ -0,0 +1,63 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1966_3 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        GridLayout layout = new GridLayout(10, 10);
+        w.setContent(layout);
+        createUI(layout);
+    }
+
+    private void createUI(GridLayout layout) {
+        VerticalLayout ol = new VerticalLayout();
+        Panel p = new Panel(ol);
+        p.setWidth("300px");
+        p.setHeight("300px");
+        p.getContent().setSizeFull();
+
+        TextField tf = new TextField("Long caption, longer than 100 pixels");
+        tf.setWidth("100px");
+
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.TOP_RIGHT);
+
+        tf = new TextField("Short caption");
+        tf.setWidth("100px");
+
+        tf.setComponentError(new UserError("error message"));
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.TOP_RIGHT);
+
+        tf = new TextField("Short caption");
+        tf.setComponentError(new UserError("error message"));
+        tf.setIcon(new ThemeResource("icons/16/calendar.png"));
+        tf.setWidth("100px");
+
+        tf.setComponentError(new UserError("error message"));
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.TOP_RIGHT);
+
+        tf = new TextField();
+        tf.setValue("No caption");
+        tf.setWidth("100px");
+
+        ol.addComponent(tf);
+        ol.setComponentAlignment(tf, Alignment.TOP_RIGHT);
+
+        layout.addComponent(p);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1969.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1969.java
new file mode 100644
index 0000000000..26c1c69470
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1969.java
@@ -0,0 +1,105 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.terminal.UserError;
+import com.vaadin.tests.TestForTablesInitialColumnWidthLogicRendering;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1969 extends com.vaadin.Application {
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        main.getContent().setSizeFull();
+
+        TabSheet ts = new TabSheet();
+        ts.setSizeFull();
+
+        final Table t = TestForTablesInitialColumnWidthLogicRendering
+                .getTestTable(7, 2000);
+        t.setSizeFull();
+        ts.addTab(t, "Table, scrollins should not flash", null);
+
+        final Label testContent = new Label(
+                "TabSheet by default uses caption, icon, errors etc. from Components. ");
+
+        testContent.setCaption("Introduction to test");
+
+        ts.addTab(testContent);
+
+        final VerticalLayout actions = new VerticalLayout();
+
+        actions.setCaption("Test actions");
+
+        ts.addTab(actions);
+
+        Button b;
+
+        b = new Button(
+                "change introduction caption (should add * to tab name)",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        testContent.setCaption(testContent.getCaption() + "*");
+                    }
+                });
+        actions.addComponent(b);
+
+        b = new Button("change tab caption (should add * to tab name)",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        actions.setCaption(actions.getCaption() + "*");
+                    }
+                });
+
+        actions.addComponent(b);
+
+        final UserError e = new UserError("Test error");
+
+        b = new Button("Toggle error", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                if (testContent.getComponentError() == null) {
+                    testContent.setComponentError(e);
+                } else {
+                    testContent.setComponentError(null);
+                }
+            }
+        });
+        actions.addComponent(b);
+
+        b = new Button("Change table caption", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                t.setCaption(t.getCaption() + "*");
+            }
+        });
+        actions.addComponent(b);
+
+        b = new Button("Toggle Table error", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                if (t.getComponentError() == null) {
+                    t.setComponentError(e);
+                } else {
+                    t.setComponentError(null);
+                }
+            }
+        });
+
+        actions.addComponent(b);
+
+        for (int i = 0; i < 20; i++) {
+            Label l = new Label("Test Content");
+            l.setCaption("Extra tab " + i);
+            ts.addComponent(l);
+        }
+
+        main.addComponent(ts);
+
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1970.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1970.java
new file mode 100644
index 0000000000..1442c9ea5b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1970.java
@@ -0,0 +1,79 @@
+package com.vaadin.tests.tickets;
+
+import java.util.Iterator;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.CloseEvent;
+
+public class Ticket1970 extends Application {
+
+    @Override
+    public void init() {
+        setMainWindow(createWindow());
+    }
+
+    @Override
+    public Window getWindow(String name) {
+
+        // If we already have the requested window, use it
+        Window w = super.getWindow(name);
+        if (w == null) {
+
+            // If no window found, create it
+            w = createExtraWindow(name);
+        }
+        return w;
+    }
+
+    private Window createExtraWindow(String name) {
+        final Window w = new Window("Extra window: " + name);
+        w.setName(name);
+        addWindow(w);
+        w.addComponent(new Label(
+                "This window has been created on fly for name: " + name));
+        w.addComponent(new Button("Show open windows",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        String openWindows = "";
+                        for (Iterator<Window> i = getWindows().iterator(); i
+                                .hasNext();) {
+                            Window t = i.next();
+                            openWindows += (openWindows.length() > 0 ? "," : "")
+                                    + t.getName();
+                        }
+                        w.showNotification(openWindows);
+                    }
+                }));
+        w.addListener(new Window.CloseListener() {
+            public void windowClose(CloseEvent e) {
+                removeWindow(w);
+            }
+        });
+
+        return w;
+    }
+
+    private Window createWindow() {
+        final Window w = new Window();
+        w.addComponent(new Button("Show the name of the application",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        w.showNotification("Name of this window = "
+                                + w.getName());
+                    }
+                }));
+        w.addComponent(new Label("<a href='" + getURL().toExternalForm() + "'>"
+                + getURL().toExternalForm() + "</a>", Label.CONTENT_XHTML));
+        w.addComponent(new Label(
+                "<h2>How to reproduce</h2>Open the above link in another browser"
+                        + " window and then press the Show-button on this window.",
+                Label.CONTENT_XHTML));
+
+        return w;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1972.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1972.java
new file mode 100644
index 0000000000..86d5b0f11d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1972.java
@@ -0,0 +1,30 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket1972 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getName());
+        setMainWindow(w);
+        setTheme("tests-ticket");
+        GridLayout layout = new GridLayout(3, 3);
+        layout.setStyleName("borders");
+        layout.addComponent(new Label("1-1"));
+        layout.space();
+        layout.space();
+        layout.addComponent(new Label("2-1"));
+        layout.space();
+        layout.space();
+        layout.addComponent(new Label("3-1"));
+        layout.space();
+        layout.addComponent(new Label("3-3"));
+
+        w.setContent(layout);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1973.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1973.java
new file mode 100644
index 0000000000..c756ca12c3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1973.java
@@ -0,0 +1,51 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1973 extends com.vaadin.Application {
+
+    Window main = new Window();
+    Table table = new Table();
+
+    @Override
+    public void init() {
+        setMainWindow(main);
+
+        final IndexedContainer container1 = new IndexedContainer();
+        container1.addContainerProperty("layout", Component.class, null);
+
+        final IndexedContainer container2 = new IndexedContainer();
+        container2.addContainerProperty("layout", Component.class, null);
+
+        fill(container1, 100, "Testi 1 :");
+        fill(container2, 100, "Testi 2 :");
+
+        table.setContainerDataSource(container1);
+
+        Button refreshTable = new Button("Change table container");
+        refreshTable.addListener(new Button.ClickListener() {
+            public void buttonClick(Button.ClickEvent e) {
+                table.setContainerDataSource(container2);
+                table.setContainerDataSource(container1);
+            }
+        });
+
+        main.addComponent(table);
+        main.addComponent(refreshTable);
+    }
+
+    public void fill(IndexedContainer container, int size, String prefix) {
+        for (int i = 0; i < size; i++) {
+            Item item = container.addItem(new Integer(i));
+            VerticalLayout layout = new VerticalLayout();
+            layout.addComponent(new Button(prefix + i));
+            item.getItemProperty("layout").setValue(layout);
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1973_2.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1973_2.java
new file mode 100644
index 0000000000..5cffdbd5db
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1973_2.java
@@ -0,0 +1,54 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1973_2 extends Application {
+    Window main = new Window();
+    Table table = new Table();
+
+    @Override
+    public void init() {
+        setMainWindow(main);
+
+        final IndexedContainer container1 = new IndexedContainer();
+        container1.addContainerProperty("text", String.class, null);
+        container1.addContainerProperty("layout", Component.class, null);
+
+        final IndexedContainer container2 = new IndexedContainer();
+        container2.addContainerProperty("text", String.class, null);
+        container2.addContainerProperty("layout", Component.class, null);
+
+        fill(container1, 100);
+
+        table.setContainerDataSource(container1);
+
+        Button refreshTable = new Button("Change table container");
+        refreshTable.addListener(new Button.ClickListener() {
+            public void buttonClick(Button.ClickEvent e) {
+                table.setContainerDataSource(container2);
+                table.setContainerDataSource(container1);
+            }
+        });
+
+        main.addComponent(table);
+        main.addComponent(refreshTable);
+    }
+
+    public void fill(IndexedContainer container, int size) {
+        for (int i = 0; i < size; i++) {
+            int randInt = i;
+            Item item = container.addItem(new Integer(i));
+            VerticalLayout layout = new VerticalLayout();
+            layout.setDebugId("lo" + i);
+            layout.addComponent(new Button("Test " + randInt));
+            item.getItemProperty("layout").setValue(layout);
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1975.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1975.java
new file mode 100644
index 0000000000..d162606ba7
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1975.java
@@ -0,0 +1,62 @@
+package com.vaadin.tests.tickets;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.gwt.server.WebApplicationContext;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket1975 extends Application {
+
+    private CustomLayout cl1;
+    private CustomLayout cl2;
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getName());
+        setMainWindow(w);
+        setTheme("tests-tickets");
+        GridLayout layout = new GridLayout(1, 10);
+        w.setContent(layout);
+        createUI(layout);
+    }
+
+    private void createUI(GridLayout layout) {
+        String s = "<b>Blah</b><input type=\"text\" value='Lorem\" ipsum'/>";
+        try {
+            cl1 = new CustomLayout(new ByteArrayInputStream(s.getBytes()));
+            layout.addComponent(cl1);
+            WebApplicationContext wc = ((WebApplicationContext) getContext());
+
+            layout.addComponent(new Button("Disable/Enable",
+                    new ClickListener() {
+
+                        public void buttonClick(ClickEvent event) {
+                            boolean e = cl1.isEnabled();
+
+                            cl1.setEnabled(!e);
+                            cl2.setEnabled(!e);
+                        }
+
+                    }));
+            File f = new File(wc.getBaseDirectory().getAbsoluteFile()
+                    + "/VAADIN/themes/" + getTheme()
+                    + "/layouts/Ticket1975.html");
+
+            cl2 = new CustomLayout(new FileInputStream(f));
+            layout.addComponent(cl2);
+
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1982.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1982.java
new file mode 100644
index 0000000000..53e5630353
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1982.java
@@ -0,0 +1,84 @@
+package com.vaadin.tests.tickets;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket1982 extends Application {
+
+    private List<TitleBar> components = new ArrayList<TitleBar>();
+
+    @Override
+    public void init() {
+        Window main = new Window();
+        setMainWindow(main);
+
+        GridLayout gl = new GridLayout(2, 2);
+        gl.setSizeFull();
+        main.setContent(gl);
+        gl.setMargin(true);
+
+        TitleBar t1 = new TitleBar("Title 1", gl);
+        TitleBar t2 = new TitleBar("Title 2", gl);
+        TitleBar t3 = new TitleBar("Title 3", gl);
+        TitleBar t4 = new TitleBar("Title 4", gl);
+        components.add(t1);
+        components.add(t2);
+        components.add(t3);
+        components.add(t4);
+
+        restoreComponents(gl);
+
+    }
+
+    private void restoreComponents(GridLayout gl) {
+        gl.removeAllComponents();
+        gl.addComponent(components.get(0));
+        gl.addComponent(components.get(1));
+        gl.addComponent(components.get(2));
+        gl.addComponent(components.get(3));
+    }
+
+    private class TitleBar extends HorizontalLayout {
+
+        private Button max = new Button("Max");
+        private Button min = new Button("Min");
+        private GridLayout layout;
+
+        public TitleBar(String title, GridLayout layout) {
+            super();
+            this.layout = layout;
+            addComponent(new Label(title));
+            addComponent(max);
+            addComponent(min);
+            min.setVisible(false);
+
+            max.addListener(new ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    min.setVisible(true);
+                    max.setVisible(false);
+                    TitleBar.this.layout.removeAllComponents();
+                    TitleBar.this.layout
+                            .addComponent(TitleBar.this, 0, 0, 1, 1);
+                }
+            });
+            min.addListener(new ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    min.setVisible(false);
+                    max.setVisible(true);
+                    restoreComponents(TitleBar.this.layout);
+                }
+            });
+        }
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1983.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1983.java
new file mode 100644
index 0000000000..fbab5c5244
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1983.java
@@ -0,0 +1,141 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+/**
+ * Test class for ticket 1983
+ */
+public class Ticket1983 extends Application {
+
+    @Override
+    public void init() {
+        Window main = new Window("Test for ticket 1983");
+        main.setContent(new TestLayout());
+        setMainWindow(main);
+    }
+
+    private static class TestLayout extends HorizontalSplitPanel {
+        boolean isLong = true;
+        final Table table = new MyTable();
+        final String propId = "col";
+        final String propId2 = "col2";
+
+        public TestLayout() {
+
+            setSplitPosition(200, Sizeable.UNITS_PIXELS);
+            setMargin(false);
+            setLocked(true);
+
+            final HorizontalSplitPanel leftSide = initLeftSide();
+            setFirstComponent(leftSide);
+
+            final Layout rightSide = new VerticalLayout();
+            rightSide.setHeight("100%");
+            setSecondComponent(rightSide);
+        }
+
+        private HorizontalSplitPanel initLeftSide() {
+            final HorizontalSplitPanel leftSide = new HorizontalSplitPanel();
+            leftSide.setHeight("100%");
+
+            final IndexedContainer dataSource = new IndexedContainer();
+            dataSource.addContainerProperty(propId, String.class, null);
+            dataSource.addContainerProperty(propId2, String.class, null);
+            final Object itemId = dataSource.addItem();
+            dataSource
+                    .getItem(itemId)
+                    .getItemProperty(propId)
+                    .setValue(
+                            "Very long value that makes a scrollbar appear for sure");
+            dataSource
+                    .getItem(itemId)
+                    .getItemProperty(propId2)
+                    .setValue(
+                            "Very long value that makes a scrollbar appear for sure");
+
+            for (int i = 0; i < 150; i++) {
+                Object id = dataSource.addItem();
+                dataSource
+                        .getItem(id)
+                        .getItemProperty(propId)
+                        .setValue(
+                                (i == 100 ? "Very long value that makes a scrollbar appear for sure"
+                                        : "Short"));
+                dataSource.getItem(id).getItemProperty(propId2)
+                        .setValue("Short");
+            }
+
+            table.setSizeFull();
+            table.setContainerDataSource(dataSource);
+            table.setVisibleColumns(new Object[] { propId });
+
+            leftSide.setSecondComponent(table);
+
+            Button button = new Button("Change col value to short");
+            button.addListener(new Button.ClickListener() {
+                public void buttonClick(Button.ClickEvent event) {
+                    // Change the column value to a short one --> Should remove
+                    // the scrollbar
+                    if (isLong) {
+                        dataSource.getItem(itemId).getItemProperty(propId)
+                                .setValue("Short value");
+                        dataSource.getItem(itemId).getItemProperty(propId2)
+                                .setValue("Short value");
+                        isLong = false;
+                    } else {
+                        dataSource
+                                .getItem(itemId)
+                                .getItemProperty(propId)
+                                .setValue(
+                                        "Very long value that makes a scrollbar appear for sure");
+                        dataSource
+                                .getItem(itemId)
+                                .getItemProperty(propId2)
+                                .setValue(
+                                        "Very long value that makes a scrollbar appear for sure");
+                        isLong = true;
+                    }
+                    // Works the same way with or without repaint request
+                    table.requestRepaint();
+                }
+            });
+
+            VerticalLayout ol = new VerticalLayout();
+            ol.addComponent(button);
+            leftSide.setFirstComponent(ol);
+
+            button = new CheckBox("Two col");
+            button.addListener(new Button.ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    Button b = event.getButton();
+                    if (((Boolean) b.getValue()).booleanValue()) {
+                        table.setVisibleColumns(new Object[] { propId, propId2 });
+                    } else {
+                        table.setVisibleColumns(new Object[] { propId });
+                    }
+
+                }
+
+            });
+            ol.addComponent(button);
+
+            return leftSide;
+        }
+    }
+
+    static class MyTable extends Table {
+        MyTable() {
+            alwaysRecalculateColumnWidths = true;
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1986.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1986.java
new file mode 100644
index 0000000000..f2a173bcb0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1986.java
@@ -0,0 +1,79 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.ListSelect;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.OptionGroup;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.TwinColSelect;
+import com.vaadin.ui.Window;
+
+public class Ticket1986 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getName());
+        setMainWindow(w);
+
+        int index = 1;
+
+        GridLayout layout = new GridLayout(2, 2);
+        TextField f1 = new TextField("1");
+        f1.setTabIndex(index++);
+        TextField f2 = new TextField("2");
+        f2.setTabIndex(index++);
+
+        DateField f3 = new DateField("3");
+        f3.setTabIndex(index++);
+        ComboBox cb = new ComboBox("4");
+        cb.setTabIndex(index++);
+
+        ListSelect lss = new ListSelect("5");
+        lss.addItem("foo");
+        lss.addItem("Bar");
+        lss.setTabIndex(index++);
+
+        NativeSelect ns = new NativeSelect("6");
+        ns.addItem("foo");
+        ns.addItem("bar");
+        ns.setTabIndex(index++);
+
+        OptionGroup og = new OptionGroup("7");
+        og.addItem("foo");
+        og.addItem("bar");
+        og.setTabIndex(index++);
+
+        OptionGroup ogm = new OptionGroup("7");
+        ogm.setMultiSelect(true);
+        ogm.addItem("foo");
+        ogm.addItem("bar");
+        ogm.setTabIndex(index++);
+
+        TwinColSelect ts = new TwinColSelect("8");
+        ts.addItem("Foo");
+        ts.addItem("Bar");
+        ts.setTabIndex(index++);
+
+        Button b = new Button("9");
+        b.setTabIndex(index++);
+
+        layout.addComponent(b);
+        layout.addComponent(ts);
+        layout.addComponent(ogm);
+        layout.addComponent(og);
+        layout.addComponent(ns);
+        layout.addComponent(lss);
+        layout.addComponent(cb);
+        layout.addComponent(f3);
+        layout.addComponent(f2);
+        layout.addComponent(f1);
+
+        w.setContent(layout);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1991.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1991.java
new file mode 100644
index 0000000000..430c54ec92
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1991.java
@@ -0,0 +1,28 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+public class Ticket1991 extends com.vaadin.Application {
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        Table t = new Table("Test table");
+
+        t.addContainerProperty(" ", CheckBox.class, "");
+        t.addContainerProperty("Col1", String.class, "");
+        t.addContainerProperty("Col2", String.class, "");
+
+        t.setPageLength(5);
+
+        t.addItem(new Object[] { new CheckBox(), "Foo", "Bar" }, "1");
+        t.addItem(new Object[] { new CheckBox(), "Foo", "Bar" }, "2");
+
+        main.addComponent(t);
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1995.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1995.java
new file mode 100644
index 0000000000..c681cb5bd0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1995.java
@@ -0,0 +1,67 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Container;
+import com.vaadin.data.Container.Filterable;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.filter.SimpleStringFilter;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+public class Ticket1995 extends Application {
+
+    private static final Object PROPERTY_1 = "Test";
+    private Table table;
+
+    @Override
+    public void init() {
+        final Window mainWin = new Window(getClass().getName());
+        setMainWindow(mainWin);
+
+        table = new Table();
+        table.addContainerProperty(PROPERTY_1, String.class, "");
+        table.setPageLength(4);
+
+        Item item = table.addItem("1");
+        item.getItemProperty(PROPERTY_1).setValue("Row 1");
+        item = table.addItem("2");
+        item.getItemProperty(PROPERTY_1).setValue("Row 2");
+
+        Filterable filterable = (Container.Filterable) table
+                .getContainerDataSource();
+        filterable.addContainerFilter(new SimpleStringFilter(PROPERTY_1, "Row",
+                true, false));
+
+        table.setColumnHeader(PROPERTY_1, "Test (filter: Row)");
+
+        mainWin.addComponent(table);
+        mainWin.addComponent(new Button("Add item",
+                new com.vaadin.ui.Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        addItem();
+                    }
+                }));
+    }
+
+    protected void addItem() {
+        Filterable filterable = (Container.Filterable) table
+                .getContainerDataSource();
+
+        Item i = table.addItem("abc");
+        String res = "";
+        if (i == null) {
+            res = "FAILED";
+        } else {
+            res = "OK!";
+        }
+
+        getMainWindow().showNotification("Tried to add item 'abc', " + res);
+
+        filterable.addContainerFilter(new SimpleStringFilter(PROPERTY_1, "Row",
+                true, false));
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket20.java b/tests/testbench/com/vaadin/tests/tickets/Ticket20.java
new file mode 100644
index 0000000000..55fee95de3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket20.java
@@ -0,0 +1,99 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Validator;
+import com.vaadin.data.util.MethodProperty;
+import com.vaadin.data.validator.CompositeValidator;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket20 extends Application {
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window("Test app for #20");
+        setMainWindow(mainWin);
+
+        final TextField tx = new TextField("Integer");
+        mainWin.addComponent(tx);
+        tx.setImmediate(true);
+        CompositeValidator v = new CompositeValidator();
+        v.addValidator(new Validator() {
+
+            public boolean isValid(Object value) {
+                try {
+                    Integer.parseInt("" + value);
+                    return true;
+                } catch (NumberFormatException e) {
+                    return false;
+                }
+            }
+
+            public void validate(Object value) throws InvalidValueException {
+                if (!isValid(value)) {
+                    throw new InvalidValueException(value + " is not a number");
+                }
+            }
+        });
+        v.addValidator(new Validator() {
+
+            public boolean isValid(Object value) {
+                try {
+                    int i = Integer.parseInt("" + value);
+                    if (i < 0) {
+                        return false;
+                    }
+                    return true;
+                } catch (NumberFormatException e) {
+                    return false;
+                }
+            }
+
+            public void validate(Object value) throws InvalidValueException {
+                if (!isValid(value)) {
+                    throw new InvalidValueException(value
+                            + " is not a non-negative number");
+                }
+            }
+        });
+        CompositeValidator v2 = new CompositeValidator(
+                CompositeValidator.MODE_OR, null);
+        v2.addValidator(v);
+        v2.addValidator(new Validator() {
+
+            public boolean isValid(Object value) {
+                return "".equals("" + value);
+            }
+
+            public void validate(Object value) throws InvalidValueException {
+                if (!isValid(value)) {
+                    throw new InvalidValueException("Value is not empty string");
+                }
+            }
+        });
+        tx.addValidator(v2);
+
+        final String[] visibleProps = { "required", "invalidAllowed",
+                "readOnly", "readThrough", "invalidCommitted",
+                "validationVisible" };
+        for (int i = 0; i < visibleProps.length; i++) {
+            CheckBox b = new CheckBox(visibleProps[i],
+                    new MethodProperty<Boolean>(tx, visibleProps[i]));
+            b.setImmediate(true);
+            mainWin.addComponent(b);
+        }
+
+        mainWin.addComponent(new Button("Validate integer",
+                new Button.ClickListener() {
+                    public void buttonClick(
+                            com.vaadin.ui.Button.ClickEvent event) {
+                        mainWin.showNotification("The field is "
+                                + (tx.isValid() ? "" : "not ") + "valid");
+                    };
+                }));
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2001.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2001.java
new file mode 100644
index 0000000000..4796451dc0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2001.java
@@ -0,0 +1,37 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2001 extends Application {
+
+    @Override
+    public void init() {
+        final Window w = new Window(getClass().getName());
+        setMainWindow(w);
+
+        final VerticalLayout l = new VerticalLayout();
+        l.addComponent(new Label("row 1"));
+        l.addComponent(new Label("row 2"));
+        w.addComponent(l);
+
+        final CheckBox b = new CheckBox("fixed width: 30px", false);
+        b.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                if (b.booleanValue()) {
+                    l.setWidth("30px");
+                } else {
+                    l.setWidth(null);
+                }
+            }
+        });
+        b.setImmediate(true);
+        w.addComponent(b);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2002.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2002.java
new file mode 100644
index 0000000000..4e07230f46
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2002.java
@@ -0,0 +1,51 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.util.MethodProperty;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket2002 extends Application {
+    private Long long1 = new Long(1L);
+    private Long long2 = new Long(2L);
+
+    public Long getLong1() {
+        return long1;
+    }
+
+    public void setLong1(Long long1) {
+        this.long1 = long1;
+    }
+
+    public Long getLong2() {
+        return long2;
+    }
+
+    public void setLong2(Long long2) {
+        this.long2 = long2;
+    }
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getName());
+        setMainWindow(w);
+
+        GridLayout layout = new GridLayout(2, 2);
+        layout.setSpacing(true);
+
+        TextField f1 = new TextField("Non-immediate/Long text field",
+                new MethodProperty<Long>(this, "long1"));
+        f1.setImmediate(false);
+        f1.setNullSettingAllowed(true);
+        TextField f2 = new TextField("Immediate/Long text field",
+                new MethodProperty<Long>(this, "long2"));
+        f2.setImmediate(true);
+        f2.setNullSettingAllowed(true);
+
+        layout.addComponent(f1);
+        layout.addComponent(f2);
+
+        w.setContent(layout);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2007.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2007.java
new file mode 100644
index 0000000000..84dafb41f3
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2007.java
@@ -0,0 +1,28 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Window;
+
+public class Ticket2007 extends Application {
+
+    int childs = 0;
+
+    @Override
+    public void init() {
+
+        final Window main = new Window("Main window for #2007");
+        setMainWindow(main);
+        main.addComponent(new Button("Open another (non-main) window",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        Window c = new Window("Non-main browser window "
+                                + (++childs));
+                        addWindow(c);
+                        main.open(new ExternalResource(c.getURL()), "_new");
+                    }
+                }));
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2009.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2009.java
new file mode 100644
index 0000000000..f726ff10de
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2009.java
@@ -0,0 +1,126 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.data.Container;
+import com.vaadin.event.ItemClickEvent;
+import com.vaadin.tests.TestForTablesInitialColumnWidthLogicRendering;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2009 extends com.vaadin.Application {
+
+    TextField f = new TextField();
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        HorizontalLayout ol = new HorizontalLayout();
+        main.setContent(ol);
+        ol.setSizeFull();
+
+        Panel p = new Panel("Tree test");
+        p.setSizeFull();
+
+        Tree t = new Tree();
+
+        t.addItem("Foo");
+        t.addItem("Bar");
+
+        final VerticalLayout events = new VerticalLayout();
+
+        t.addListener(new ItemClickEvent.ItemClickListener() {
+            public void itemClick(ItemClickEvent event) {
+                events.addComponent(new Label(new Label("Click:"
+                        + (event.isDoubleClick() ? "double" : "single")
+                        + " button:" + event.getButton() + " propertyId:"
+                        + event.getPropertyId() + " itemID:"
+                        + event.getItemId() + " item:" + event.getItem())));
+
+            }
+        });
+
+        main.addComponent(p);
+        p.addComponent(t);
+        p.addComponent(events);
+
+        Panel p2 = new Panel("Table test (try dbl click also)");
+        p2.setSizeFull();
+
+        final VerticalLayout events2 = new VerticalLayout();
+        Table table = TestForTablesInitialColumnWidthLogicRendering
+                .getTestTable(5, 100);
+        table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+        table.addListener(new ItemClickEvent.ItemClickListener() {
+            public void itemClick(ItemClickEvent event) {
+                events2.addComponent(new Label("Click:"
+                        + (event.isDoubleClick() ? "double" : "single")
+                        + " button:" + event.getButton() + " propertyId:"
+                        + event.getPropertyId() + " itemID:"
+                        + event.getItemId() + " item:" + event.getItem()));
+                if (event.isDoubleClick()) {
+                    new PropertyEditor(event);
+                }
+
+            }
+        });
+        p2.addComponent(table);
+        p2.addComponent(events2);
+
+        main.addComponent(p2);
+
+    }
+
+    class PropertyEditor extends Window {
+
+        private static final int W = 300;
+        private static final int H = 150;
+
+        private Container c;
+        private Object itemid;
+        private Object propertyid;
+
+        TextField editor = new TextField();
+        Button done = new Button("Done");
+
+        PropertyEditor(ItemClickEvent event) {
+            c = (Container) event.getSource();
+
+            propertyid = event.getPropertyId();
+            itemid = event.getItemId();
+
+            setCaption("Editing " + itemid + " : " + propertyid);
+
+            editor.setPropertyDataSource(c.getContainerProperty(itemid,
+                    propertyid));
+            addComponent(editor);
+            addComponent(done);
+
+            setWidth(W + "px");
+            setHeight(H + "px");
+
+            setPositionX(event.getClientX() - W / 2);
+            setPositionY(event.getClientY() - H / 2);
+
+            getMainWindow().addWindow(this);
+
+            done.addListener(new Button.ClickListener() {
+                public void buttonClick(ClickEvent event) {
+                    getMainWindow().removeWindow(PropertyEditor.this);
+                }
+            });
+
+        }
+
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2011.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2011.java
new file mode 100644
index 0000000000..e28ee9b4e2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2011.java
@@ -0,0 +1,26 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.Window;
+
+public class Ticket2011 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getName());
+        setMainWindow(w);
+        // setTheme("tests-ticket");
+        GridLayout layout = new GridLayout(10, 10);
+        w.setContent(layout);
+        createUI(layout);
+    }
+
+    private void createUI(GridLayout layout) {
+        Select s = new Select("Select");
+        s.addItem("Item 1");
+        s.addItem("Item 2");
+        layout.addComponent(s);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2014.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2014.java
new file mode 100644
index 0000000000..b005eefd03
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2014.java
@@ -0,0 +1,63 @@
+package com.vaadin.tests.tickets;
+
+import java.util.UUID;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Window;
+
+public class Ticket2014 extends Application {
+
+    private HorizontalLayout innerLayout1;
+    private Button b1;
+    private Panel panel;
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getName());
+        setMainWindow(w);
+        // setTheme("tests-ticket");
+        GridLayout layout = new GridLayout(10, 10);
+        w.setContent(layout);
+        createUI(layout);
+    }
+
+    private void createUI(GridLayout layout) {
+        createPanel(layout);
+
+        layout.addComponent(new Button("Change class name",
+                new ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        b1.setStyleName(UUID.randomUUID().toString());
+                    }
+
+                }));
+
+    }
+
+    private void createPanel(GridLayout layout) {
+        panel = new Panel("panel caption");
+        layout.addComponent(panel);
+
+        innerLayout1 = new HorizontalLayout();
+        innerLayout1.setSpacing(true);
+        panel.addComponent(innerLayout1);
+
+        b1 = new Button("Button inside orderedLayout", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                System.out.println("Clicked " + event.getButton().getCaption());
+            }
+
+        });
+
+        innerLayout1.addComponent(b1);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2021.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2021.java
new file mode 100644
index 0000000000..69858a57d6
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2021.java
@@ -0,0 +1,141 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2021 extends Application {
+
+    private TextArea tf1, tf2, tf3;
+
+    private String contents = "This TextField SHOULD FILL the panel and NOT CAUSE any scrollbars to appear in the Panel. Scrollbars SHOULD appear in the TextField AND the whole scrollbars (includinc arrow down) SHOULD be visible.\n\n"
+            + ""
+            + "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent quis justo. Vivamus nec mi eu libero convallis auctor. Mauris et arcu. Nunc luctus justo. Aenean convallis, odio in vehicula scelerisque, est magna condimentum pede, a aliquam elit eros vitae diam. Phasellus porttitor convallis tellus. Nullam elementum, ligula nec viverra malesuada, risus tortor bibendum dui, eget hendrerit sem enim at massa. Nam eu pede sed nulla congue fermentum. Vestibulum malesuada libero non nunc. Proin rutrum. Fusce erat pede, volutpat vitae, aliquam ut, sagittis vel, augue. Fusce dui pede, convallis nec, accumsan tincidunt, consectetuer ac, purus. Nulla facilisi. Ut nisi. Sed orci risus, lacinia eu, sodales molestie, gravida quis, neque. Vestibulum pharetra ornare elit. Nulla porttitor molestie mauris. Morbi fringilla tellus sed risus. Curabitur varius massa."
+            + "Nulla nisi. Sed blandit, ante vitae sagittis volutpat, arcu mauris vehicula risus, vitae posuere felis lectus sit amet purus. Donec nec magna et leo eleifend scelerisque. Suspendisse condimentum pharetra ligula. Curabitur lorem. Pellentesque a augue sit amet enim fermentum placerat. Phasellus ante risus, molestie at, iaculis at, pellentesque non, tellus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus non urna eget risus tempus imperdiet. Integer est diam, sagittis sit amet, posuere sit amet, bibendum sed, lacus. Aenean adipiscing cursus ipsum. Quisque at elit. Vestibulum vitae nunc. Praesent placerat metus viverra lorem. Cras nec elit congue nisi faucibus feugiat. Nam eget mi. Vestibulum condimentum. Nunc nisl ante, cursus in, dictum ac, lobortis rutrum, mi. Nulla eu nisi. In ultricies vehicula magna."
+            + "Nunc eros dui, elementum at, ullamcorper eget, varius at, velit. Ut dictum. Cras ullamcorper ante vel tortor. Quisque viverra mauris vulputate quam. Nulla dui. Suspendisse non eros at ipsum faucibus hendrerit. Morbi dignissim pharetra tortor. Etiam malesuada. Mauris lacinia elementum erat. Duis mollis placerat metus. Nunc risus felis, cursus ac, cursus vel, convallis vel, metus. Ut vehicula nibh et nulla. Vivamus id pede. Quisque egestas arcu a ligula. Maecenas vehicula. Quisque sed ligula quis tellus tempus rutrum. Curabitur vel augue sed orci egestas pharetra. Duis pharetra.";
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        w.setContent(new GridLayout(2, 2));
+        setMainWindow(w);
+
+        Panel p = new Panel();
+        p.setCaption("ExpandLayout");
+        p.setWidth("500px");
+        p.setHeight("500px");
+        p.setContent(new VerticalLayout());
+        p.getContent().setSizeFull();
+
+        w.getContent().addComponent(p);
+
+        tf1 = new TextArea();
+        tf1.setRows(5);
+        tf1.setSizeFull();
+        tf1.setValue(contents);
+        tf1.setCaption("TextField caption");
+        p.getContent().addComponent(tf1);
+
+        /*
+         * 
+         * OrderedLayout
+         */
+
+        Panel p2 = new Panel();
+        p2.setCaption("OrderedLayout");
+        p2.setWidth("500px");
+        p2.setHeight("500px");
+        p2.setContent(new VerticalLayout());
+        p2.getContent().setSizeFull();
+
+        w.getContent().addComponent(p2);
+
+        tf2 = new TextArea();
+        tf2.setRows(5);
+        tf2.setSizeFull();
+        tf2.setValue(contents);
+        tf2.setCaption("TextField caption");
+        p2.getContent().addComponent(tf2);
+
+        /*
+         * 
+         * GridLayout
+         */
+
+        Panel p3 = new Panel();
+        p3.setCaption("GridLayout");
+        p3.setWidth("500px");
+        p3.setHeight("500px");
+        // p3.setContent(new GridLayout());
+        p3.getContent().setSizeFull();
+        ((Layout) p3.getContent()).setMargin(false);
+
+        GridLayout gl = new GridLayout();
+        gl.setSizeFull();
+        gl.setMargin(false);
+        p3.getContent().addComponent(gl);
+        w.getContent().addComponent(p3);
+
+        tf3 = new TextArea();
+        tf3.setRows(5);
+        tf3.setSizeFull();
+        tf3.setValue(contents);
+        tf3.setCaption("TextField caption");
+        // p3.getContent().addComponent(tf3);
+        gl.addComponent(tf3);
+
+        // Panel pp = new Panel();
+        // pp.setCaption("OrderedLayout");
+        // pp.setWidth("500px");
+        // pp.setHeight("500px");
+        // pp.getContent().setSizeFull();
+        // orderedLayout = new VerticalLayout();
+        // pp.getContent().addComponent(orderedLayout);
+        // w.getContent().addComponent(pp);
+        // createUI(orderedLayout);
+    }
+
+    @SuppressWarnings("unused")
+    private void createUI(Layout layout) {
+        Label l = new Label("Label");
+        Button b = new Button("Enable/disable caption and watch button move",
+                new ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        System.out.println("Enable/disable caption");
+                        for (AbstractComponent l : new AbstractComponent[] {
+                                tf1, tf2, tf3 }) {
+                            // AbstractComponent l = tf2;
+                            // Layout l = (Layout) event.getButton().getData();
+                            if (l.getCaption() == null) {
+                                l.setCaption("Expand layout caption");
+                            } else {
+                                l.setCaption(null);
+                            }
+                        }
+                    }
+
+                });
+        b.setData(layout);
+        Label l2 = new Label("This should always be visible");
+
+        layout.addComponent(l);
+        layout.addComponent(b);
+        layout.addComponent(l2);
+
+        if (layout instanceof AbstractOrderedLayout) {
+            ((AbstractOrderedLayout) layout).setExpandRatio(l, 1);
+
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2022.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2022.java
new file mode 100644
index 0000000000..17df2a2700
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2022.java
@@ -0,0 +1,32 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2022 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        setTheme("tests-tickets");
+        CustomLayout l;
+
+        // WebApplicationContext wac = ((WebApplicationContext) getContext());
+        // File f = new File(wac.getBaseDirectory().getAbsoluteFile()
+        // + "/VAADIN/themes/" + getTheme() + "/layouts/Ticket2022.html");
+
+        l = new CustomLayout("Ticket2022");
+        // try {
+        // l = new CustomLayout(new FileInputStream(f));
+        w.setContent(l);
+        // } catch (FileNotFoundException e) {
+        // // TODO Auto-generated catch block
+        // e.printStackTrace();
+        // } catch (IOException e) {
+        // // TODO Auto-generated catch block
+        // e.printStackTrace();
+        // }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2023.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2023.java
new file mode 100644
index 0000000000..ac80ef602b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2023.java
@@ -0,0 +1,51 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2023 extends com.vaadin.Application implements
+        Button.ClickListener {
+
+    AbstractComponent c = new Button();
+
+    @Override
+    public void init() {
+        Window main = new Window();
+        setMainWindow(main);
+
+        String[] sizes = { "20", "100", "1", "0", "-1", "", "z" };
+        String[] units = { "%", "px", "em", "ex", "in", "cm", "mm", "pt", "pc",
+                "", "p", "zyx" };
+
+        GridLayout gl = new GridLayout(units.length, sizes.length);
+        main.addComponent(gl);
+        for (int i = 0; i < sizes.length; i++) {
+            for (int j = 0; j < units.length; j++) {
+                String s = sizes[i] + units[j];
+                gl.addComponent(new Button(s, this));
+            }
+        }
+
+        gl.addComponent(new Button("null", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                c.setWidth(null);
+                c.setHeight(null);
+
+            }
+
+        }));
+
+        main.addComponent(c);
+
+    }
+
+    public void buttonClick(ClickEvent event) {
+        c.setWidth(event.getButton().getCaption());
+        c.setHeight(event.getButton().getCaption());
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2024.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2024.java
new file mode 100644
index 0000000000..5f0b432790
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2024.java
@@ -0,0 +1,35 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2024 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        GridLayout layout = new GridLayout(2, 2);
+        layout.setHeight("100%");
+        layout.setWidth("700");
+        w.getContent().setSizeFull();
+        w.getContent().setHeight("2000");
+        w.getContent().addComponent(layout);
+
+        layout.addComponent(new Label(
+                "This should NOT get stuck when scrolling down"));
+        layout.addComponent(new TextField("This should not get stuck either..."));
+
+        VerticalLayout ol = new VerticalLayout();
+        ol.setHeight("1000");
+        ol.setWidth("200");
+        w.getContent().addComponent(ol);
+        ol.addComponent(new Label("Just a label to enable the scrollbar"));
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2026.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2026.java
new file mode 100644
index 0000000000..be329eb5b5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2026.java
@@ -0,0 +1,35 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket2026 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+
+        GridLayout layout = new GridLayout(2, 2);
+        layout.setSpacing(true);
+
+        @SuppressWarnings("unused")
+        int nr = 5;
+        TextField tf;
+        tf = new TextField("TextField (tabIndex 1)");
+        tf.setTabIndex(1);
+        tf.focus();
+        layout.addComponent(tf);
+        layout.addComponent(new TextField("TextField without tab index"));
+        layout.addComponent(new TextField("TextField without tab index"));
+        layout.addComponent(new TextField("TextField without tab index"));
+        layout.addComponent(new TextField("TextField without tab index"));
+        tf = new TextField("TextField (tabIndex 2)");
+        tf.setTabIndex(2);
+        layout.addComponent(tf);
+
+        w.setContent(layout);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2029.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2029.java
new file mode 100644
index 0000000000..cabbab2c32
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2029.java
@@ -0,0 +1,139 @@
+package com.vaadin.tests.tickets;
+
+import java.util.Random;
+
+import com.vaadin.Application;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2029 extends Application {
+
+    int COMPONENTS;
+    int DIM1, DIM2;
+    Random r = new Random();
+
+    @Override
+    public void init() {
+        COMPONENTS = 5;
+        DIM1 = 504;
+        DIM2 = 100;
+
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        Panel p = createPanel();
+        w.getContent().addComponent(p);
+        // w.getLayout().addComponent(createGLPanel());
+        w.getContent().addComponent(createPanelV());
+    }
+
+    private Panel createPanel() {
+        Panel p = new Panel(DIM1 + "x" + DIM2 + " OrderedLayout");
+        p.setWidth(DIM1 + "px");
+        p.setHeight(DIM2 + "px");
+
+        HorizontalLayout layout = new HorizontalLayout();
+        p.setContent(layout);
+        p.getContent().setSizeFull();
+
+        for (int i = 0; i < COMPONENTS; i++) {
+            TextField tf = new TextField();
+            if (r.nextBoolean()) {
+                tf.setCaption("Caption");
+            }
+            if (r.nextBoolean()) {
+                tf.setRequired(true);
+            }
+            if (r.nextBoolean()) {
+                tf.setComponentError(new UserError("Error"));
+            }
+            tf.setWidth("100%");
+            layout.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
+            p.addComponent(tf);
+
+        }
+
+        return p;
+    }
+
+    @SuppressWarnings("unused")
+    private Panel createGLPanel() {
+        Panel p = new Panel("" + DIM1 + "x" + DIM2 + " GridLayout");
+        p.setWidth("" + DIM1 + "px");
+        p.setHeight("" + DIM2 + "px");
+
+        GridLayout layout = new GridLayout(COMPONENTS, 1);
+        p.setContent(layout);
+        p.getContent().setSizeFull();
+
+        for (int i = 0; i < COMPONENTS; i++) {
+            TextField tf = new TextField();
+            tf.setImmediate(true);
+            tf.addListener(new ValueChangeListener() {
+
+                public void valueChange(ValueChangeEvent event) {
+                    Component c = ((Component) event.getProperty());
+                    c.setCaption("askfdj");
+
+                }
+            });
+            if (r.nextBoolean()) {
+                tf.setCaption("Caption");
+            }
+            if (r.nextBoolean()) {
+                tf.setRequired(true);
+            }
+            if (r.nextBoolean()) {
+                tf.setComponentError(new UserError("Error"));
+            }
+            tf.setWidth("100%");
+            layout.setComponentAlignment(tf, Alignment.MIDDLE_LEFT);
+            p.addComponent(tf);
+
+        }
+
+        return p;
+    }
+
+    private Panel createPanelV() {
+        Panel p = new Panel("" + DIM1 + "x" + DIM2 + " OrderedLayout");
+        p.setWidth("" + DIM2 + "px");
+        p.setHeight("" + DIM1 + "px");
+
+        VerticalLayout layout = new VerticalLayout();
+        p.setContent(layout);
+        p.getContent().setSizeFull();
+
+        for (int i = 0; i < COMPONENTS; i++) {
+            TextArea tf = new TextArea();
+            if (r.nextBoolean()) {
+                tf.setCaption("Caption");
+            }
+            if (r.nextBoolean()) {
+                tf.setRequired(true);
+            }
+            if (r.nextBoolean()) {
+                tf.setComponentError(new UserError("Error"));
+            }
+
+            tf.setRows(2);
+            tf.setSizeFull();
+
+            layout.setComponentAlignment(tf, Alignment.BOTTOM_LEFT);
+            p.addComponent(tf);
+
+        }
+
+        return p;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2037.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2037.java
new file mode 100644
index 0000000000..652983c423
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2037.java
@@ -0,0 +1,48 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2037 extends com.vaadin.Application {
+
+    @Override
+    public void init() {
+        Window main = new Window();
+        setMainWindow(main);
+
+        main.addComponent(new Label(
+                "Use debug dialog and trac number of registered paintables. It should not grow on subsequant b clicks."));
+
+        final Layout lo = new VerticalLayout();
+
+        Button b = new Button("b");
+
+        main.addComponent(b);
+        main.addComponent(lo);
+        b.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+
+                repopupate(lo);
+
+            }
+        });
+
+    }
+
+    int counter = 0;
+
+    protected void repopupate(Layout lo) {
+        lo.removeAllComponents();
+
+        for (int i = 0; i < 20; i++) {
+            lo.addComponent(new Label("tc" + (counter++)));
+        }
+
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2038.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2038.java
new file mode 100644
index 0000000000..85a5a4b701
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2038.java
@@ -0,0 +1,45 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.Notification;
+
+public class Ticket2038 extends Application {
+
+    @Override
+    public void init() {
+        final Window w = new Window("Testing for #2038");
+        setMainWindow(w);
+
+        final TextField tf = new TextField(
+                "Test-field, enter someting and click outside the field to activate");
+        tf.setRequired(true);
+        tf.setImmediate(true);
+        tf.addListener(new Property.ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                w.showNotification("TextField is " + (tf.isValid() ? "" : "in")
+                        + "valid, with error: " + tf.getErrorMessage(),
+                        Notification.TYPE_WARNING_MESSAGE);
+            }
+        });
+        w.addComponent(tf);
+
+        final CheckBox b = new CheckBox(
+                "Field should use error message. (!) should be shown when invalid.",
+                false);
+        w.addComponent(b);
+        b.setImmediate(true);
+        b.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                tf.setRequiredError(b.booleanValue() ? "Field must not be empty"
+                        : null);
+            }
+        });
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2040.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2040.java
new file mode 100644
index 0000000000..f1775da039
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2040.java
@@ -0,0 +1,87 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.ui.Accordion;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket2040 extends com.vaadin.Application {
+
+    TextField f = new TextField();
+
+    @Override
+    public void init() {
+        Window main = new Window();
+        setMainWindow(main);
+
+        main.getContent().setSizeFull();
+        ((Layout) main.getContent()).setMargin(true);
+
+        setTheme("tests-tickets");
+
+        Accordion ts;
+
+        ts = new Accordion();
+        ts.setSizeFull();
+        ts.setWidth("300px");
+
+        TextArea l = new TextArea("DSFS");
+        l.setRows(2);
+        l.setStyleName("red");
+        l.setSizeFull();
+        ts.addTab(l, "100% h component", null);
+
+        Label testContent = new Label(
+                "TabSheet by default uses caption, icon, errors etc. from Components. ");
+
+        testContent.setCaption("Introduction to test");
+
+        ts.addTab(testContent);
+
+        // main.addComponent(ts);
+
+        ts = new Accordion();
+        ts.setSizeFull();
+        ts.setHeight("200px");
+        ts.setWidth("300px");
+
+        l = new TextArea("DSFS");
+        l.setRows(2);
+        l.setStyleName("red");
+        l.setSizeFull();
+        ts.addTab(l, "200px h component", null);
+
+        testContent = new Label(
+                "TabSheet by default uses caption, icon, errors etc. from Components. ");
+
+        testContent.setCaption("Introduction to test");
+
+        ts.addTab(testContent);
+
+        main.addComponent(ts);
+
+        ts = new Accordion();
+        ts.setSizeFull();
+        ts.setHeight("50%");
+        ts.setWidth("300px");
+
+        l = new TextArea("DSFS");
+        l.setRows(2);
+        l.setStyleName("red");
+        l.setSizeFull();
+        ts.addTab(l, "50% h component", null);
+
+        testContent = new Label(
+                "TabSheet by default uses caption, icon, errors etc. from Components. ");
+
+        testContent.setCaption("Introduction to test");
+
+        ts.addTab(testContent);
+
+        // main.addComponent(ts);
+
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2042.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2042.java
new file mode 100644
index 0000000000..2dfe4a1cb5
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2042.java
@@ -0,0 +1,38 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.Notification;
+
+public class Ticket2042 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        GridLayout layout = new GridLayout(1, 2);
+        layout.setHeight("2000px");
+        w.setContent(layout);
+        createUI(layout);
+    }
+
+    private void createUI(GridLayout layout) {
+        layout.addComponent(new Label("abc"));
+        layout.addComponent(new Button("B", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                Notification n = new Notification("Test");
+                getMainWindow().showNotification(n);
+            }
+
+        }));
+
+        layout.addComponent(new Label("abc"));
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2043.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2043.java
new file mode 100644
index 0000000000..faea096744
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2043.java
@@ -0,0 +1,28 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Window;
+
+public class Ticket2043 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        GridLayout layout = new GridLayout(10, 10);
+        w.setContent(layout);
+        createUI(layout);
+    }
+
+    private void createUI(GridLayout layout) {
+        Link l = new Link("Vaadin home (new 200x200 window, no decor, icon)",
+                new ExternalResource("http://www.vaadin.com"), "_blank", 200,
+                200, Link.TARGET_BORDER_NONE);
+
+        layout.addComponent(l);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2048.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2048.java
new file mode 100644
index 0000000000..65b5f73b53
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2048.java
@@ -0,0 +1,103 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2048 extends Application {
+
+    private Embedded embedded;
+    private Panel p;
+    private VerticalLayout orderedLayout;
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        // splitPanel = new SplitPanel(SplitPanel.ORIENTATION_HORIZONTAL);
+        // getMainWindow().setContent(splitPanel);
+
+        // GridLayout layout = new GridLayout(10, 10);
+        // w.setContent(layout);
+        // gridLayout = new GridLayout(1, 1);
+        orderedLayout = new VerticalLayout();
+
+        getMainWindow().setContent(orderedLayout);
+        // getMainWindow().setContent(new GridLayout(1, 1));
+        getMainWindow().setSizeFull();
+        getMainWindow().getContent().setSizeFull();
+
+        createUI(orderedLayout);
+        // createUI(gridLayout);
+
+    }
+
+    private void createUI(Layout layout) {
+        // Button sw = new Button("Switch", new ClickListener() {
+        //
+        // public void buttonClick(ClickEvent event) {
+        // Layout l = getMainWindow().getLayout();
+        // if (l == orderedLayout) {
+        // getMainWindow().setContent(gridLayout);
+        // } else {
+        // getMainWindow().setContent(orderedLayout);
+        // }
+        //
+        // }
+        // });
+        // layout.addComponent(sw);
+
+        Layout ol = new GridLayout(1, 2);
+        p = new Panel("Panel", ol);
+        p.setSizeFull();
+        Label l = new Label("Spacer");
+        l.setHeight("400px");
+        p.addComponent(l);
+
+        embedded = new Embedded(null, new ThemeResource(
+                "icons/64/folder-add.png"));
+        layout.addComponent(embedded);
+        Button b = new Button(
+                "Replace image with new embedded component (flashes)",
+                new ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        Embedded newEmbedded = new Embedded(null,
+                                new ThemeResource("icons/64/folder-add.png"));
+                        getMainWindow().getContent().replaceComponent(embedded,
+                                newEmbedded);
+                        embedded = newEmbedded;
+
+                    }
+
+                });
+        p.addComponent(b);
+
+        b = new Button("Change image source (is fine)", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                String img = "folder-add";
+                if (((ThemeResource) embedded.getSource()).getResourceId()
+                        .contains("folder-add")) {
+                    img = "folder-delete";
+                }
+                embedded.setSource(new ThemeResource("icons/64/" + img + ".png"));
+
+            }
+
+        });
+
+        p.addComponent(b);
+        layout.addComponent(p);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2051.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2051.java
new file mode 100644
index 0000000000..e901ebc343
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2051.java
@@ -0,0 +1,44 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Item;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket2051 extends Application {
+
+    private static final Object P1 = new Object();
+    private static final Object P2 = new Object();
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        GridLayout layout = new GridLayout(10, 10);
+        w.setContent(layout);
+        createUI(layout);
+    }
+
+    private void createUI(GridLayout layout) {
+        Table t = new Table("This is a table");
+        t.addContainerProperty(P1, Component.class, null);
+        t.addContainerProperty(P2, Component.class, null);
+        t.setColumnHeaders(new String[] { "Col1", "Col2" });
+
+        Item i = t.addItem("1");
+        i.getItemProperty(P1).setValue(new TextField("abc"));
+        i.getItemProperty(P2).setValue(new Label("label"));
+        Item i2 = t.addItem("2");
+        i2.getItemProperty(P1).setValue(new Button("def"));
+        i2.getItemProperty(P2).setValue(new DateField());
+
+        layout.addComponent(t);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2053.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2053.java
new file mode 100644
index 0000000000..f784b40aed
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2053.java
@@ -0,0 +1,73 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.CloseEvent;
+
+public class Ticket2053 extends Application {
+
+    int childs = 0;
+
+    @Override
+    public void init() {
+
+        final Window main = new Window("#2053");
+        setMainWindow(main);
+        Button nothing = new Button("Do nothing");
+        main.addComponent(nothing);
+        nothing.setDescription("Even though no action is taked, this window is refreshed to "
+                + "draw changes not originating from this window. Such changes include changes "
+                + "made by other browser-windows.");
+        Button add = new Button("Add a window", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                final String name = "Child " + (++childs);
+                Window c = new Window(name);
+                c.addListener(new Window.CloseListener() {
+                    public void windowClose(CloseEvent e) {
+                        main.addComponent(new Label(name + " closed"));
+                    }
+                });
+                addWindow(c);
+                main.open(new ExternalResource(c.getURL()), "_new");
+                main.addComponent(new Label(name + " opened"));
+                final TextField tf = new TextField("Non immediate textfield");
+                c.addComponent(tf);
+                tf.addListener(new Property.ValueChangeListener() {
+                    public void valueChange(ValueChangeEvent event) {
+                        main.addComponent(new Label(name + " send text:"
+                                + tf.toString()));
+                    }
+                });
+                for (int i = 0; i < 3; i++) {
+                    final String caption = "Slow button " + i;
+                    c.addComponent(new Button(caption,
+                            new Button.ClickListener() {
+                                public synchronized void buttonClick(
+                                        ClickEvent event) {
+                                    try {
+                                        this.wait(2000);
+                                    } catch (InterruptedException e) {
+                                    }
+                                    main.addComponent(new Label(caption
+                                            + " pressed"));
+                                }
+                            }));
+                }
+
+            }
+        });
+        main.addComponent(add);
+        add.setDescription("This button opens a new browser window. Closing the browser "
+                + "window should do two things: 1) submit all unsubmitted state to server "
+                + "(print any changes to textfield to main window) and 2) call window.close()"
+                + " on the child window (print closed on the main window)");
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2060.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2060.java
new file mode 100644
index 0000000000..63bf5b3ff7
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2060.java
@@ -0,0 +1,50 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2060 extends Application {
+
+    private Button button1;
+    private Button button2;
+    private Button button3;
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        GridLayout layout = new GridLayout(10, 10);
+        w.setContent(layout);
+        createUI(layout);
+    }
+
+    private void createUI(GridLayout layout) {
+        HorizontalLayout buttonLayout = new HorizontalLayout();
+        button1 = new Button("Button which is 50px wide");
+        button1.setWidth("50px");
+        button2 = new Button("Button without width");
+        button3 = new Button("Click to repaint buttons", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                button1.requestRepaint();
+                button2.requestRepaint();
+                button3.requestRepaint();
+
+            }
+
+        });
+
+        buttonLayout.addComponent(button1);
+        buttonLayout.addComponent(button2);
+        buttonLayout.addComponent(button3);
+
+        layout.addComponent(buttonLayout);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2061.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2061.java
new file mode 100644
index 0000000000..c9cc3ce328
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2061.java
@@ -0,0 +1,128 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.ui.Accordion;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2061 extends Application {
+
+    private Window mainWindow;
+
+    @Override
+    public void init() {
+        mainWindow = new Window("Ticket 2061");
+        mainWindow.setSizeFull();
+        mainWindow.getContent().setSizeFull();
+        setMainWindow(mainWindow);
+
+        MyTable table1 = new MyTable(24, "table1");
+        table1.loadTable(1000);
+
+        MyTable table2 = new MyTable(24, "table2");
+        table2.loadTable(1000);
+
+        MyTable table3 = new MyTable(24, "table3");
+        table3.loadTable(1000);
+
+        MyAccordion accordion = new MyAccordion(new Component[] { table1,
+                table2 }, "Test");
+
+        Tabs tab = new Tabs(new Component[] { accordion, table3 });
+
+        mainWindow.addComponent(tab);
+
+    }
+
+    public class MyTable extends CustomComponent implements ValueChangeListener {
+
+        private Table table = new Table();
+        private String[] columns;
+        private VerticalLayout layout = new VerticalLayout();
+
+        public MyTable(int columnNumber, String id) {
+            setDebugId(id);
+            setCompositionRoot(layout);
+            setSizeFull();
+            columns = initializeColumns(columnNumber);
+            table.setWidth("100%");
+            table.setHeight("100%");
+            table.setColumnReorderingAllowed(true);
+            table.setColumnCollapsingAllowed(true);
+            table.setSelectable(true);
+            table.setMultiSelect(false);
+            table.setNullSelectionAllowed(false);
+            // table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+            table.addListener(this);
+            table.setContainerDataSource(createContainer());
+            layout.addComponent(table);
+        }
+
+        public void loadTable(int itemNumber) {
+            table.removeAllItems();
+            for (int j = 0; j < itemNumber; j++) {
+                Item rowItem = table.addItem(j);
+                if (rowItem != null) {
+                    for (int i = 0; i < columns.length; i++) {
+                        rowItem.getItemProperty(columns[i]).setValue(
+                                "Value" + j);
+                    }
+                }
+            }
+        }
+
+        private HierarchicalContainer createContainer() {
+            final HierarchicalContainer c = new HierarchicalContainer();
+            for (int i = 0; i < columns.length; i++) {
+                c.addContainerProperty(columns[i], String.class, null);
+            }
+            return c;
+        }
+
+        private String[] initializeColumns(int number) {
+            String[] columns = new String[number];
+            for (int i = 0; i < number; i++) {
+                columns[i] = "Column" + i;
+            }
+            return columns;
+        }
+
+        public void valueChange(ValueChangeEvent event) {
+
+        }
+
+    }
+
+    public class Tabs extends TabSheet {
+
+        public Tabs(Component[] components) {
+            this.setWidth("100%");
+            this.setHeight("100%");
+            for (int i = 0; i < components.length; i++) {
+                this.addTab(components[i], components[i].getDebugId(), null);
+            }
+
+        }
+    }
+
+    public class MyAccordion extends Accordion {
+
+        public MyAccordion(Component[] components, String id) {
+            this.setWidth("100%");
+            this.setHeight("100%");
+            setDebugId(id);
+            for (int i = 0; i < components.length; i++) {
+                this.addTab(components[i], components[i].getDebugId(), null);
+            }
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2061b.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2061b.java
new file mode 100644
index 0000000000..5dc6dde768
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2061b.java
@@ -0,0 +1,200 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Accordion;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
+import com.vaadin.ui.TabSheet.SelectedTabChangeListener;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.VerticalSplitPanel;
+import com.vaadin.ui.Window;
+
+public class Ticket2061b extends Application implements
+        SelectedTabChangeListener {
+
+    private Window mainWindow;
+    private Panel p;
+
+    @Override
+    public void init() {
+        mainWindow = new Window("Ticket 2061b");
+        mainWindow.setSizeFull();
+        AbstractOrderedLayout mainLayout = (AbstractOrderedLayout) mainWindow
+                .getContent();
+        mainLayout.setSizeFull();
+        mainLayout.setMargin(false);
+        setMainWindow(mainWindow);
+
+        VerticalSplitPanel sp = new VerticalSplitPanel();
+        sp.setSizeFull();
+        sp.setSplitPosition(20, Sizeable.UNITS_PIXELS);
+
+        p = new Panel("This is a panel");
+        p.setSizeFull();
+        Label label1 = new Label("This is a table!");
+        label1.setHeight("1500px");
+        label1.setWidth("1500px");
+        p.addComponent(label1);
+        p.setScrollTop(50);
+        // MyTable table1 = new MyTable(24, "table1");
+        // table1.loadTable(1000);
+
+        // MyTable table2 = new MyTable(24, "table2");
+        // table2.loadTable(1000);
+
+        // MyTable table3 = new MyTable(24, "table3");
+        // table3.loadTable(1000);
+
+        // MyAccordion accordion = new MyAccordion(new Component[] { table1,
+        // table2 }, "Test");
+
+        Label a = new Label("abc123");
+        TextField tf = new TextField("A large textfield");
+        tf.setHeight("2500px");
+        tf.setWidth("2500px");
+
+        TabsAcc tab = new TabsAcc(new Component[] { p, a, tf });
+        tab.addListener(this);
+
+        mainLayout.addComponent(sp);
+        sp.addComponent(new Label("C 1"));
+        // sp.addComponent(new Label("C 2"));
+        // sp.setHeight("100px");
+
+        sp.addComponent(tab);
+        // mainLayout.addComponent(new Label("Filler"));
+        // mainLayout.addComponent(tab);
+        // mainLayout.setExpandRatio(tab, 1.0f);
+        // sp.addComponent(new Label("Filler"));
+        // sp.addComponent(tab);
+
+        p = new Panel("This is a panel");
+        p.setWidth("2000px");
+        p.setHeight("2000px");
+        Panel p2 = new Panel("This is another panel");
+        p2.setWidth("2500px");
+        p2.setHeight("2500px");
+        label1 = new Label("This is a table!");
+        label1.setHeight("1500px");
+        label1.setWidth("1500px");
+        p2.addComponent(label1);
+        p.addComponent(p2);
+
+        tab.addTab(p, "Panel with panel", null);
+    }
+
+    public class MyTable extends CustomComponent implements ValueChangeListener {
+
+        private Table table = new Table();
+        private String[] columns;
+        private VerticalLayout layout = new VerticalLayout();
+
+        public MyTable(int columnNumber, String id) {
+            setDebugId(id);
+            setCompositionRoot(layout);
+            setSizeFull();
+            columns = initializeColumns(columnNumber);
+            table.setWidth("100%");
+            table.setHeight("100%");
+            table.setColumnReorderingAllowed(true);
+            table.setColumnCollapsingAllowed(true);
+            table.setSelectable(true);
+            table.setMultiSelect(false);
+            table.setNullSelectionAllowed(false);
+            // table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+            table.addListener(this);
+            table.setContainerDataSource(createContainer());
+            layout.addComponent(table);
+        }
+
+        public void loadTable(int itemNumber) {
+            table.removeAllItems();
+            for (int j = 0; j < itemNumber; j++) {
+                Item rowItem = table.addItem(j);
+                if (rowItem != null) {
+                    for (int i = 0; i < columns.length; i++) {
+                        rowItem.getItemProperty(columns[i]).setValue(
+                                "Value" + j);
+                    }
+                }
+            }
+        }
+
+        private HierarchicalContainer createContainer() {
+            final HierarchicalContainer c = new HierarchicalContainer();
+            for (int i = 0; i < columns.length; i++) {
+                c.addContainerProperty(columns[i], String.class, null);
+            }
+            return c;
+        }
+
+        private String[] initializeColumns(int number) {
+            String[] columns = new String[number];
+            for (int i = 0; i < number; i++) {
+                columns[i] = "Column" + i;
+            }
+            return columns;
+        }
+
+        public void valueChange(ValueChangeEvent event) {
+
+        }
+
+    }
+
+    public class Tabs extends TabSheet {
+
+        public Tabs(Component[] components) {
+            this.setWidth("100%");
+            this.setHeight("100%");
+            for (int i = 0; i < components.length; i++) {
+                this.addTab(components[i], components[i].getDebugId(), null);
+            }
+
+        }
+
+    }
+
+    public class TabsAcc extends Accordion {
+
+        public TabsAcc(Component[] components) {
+            this.setWidth("100%");
+            this.setHeight("100%");
+            for (int i = 0; i < components.length; i++) {
+                this.addTab(components[i], components[i].getDebugId(), null);
+            }
+
+        }
+
+    }
+
+    public class MyAccordion extends Accordion {
+
+        public MyAccordion(Component[] components, String id) {
+            this.setWidth("100%");
+            this.setHeight("100%");
+            setDebugId(id);
+            for (int i = 0; i < components.length; i++) {
+                this.addTab(components[i], components[i].getDebugId(), null);
+            }
+        }
+    }
+
+    public void selectedTabChange(SelectedTabChangeEvent event) {
+        p.setScrollTop(10);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2061c.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2061c.java
new file mode 100644
index 0000000000..4cca979268
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2061c.java
@@ -0,0 +1,148 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.ui.Accordion;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
+import com.vaadin.ui.TabSheet.SelectedTabChangeListener;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2061c extends Application implements
+        SelectedTabChangeListener {
+
+    private Window mainWindow;
+    private Panel p;
+
+    @Override
+    public void init() {
+        mainWindow = new Window("Vaadin");
+        mainWindow.setSizeFull();
+        mainWindow.getContent().setSizeFull();
+        setMainWindow(mainWindow);
+
+        VerticalLayout ol = new VerticalLayout();
+        ol.setWidth("200px");
+        ol.setHeight("200px");
+
+        VerticalLayout ol2 = new VerticalLayout();
+        ol2.setSizeFull();
+
+        p = new Panel("This is a panel");
+        p.setSizeFull();
+
+        Label label1 = new Label("This is a table!");
+        label1.setHeight("1500px");
+        label1.setWidth("1500px");
+        p.setScrollTop(50);
+
+        p.addComponent(label1);
+        ol2.addComponent(p);
+        ol.addComponent(ol2);
+
+        Label a = new Label("abc123");
+        a.setCaption("Label a");
+        ol.setCaption("OL");
+        Tabs tab = new Tabs(new Component[] { a, ol });
+        tab.addListener(this);
+        mainWindow.addComponent(tab);
+
+    }
+
+    public class MyTable extends CustomComponent implements ValueChangeListener {
+
+        private Table table = new Table();
+        private String[] columns;
+        private VerticalLayout layout = new VerticalLayout();
+
+        public MyTable(int columnNumber, String id) {
+            setDebugId(id);
+            setCompositionRoot(layout);
+            setSizeFull();
+            columns = initializeColumns(columnNumber);
+            table.setWidth("100%");
+            table.setHeight("100%");
+            table.setColumnReorderingAllowed(true);
+            table.setColumnCollapsingAllowed(true);
+            table.setSelectable(true);
+            table.setMultiSelect(false);
+            table.setNullSelectionAllowed(false);
+            // table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+            table.addListener(this);
+            table.setContainerDataSource(createContainer());
+            layout.addComponent(table);
+        }
+
+        public void loadTable(int itemNumber) {
+            table.removeAllItems();
+            for (int j = 0; j < itemNumber; j++) {
+                Item rowItem = table.addItem(j);
+                if (rowItem != null) {
+                    for (int i = 0; i < columns.length; i++) {
+                        rowItem.getItemProperty(columns[i]).setValue(
+                                "Value" + j);
+                    }
+                }
+            }
+        }
+
+        private HierarchicalContainer createContainer() {
+            final HierarchicalContainer c = new HierarchicalContainer();
+            for (int i = 0; i < columns.length; i++) {
+                c.addContainerProperty(columns[i], String.class, null);
+            }
+            return c;
+        }
+
+        private String[] initializeColumns(int number) {
+            String[] columns = new String[number];
+            for (int i = 0; i < number; i++) {
+                columns[i] = "Column" + i;
+            }
+            return columns;
+        }
+
+        public void valueChange(ValueChangeEvent event) {
+
+        }
+
+    }
+
+    public class Tabs extends TabSheet {
+
+        public Tabs(Component[] components) {
+            this.setWidth("100%");
+            // this.setHeight("100%");
+            for (int i = 0; i < components.length; i++) {
+                this.addTab(components[i], components[i].getDebugId(), null);
+            }
+        }
+    }
+
+    public class MyAccordion extends Accordion {
+
+        public MyAccordion(Component[] components, String id) {
+            this.setWidth("100%");
+            this.setHeight("100%");
+            setDebugId(id);
+            for (int i = 0; i < components.length; i++) {
+                this.addTab(components[i], components[i].getDebugId(), null);
+            }
+        }
+    }
+
+    public void selectedTabChange(SelectedTabChangeEvent event) {
+        p.setScrollTop(10);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2062.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2062.java
new file mode 100644
index 0000000000..2dabffe5f4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2062.java
@@ -0,0 +1,41 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket2062 extends Application {
+    private static final Object P1 = new Object();
+
+    @Override
+    public void init() {
+        setMainWindow(new Window("Ticket2062"));
+        getMainWindow().setSizeFull();
+
+        HorizontalSplitPanel p = new HorizontalSplitPanel();
+        p.setSizeFull();
+        getMainWindow().setContent(p);
+
+        TextField tf1 = new TextField("Tab 1");
+        tf1.setValue("Field 1");
+        tf1.setSizeFull();
+
+        Table t = new Table("Table");
+        t.addContainerProperty(P1, String.class, "");
+        t.setSizeFull();
+
+        TabSheet tabSheet = new TabSheet();
+        tabSheet.setWidth("300px");
+        tabSheet.setHeight("300px");
+
+        tabSheet.addComponent(tf1);
+        tabSheet.addComponent(t);
+
+        getMainWindow().addComponent(tabSheet);
+
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2083.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2083.java
new file mode 100644
index 0000000000..e722c6826c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2083.java
@@ -0,0 +1,28 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Window;
+
+public class Ticket2083 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        GridLayout layout = new GridLayout(10, 10);
+        w.setContent(layout);
+        createUI(layout);
+    }
+
+    private void createUI(GridLayout layout) {
+        Panel p = new Panel(
+                "This is a panel with a longer caption than it should have");
+        p.setWidth("100px");
+        p.getContent().addComponent(new Label("Contents"));
+        layout.addComponent(p);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2090.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2090.java
new file mode 100644
index 0000000000..5bc69e0a64
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2090.java
@@ -0,0 +1,62 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket2090 extends Application {
+
+    Label label = new Label();
+    Button target = new Button();
+    Window w = new Window("#2090");
+
+    @Override
+    public void init() {
+        setMainWindow(w);
+        final TextField width = new TextField("Width");
+        width.setImmediate(true);
+        final TextField height = new TextField("Height");
+        height.setImmediate(true);
+        w.addComponent(width);
+        w.addComponent(height);
+        w.addComponent(label);
+        w.addComponent(target);
+        height.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                try {
+                    target.setHeight(height.toString());
+                    height.setComponentError(null);
+                    updateLabel();
+                } catch (Exception e) {
+                    height.setComponentError(new UserError(e.getMessage()));
+                }
+            }
+        });
+        width.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                try {
+                    target.setWidth(width.toString());
+                    width.setComponentError(null);
+                    updateLabel();
+                } catch (Exception e) {
+                    width.setComponentError(new UserError(e.getMessage()));
+                }
+            }
+        });
+
+    }
+
+    private void updateLabel() {
+        label.setValue("width: " + target.getWidth()
+                + Sizeable.UNIT_SYMBOLS[target.getWidthUnits()] + ", height: "
+                + target.getHeight()
+                + Sizeable.UNIT_SYMBOLS[target.getHeightUnits()]);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2095.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2095.java
new file mode 100644
index 0000000000..0911cb6830
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2095.java
@@ -0,0 +1,29 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.Window;
+
+public class Ticket2095 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+
+        // uncomment to workaround iorderedlayout bug in current trunk
+        // w.setContent(new ExpandLayout());
+        w.getContent().setSizeFull();
+
+        Embedded em = new Embedded();
+        em.setType(Embedded.TYPE_BROWSER);
+        em.setSource(new ExternalResource("../statictestfiles/ticket2095.html"));
+        em.setDebugId("MYIFRAME");
+
+        em.setSizeFull();
+
+        w.addComponent(em);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2098.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2098.java
new file mode 100644
index 0000000000..829fb30070
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2098.java
@@ -0,0 +1,37 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Window;
+
+public class Ticket2098 extends Application {
+
+    private static final String info = "First tab hidden, second should initially be selected";
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        w.addComponent(new Label(info));
+        createUI(w);
+    }
+
+    private void createUI(Window w) {
+        TabSheet ts = new TabSheet();
+        Label l1 = new Label("111");
+        Label l2 = new Label("222");
+        Label l3 = new Label("333");
+        Label l4 = new Label("444");
+
+        ts.addTab(l1, "1", null);
+        ts.addTab(l2, "2", null);
+        ts.addTab(l3, "3", null);
+        ts.addTab(l4, "4", null);
+
+        l1.setVisible(false);
+
+        w.addComponent(ts);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2099.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2099.java
new file mode 100644
index 0000000000..4f79eb7e64
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2099.java
@@ -0,0 +1,77 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2099 extends Application {
+
+    private Label l1, l2, l3;
+    private VerticalLayout ol1, ol2, ol3;
+    private Window popup;
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        GridLayout layout = new GridLayout(10, 10);
+        w.setContent(layout);
+        createUI(layout);
+    }
+
+    private void createUI(GridLayout layout) {
+        Button b = new Button("Show popup", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                getMainWindow().addWindow(popup);
+                // popup.setVisible(true);
+            }
+
+        });
+        popup = createPopup();
+        addWindow(popup);
+
+        layout.addComponent(b);
+        layout.addComponent(new Button("Hide label '222'", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                l2.setVisible(!l2.isVisible());
+            }
+
+        }));
+
+    }
+
+    private Window createPopup() {
+        Window w = new Window("Popup");
+        TabSheet ts = new TabSheet();
+        ol1 = new VerticalLayout();
+        ol2 = new VerticalLayout();
+        ol3 = new VerticalLayout();
+        l1 = new Label("111");
+        l2 = new Label("222");
+        l3 = new Label("333");
+
+        ol1.addComponent(l1);
+        ol2.addComponent(l2);
+        ol3.addComponent(l3);
+
+        ts.addTab(ol1, "1", null);
+        ts.addTab(ol2, "2", null);
+        ts.addTab(ol3, "3", null);
+
+        // l1.setVisible(false);
+        // ts.setSelectedTab(l3);
+
+        w.addComponent(ts);
+
+        return w;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2101.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2101.java
new file mode 100644
index 0000000000..8c12ca10ce
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2101.java
@@ -0,0 +1,21 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Window;
+
+public class Ticket2101 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+
+        Button b = new Button(
+                "Button with a long text which will not fit on 50 pixels");
+        b.setWidth("50px");
+
+        w.getContent().addComponent(b);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2103.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2103.java
new file mode 100644
index 0000000000..d65f4c1aec
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2103.java
@@ -0,0 +1,100 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.ui.Accordion;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2103 extends Application {
+    private Window mainWindow;
+
+    @Override
+    public void init() {
+        mainWindow = new Window(getClass().getSimpleName());
+        mainWindow.setContent(new VerticalLayout());
+        mainWindow.setSizeFull();
+        mainWindow.getContent().setSizeFull();
+
+        MyTable table1 = new MyTable(4, "table1");
+        table1.loadTable(100);
+        MyTable table2 = new MyTable(4, "table2");
+        table2.loadTable(100);
+
+        MyAccordion a = new MyAccordion(new Component[] { table1, table2 },
+                "FDSF");
+        mainWindow.addComponent(a);
+        setMainWindow(mainWindow);
+        // mainWindow.addComponent(table1);
+
+    }
+
+    public class MyAccordion extends Accordion {
+
+        public MyAccordion(Component[] components, String id) {
+            this.setWidth("100%");
+            this.setHeight("100%");
+            setDebugId(id);
+            for (int i = 0; i < components.length; i++) {
+                this.addTab(components[i], components[i].getDebugId(), null);
+            }
+        }
+    }
+
+    public class MyTable extends Table {
+
+        private Table table = this;
+        private String[] columns;
+        private VerticalLayout layout = new VerticalLayout();
+
+        public MyTable(int columnNumber, String id) {
+            setDebugId(id);
+            setSizeFull();
+            columns = initializeColumns(columnNumber);
+            table.setWidth("100%");
+            table.setHeight("100%");
+            table.setColumnReorderingAllowed(true);
+            table.setColumnCollapsingAllowed(true);
+            table.setSelectable(true);
+            table.setMultiSelect(false);
+            table.setNullSelectionAllowed(false);
+            // table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+            table.setContainerDataSource(createContainer());
+            layout.addComponent(table);
+        }
+
+        public void loadTable(int itemNumber) {
+            table.removeAllItems();
+            for (int j = 0; j < itemNumber; j++) {
+                Item rowItem = table.addItem(j);
+                if (rowItem != null) {
+                    for (int i = 0; i < columns.length; i++) {
+                        rowItem.getItemProperty(columns[i]).setValue(
+                                "Value" + j);
+                    }
+                }
+            }
+        }
+
+        private HierarchicalContainer createContainer() {
+            final HierarchicalContainer c = new HierarchicalContainer();
+            for (int i = 0; i < columns.length; i++) {
+                c.addContainerProperty(columns[i], String.class, null);
+            }
+            return c;
+        }
+
+        private String[] initializeColumns(int number) {
+            String[] columns = new String[number];
+            for (int i = 0; i < number; i++) {
+                columns[i] = "Column" + i;
+            }
+            return columns;
+        }
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2104.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2104.java
new file mode 100644
index 0000000000..8b95fa35a2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2104.java
@@ -0,0 +1,127 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.util.MethodProperty;
+import com.vaadin.event.ItemClickEvent;
+import com.vaadin.event.ItemClickEvent.ItemClickListener;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Window;
+
+public class Ticket2104 extends Application {
+
+    private static final Label info = new Label(
+            "Click event should _always_ come trough. Switching features on/off should immediatly affect the tree (verify w/ debug window)",
+            Label.CONTENT_RAW);
+
+    Tree tree = new Tree();
+    Table table = new Table();
+
+    @Override
+    public void init() {
+        Window main = new Window();
+        setMainWindow(main);
+
+        main.addComponent(info);
+
+        HorizontalLayout ol = new HorizontalLayout();
+        main.addComponent(ol);
+        CheckBox cb = new CheckBox("immediate", new MethodProperty<Boolean>(
+                tree, "immediate"));
+        cb.setImmediate(true);
+        ol.addComponent(cb);
+        cb = new CheckBox("selectable", new MethodProperty<Boolean>(tree,
+                "selectable"));
+        cb.setImmediate(true);
+        ol.addComponent(cb);
+        cb = new CheckBox("nullsel", new MethodProperty<Boolean>(tree,
+                "nullSelectionAllowed"));
+        cb.setImmediate(true);
+        ol.addComponent(cb);
+        cb = new CheckBox("multi", new MethodProperty<Boolean>(tree,
+                "multiSelect"));
+        cb.setImmediate(true);
+        ol.addComponent(cb);
+        cb = new CheckBox("icon", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                if (tree.getItemIconPropertyId() == null) {
+                    tree.setItemIconPropertyId("icon");
+                } else {
+                    tree.setItemIconPropertyId(null);
+                }
+
+            }
+        });
+        cb.setImmediate(true);
+        ol.addComponent(cb);
+
+        main.addComponent(tree);
+        tree.setImmediate(true);
+        tree.setNullSelectionAllowed(false);
+        tree.addItem("Root 1");
+        tree.addItem("1. Child 1");
+        tree.setParent("1. Child 1", "Root 1");
+        tree.addItem("1. Child 2");
+        tree.setParent("1. Child 2", "Root 1");
+        tree.addItem("Root 2");
+        tree.addItem("2. Child 1");
+        tree.setParent("2. Child 1", "Root 2");
+        tree.addItem("2. Child 2");
+        tree.setParent("2. Child 2", "Root 2");
+        tree.addContainerProperty("icon", ExternalResource.class,
+                new ExternalResource(
+                        "http://www.itmill.com/res/images/itmill_logo.gif"));
+
+        tree.addListener(new ItemClickListener() {
+            public void itemClick(ItemClickEvent event) {
+                getMainWindow().addComponent(
+                        new Label(event.toString() + " // " + event.getItemId()
+                                + "//" + event.getSource()));
+
+            }
+        });
+
+        ol = new HorizontalLayout();
+        main.addComponent(ol);
+        cb = new CheckBox("immediate", new MethodProperty<Boolean>(table,
+                "immediate"));
+        cb.setImmediate(true);
+        ol.addComponent(cb);
+        cb = new CheckBox("selectable", new MethodProperty<Boolean>(table,
+                "selectable"));
+        cb.setImmediate(true);
+        ol.addComponent(cb);
+        cb = new CheckBox("nullsel", new MethodProperty<Boolean>(table,
+                "nullSelectionAllowed"));
+        cb.setImmediate(true);
+        ol.addComponent(cb);
+        cb = new CheckBox("multi", new MethodProperty<Boolean>(table,
+                "multiSelect"));
+        cb.setImmediate(true);
+        ol.addComponent(cb);
+        main.addComponent(table);
+        table.setWidth("150px");
+        table.setImmediate(true);
+        table.setSelectable(true);
+        table.setNullSelectionAllowed(false);
+        for (int i = 0; i < 10; i++) {
+            table.addItem("Item " + i);
+        }
+        table.addListener(new ItemClickListener() {
+            public void itemClick(ItemClickEvent event) {
+                getMainWindow().addComponent(
+                        new Label(event.toString() + " // " + event.getItemId()
+                                + "//" + event.getSource()));
+
+            }
+        });
+        table.addContainerProperty("Column", String.class, "value");
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2106.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2106.java
new file mode 100644
index 0000000000..92908aa66d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2106.java
@@ -0,0 +1,38 @@
+package com.vaadin.tests.tickets;
+
+import java.util.Date;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket2106 extends Application {
+
+    private static CustomizedSystemMessages msgs = new Application.CustomizedSystemMessages();
+    static {
+        // We will forward the user to www.vaadin.com when the session expires
+        msgs.setSessionExpiredURL("http://www.vaadin.com");
+        msgs.setSessionExpiredMessage(null);
+        msgs.setSessionExpiredCaption(null);
+    }
+
+    public static Application.SystemMessages getSystemMessages() {
+        return msgs;
+    }
+
+    @Override
+    public void init() {
+        setMainWindow(new Window("#2106"));
+        getMainWindow().addComponent(
+                new Button("Do nothing", new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        getMainWindow().addComponent(
+                                new Label("Last time did nothing: "
+                                        + new Date()));
+                    }
+                }));
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2107.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2107.java
new file mode 100644
index 0000000000..199b278343
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2107.java
@@ -0,0 +1,60 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Validator;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.Notification;
+
+public class Ticket2107 extends Application {
+
+    @Override
+    public void init() {
+        final Window w = new Window("Testing for #2107");
+        setMainWindow(w);
+
+        final TextField tf = new TextField(
+                "Required field that validated the input");
+        tf.setDescription("Enter someting and click outside the field to activate");
+        tf.setRequired(true);
+        tf.setImmediate(true);
+        tf.addListener(new Property.ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                w.showNotification("TextField is " + (tf.isValid() ? "" : "in")
+                        + "valid, with error: " + tf.getErrorMessage(),
+                        Notification.TYPE_WARNING_MESSAGE);
+            }
+        });
+        tf.addValidator(new Validator() {
+
+            public boolean isValid(Object value) {
+                return value != null && value.toString().length() > 3;
+            }
+
+            public void validate(Object value) throws InvalidValueException {
+                if (!isValid(value)) {
+                    throw new InvalidValueException(
+                            "Text length must exceed 3 characters");
+                }
+            }
+        });
+        w.addComponent(tf);
+
+        final CheckBox b = new CheckBox(
+                "Field should use error message. (!) should be shown when empty.",
+                false);
+        w.addComponent(b);
+        b.setImmediate(true);
+        b.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                tf.setRequiredError(b.booleanValue() ? "Field must not be empty"
+                        : null);
+            }
+        });
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2117.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2117.java
new file mode 100644
index 0000000000..974b3c4572
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2117.java
@@ -0,0 +1,60 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket2117 extends Application {
+
+    @Override
+    public void init() {
+        setMainWindow(createWindow());
+    }
+
+    @Override
+    public Window getWindow(String name) {
+
+        // If we already have the requested window, use it
+        Window w = super.getWindow(name);
+        if (w == null) {
+
+            // If no window found, create it
+            w = createExtraWindow(name);
+            w.open(new ExternalResource(w.getURL()));
+        }
+        return w;
+    }
+
+    private Window createExtraWindow(String name) {
+        final Window w = new Window("Extra window: " + name);
+        w.setName(name);
+        addWindow(w);
+        w.addComponent(new Label(
+                "This window has been created on fly for name: " + name));
+        w.addComponent(new Label("It has also been redirected to " + w.getURL()
+                + " to support reloading"));
+        w.addComponent(new Button("button", new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                w.showNotification("Button clicked");
+                w.addComponent(new Label("clicked"));
+            }
+        }));
+        return w;
+    }
+
+    private Window createWindow() {
+        final Window w = new Window();
+        w.addComponent(new Label(
+                "Click this link: <a target=\"_blank\" href='"
+                        + getURL().toExternalForm()
+                        + "'>"
+                        + getURL().toExternalForm()
+                        + "</a> which opens new windows to this uri. They should end up having a separate Window and URL.",
+                Label.CONTENT_XHTML));
+        return w;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2119.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2119.java
new file mode 100644
index 0000000000..c1e0d64dde
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2119.java
@@ -0,0 +1,92 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Property;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+/**
+ * Test case for Ticket 2119.
+ */
+public class Ticket2119 extends Application {
+
+    private ObjectProperty<String> globalValue;
+
+    @Override
+    public void init() {
+        globalValue = new ObjectProperty<String>(null, String.class);
+        Window main = createWindow();
+        setMainWindow(main);
+    }
+
+    @Override
+    public Window getWindow(String name) {
+        if (!isRunning()) {
+            return null;
+        }
+        // If we already have the requested window, use it
+        Window w = super.getWindow(name);
+        if (w == null) {
+            // If no window found, create it
+            w = createWindow();
+            addWindow(w);
+            w.open(new ExternalResource(w.getURL()));
+        }
+        return w;
+    }
+
+    private Window createWindow() {
+        Window main = new Window("Test for ticket XXX");
+        main.setContent(testLayout());
+        return main;
+    }
+
+    private Layout testLayout() {
+        final Layout layout = new VerticalLayout();
+        final Label label = new Label(
+                "Instructions to reproduce:\n"
+                        + "  - Open this application in two browser windows\n"
+                        + "  - Click the Button in first Window\n"
+                        + "  - Go to the second Window\n"
+                        + "     - Click the arrow in the Select\n"
+                        + "  --> The opened list correctly shows the new value but the old one is shown in the \"input\" part");
+        label.setContentMode(Label.CONTENT_PREFORMATTED);
+        layout.addComponent(label);
+
+        final Select select = new Select("Test Select");
+        select.setWidth("100px");
+        select.setImmediate(true);
+        select.setNullSelectionAllowed(false);
+        select.addItem("1");
+        select.addItem("2");
+        select.addItem("3");
+
+        final ObjectProperty<String> valueProperty = new ObjectProperty<String>(
+                "1", String.class);
+        select.setPropertyDataSource(valueProperty);
+        layout.addComponent(select);
+
+        globalValue.addListener(new Property.ValueChangeListener() {
+            public void valueChange(Property.ValueChangeEvent event) {
+                valueProperty.setValue(event.getProperty().getValue());
+            }
+        });
+
+        final Button changeValueButton = new Button("Change Value to 2");
+        changeValueButton.addListener(new Button.ClickListener() {
+            public void buttonClick(Button.ClickEvent event) {
+                globalValue.setValue("2");
+            }
+        });
+
+        layout.addComponent(changeValueButton);
+
+        return layout;
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2125.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2125.java
new file mode 100644
index 0000000000..b296a4ff46
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2125.java
@@ -0,0 +1,62 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.util.MethodProperty;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.CellStyleGenerator;
+import com.vaadin.ui.Table.ColumnGenerator;
+import com.vaadin.ui.Window;
+
+public class Ticket2125 extends Application {
+
+    @Override
+    public void init() {
+        setMainWindow(new MainWindow("Ticket2125"));
+
+    }
+
+    class MainWindow extends Window {
+        MainWindow(String caption) {
+            super(caption);
+
+            addComponent(new Label(
+                    "Inspect w/ Firebug: row 5 should have a MYROW -style on the row, and MYCELL on all cells"));
+
+            Table table = new Table();
+            table.setRowHeaderMode(Table.ROW_HEADER_MODE_INDEX);
+            addComponent(table);
+            for (int i = 0; i < 50; i++) {
+                table.addItem(new Integer(i));
+            }
+            table.addContainerProperty("String", String.class, "a string");
+            table.addContainerProperty("Boolean", Boolean.class, Boolean.TRUE);
+            table.addGeneratedColumn("Generated", new ColumnGenerator() {
+                public Component generateCell(Table source, Object itemId,
+                        Object columnId) {
+                    return new Label("Item " + itemId);
+                }
+            });
+            table.setCellStyleGenerator(new CellStyleGenerator() {
+                public String getStyle(Object itemId, Object propertyId) {
+                    if (new Integer(4).equals(itemId)) {
+                        if (propertyId == null) {
+                            return "MYROW";
+                        } else {
+                            return "MYCELL";
+                        }
+                    }
+                    return null;
+                }
+
+            });
+            CheckBox b = new CheckBox("editmode", new MethodProperty<Boolean>(
+                    table, "editable"));
+            b.setImmediate(true);
+            addComponent(b);
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2126.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2126.java
new file mode 100644
index 0000000000..01ef18f2ef
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2126.java
@@ -0,0 +1,62 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+/**
+ * 
+ * Toggling container with an empty one may result duplicate header cell in
+ * client.
+ * 
+ */
+public class Ticket2126 extends com.vaadin.Application {
+
+    Window main = new Window();
+    Table table = new Table();
+
+    @Override
+    public void init() {
+        setMainWindow(main);
+
+        final IndexedContainer container1 = new IndexedContainer();
+        container1.addContainerProperty("text", Component.class, null);
+        final IndexedContainer container2 = new IndexedContainer();
+
+        // Case #2 Try to comment the following line for another type of strange
+        // behaviour
+        container2.addContainerProperty("text", Component.class, null);
+
+        for (int i = 0; i < 100; i++) {
+            Item item = container1.addItem(i);
+            item.getItemProperty("text").setValue(new Label("Test " + i));
+        }
+
+        table.setContainerDataSource(container1);
+
+        // workaround for case #2
+        // table.setWidth("300px");
+        // table.setHeight("300px");
+
+        Button refreshTable = new Button("Switch table container");
+        refreshTable.addListener(new Button.ClickListener() {
+            boolean full = true;
+
+            public void buttonClick(Button.ClickEvent e) {
+                if (full) {
+                    table.setContainerDataSource(container2);
+                } else {
+                    table.setContainerDataSource(container1);
+                }
+                full = !full;
+            }
+        });
+
+        main.addComponent(table);
+        main.addComponent(refreshTable);
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2151.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2151.java
new file mode 100644
index 0000000000..5a48156367
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2151.java
@@ -0,0 +1,110 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket2151 extends Application {
+
+    private Label status;
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        createUI((AbstractOrderedLayout) w.getContent());
+    }
+
+    private void createUI(AbstractOrderedLayout layout) {
+        Button b = new Button("This is a button");
+        CheckBox cb = new CheckBox("This is a checkbox");
+        cb.setImmediate(true);
+        setTheme("tests-tickets");
+        layout.setStyleName("mylayout");
+        status = new Label("Result:");
+        layout.addComponent(status);
+        layout.setSpacing(true);
+        layout.setMargin(true);
+
+        layout.addComponent(b);
+        layout.addComponent(cb);
+
+        layout.addComponent(new Label("a"));
+        layout.addComponent(new Label("b"));
+        layout.addComponent(new Label("c"));
+
+        check(Button.class);
+        check(CheckBox.class);
+        checkDataBinding(Button.class);
+        checkDataBinding(CheckBox.class);
+
+    }
+
+    private void check(Class<? extends Button> class1) {
+        boolean ok = false;
+        Button b;
+        try {
+            b = class1.newInstance();
+            b.setCaption("Button of type " + class1.getSimpleName());
+            try {
+                // This should throw an exception
+                b.setValue("ON");
+            } catch (IllegalArgumentException e) {
+                ok = true;
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        } catch (Exception e1) {
+            e1.printStackTrace();
+            return;
+        }
+
+        if (ok) {
+            status.setValue(status.getValue() + " "
+                    + class1.getClass().getSimpleName() + ": OK");
+        } else {
+            status.setValue(status.getValue() + " "
+                    + class1.getClass().getSimpleName() + ": FAILED");
+        }
+
+    }
+
+    private void checkDataBinding(Class<? extends Button> class1) {
+        boolean ok = false;
+        Button b;
+        try {
+            b = class1.newInstance();
+            b.setCaption("Button of type " + class1.getSimpleName());
+            try {
+                b.setWriteThrough(true);
+                b.setReadThrough(true);
+                ObjectProperty<String> prop = new ObjectProperty<String>(
+                        "ABC 123");
+                /*
+                 * This should throw an exception or somehow tell that the
+                 * property was invalid (wrong type). See #2223.
+                 */
+                b.setPropertyDataSource(prop);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        } catch (Exception e1) {
+            e1.printStackTrace();
+            return;
+        }
+
+        if (ok) {
+            status.setValue(status.getValue() + " "
+                    + class1.getClass().getSimpleName() + "/DB: OK");
+        } else {
+            status.setValue(status.getValue() + " "
+                    + class1.getClass().getSimpleName() + "/DB: FAILED");
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2157.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2157.java
new file mode 100644
index 0000000000..3d90907e50
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2157.java
@@ -0,0 +1,109 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2157 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        createUI((AbstractOrderedLayout) w.getContent());
+    }
+
+    private void createUI(AbstractOrderedLayout layout) {
+        VerticalLayout ol;
+        Panel p;
+        ComboBox cb;
+
+        ol = new VerticalLayout();
+        p = new Panel(ol);
+        p.setCaption("Combobox without width");
+        // p.setWidth("100px");
+        cb = new ComboBox();
+        // cb.setCaption("A combobox");
+        // cb.setWidth("100%");
+        p.addComponent(cb);
+        layout.addComponent(p);
+
+        ol = new VerticalLayout();
+        p = new Panel(ol);
+        p.setCaption("Combobox without width with caption");
+        // p.setWidth("100px");
+        cb = new ComboBox();
+        cb.setCaption("A combobox");
+        // cb.setWidth("100px");
+        p.addComponent(cb);
+        layout.addComponent(p);
+
+        //
+        ol = new VerticalLayout();
+        p = new Panel(ol);
+        p.setCaption("Combobox 100px wide");
+        // p.setWidth("100px");
+        cb = new ComboBox();
+        // cb.setCaption("A combobox");
+        cb.setWidth("100px");
+        p.addComponent(cb);
+        layout.addComponent(p);
+
+        ol = new VerticalLayout();
+        p = new Panel(ol);
+        p.setCaption("Combobox 100px wide with caption");
+        // p.setWidth("100px");
+        cb = new ComboBox();
+        cb.setCaption("A combobox");
+        cb.setWidth("100px");
+        p.addComponent(cb);
+        layout.addComponent(p);
+
+        ol = new VerticalLayout();
+        p = new Panel(ol);
+        p.setCaption("Combobox 500px wide");
+        // p.setWidth("500px");
+        cb = new ComboBox();
+        // cb.setCaption("A combobox");
+        cb.setWidth("500px");
+        p.addComponent(cb);
+        layout.addComponent(p);
+
+        ol = new VerticalLayout();
+        p = new Panel(ol);
+        p.setCaption("Combobox 500px wide with caption");
+        // p.setWidth("500px");
+        cb = new ComboBox();
+        cb.setCaption("A combobox");
+        cb.setWidth("500px");
+        p.addComponent(cb);
+        layout.addComponent(p);
+
+        ol = new VerticalLayout();
+        p = new Panel(ol);
+        p.setCaption("Combobox 100% wide");
+        p.setWidth("200px");
+        ol.setWidth("100%");
+        cb = new ComboBox();
+        // cb.setCaption("A combobox");
+        cb.setWidth("100%");
+        p.addComponent(cb);
+        layout.addComponent(p);
+
+        ol = new VerticalLayout();
+        p = new Panel(ol);
+        p.setCaption("Combobox 100% wide with caption");
+        p.setWidth("200px");
+        ol.setWidth("100%");
+        cb = new ComboBox();
+        cb.setCaption("A combobox");
+        cb.setWidth("100%");
+        p.addComponent(cb);
+        layout.addComponent(p);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2178.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2178.java
new file mode 100644
index 0000000000..a3461dd8b6
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2178.java
@@ -0,0 +1,109 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2178 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        createUI((AbstractOrderedLayout) w.getContent());
+    }
+
+    private void createUI(AbstractOrderedLayout layout) {
+        VerticalLayout ol;
+        Panel p;
+        ComboBox cb;
+
+        ol = new VerticalLayout();
+        p = new Panel(ol);
+        p.setCaption("Combobox without width");
+        // p.setWidth("100px");
+        cb = new ComboBox();
+        // cb.setCaption("A combobox");
+        // cb.setWidth("100%");
+        p.addComponent(cb);
+        layout.addComponent(p);
+
+        ol = new VerticalLayout();
+        p = new Panel(ol);
+        p.setCaption("Combobox without width with caption");
+        // p.setWidth("100px");
+        cb = new ComboBox();
+        cb.setCaption("A combobox");
+        // cb.setWidth("100px");
+        p.addComponent(cb);
+        layout.addComponent(p);
+
+        ol = new VerticalLayout();
+        p = new Panel(ol);
+        p.setCaption("Combobox 100px wide");
+        // p.setWidth("100px");
+        cb = new ComboBox();
+        // cb.setCaption("A combobox");
+        cb.setWidth("100px");
+        p.addComponent(cb);
+        layout.addComponent(p);
+
+        ol = new VerticalLayout();
+        p = new Panel(ol);
+        p.setCaption("Combobox 100px wide with caption");
+        // p.setWidth("100px");
+        cb = new ComboBox();
+        cb.setCaption("A combobox");
+        cb.setWidth("100px");
+        p.addComponent(cb);
+        layout.addComponent(p);
+
+        ol = new VerticalLayout();
+        p = new Panel(ol);
+        p.setCaption("Combobox 500px wide");
+        // p.setWidth("500px");
+        cb = new ComboBox();
+        // cb.setCaption("A combobox");
+        cb.setWidth("500px");
+        p.addComponent(cb);
+        layout.addComponent(p);
+
+        ol = new VerticalLayout();
+        p = new Panel(ol);
+        p.setCaption("Combobox 500px wide with caption");
+        // p.setWidth("500px");
+        cb = new ComboBox();
+        cb.setCaption("A combobox");
+        cb.setWidth("500px");
+        p.addComponent(cb);
+        layout.addComponent(p);
+
+        ol = new VerticalLayout();
+        p = new Panel(ol);
+        p.setCaption("Combobox 100% wide inside 200px panel");
+        p.setWidth("200px");
+        ol.setWidth("100%");
+        cb = new ComboBox();
+        // cb.setCaption("A combobox");
+        cb.setWidth("100%");
+        // cb.setWidth("500px");
+        p.addComponent(cb);
+        layout.addComponent(p);
+
+        ol = new VerticalLayout();
+        p = new Panel(ol);
+        p.setCaption("Combobox 100% wide inside 200px panel with caption");
+        p.setWidth("200px");
+        ol.setWidth("100%");
+        cb = new ComboBox();
+        cb.setCaption("A combobox");
+        cb.setWidth("100%");
+        p.addComponent(cb);
+        layout.addComponent(p);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2179.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2179.java
new file mode 100644
index 0000000000..165e770307
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2179.java
@@ -0,0 +1,56 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Validator;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket2179 extends Application {
+
+    TextField f = new TextField("Test fiel ( must contain 1 & 2 )");
+    Window main = new Window("Dual validator test");
+
+    @Override
+    public void init() {
+
+        f.setImmediate(true);
+        f.setRequired(true);
+        f.addValidator(new ContainsValidator("1"));
+        f.addValidator(new ContainsValidator("2"));
+
+        setMainWindow(main);
+        main.addComponent(f);
+
+        f.addListener(new Property.ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                main.showNotification("Test field is "
+                        + (f.isValid() ? "valid" : "invalid"));
+            }
+        });
+
+    }
+
+    class ContainsValidator implements Validator {
+        private final String c;
+
+        public ContainsValidator(String c) {
+            this.c = c;
+        }
+
+        public boolean isValid(Object value) {
+            return value != null && value.toString().contains(c);
+        }
+
+        public void validate(Object value) throws InvalidValueException {
+            if (!isValid(value)) {
+                throw new InvalidValueException("Value does not contain " + c);
+            }
+
+        }
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2180.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2180.java
new file mode 100644
index 0000000000..9f5e2a2de1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2180.java
@@ -0,0 +1,41 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Window;
+
+public class Ticket2180 extends Application {
+
+    private Window mainWindow;
+    private TabSheet tabSheet;
+
+    @Override
+    public void init() {
+        mainWindow = new Window("Tabsheet should cause scrollbars");
+        setMainWindow(mainWindow);
+        // mainWindow.getLayout().setSizeFull();
+        tabSheet = new TabSheet();
+        // tabSheet.setWidth("100%");
+        Button button = new Button("Blah");
+        button.setWidth("100%");
+        Label label1 = new Label("Lorem ipsum");
+        Label label2 = new Label("Lorem");
+        Label label3 = new Label(
+                "Lorema jsdfhak sjdfh kajsdh fkajhd kfjah dkfjah ksfdjh kajsfh kj 1 2 3 4 5 6 7 8 9 10");
+
+        label3.setWidth("800px");
+        tabSheet.addTab(label1, "Tab 1", null);
+        tabSheet.addTab(label2, "Tab 2", null);
+        tabSheet.addTab(label3, "Tab 3", null);
+        tabSheet.addTab(new Label("a"), "Tab 4", null);
+        tabSheet.addTab(new Label("a"), "Tab 5", null);
+        tabSheet.addTab(new Label("a"), "Tab 6", null);
+        // mainWindow.addComponent(new Label("123"));
+        mainWindow.addComponent(tabSheet);
+        mainWindow.addComponent(button);
+        // mainWindow.addComponent(new Label("abc"));
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2181.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2181.java
new file mode 100644
index 0000000000..ea3d996b98
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2181.java
@@ -0,0 +1,104 @@
+package com.vaadin.tests.tickets;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Random;
+import java.util.Set;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.OptionGroup;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2181 extends Application implements Button.ClickListener {
+
+    // private static final Object PROPERTY_VALUE = new Object();
+    // private static final Object PROPERTY_CAPTION = new Object();
+
+    private static final String caption = "This is a caption which is very long and nice and perhaps sometimes should be clipped";
+    Window main = new Window("#2181 test");
+    TextField tf1 = new TextField(caption, "Test field - undefined width");
+    TextField tf2 = new TextField(caption, "Test field - 150px wide");
+    Button setButton = new Button("Set", this);
+    private Random random = new Random(123);
+    private OptionGroup options;
+
+    private static ArrayList<String> icons = new ArrayList<String>();
+    static {
+        icons.add("icons/64/ok.png");
+        icons.add("icons/64/arrow-down.png");
+        icons.add("icons/64/arrow-left.png");
+        icons.add("icons/64/arrow-right.png");
+        icons.add("icons/64/arrow-up.png");
+    }
+
+    @Override
+    public void init() {
+        setMainWindow(main);
+        VerticalLayout ol;
+        ol = new VerticalLayout();
+        ol.addComponent(tf1);
+        main.addComponent(ol);
+
+        ol = new VerticalLayout();
+        ol.setWidth("150px");
+        tf2.setWidth("150px");
+        ol.addComponent(tf2);
+        main.addComponent(ol);
+
+        main.addComponent(createSelection());
+        main.addComponent(setButton);
+    }
+
+    private Component createSelection() {
+        options = new OptionGroup();
+        options.addItem("Icon");
+        options.addItem("Caption");
+        options.addItem("Required");
+        options.addItem("Error");
+        options.setMultiSelect(true);
+        options.select("Caption");
+
+        // ol.addComponent(og);
+        return options;
+    }
+
+    public void buttonClick(ClickEvent event) {
+        if (event.getButton() == setButton) {
+            set();
+        }
+    }
+
+    private void set() {
+        @SuppressWarnings("unchecked")
+        Set<String> values = (Set<String>) options.getValue();
+        TextField[] tfs = new TextField[] { tf1, tf2 };
+        for (TextField tf : tfs) {
+            // Clear all
+            tf.setCaption(null);
+            tf.setComponentError(null);
+            tf.setRequired(false);
+            tf.setIcon(null);
+
+            for (String value : values) {
+                if (value.equals("Caption")) {
+                    tf.setCaption(caption);
+                } else if (value.equals("Icon")) {
+                    String timestamp = String.valueOf(new Date().getTime());
+                    tf.setIcon(new ThemeResource(icons.get(random.nextInt(icons
+                            .size())) + "?" + timestamp));
+                } else if (value.equals("Required")) {
+                    tf.setRequired(true);
+                } else if (value.equals("Error")) {
+                    tf.setComponentError(new UserError("Nooooo..."));
+                }
+            }
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2186.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2186.java
new file mode 100644
index 0000000000..bc9ff8c27d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2186.java
@@ -0,0 +1,54 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2186 extends Application {
+
+    @Override
+    public void init() {
+        Window main = new Window("Quick test");
+        setMainWindow(main);
+
+        HorizontalLayout base = new HorizontalLayout();
+        main.setContent(base);
+
+        VerticalLayout content = new VerticalLayout();
+
+        content.addComponent(new Label("Content."));
+        content.setWidth("500px");
+
+        Table table = new Table();
+
+        table.setPageLength(10);
+
+        table.setWidth("100%");
+
+        table.addContainerProperty("Lähettäjä", String.class, "");
+        table.addContainerProperty("Viestin tyyppi", String.class, "");
+
+        for (int i = 0; i < 15; i++) {
+
+            table.addItem(new Object[] { i + " Joku Ihminen", "Testiviesti" },
+
+            new Object());
+
+        }
+
+        content.addComponent(table);
+
+        Panel right = new Panel("Panel");
+
+        right.addComponent(new Label("Some basic text might show up here."));
+
+        base.addComponent(content);
+
+        base.addComponent(right);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2204.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2204.java
new file mode 100644
index 0000000000..6a047cb626
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2204.java
@@ -0,0 +1,177 @@
+package com.vaadin.tests.tickets;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.vaadin.Application;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.AbstractSplitPanel;
+import com.vaadin.ui.Accordion;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.FormFieldFactory;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.RichTextArea;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.VerticalSplitPanel;
+import com.vaadin.ui.Window;
+
+public class Ticket2204 extends Application {
+
+    private final List<RichTextArea> textAreas = new ArrayList<RichTextArea>();
+    private TabSheet ts;
+    private final Map<Component, Component> containerToComponent = new HashMap<Component, Component>();
+    private RichTextArea rta;
+    private final List<Class<? extends Component>> classes = new ArrayList<Class<? extends Component>>();
+    protected RichTextArea formTextArea;
+
+    @Override
+    public void init() {
+        classes.add(VerticalLayout.class);
+        classes.add(HorizontalLayout.class);
+        classes.add(GridLayout.class);
+        classes.add(Accordion.class);
+        classes.add(TabSheet.class);
+        classes.add(Panel.class);
+        classes.add(VerticalSplitPanel.class);
+        classes.add(HorizontalSplitPanel.class);
+        classes.add(Form.class);
+
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        createUI((AbstractOrderedLayout) w.getContent());
+    }
+
+    private void createUI(AbstractOrderedLayout layout) {
+        ts = new TabSheet();
+        layout.addComponent(ts);
+
+        for (Class<? extends Component> c : classes) {
+            ts.addTab(createComponent(c), c.getSimpleName(), null);
+        }
+        rta = new RichTextArea();
+        rta.setVisible(false);
+        ts.addTab(rta, "Hidden rta", null);
+
+        Button b = new Button("Show area", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                showHide();
+            }
+        });
+
+        layout.addComponent(b);
+
+        b = new Button("Show tab", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                showTab();
+            }
+        });
+
+        layout.addComponent(b);
+
+    }
+
+    protected void showTab() {
+        rta.setVisible(!rta.isVisible());
+
+    }
+
+    protected void showHide() {
+        Component c = containerToComponent.get(ts.getSelectedTab());
+        c.setVisible(!c.isVisible());
+    }
+
+    private Component createComponent(Class<? extends Component> c) {
+        RichTextArea textArea = new RichTextArea();
+        textArea.setVisible(false);
+        textArea.setCaption("This is the textArea");
+        textArea.setWidth("200px");
+        textArea.setHeight("100px");
+        textAreas.add(textArea);
+        Component cc = null;
+
+        try {
+            cc = c.newInstance();
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            return null;
+        }
+        // if (c == OrderedLayout.class) {
+        // cc = new VerticalLayout();
+        // } else
+        if (c == Accordion.class) {
+            // Label l = new Label("Filler");
+            // l.setCaption("Filler label");
+            // cc.addComponent(l);
+        }
+
+        if (c == Form.class) {
+            Form f = (Form) cc;
+            f.setFormFieldFactory(new FormFieldFactory() {
+
+                public Field createField(Item item, Object propertyId,
+                        Component uiContext) {
+                    formTextArea = new RichTextArea();
+                    formTextArea.setVisible(false);
+                    return formTextArea;
+                }
+
+            });
+            f.setItemDataSource(new BeanItem<Object>(new Object() {
+                private int a;
+
+                @SuppressWarnings("unused")
+                public int getA() {
+                    return a;
+                }
+
+                @SuppressWarnings("unused")
+                public void setA(int a) {
+                    this.a = a;
+                }
+            }));
+            containerToComponent.put(f, formTextArea);
+            return f;
+        }
+        containerToComponent.put(cc, textArea);
+        if (cc instanceof ComponentContainer) {
+            ((ComponentContainer) cc).addComponent(textArea);
+        }
+
+        if (AbstractSplitPanel.class.isAssignableFrom(c)) {
+            AbstractSplitPanel sp = (AbstractSplitPanel) cc;
+            sp.setWidth("300px");
+            sp.setHeight("300px");
+            sp.addComponent(new Label("Label"));
+            textArea.setSizeFull();
+        }
+        if (c == Panel.class) {
+            Layout layout = (Layout) ((Panel) cc).getContent();
+            containerToComponent.put(cc, layout);
+            layout.setVisible(false);
+            textArea.setVisible(true);
+            return cc;
+        }
+
+        return cc;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2208.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2208.java
new file mode 100644
index 0000000000..a326a0c381
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2208.java
@@ -0,0 +1,68 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Item;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.CellStyleGenerator;
+import com.vaadin.ui.Table.ColumnGenerator;
+import com.vaadin.ui.Window;
+
+public class Ticket2208 extends Application {
+
+    private Table t;
+
+    @Override
+    public void init() {
+        Window mainWindow = new Window();
+        setMainWindow(mainWindow);
+
+        t = new Table("A table");
+        t.addContainerProperty("col 1 (red)", String.class, "");
+        t.addContainerProperty("col 2", String.class, "");
+
+        t.setHeight("150px");
+        t.addGeneratedColumn("col 3 (green)", new ColumnGenerator() {
+
+            public Component generateCell(Table source, Object itemId,
+                    Object columnId) {
+                Item item = source.getItem(itemId);
+                String col1 = (String) item.getItemProperty("col 1 (red)")
+                        .getValue();
+                String col2 = (String) item.getItemProperty("col 2").getValue();
+                return new Label(col1 + "-" + col2);
+            }
+        });
+
+        t.addContainerProperty("col 4", String.class, "");
+        t.setCellStyleGenerator(new CellStyleGenerator() {
+
+            public String getStyle(Object itemId, Object propertyId) {
+                if ("col 1 (red)".equals(propertyId)) {
+                    return "red";
+                }
+
+                if ("col 3 (green)".equals(propertyId)) {
+                    return "green";
+                }
+
+                return null;
+            }
+        });
+
+        t.addItem(new Object[] { "Col 1-1", "Col 2-1", "Col 4-1" },
+                new Object());
+        t.addItem(new Object[] { "Col 1-2", "Col 2-2", "Col 4-2" },
+                new Object());
+        t.addItem(new Object[] { "Col 1-3", "Col 2-3", "Col 4-3" },
+                new Object());
+
+        t.setColumnReorderingAllowed(true);
+        t.setColumnCollapsingAllowed(true);
+        setTheme("tests-tickets");
+        mainWindow.addComponent(t);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2209.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2209.java
new file mode 100644
index 0000000000..7ee8a07405
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2209.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket2209 extends Application {
+
+    private GridLayout gl;
+    private ComboBox combo;
+    private Label labelLong;
+
+    @Override
+    public void init() {
+        setMainWindow(new Window());
+
+        gl = new GridLayout(1, 2);
+        gl.setStyleName("borders");
+        getMainWindow().addComponent(gl);
+        setTheme("tests-tickets");
+        combo = new ComboBox("Combo caption");
+        labelLong = new Label(
+                "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?");
+        gl.addComponent(combo);
+        gl.addComponent(labelLong);
+
+        Button b = new Button("Add label text", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                labelLong.setValue(labelLong.getValue() + "-12345");
+            }
+
+        });
+        getMainWindow().addComponent(b);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2209OL.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2209OL.java
new file mode 100644
index 0000000000..b7b7b8aba1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2209OL.java
@@ -0,0 +1,49 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2209OL extends Application {
+
+    private VerticalLayout gl;
+    private ComboBox combo;
+    private Label labelLong;
+
+    @Override
+    public void init() {
+        setMainWindow(new Window());
+        getMainWindow().getContent().setWidth("250px");
+        gl = new VerticalLayout();
+        gl.setStyleName("borders");
+        getMainWindow().addComponent(gl);
+        setTheme("tests-tickets");
+        combo = new ComboBox("Combo caption");
+        labelLong = new Label(
+                "This should stay on one line or to wrap to multiple lines? At leas it should display all the text?. "
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?");
+        gl.addComponent(combo);
+        gl.addComponent(labelLong);
+
+        Button b = new Button("Add label text", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                labelLong.setValue(labelLong.getValue() + "-12345");
+            }
+
+        });
+        getMainWindow().addComponent(b);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2209OL2.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2209OL2.java
new file mode 100644
index 0000000000..99103e7e42
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2209OL2.java
@@ -0,0 +1,55 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2209OL2 extends Application {
+
+    private VerticalLayout gl;
+    private ComboBox combo;
+    private Label labelLong;
+
+    @Override
+    public void init() {
+        setMainWindow(new Window());
+        getMainWindow().getContent().setWidth("250px");
+        gl = new VerticalLayout();
+        gl.setSizeUndefined();
+        gl.setStyleName("borders");
+        getMainWindow().addComponent(gl);
+        setTheme("tests-tickets");
+        combo = new ComboBox("Combo caption");
+        labelLong = new Label(
+                "This should stay on one line or to wrap to multiple lines? At leas it should display all the text?. "
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?"
+                        + "A long label, longer than the combo box. Why doesn't it affect the width? And why is the gridlayout so high?");
+        gl.addComponent(combo);
+        gl.addComponent(labelLong);
+
+        Button b = new Button("Add label text", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                labelLong.setValue(labelLong.getValue() + "-12345");
+            }
+
+        });
+        getMainWindow().addComponent(b);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2215.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2215.java
new file mode 100644
index 0000000000..221f84f86f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2215.java
@@ -0,0 +1,29 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.themes.Reindeer;
+
+public class Ticket2215 extends Application {
+
+    @Override
+    public void init() {
+        setMainWindow(new Window());
+
+        VerticalLayout ol = new VerticalLayout();
+        Panel p = new Panel("Test");
+        p.addComponent(new Label("Panel1"));
+        p.setHeight("500px");
+        p.setWidth("500px");
+        p.setStyleName(Reindeer.PANEL_LIGHT);
+        ol.addComponent(p);
+        ol.addComponent(new Label("NextComponent"));
+
+        getMainWindow().addComponent(ol);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2221.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2221.java
new file mode 100644
index 0000000000..e6489da432
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2221.java
@@ -0,0 +1,91 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2221 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        createUI((AbstractOrderedLayout) w.getContent());
+    }
+
+    private void createUI(AbstractOrderedLayout layout) {
+        layout.setSizeFull();
+        layout.addComponent(new Invoice());
+    }
+
+    public class Invoice extends CustomComponent {
+
+        Layout main = new VerticalLayout();
+
+        private TextField tf;
+
+        private Panel outerPanel;
+
+        private TextField tf2;
+
+        public Invoice() {
+            setSizeFull();
+
+            setCompositionRoot(main);
+            main.setSizeFull();
+            Button b = new Button("Switch textfield/panel",
+                    new ClickListener() {
+
+                        public void buttonClick(ClickEvent event) {
+                            Component visible = tf;
+
+                            if (tf.isVisible()) {
+                                visible = outerPanel;
+                            }
+
+                            outerPanel.setVisible(false);
+                            tf.setVisible(false);
+
+                            visible.setVisible(true);
+                        }
+
+                    });
+            main.addComponent(b);
+
+            tf = new TextField("TextField");
+            tf.setHeight("1000px");
+            tf.setWidth("1000px");
+
+            outerPanel = new Panel();
+            outerPanel.setCaption("A RichTextArea");
+            outerPanel.setVisible(false);
+            outerPanel.setHeight("1000px");
+            outerPanel.setWidth("1000px");
+
+            outerPanel.getContent().setSizeFull();
+            Panel innerPanel = new Panel("Inner panel");
+            innerPanel.setSizeFull();
+            outerPanel.addComponent(innerPanel);
+
+            tf2 = new TextField("A 2000x2000 textfield");
+            tf2.setWidth("2000px");
+            tf2.setHeight("2000px");
+
+            innerPanel.addComponent(tf2);
+            main.addComponent(outerPanel);
+            main.addComponent(tf);
+        }
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2222.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2222.java
new file mode 100644
index 0000000000..86dccede69
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2222.java
@@ -0,0 +1,64 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2222 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        setTheme("tests-tickets");
+        createUI((AbstractOrderedLayout) w.getContent());
+    }
+
+    private void createUI(AbstractOrderedLayout layout) {
+        HorizontalLayout horiz = new HorizontalLayout();
+        horiz.setSpacing(true);
+        horiz.setMargin(true);
+        horiz.setStyleName("ticket2222");
+
+        horiz.addComponent(new Label("Horiz spacing: 60px;"));
+        horiz.addComponent(new Label("Margin-left: 40px"));
+        horiz.addComponent(new Label("Margin-top: 100px;"));
+        horiz.addComponent(new Label("Margin-right: 20px;"));
+        horiz.addComponent(new Label("Margin-bottom: 30px;"));
+        horiz.addStyleName("borders");
+
+        VerticalLayout vert = new VerticalLayout();
+        vert.setSizeUndefined();
+        vert.setSpacing(true);
+        vert.setMargin(false);
+        vert.setStyleName("ticket2222");
+        vert.addComponent(new Label("Vert spacing: 50px;"));
+        vert.addComponent(new Label("No margins"));
+        vert.addComponent(new Label("label 3"));
+        vert.addStyleName("borders");
+
+        GridLayout gl = new GridLayout(3, 2);
+        gl.setStyleName("borders");
+        gl.setSpacing(true);
+        gl.setMargin(true);
+        gl.setStyleName("ticket2222");
+        gl.addComponent(new Label("Vert spacing: 50px; horiz 20px;"));
+        gl.addComponent(new Label("Margin-left: 40px"));
+        gl.addComponent(new Label("Margin-top: 100px;"));
+        gl.addComponent(new Label("Margin-right: 20px;"));
+        gl.addComponent(new Label("Margin-bottom: 30px;"));
+        gl.addComponent(new Label("label 3"));
+        gl.addStyleName("borders");
+
+        layout.addComponent(horiz);
+        layout.addComponent(new Label(" "));
+        layout.addComponent(vert);
+        layout.addComponent(new Label(" "));
+        layout.addComponent(gl);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2227OrderedlayoutInTable.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2227OrderedlayoutInTable.java
new file mode 100644
index 0000000000..c93b26bec2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2227OrderedlayoutInTable.java
@@ -0,0 +1,45 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Item;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2227OrderedlayoutInTable extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window();
+        Table t = new Table();
+        t.setWidth("500px");
+        t.setHeight("200px");
+        t.addContainerProperty("pno", String.class, "");
+        t.addContainerProperty("testi", String.class, "");
+        t.addContainerProperty("testi2", Layout.class, null);
+        t.addContainerProperty("komponentti", Component.class, null);
+        t.addContainerProperty("nimi", String.class, "");
+        t.setVisibleColumns(new Object[] { "pno", "testi", "testi2", "nimi" });
+
+        t.setSelectable(true);
+
+        Item i = t.addItem(1);
+        i.getItemProperty("pno").setValue("1");
+        i.getItemProperty("testi").setValue("12.12.08");
+        VerticalLayout ol = new VerticalLayout();
+        ol.setWidth("100%");
+        ol.setHeight(null);
+        ol.addComponent(new Label("monirivi testi"));
+        ol.addComponent(new Label("monirivi testi2"));
+
+        i.getItemProperty("testi2").setValue(ol);
+        i.getItemProperty("nimi").setValue("test");
+
+        w.addComponent(t);
+        setMainWindow(w);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2231.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2231.java
new file mode 100644
index 0000000000..ba12dd7abc
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2231.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket2231 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        setTheme("tests-tickets");
+        createUI((AbstractOrderedLayout) w.getContent());
+    }
+
+    private void createUI(AbstractOrderedLayout layout) {
+        layout.setSizeUndefined();
+        layout.setMargin(false);
+        layout.setStyleName("borders");
+        Label l = new Label("Margin-label");
+
+        l.setStyleName("ticket2231");
+
+        layout.addComponent(l);
+
+        for (int i = 0; i < 5; i++) {
+            l = new Label("This is a label with border");
+            l.setStyleName("ticket2231-border");
+            if (i == 2) {
+                l.setWidth("100%");
+                l.setValue("100% wide");
+            } else if (i == 4) {
+                l.setWidth("20em");
+                l.setValue("20em wide");
+            }
+            // l.addStyleName("ticket2231");
+            layout.addComponent(l);
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2232.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2232.java
new file mode 100644
index 0000000000..6df6717c33
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2232.java
@@ -0,0 +1,74 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Layout.SpacingHandler;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2232 extends Application {
+
+    @Override
+    public void init() {
+        setMainWindow(new Window());
+        setTheme("tests-tickets");
+
+        getMainWindow()
+                .addComponent(
+                        new Label(
+                                "Defining spacing must be possible also with pure CSS"));
+
+        Layout gl;
+        gl = new VerticalLayout();
+        gl.setWidth("100%");
+        gl.setHeight("200px");
+        gl.setStyleName("t2232");
+        fillAndAdd(gl);
+
+        gl = new GridLayout();
+        gl.setWidth("100%");
+        gl.setHeight("200px");
+        gl.setStyleName("t2232");
+        fillAndAdd(gl);
+
+        gl = new VerticalLayout();
+        gl.setWidth("100%");
+        gl.setHeight("200px");
+        ((SpacingHandler) gl).setSpacing(true);
+        fillAndAdd(gl);
+
+        gl = new GridLayout();
+        gl.setWidth("100%");
+        gl.setHeight("200px");
+        ((SpacingHandler) gl).setSpacing(true);
+        fillAndAdd(gl);
+
+        gl = new VerticalLayout();
+        gl.setWidth("100%");
+        gl.setHeight("200px");
+        fillAndAdd(gl);
+
+        gl = new GridLayout();
+        gl.setWidth("100%");
+        gl.setHeight("200px");
+        fillAndAdd(gl);
+
+    }
+
+    private void fillAndAdd(Layout gl) {
+        for (int i = 0; i < 4; i++) {
+            Button b = new Button("B");
+            b.setSizeFull();
+            gl.addComponent(b);
+        }
+        String caption = gl.getClass().getSimpleName();
+        caption += " style: " + gl.getStyleName() + ", spacingFromServer:"
+                + ((SpacingHandler) gl).isSpacing();
+        gl.setCaption(caption);
+        getMainWindow().addComponent(gl);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2234.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2234.java
new file mode 100644
index 0000000000..5c6167fbfe
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2234.java
@@ -0,0 +1,43 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Item;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Window;
+
+public class Ticket2234 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        createUI((AbstractOrderedLayout) w.getContent());
+    }
+
+    private void createUI(AbstractOrderedLayout layout) {
+        ComboBox combo = new ComboBox("Combobox caption");
+        combo.addContainerProperty("blah", String.class, "");
+        combo.setItemCaptionPropertyId("blah");
+
+        Item item;
+        for (int i = 0; i < 100; i++) {
+            item = combo.addItem(new Object());
+            item.getItemProperty("blah").setValue("Item " + i);
+        }
+
+        layout.addComponent(combo);
+
+        combo = new ComboBox("Combobox caption");
+        combo.addContainerProperty("blah", String.class, "");
+        combo.setItemCaptionPropertyId("blah");
+
+        for (int i = 0; i < 5; i++) {
+            item = combo.addItem(new Object());
+            item.getItemProperty("blah").setValue("Item " + i);
+        }
+
+        layout.addComponent(combo);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2235.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2235.java
new file mode 100644
index 0000000000..72a77e502e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2235.java
@@ -0,0 +1,28 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.Window;
+
+public class Ticket2235 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        createUI((AbstractOrderedLayout) w.getContent());
+    }
+
+    private void createUI(AbstractOrderedLayout layout) {
+        layout.setSizeFull();
+
+        TextArea tf = new TextArea();
+        tf.setCaption("A text field");
+        tf.setSizeFull();
+        tf.setRows(2);
+
+        layout.addComponent(tf);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2240.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2240.java
new file mode 100644
index 0000000000..6d70d89af8
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2240.java
@@ -0,0 +1,48 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket2240 extends Application {
+
+    public static final String txt = "<p>There are two main types of windows: application-level windows, and "
+            + "\"sub windows\".</p><p>A sub window is rendered as a \"inline\" popup window"
+            + " within the (native) browser window to which it was added. You can create"
+            + " a sub window by creating a new Window and adding it to a application-level window, for instance"
+            + " your main window. </p><p> In contrast, you create a application-level window by"
+            + " creating a new Window and adding it to the Application. Application-level"
+            + " windows are not shown by default - you need to open a browser window for"
+            + " the url representing the window. You can think of the application-level"
+            + " windows as separate views into your application - and a way to create a"
+            + " \"native\" browser window.</p><p>Depending on your needs, it's also"
+            + " possible to create a new window instance (with it's own internal state)"
+            + " for each new (native) browser window, or you can share the same instance"
+            + " (and state) between several browser windows (the latter is most useful"
+            + " for read-only views).</p><br/><p>This is the end.</p>";
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        setTheme("tests-tickets");
+        createUI((AbstractOrderedLayout) w.getContent());
+    }
+
+    private void createUI(AbstractOrderedLayout layout) {
+        layout.setHeight(null);
+        layout.setStyleName("borders");
+        // layout.setSizeFull();
+        final Label l = new Label(txt);
+        l.setContentMode(Label.CONTENT_XHTML);
+        // l.setWidth("100%");
+
+        TextField tf = new TextField("This is a textField");
+        tf.setWidth("100%");
+
+        layout.addComponent(tf);
+        layout.addComponent(l);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2242.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2242.java
new file mode 100644
index 0000000000..fa25ff55f1
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2242.java
@@ -0,0 +1,79 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+public class Ticket2242 extends Application implements ValueChangeListener {
+
+    private Object tableValue = null;
+    private Table t;
+    private String valueDataSource = "-";
+    private ObjectProperty<String> prop;
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        createUI((AbstractOrderedLayout) w.getContent());
+    }
+
+    private void createUI(AbstractOrderedLayout layout) {
+        Button b = new Button("Change container datasource",
+                new ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        for (int i = 0; i < 5; i++) {
+                            t.setContainerDataSource(createContainer());
+                            // prop.setValue("ipsum");
+                        }
+                    }
+
+                });
+
+        layout.addComponent(b);
+
+        t = new Table("A table");
+        prop = new ObjectProperty<String>(valueDataSource);
+        t.setPropertyDataSource(prop);
+        t.setSelectable(true);
+        t.setImmediate(true);
+        t.setPageLength(5);
+        t.setContainerDataSource(createContainer());
+        tableValue = t.getValue();
+        t.addListener(this);
+
+        layout.addComponent(t);
+    }
+
+    private IndexedContainer createContainer() {
+        IndexedContainer ic = new IndexedContainer();
+        ic.addContainerProperty("a", String.class, null);
+
+        for (String s : new String[] { "Lorem", "ipsum", "dolor", "sit",
+                "amet", "consectetuer" }) {
+            Item item = ic.addItem(s);
+            item.getItemProperty("a").setValue(s);
+
+        }
+
+        return ic;
+    }
+
+    public void valueChange(ValueChangeEvent event) {
+        System.out.println("Value change from " + tableValue + " to "
+                + t.getValue());
+        tableValue = t.getValue();
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2244.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2244.java
new file mode 100644
index 0000000000..e9ae3ac720
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2244.java
@@ -0,0 +1,126 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket2244 extends Application {
+
+    Form form;
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+
+        GridLayout gl = new GridLayout(3, 3);
+        gl.setSpacing(true);
+        gl.addComponent(new Label("Before form"));
+        gl.newLine();
+
+        form = new Form(gl);
+        form.setItemDataSource(new BeanItem<MyBean>(new MyBean()));
+
+        gl.addComponent(new Label("After form"));
+
+        w.addComponent(form);
+
+        w.addComponent(new Button("new item", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                form.setItemDataSource(new BeanItem<MyBean>(new MyBean()));
+
+            }
+
+        }));
+        w.addComponent(new Button("new bigger item",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        form.setItemDataSource(new BeanItem<MyBean>(
+                                new MyBiggerBean()));
+
+                    }
+
+                }));
+        w.addComponent(new Button("new grid layout",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        form.setLayout(new GridLayout());
+
+                    }
+
+                }));
+        w.addComponent(new Button("new form layout",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        form.setLayout(new FormLayout());
+
+                    }
+
+                }));
+
+    }
+
+    public class MyBean {
+        String firstname;
+        String lastname;
+        String password;
+
+        public String getFirstname() {
+            return firstname;
+        }
+
+        public void setFirstname(String firstname) {
+            this.firstname = firstname;
+        }
+
+        public String getLastname() {
+            return lastname;
+        }
+
+        public void setLastname(String lastname) {
+            this.lastname = lastname;
+        }
+
+        public String getPassword() {
+            return password;
+        }
+
+        public void setPassword(String password) {
+            this.password = password;
+        }
+
+    }
+
+    public class MyBiggerBean extends MyBean {
+        String address;
+        String phone;
+
+        public String getAddress() {
+            return address;
+        }
+
+        public void setAddress(String address) {
+            this.address = address;
+        }
+
+        public String getPhone() {
+            return phone;
+        }
+
+        public void setPhone(String phone) {
+            this.phone = phone;
+        }
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2245.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2245.java
new file mode 100644
index 0000000000..bac85c95cd
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2245.java
@@ -0,0 +1,17 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Window;
+
+public class Ticket2245 extends Application {
+
+    @Override
+    public void init() {
+        Window main = new Window("The Main Window");
+        main.getContent().setSizeFull();
+        setMainWindow(main);
+        HorizontalSplitPanel sp = new HorizontalSplitPanel();
+        main.addComponent(sp);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2267.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2267.java
new file mode 100644
index 0000000000..020ea5c7c6
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2267.java
@@ -0,0 +1,41 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket2267 extends Application {
+
+    Label l = new Label("0");
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        GridLayout gl = new GridLayout(4, 2);
+
+        Button button = new Button("1", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                Button b = event.getButton();
+                l.setValue(l.getValue() + b.getCaption());
+
+            }
+
+        });
+
+        gl.addComponent(l, 0, 0, 3, 0);
+        gl.addComponent(button);
+        gl.addComponent(new Label("2"));
+        gl.addComponent(new Label("3"));
+        gl.addComponent(new Label("4"));
+
+        w.setContent(gl);
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2271.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2271.java
new file mode 100644
index 0000000000..50a99edb7a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2271.java
@@ -0,0 +1,35 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2271 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        createUI((AbstractOrderedLayout) w.getContent());
+    }
+
+    private void createUI(AbstractOrderedLayout layout) {
+
+        VerticalLayout ol = new VerticalLayout();
+        ol.setWidth(null);
+
+        ComboBox cb = new ComboBox("Asiakas");
+        cb.setWidth("100%");
+
+        Button b = new Button("View CSV-tiedostoon");
+
+        ol.addComponent(cb);
+        ol.addComponent(b);
+
+        layout.addComponent(ol);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2279.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2279.java
new file mode 100644
index 0000000000..e3b446f242
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2279.java
@@ -0,0 +1,209 @@
+package com.vaadin.tests.tickets;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.gwt.client.ui.AlignmentInfo;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Layout.AlignmentHandler;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+// This tests the deprecated setComponentAlignment(Component,String) API
+@SuppressWarnings("deprecation")
+public class Ticket2279 extends Application {
+
+    private Label label;
+
+    private static Map<String, Integer> expected = new HashMap<String, Integer>();
+
+    private static Set<String> longHorizontalAlignments = new HashSet<String>();
+    private static Set<String> shortHorizontalAlignments = new HashSet<String>();
+    private static Set<String> longVerticalAlignments = new HashSet<String>();
+    private static Set<String> shortVerticalAlignments = new HashSet<String>();
+
+    static {
+        expected.put("r", AlignmentInfo.Bits.ALIGNMENT_RIGHT);
+        expected.put("l", AlignmentInfo.Bits.ALIGNMENT_LEFT);
+        expected.put("c", AlignmentInfo.Bits.ALIGNMENT_HORIZONTAL_CENTER);
+        expected.put("t", AlignmentInfo.Bits.ALIGNMENT_TOP);
+        expected.put("b", AlignmentInfo.Bits.ALIGNMENT_BOTTOM);
+        expected.put("m", AlignmentInfo.Bits.ALIGNMENT_VERTICAL_CENTER);
+
+        expected.put("right", AlignmentInfo.Bits.ALIGNMENT_RIGHT);
+        expected.put("left", AlignmentInfo.Bits.ALIGNMENT_LEFT);
+        expected.put("center", AlignmentInfo.Bits.ALIGNMENT_HORIZONTAL_CENTER);
+        expected.put("top", AlignmentInfo.Bits.ALIGNMENT_TOP);
+        expected.put("bottom", AlignmentInfo.Bits.ALIGNMENT_BOTTOM);
+        expected.put("middle", AlignmentInfo.Bits.ALIGNMENT_VERTICAL_CENTER);
+
+        shortHorizontalAlignments.add("r");
+        shortHorizontalAlignments.add("l");
+        shortHorizontalAlignments.add("c");
+        shortVerticalAlignments.add("t");
+        shortVerticalAlignments.add("b");
+        shortVerticalAlignments.add("m");
+
+        longHorizontalAlignments.add("right");
+        longHorizontalAlignments.add("left");
+        longHorizontalAlignments.add("center");
+        longVerticalAlignments.add("top");
+        longVerticalAlignments.add("bottom");
+        longVerticalAlignments.add("middle");
+
+    }
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        setTheme("tests-tickets");
+        AbstractOrderedLayout layout = (AbstractOrderedLayout) w.getContent();
+
+        createUI(layout);
+    }
+
+    private void createUI(Layout layout) {
+        VerticalLayout vl = new VerticalLayout();
+        vl.setWidth("500px");
+        vl.setHeight("500px");
+        vl.setStyleName("borders");
+        label = new Label("<b>Error messages follows:</b><br/>",
+                Label.CONTENT_XHTML);
+        vl.addComponent(label);
+        layout.addComponent(vl);
+
+        testAlignments(vl);
+
+        GridLayout gl = new GridLayout(1, 1);
+        gl.setWidth("500px");
+        gl.setHeight("500px");
+        gl.setStyleName("borders");
+        label = new Label("<b>Error messages follows:</b><br/>",
+                Label.CONTENT_XHTML);
+        gl.addComponent(label);
+        layout.addComponent(gl);
+
+        testAlignments(gl);
+
+    }
+
+    private void testAlignments(AlignmentHandler layout) {
+        HashSet<String> horizontals = new HashSet<String>();
+        horizontals.addAll(shortHorizontalAlignments);
+        horizontals.addAll(longHorizontalAlignments);
+
+        for (String horiz : horizontals) {
+            // Test "l","r","left","right" etc
+            int expectedHoriz = expected.get(horiz);
+            checkAlignment(layout, horiz, AlignmentHandler.ALIGNMENT_TOP
+                    | expectedHoriz);
+
+            for (String vert : shortVerticalAlignments) {
+                int expectedVert = expected.get(vert);
+
+                // Test "lt","rt" etc
+                if (horiz.length() == 1) {
+                    checkAlignment(layout, horiz + vert, expectedHoriz
+                            | expectedVert);
+                    checkAlignment(layout, vert + horiz, expectedHoriz
+                            | expectedVert);
+                } else {
+                    boolean ok = false;
+                    try {
+                        checkAlignment(layout, horiz + vert, expectedHoriz
+                                | expectedVert);
+                    } catch (IllegalArgumentException e) {
+                        // OK, "centert","rightb" etc are not valid
+                        ok = true;
+                    }
+                    if (!ok) {
+                        error("IllegalArgumentException was not thrown for "
+                                + horiz + vert);
+                    }
+                    ok = false;
+                    try {
+                        checkAlignment(layout, vert + horiz, expectedHoriz
+                                | expectedVert);
+                    } catch (IllegalArgumentException e) {
+                        // OK, "centert","rightb" etc are not valid
+                        ok = true;
+                    }
+                    if (!ok) {
+                        error("IllegalArgumentException was not thrown for "
+                                + horiz + vert);
+                    }
+
+                }
+
+                // Test "l t","r t" etc
+                checkAlignment(layout, horiz + " " + vert, expectedHoriz
+                        | expectedVert);
+                checkAlignment(layout, vert + " " + horiz, expectedHoriz
+                        | expectedVert);
+            }
+
+            for (String vert : longVerticalAlignments) {
+                int expectedVert = expected.get(vert);
+
+                // Test "right t","right b" etc
+                checkAlignment(layout, horiz + " " + vert, expectedHoriz
+                        | expectedVert);
+                checkAlignment(layout, vert + " " + horiz, expectedHoriz
+                        | expectedVert);
+
+                // Three alignments should throw an exception
+                boolean ok = false;
+                try {
+                    checkAlignment(layout, horiz + " " + vert + " " + horiz,
+                            expectedHoriz | expectedVert);
+                } catch (IllegalArgumentException e) {
+                    // OK, "centert","rightb" etc are not valid
+                    ok = true;
+                }
+                if (!ok) {
+                    error("IllegalArgumentException was not thrown for "
+                            + horiz + " " + vert + " " + horiz);
+                }
+            }
+        }
+
+        checkAlignment(layout, "left right", AlignmentHandler.ALIGNMENT_TOP
+                | AlignmentHandler.ALIGNMENT_RIGHT);
+    }
+
+    private void checkAlignment(AlignmentHandler layout,
+            String alignmentString, int expected) {
+        layout.setComponentAlignment(label, AlignmentInfo.Bits.ALIGNMENT_TOP,
+                AlignmentInfo.Bits.ALIGNMENT_LEFT);
+        if (layout instanceof AbstractOrderedLayout) {
+            ((AbstractOrderedLayout) layout).setComponentAlignment(label,
+                    alignmentString);
+        } else {
+            ((GridLayout) layout).setComponentAlignment(label, alignmentString);
+        }
+
+        int actual = layout.getComponentAlignment(label).getBitMask();
+        if (actual != expected) {
+            String error = "Error " + alignmentString
+                    + " did not produce expected results";
+            error(error);
+        } else {
+            String str = layout.getClass().getSimpleName() + "/"
+                    + alignmentString + ": OK";
+            System.out.println(str);
+        }
+
+    }
+
+    private void error(String error) {
+        label.setValue(label.getValue() + error + "<br/>");
+        System.out.println(error);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2282.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2282.java
new file mode 100644
index 0000000000..c63faf2cef
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2282.java
@@ -0,0 +1,55 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket2282 extends Application {
+
+    private FormLayout layout1;
+    private FormLayout layout2;
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        setTheme("tests-tickets");
+        w.getContent().setSizeUndefined();
+
+        layout1 = new FormLayout();
+        layout1.setSizeUndefined();
+        layout1.setStyleName("borders");
+        Label label = new Label(
+                "This should not be wider than this label + reserved error space");
+        label.setCaption("A caption");
+        layout1.addComponent(label);
+        w.addComponent(layout1);
+
+        layout2 = new FormLayout();
+        layout2.setWidth("500px");
+        layout2.setStyleName("borders");
+        label = new Label("This should be 500px wide");
+        label.setCaption("A caption");
+        layout2.addComponent(label);
+        w.addComponent(layout2);
+
+        Button b = new Button("Swap", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                if (layout1.getWidth() < 0.0) {
+                    layout1.setWidth("500px");
+                    layout2.setWidth(null);
+                } else {
+                    layout1.setWidth(null);
+                    layout2.setWidth("500px");
+                }
+            }
+
+        });
+        w.addComponent(b);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2283.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2283.java
new file mode 100644
index 0000000000..89b90eaa01
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2283.java
@@ -0,0 +1,29 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket2283 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+
+        GridLayout gl = new GridLayout(2, 2);
+        gl.setSizeUndefined();
+
+        gl.addComponent(new Label(
+                "Label 1 abc abc abcasdfas dfasd fasdf asdf sadf asdf"));
+        gl.addComponent(new Label("Label 2 abc abc abc "));
+        Label l = new Label("Colspan2, align right");
+        gl.addComponent(l, 0, 1, 1, 1);
+        gl.setComponentAlignment(l, Alignment.TOP_RIGHT);
+        w.setContent(gl);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2287.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2287.java
new file mode 100644
index 0000000000..5d4ac308ef
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2287.java
@@ -0,0 +1,32 @@
+package com.vaadin.tests.tickets;
+
+import java.net.URL;
+
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket2287 extends Ticket2292 {
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+        URL url = getURL();
+        main.addComponent(new Label(
+                "Icon is built by servlet with a slow method, so it will show the bug (components not firing requestLayout)."));
+
+        Label l = new Label();
+        l.setContentMode(Label.CONTENT_XHTML);
+        l.setValue("This is a label with as slow image. <img src=\"" + url
+                + "/icon.png\" />");
+        main.addComponent(l);
+
+        l = new Label();
+        l.setContentMode(Label.CONTENT_XHTML);
+        l.setValue("This is a label with as slow image. <img src=\"" + url
+                + "/icon.png\" />");
+        main.addComponent(l);
+
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2289.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2289.java
new file mode 100644
index 0000000000..19574b50fb
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2289.java
@@ -0,0 +1,99 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Accordion;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2289 extends Application {
+
+    TabSheet ts = null;
+    Accordion acc = null;
+
+    @Override
+    public void init() {
+
+        Window w = new Window();
+        setMainWindow(w);
+        VerticalLayout ol = new VerticalLayout();
+        w.setContent(ol);
+        Button b = new Button("close current tab");
+        b.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                closeCurrentTab();
+
+            }
+        });
+        ol.addComponent(b);
+
+        b = new Button("close first tab");
+        b.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                closeFirstTab();
+
+            }
+        });
+
+        ol.addComponent(b);
+        ts = new TabSheet();
+        ts.setSizeUndefined();
+        ts.setWidth("300px");
+        ts.addTab(new MyTab("tab one"), "Caption1", null);
+        ts.addTab(new MyTab("tab two"), "Caption2", null);
+        ts.addTab(new MyTab("tab three"), "Caption3", null);
+        ts.addTab(new MyTab("tab four"), "Caption4", null);
+        ts.addTab(new MyTab("tab five"), "Caption5", null);
+
+        acc = new Accordion();
+        acc.setSizeUndefined();
+        acc.addTab(new MyTab("tab one"), "Caption1", null);
+        acc.addTab(new MyTab("tab two"), "Caption2", null);
+        acc.addTab(new MyTab("tab three"), "Caption3", null);
+        acc.addTab(new MyTab("tab four"), "Caption4", null);
+
+        ol.addComponent(acc);
+        ts = null;
+        // ol.addComponent(ts);
+
+    }
+
+    private void closeCurrentTab() {
+        if (ts != null) {
+            MyTab m = (MyTab) ts.getSelectedTab();
+            if (m != null) {
+                ts.removeComponent(m);
+            }
+        }
+        if (acc != null) {
+            MyTab m = (MyTab) acc.getSelectedTab();
+            if (m != null) {
+                acc.removeComponent(m);
+            }
+        }
+    }
+
+    private void closeFirstTab() {
+        if (ts != null) {
+            ts.removeComponent(ts.getComponentIterator().next());
+        }
+        if (acc != null) {
+            acc.removeComponent(acc.getComponentIterator().next());
+        }
+    }
+
+}
+
+class MyTab extends CustomComponent {
+    public MyTab(String text) {
+        setSizeUndefined();
+        HorizontalLayout ol = new HorizontalLayout();
+        setCompositionRoot(ol);
+        ol.addComponent(new Label(text));
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2292.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2292.java
new file mode 100644
index 0000000000..2fd7c3511a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2292.java
@@ -0,0 +1,87 @@
+package com.vaadin.tests.tickets;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.URL;
+
+import javax.imageio.ImageIO;
+
+import com.vaadin.terminal.DownloadStream;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Window;
+
+public class Ticket2292 extends com.vaadin.Application {
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        ExternalResource icon = new ExternalResource("./icon.png");
+        main.addComponent(new Label(
+                "Note, run with trailing slash in url to have a working icon. Icon is built by servlet with a slow method, so it will show the bug (components not firing requestLayout)"));
+        Button b = new Button();
+        main.addComponent(b);
+        b.setIcon(icon);
+
+        CheckBox checkBox = new CheckBox();
+        main.addComponent(checkBox);
+        checkBox.setIcon(icon);
+
+        Link l = new Link("l", icon);
+        main.addComponent(l);
+
+    }
+
+    @Override
+    public DownloadStream handleURI(URL context, String relativeUri) {
+        if (!relativeUri.contains("icon.png")) {
+            return null;
+        }
+
+        // be slow to show bug
+        try {
+            Thread.sleep(2000);
+        } catch (InterruptedException e1) {
+            // TODO Auto-generated catch block
+            e1.printStackTrace();
+        }
+
+        BufferedImage image = new BufferedImage(200, 200,
+                BufferedImage.TYPE_INT_RGB);
+        Graphics drawable = image.getGraphics();
+        drawable.setColor(Color.lightGray);
+        drawable.fillRect(0, 0, 200, 200);
+        drawable.setColor(Color.yellow);
+        drawable.fillOval(25, 25, 150, 150);
+        drawable.setColor(Color.blue);
+        drawable.drawRect(0, 0, 199, 199);
+
+        // Use the parameter to create dynamic content.
+        drawable.setColor(Color.black);
+        drawable.drawString("Tex", 75, 100);
+
+        try {
+            // Write the image to a buffer.
+            ByteArrayOutputStream imagebuffer = new ByteArrayOutputStream();
+            ImageIO.write(image, "png", imagebuffer);
+
+            // Return a stream from the buffer.
+            ByteArrayInputStream istream = new ByteArrayInputStream(
+                    imagebuffer.toByteArray());
+            return new DownloadStream(istream, null, null);
+        } catch (IOException e) {
+            return null;
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2294.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2294.java
new file mode 100644
index 0000000000..37c29ca5e0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2294.java
@@ -0,0 +1,56 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket2294 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        createUI((AbstractOrderedLayout) w.getContent());
+    }
+
+    private void createUI(AbstractOrderedLayout layout) {
+        Label label1 = new Label();
+        Label label2 = null;
+        Label label3 = new Label();
+        String result1 = "";
+        String result2 = "";
+        String result3 = "";
+
+        layout.addComponent(label1);
+        try {
+            layout.setComponentAlignment(label1, Alignment.BOTTOM_LEFT);
+            result1 = "OK";
+        } catch (Exception e) {
+            result1 = "FAILED: " + e.getMessage();
+        }
+
+        try {
+            layout.setComponentAlignment(label2, Alignment.BOTTOM_LEFT);
+            result2 = "FAILED, no exception";
+        } catch (IllegalArgumentException e) {
+            result2 = "OK";
+        } catch (Exception e) {
+            result2 = "FAILED: " + e.getMessage();
+        }
+
+        try {
+            layout.setComponentAlignment(label3, Alignment.BOTTOM_LEFT);
+            result3 = "FAILED, no exception";
+        } catch (IllegalArgumentException e) {
+            result3 = "OK";
+        } catch (Exception e) {
+            result3 = "FAILED: " + e.getMessage();
+        }
+
+        label1.setValue("Result 1: " + result1 + ", result 2: " + result2
+                + ", result 3: " + result3);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2296.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2296.java
new file mode 100644
index 0000000000..1503811341
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2296.java
@@ -0,0 +1,33 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2296 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        setTheme("tests-tickets");
+        CustomLayout cl = new CustomLayout("Ticket2296");
+        cl.setSizeFull();
+        Button b = new Button("100%x100% button");
+        b.setSizeFull();
+        cl.addComponent(b, "button1");
+
+        b = new Button("100%x100% button");
+        b.setSizeFull();
+        cl.addComponent(b, "button2");
+
+        b = new Button("50%x50% button");
+        b.setWidth("50%");
+        b.setHeight("50%");
+        cl.addComponent(b, "button3");
+
+        w.setContent(cl);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2297.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2297.java
new file mode 100644
index 0000000000..da257b4ae8
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2297.java
@@ -0,0 +1,41 @@
+package com.vaadin.tests.tickets;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.net.URL;
+
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket2297 extends Ticket2292 {
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+        URL url = getURL();
+        main.addComponent(new Label(
+                "Icon is built by servlet with a slow method, so it will show the bug (components not firing requestLayout)."));
+
+        try {
+            CustomLayout cl = new CustomLayout(
+                    new ByteArrayInputStream(
+                            ("This is an empty CustomLayout with as slow image. <img src=\""
+                                    + url.toString() + "/icon.png\" />")
+                                    .getBytes()));
+            main.addComponent(cl);
+
+            cl = new CustomLayout(
+                    new ByteArrayInputStream(
+                            ("This is an empty CustomLayout with as slow image. <img src=\""
+                                    + url.toString() + "/icon.png\" />")
+                                    .getBytes()));
+            main.addComponent(cl);
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2303.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2303.java
new file mode 100644
index 0000000000..21b33d5bb6
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2303.java
@@ -0,0 +1,43 @@
+package com.vaadin.tests.tickets;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+import com.vaadin.Application;
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2303 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window("main window");
+
+        String customlayout = "<div location=\"test\"></div>";
+        CustomLayout cl = null;
+        try {
+            cl = new CustomLayout(new ByteArrayInputStream(
+                    customlayout.getBytes()));
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        cl.setWidth("100%");
+        w.setContent(cl);
+
+        // VerticalLayout ol = new VerticalLayout();
+        // w.setContent(ol);
+        VerticalLayout hugeLayout = new VerticalLayout();
+        hugeLayout.setMargin(true);
+        hugeLayout.setSpacing(true);
+        for (int i = 0; i < 30; i++) {
+            hugeLayout.addComponent(new Label("huge " + i));
+        }
+        cl.addComponent(hugeLayout, "test");
+        // ol.addComponent(hugeLayout);
+        setMainWindow(w);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2304.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2304.java
new file mode 100644
index 0000000000..1b356c73fb
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2304.java
@@ -0,0 +1,30 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.themes.Reindeer;
+
+public class Ticket2304 extends Application {
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        Panel p = new Panel();
+        p.setStyleName(Reindeer.PANEL_LIGHT);
+        main.addComponent(p);
+        p.setHeight("100px");
+
+        Label l = new Label(
+                "a\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\n");
+        l.setContentMode(Label.CONTENT_PREFORMATTED);
+        p.addComponent(l);
+        main.addComponent(new Label(
+                "This text should be right below the panel, w/o spacing"));
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2310.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2310.java
new file mode 100644
index 0000000000..6363fddcaf
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2310.java
@@ -0,0 +1,56 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.themes.Reindeer;
+
+public class Ticket2310 extends Application {
+
+    @Override
+    public void init() {
+        final Window main = new Window(getClass().getName().substring(
+                getClass().getName().lastIndexOf(".") + 1));
+        setMainWindow(main);
+
+        main.addComponent(new Label("Instructions: change label when panel is "
+                + "invisible -> invalid change (with disabled "
+                + "flag) is sent to client. Label is grey when panel is shown."));
+
+        final Panel p = new Panel();
+        p.setStyleName(Reindeer.PANEL_LIGHT);
+        main.addComponent(p);
+        p.setHeight("100px");
+
+        final Label l = new Label("foobar");
+
+        p.addComponent(l);
+
+        Button b = new Button("change label");
+
+        b.addListener(new Button.ClickListener() {
+            int i = 0;
+
+            public void buttonClick(ClickEvent event) {
+
+                l.setValue("foobar " + i++);
+
+            }
+        });
+
+        Button b2 = new Button("toggle panel visibility");
+        b2.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                p.setVisible(!p.isVisible());
+            }
+        });
+
+        main.addComponent(b);
+        main.addComponent(b2);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2319.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2319.java
new file mode 100644
index 0000000000..b8a2ba8db8
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2319.java
@@ -0,0 +1,66 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.VerticalSplitPanel;
+import com.vaadin.ui.Window;
+
+public class Ticket2319 extends Application {
+
+    @Override
+    public void init() {
+        Window mainw = new Window();
+        setMainWindow(mainw);
+
+        mainw.addComponent(new Label(
+                "This test has somewhat invalid layouts in it to detect analyzy layout function in debug dialog"));
+
+        HorizontalLayout hl = new HorizontalLayout();
+        Panel panel = new Panel("p1");
+        Panel panel2 = new Panel("p2");
+        hl.addComponent(panel);
+        hl.addComponent(panel2);
+
+        mainw.addComponent(hl);
+
+        hl = new HorizontalLayout();
+        panel = new Panel("p1");
+        panel.setSizeUndefined();
+        panel.setHeight("100%");
+        panel2 = new Panel("p2");
+        panel2.setSizeUndefined();
+        panel2.setHeight("100%");
+
+        hl.addComponent(panel);
+        hl.addComponent(panel2);
+        mainw.addComponent(hl);
+
+        HorizontalSplitPanel sp = new HorizontalSplitPanel();
+
+        VerticalLayout first = new VerticalLayout();
+        first.addComponent(new Label("first"));
+        VerticalLayout second = new VerticalLayout();
+        second.addComponent(new Label("second"));
+
+        sp.setFirstComponent(first);
+        sp.setSecondComponent(second);
+
+        VerticalSplitPanel sp2 = new VerticalSplitPanel();
+        Label label = new Label("first");
+        label.setSizeFull();
+        sp2.setFirstComponent(label);
+        sp2.setSecondComponent(sp);
+
+        sp2.setHeight("200px");
+
+        mainw.addComponent(sp2);
+
+        mainw.addComponent(new Button("click me to save split panel state"));
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2323.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2323.java
new file mode 100644
index 0000000000..503878ecad
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2323.java
@@ -0,0 +1,22 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.RichTextArea;
+import com.vaadin.ui.Window;
+
+public class Ticket2323 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+
+        Window subWindow = new Window("");
+        subWindow.setSizeUndefined();
+        subWindow.getContent().setSizeUndefined();
+        subWindow.center();
+        subWindow.addComponent(new RichTextArea());
+        w.addWindow(subWindow);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2325.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2325.java
new file mode 100644
index 0000000000..1245254fa0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2325.java
@@ -0,0 +1,29 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2325 extends Application {
+
+    @Override
+    public void init() {
+        Window main = new Window("Testing....");
+        setMainWindow(main);
+
+        final VerticalLayout lo = new VerticalLayout();
+        lo.setSizeUndefined();
+        lo.setWidth("100%");
+        TextArea tf = new TextArea();
+        tf.setValue("The textfield should fill the window."
+                + "\n - Try to resize window\n - Try to push REdo button");
+        tf.setRows(10);
+        tf.setWidth("100%");
+        lo.addComponent(tf);
+        Window subWin = new Window(
+                "This window should initially be as wide as the caption", lo);
+        main.addWindow(subWin);
+        // subWin.setWidth("500px");
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2329.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2329.java
new file mode 100644
index 0000000000..57dbeb4033
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2329.java
@@ -0,0 +1,42 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.ColumnGenerator;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2329 extends Application {
+    private Table table;
+    private VerticalLayout mainLo;
+
+    @Override
+    public void init() {
+        Window mainw = new Window();
+        setMainWindow(mainw);
+        mainLo = (VerticalLayout) mainw.getContent();
+        table = new Table();
+        for (int i = 0; i < 10000; i++) {
+            table.addItem(i);
+        }
+        TestColumnGenerator cgen = new TestColumnGenerator();
+        table.addGeneratedColumn("col1", cgen);
+        table.addGeneratedColumn("col2", cgen);
+        table.addGeneratedColumn("col3", cgen);
+        table.addGeneratedColumn("col4", cgen);
+        table.addGeneratedColumn("col5", cgen);
+        table.addGeneratedColumn("col6", cgen);
+        table.addGeneratedColumn("col7", cgen);
+        table.setHeight("500px");
+        mainLo.addComponent(table);
+    }
+
+    class TestColumnGenerator implements ColumnGenerator {
+        public Component generateCell(Table source, Object rowId,
+                Object columnId) {
+            return new Button("1");
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2337.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2337.java
new file mode 100644
index 0000000000..9277a01f96
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2337.java
@@ -0,0 +1,44 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket2337 extends Application {
+
+    GridLayout gl = new GridLayout(3, 1);
+
+    @Override
+    public void init() {
+        Window w = new Window();
+        setMainWindow(w);
+        Button b = new Button("add", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                gl.addComponent(new Label("asd"), 0, gl.getCursorY(), 2,
+                        gl.getCursorY());
+
+            }
+
+        });
+        w.addComponent(b);
+
+        b = new Button("empty", new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                gl.removeAllComponents();
+                ;
+
+            }
+
+        });
+        w.addComponent(b);
+
+        w.addComponent(gl);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2339.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2339.java
new file mode 100644
index 0000000000..6476807ada
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2339.java
@@ -0,0 +1,38 @@
+package com.vaadin.tests.tickets;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2339 extends Application {
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window(getClass().getSimpleName());
+        setMainWindow(mainWin);
+
+        try {
+            CustomLayout cl = new CustomLayout(
+                    new ByteArrayInputStream(
+                            "<div style=\"width:400px;overflow:hidden;background-color:red;\"><div style=\"border:1em solid blue; height:4em; padding:1em 1.5em;\" location=\"b\"></div></div>"
+                                    .getBytes()));
+            Button button = new Button("b");
+            button.setSizeFull();
+
+            cl.addComponent(button, "b");
+
+            mainWin.addComponent(cl);
+
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2341.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2341.java
new file mode 100644
index 0000000000..d7fbccfa4e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2341.java
@@ -0,0 +1,47 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.data.Item;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+public class Ticket2341 extends com.vaadin.Application {
+    @Override
+    public void init() {
+        Window main = new Window();
+        setMainWindow(main);
+        constructTables((Layout) main.getContent());
+    }
+
+    private void constructTables(Layout layout) {
+
+        Table t = createTable();
+        layout.addComponent(t);
+        t = createTable();
+        Label l = new Label("A high label to enable scrollbars");
+        l.setHeight("2000px");
+        layout.addComponent(l);
+
+    }
+
+    private Table createTable() {
+        Table t = new Table();
+        t.addContainerProperty("test1", String.class, "");
+        t.addContainerProperty("test2", String.class, "");
+        t.addContainerProperty("test3", String.class, "");
+        t.addContainerProperty("test4", String.class, "");
+        t.setWidth("100%");
+        t.setHeight("300px");
+        for (int i = 0; i < 100; i++) {
+            Item item = t.addItem(i);
+            item.getItemProperty("test1").setValue("testing1 " + i);
+            item.getItemProperty("test2").setValue("testing2 " + i);
+            item.getItemProperty("test3").setValue("testing3 " + i);
+            item.getItemProperty("test4").setValue("testing4 " + i);
+        }
+
+        return t;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2344.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2344.java
new file mode 100644
index 0000000000..26ef216940
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2344.java
@@ -0,0 +1,54 @@
+package com.vaadin.tests.tickets;
+
+import java.util.Random;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.themes.BaseTheme;
+
+public class Ticket2344 extends Application {
+
+    @Override
+    public void init() {
+        Window main = new Window("Quick test");
+
+        setMainWindow(main);
+
+        // setTheme("quicktest");
+
+        VerticalLayout hl = new VerticalLayout();
+        hl.setWidth("400px");
+        main.setContent(hl);
+
+        Table t = new Table();
+        t.setWidth("100%");
+
+        t.addContainerProperty("Prop 1", VerticalLayout.class, "");
+        t.addContainerProperty("Prop 2", String.class, "");
+        t.addContainerProperty("Prop 3", String.class, "");
+        t.addContainerProperty("Prop 4", String.class, "");
+        t.addContainerProperty("Prop 5", Button.class, "");
+
+        t.setPageLength(3);
+
+        for (int i = 0; i < 10; i++) {
+
+            VerticalLayout vl = new VerticalLayout();
+            // vl.setWidth(null);
+            Button b = new Button("String 1 2 3");
+            b.setStyleName(BaseTheme.BUTTON_LINK);
+            vl.addComponent(b);
+            t.addItem(new Object[] { vl, "String 2", "String 3", "String 4",
+
+            new Button("String 5") }, new Integer(new Random().nextInt()));
+
+        }
+
+        hl.addComponent(t);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2347.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2347.java
new file mode 100644
index 0000000000..76e59146db
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2347.java
@@ -0,0 +1,49 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2347 extends Application {
+
+    private Button b1;
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        setTheme("tests-tickets");
+        createUI((VerticalLayout) w.getContent());
+    }
+
+    private void createUI(VerticalLayout layout) {
+        CustomLayout cl = new CustomLayout("Ticket2347");
+        b1 = new Button("200px button");
+        b1.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                if (b1.getWidth() == 200.0) {
+                    b1.setWidth("300px");
+                } else {
+                    b1.setWidth("200px");
+
+                }
+                b1.setCaption(b1.getWidth() + "px button");
+
+            }
+
+        });
+        b1.setWidth("200px");
+        Button b2 = new Button("100% button");
+        b2.setWidth("100%");
+
+        cl.addComponent(b1, "button1");
+        cl.addComponent(b2, "button2");
+
+        layout.addComponent(cl);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2364.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2364.java
new file mode 100644
index 0000000000..7f7290dd80
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2364.java
@@ -0,0 +1,37 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2364 extends Application {
+
+    @Override
+    public void init() {
+
+        Window main = new Window("The Main Window!!!");
+        setMainWindow(main);
+        Form form = new Form();
+        VerticalLayout formLayout = new VerticalLayout();
+        form.setLayout(formLayout);
+        Select formSelect = new Select("hello");
+        Select select = new Select("hello");
+        form.setEnabled(false);
+        select.setEnabled(false);
+        formLayout.addComponent(formSelect);
+
+        VerticalLayout l2 = new VerticalLayout();
+        l2.addComponent(new Select("hello"));
+        l2.setEnabled(false);
+
+        form.setCaption("Form");
+        main.addComponent(form);
+        l2.setCaption("VerticalLayout");
+        main.addComponent(l2);
+        main.addComponent(select);
+        main.addComponent(new Select("Enabled=true select"));
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2365.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2365.java
new file mode 100644
index 0000000000..0c8a095ec9
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2365.java
@@ -0,0 +1,58 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2365 extends Application {
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window(getClass().getSimpleName());
+        setMainWindow(mainWin);
+
+        VerticalLayout lo = new VerticalLayout();
+        lo.setSizeFull();
+        mainWin.setContent(lo);
+
+        final Panel p = createMultilevelPanel(5, (Panel) null);
+
+        Button b = new Button("Toggle parent level size");
+        lo.addComponent(b);
+        b.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                if (p.getWidth() > 0) {
+                    p.setSizeUndefined();
+                } else {
+                    p.setSizeFull();
+                }
+            }
+        });
+
+        lo.addComponent(p);
+
+        lo.setExpandRatio(p, 1);
+
+    }
+
+    private Panel createMultilevelPanel(int i, Panel panel) {
+        if (panel == null) {
+            panel = new Panel("Panel level " + i);
+            panel.setSizeFull();
+            panel.getContent().setSizeFull();
+        }
+        Panel p = new Panel("Panel level " + i--);
+        p.getContent().setSizeFull();
+        p.setSizeFull();
+        panel.addComponent(p);
+        if (i > 0) {
+            createMultilevelPanel(i, p);
+        }
+        return panel;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2398.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2398.java
new file mode 100644
index 0000000000..dee0417eff
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2398.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+public class Ticket2398 extends Application {
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window();
+        setMainWindow(mainWin);
+
+        Table t = new Table();
+
+        IndexedContainer c = new IndexedContainer();
+
+        c.addItem("foo");
+
+        c.addContainerProperty("testcol1", Integer.class, new Integer(7));
+        c.addContainerProperty("testcol2", String.class, "str");
+        c.addContainerProperty("testcol3", String.class, null);
+
+        c.addItem("bar");
+
+        t.setContainerDataSource(c);
+
+        t.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
+
+        mainWin.addComponent(new Label(
+                "Both rows in table should have same data (default values)"));
+
+        mainWin.addComponent(t);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2404.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2404.java
new file mode 100644
index 0000000000..478d8b7786
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2404.java
@@ -0,0 +1,28 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2404 extends Application {
+
+    @Override
+    public void init() {
+
+        GridLayout gl = new GridLayout(2, 2);
+        gl.setSizeFull();
+
+        Button bb = new Button("1st row on 2x2 GridLayout");
+        bb.setSizeFull();
+        gl.addComponent(bb, 0, 0, 1, 0);
+        for (int i = 0; i < 2; i++) {
+            Button b = new Button("" + i);
+            gl.addComponent(b);
+            b.setSizeFull();
+        }
+
+        setMainWindow(new Window("GridLayout test", gl));
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2405.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2405.java
new file mode 100644
index 0000000000..9ab0d851ad
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2405.java
@@ -0,0 +1,80 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2405 extends Application {
+
+    private Label label;
+    private HorizontalSplitPanel split;
+
+    @Override
+    public void init() {
+
+        final Window root = new Window("VaadinTunes");
+        root.setWidth("90%");
+        root.setHeight("90%");
+        root.center();
+
+        // We'll attach the window to the browser view already here, so we won't
+        // forget it later.
+        // browser.addWindow(root);
+        setMainWindow(root);
+
+        root.getContent().setSizeFull();
+        ((Layout) root.getContent()).setMargin(false);
+
+        // Top area, containing playback and volume controls, play status, view
+        // modes and search
+        HorizontalLayout top = new HorizontalLayout();
+        // GridLayout top = new GridLayout(1, 1);
+        top.setWidth("100%");
+        top.setMargin(false);
+        top.setSpacing(false);
+
+        // Let's attach that one straight away too
+        root.addComponent(top);
+
+        label = new Label(
+                "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent porttitor porta lacus. Nulla tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin mollis turpis in mauris faucibus posuere. Nullam rutrum, nisi a fermentum tempus, lacus metus rutrum massa, a condimentum mauris justo a tortor. Mauris aliquet, ante quis ultricies posuere, sapien libero laoreet sem, a accumsan diam metus sed elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur vehicula metus nec turpis dignissim cursus. Suspendisse potenti. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam feugiat orci eget risus. Vestibulum at sem. ");
+        label.setWidth("100%");
+        top.addComponent(label);
+        split = new HorizontalSplitPanel();
+        split.setHeight("100%");
+        Embedded image = new Embedded("An image", new ExternalResource(
+                "http://dev.itmill.com/chrome/site/toolkit-logo.png"));
+        image.setWidth("100%");
+        root.addComponent(split);
+        ((VerticalLayout) root.getContent()).setExpandRatio(split, 1.0f);
+        VerticalLayout vl = new VerticalLayout();
+        split.addComponent(vl);
+
+        vl.addComponent(new TextField("abc"));
+        vl.addComponent(image);
+        vl.setExpandRatio(image, 1.0f);
+        vl.setComponentAlignment(image, Alignment.BOTTOM_CENTER);
+        vl.setHeight("100%");
+        // We'll need one splitpanel to separate the sidebar and track listing
+        Button bottomButton = new Button("Filler");
+        bottomButton.setSizeFull();
+        // root.addComponent(bottomButton);
+
+        // The splitpanel is by default 100% x 100%, but we'll need to adjust
+        // our main window layout to accomodate the height
+        root.getContent().setHeight("100%");
+        // ((VerticalLayout) root.getLayout()).setExpandRatio(bottomButton,
+        // 1.0F);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2406.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2406.java
new file mode 100644
index 0000000000..b7c9f902d2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2406.java
@@ -0,0 +1,48 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2406 extends Application {
+
+    private Window w;
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        createUI((VerticalLayout) w.getContent());
+    }
+
+    private void createUI(VerticalLayout layout) {
+        w = new Window("A sub window");
+        w.setSizeUndefined();
+        getMainWindow().addWindow(w);
+
+        VerticalLayout l = new VerticalLayout();
+        l.setSizeFull();
+        w.setContent(l);
+
+        Button b = new Button("Button 1");
+        b.setSizeFull();
+        b.addListener(new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                w.setHeight("200px");
+            }
+
+        });
+        l.addComponent(b);
+
+        for (int i = 0; i < 5; i++) {
+            b = new Button("Button number " + (i + 2));
+            b.setSizeFull();
+            l.addComponent(b);
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2407.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2407.java
new file mode 100644
index 0000000000..e095bb294c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2407.java
@@ -0,0 +1,21 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.ui.Form;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2407 extends com.vaadin.Application {
+
+    @Override
+    public void init() {
+        final Window main = new Window("Ticket2407");
+        setMainWindow(main);
+
+        Form form = new Form(new VerticalLayout());
+        TextField text = new TextField("This caption shall be visible");
+        text.setRequired(true);
+        form.addField("test", text);
+        main.addComponent(form);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2411.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2411.java
new file mode 100644
index 0000000000..3159be360b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2411.java
@@ -0,0 +1,29 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket2411 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+
+        // VerticalLayout l = new VerticalLayout();
+        GridLayout l = new GridLayout();
+        w.setContent(l);
+
+        l.setHeight("504px");
+
+        for (int i = 1; i <= 5; i++) {
+            Button b = new Button("Button " + i
+                    + " should be 100px or 101px high");
+            b.setHeight("100%");
+            l.addComponent(b);
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2415.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2415.java
new file mode 100644
index 0000000000..5c1d0c2a51
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2415.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket2415 extends Application {
+
+    @Override
+    public void init() {
+        final Window main = new Window("");
+        setMainWindow(main);
+
+        final TextField tf = new TextField("Try to change me");
+        main.addComponent(tf);
+
+        tf.setImmediate(true);
+        tf.addListener(new Property.ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                main.showNotification("New value = " + tf);
+            }
+        });
+
+        final TextField tf2 = new TextField("Try to change me");
+        main.addComponent(tf2);
+
+        tf2.setImmediate(true);
+        tf2.addListener(new Property.ValueChangeListener() {
+
+            public void valueChange(ValueChangeEvent event) {
+                main.showNotification("New value = " + tf2);
+            }
+        });
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2420.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2420.java
new file mode 100644
index 0000000000..e40d73877c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2420.java
@@ -0,0 +1,54 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.ProgressIndicator;
+import com.vaadin.ui.Window;
+
+public class Ticket2420 extends Application {
+
+    @Override
+    public void init() {
+        final Window main = new Window("Hello window");
+        setMainWindow(main);
+
+        main.setTheme("tests-tickets");
+
+        ProgressIndicator pi = new ProgressIndicator();
+        pi.setCaption("Visible");
+        pi.setIndeterminate(false);
+        pi.setValue(new Float(0.5));
+        main.addComponent(pi);
+
+        pi = new ProgressIndicator();
+        pi.setCaption("Visible (indeterminate)");
+        pi.setIndeterminate(true);
+
+        main.addComponent(pi);
+
+        main.addComponent(pi);
+
+        pi = new ProgressIndicator();
+        pi.setCaption("Visible (indeterminate, with .redborder css)");
+        pi.addStyleName("redborder");
+        pi.setIndeterminate(true);
+
+        main.addComponent(pi);
+
+        pi = new ProgressIndicator();
+        pi.setCaption("Disabled ");
+        pi.setEnabled(false);
+        pi.setIndeterminate(true);
+
+        main.addComponent(pi);
+
+        pi = new ProgressIndicator();
+
+        pi.setCaption("Hidden (via css)");
+
+        pi.addStyleName("dispnone");
+
+        main.addComponent(pi);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2425.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2425.java
new file mode 100644
index 0000000000..75810137ad
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2425.java
@@ -0,0 +1,24 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Window;
+
+public class Ticket2425 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+
+        w.addComponent(new Label("No scrollbars should be visible anywhere"));
+        TabSheet ts = new TabSheet();
+        ts.addTab(new Panel(), "Panel 1", null);
+        ts.addTab(new Panel(), "Panel 2", null);
+
+        w.addComponent(ts);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2426.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2426.java
new file mode 100644
index 0000000000..90e2ce438d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2426.java
@@ -0,0 +1,28 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket2426 extends Application {
+
+    @Override
+    public void init() {
+        Window w = new Window();
+        setMainWindow(w);
+
+        final String content = "<select/>";
+
+        w.addComponent(new Label("CONTENT_DEFAULT: " + content,
+                Label.CONTENT_DEFAULT));
+        w.addComponent(new Label("CONTENT_PREFORMATTED: " + content,
+                Label.CONTENT_PREFORMATTED));
+        w.addComponent(new Label("CONTENT_RAW: " + content, Label.CONTENT_RAW));
+        w.addComponent(new Label("CONTENT_TEXT: " + content, Label.CONTENT_TEXT));
+        w.addComponent(new Label("CONTENT_XML: " + content, Label.CONTENT_XML));
+        w.addComponent(new Label("CONTENT_XHTML: " + content,
+                Label.CONTENT_XHTML));
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2431.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2431.java
new file mode 100644
index 0000000000..e1eb2531f2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2431.java
@@ -0,0 +1,52 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.event.Action;
+import com.vaadin.event.Action.Handler;
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.event.ShortcutAction.KeyCode;
+import com.vaadin.event.ShortcutAction.ModifierKey;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket2431 extends Application {
+
+    @Override
+    public void init() {
+
+        Window w = new Window();
+        setMainWindow(w);
+        Label help = new Label(
+                "Use CTRL X to fire action, CTRL C to remove it (fails before fix)");
+
+        w.addComponent(help);
+
+        w.addActionHandler(new Handler() {
+
+            final ShortcutAction a1 = new ShortcutAction("action", KeyCode.X,
+                    new int[] { ModifierKey.CTRL });
+            final ShortcutAction a2 = new ShortcutAction("action", KeyCode.C,
+                    new int[] { ModifierKey.CTRL });
+
+            Action[] actions = new Action[] { a1, a2 };
+
+            public Action[] getActions(Object target, Object sender) {
+                return actions;
+            }
+
+            public void handleAction(Action action, Object sender, Object target) {
+                if (action == a1) {
+                    getMainWindow().addComponent(new Label("CTRL X hit"));
+                } else {
+                    actions = new Action[] { a2 };
+                    // annoyance, we need to repaint the panel or detect the
+                    // action in presence in handler
+                    getMainWindow().removeActionHandler(this);
+                    getMainWindow().addActionHandler(this);
+                }
+            }
+        });
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2432.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2432.java
new file mode 100644
index 0000000000..326f27d58a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2432.java
@@ -0,0 +1,51 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Layout.AlignmentHandler;
+import com.vaadin.ui.Layout.SpacingHandler;
+import com.vaadin.ui.Window;
+
+public class Ticket2432 extends Application {
+
+    @Override
+    public void init() {
+
+        Window w = new Window();
+        setMainWindow(w);
+        w.getContent().setSizeFull();
+        ((SpacingHandler) w.getContent()).setSpacing(true);
+
+        Layout layout = new GridLayout(3, 3);
+        populateLayout(layout);
+        w.addComponent(layout);
+        layout = new HorizontalLayout();
+        populateLayout(layout);
+        w.addComponent(layout);
+
+    }
+
+    private static Alignment[] alignments = new Alignment[] {
+            Alignment.TOP_LEFT, Alignment.TOP_CENTER, Alignment.TOP_RIGHT,
+            Alignment.MIDDLE_LEFT, Alignment.MIDDLE_CENTER,
+            Alignment.MIDDLE_RIGHT, Alignment.BOTTOM_LEFT,
+            Alignment.BOTTOM_CENTER, Alignment.BOTTOM_RIGHT };
+
+    private void populateLayout(Layout layout) {
+        layout.setSizeFull();
+        for (int i = 0; i < 9; i++) {
+            Label l = new Label("M");
+            Alignment a = alignments[i];
+            l.setCaption(a.getHorizontalAlignment() + " "
+                    + a.getVerticalAlignment() + " " + a.getBitMask());
+            layout.addComponent(l);
+            ((AlignmentHandler) layout).setComponentAlignment(l, a);
+        }
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2434.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2434.java
new file mode 100644
index 0000000000..5d4a884895
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2434.java
@@ -0,0 +1,30 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.tests.TestForTablesInitialColumnWidthLogicRendering;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
+
+public class Ticket2434 extends Application {
+
+    @Override
+    public void init() {
+
+        Window w = new Window();
+
+        setMainWindow(w);
+
+        Table t = TestForTablesInitialColumnWidthLogicRendering.getTestTable(3,
+                50);
+
+        t.setPageLength(0);
+
+        t.addStyleName("bordered");
+
+        w.addComponent(t);
+
+        setTheme("tests-tickets");
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2436.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2436.java
new file mode 100644
index 0000000000..0d8c5ad2dd
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2436.java
@@ -0,0 +1,36 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.PopupView;
+import com.vaadin.ui.Window;
+
+public class Ticket2436 extends Application {
+
+    @Override
+    public void init() {
+        final Window main = new Window();
+        setMainWindow(main);
+
+        final Button remover = new Button("Remove PopupView");
+        final PopupView pv = new PopupView(new PopupView.Content() {
+            public String getMinimizedValueAsHTML() {
+                return "PopupView";
+            }
+
+            public Component getPopupComponent() {
+                return remover;
+            }
+        });
+
+        remover.addListener(new Button.ClickListener() {
+            public void buttonClick(Button.ClickEvent event) {
+                main.removeComponent(pv);
+            }
+        });
+
+        main.addComponent(pv);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2440.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2440.java
new file mode 100644
index 0000000000..cd1e8e682e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2440.java
@@ -0,0 +1,77 @@
+package com.vaadin.tests.tickets;
+
+import java.net.URL;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.DownloadStream;
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.terminal.URIHandler;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Window;
+
+public class Ticket2440 extends Application {
+
+    @Override
+    public void init() {
+        final Window main = new MainWindow();
+        setMainWindow(main);
+        main.addComponent(new Label(
+                "Clicking the link should open a new window that should receive the URI 'msg/hello' and add that a a Label to it's ui. Currently the Label ends up in this (main) window (try reloading). Console intentionally spams during the window finding/uri handling - looks, uhm, interesting."));
+    }
+
+    @Override
+    public Window getWindow(String name) {
+        System.err.println("Looking for " + name);
+        if ("msg".equals(name)) {
+            System.err
+                    .println(" rest uri, returning new MainWindow with message from uri");
+            MainWindow restWindow = new MainWindow();
+            addWindow(restWindow);
+            return restWindow;
+        }
+        // If we already have the requested window, use it
+        Window w = super.getWindow(name);
+        if (w == null) {
+            // If no window found, create it
+            System.err.println(" new win");
+            w = new MainWindow();
+            w.setName(name);
+            addWindow(w);
+            return w;
+        } else {
+            System.err.println(" found win");
+            return w;
+        }
+
+    }
+
+    private class MainWindow extends Window {
+        public MainWindow() {
+            super("Main window");
+
+            addComponent(new Link("new mainwin", new ExternalResource(
+                    Ticket2440.this.getURL() + "msg/hello"), "_blank", -1, -1,
+                    Window.BORDER_DEFAULT));
+
+            addURIHandler(new URIHandler() {
+                public DownloadStream handleURI(URL context, String relativeUri) {
+                    System.err
+                            .println((getMainWindow() == getWindow() ? "mainwin: "
+                                    : "subwin: ")
+                                    + context + ", " + relativeUri);
+                    addComponent(new Label(relativeUri));
+                    return null;
+                }
+            });
+        }
+
+        @Override
+        public DownloadStream handleURI(URL context, String relativeUri) {
+            System.err.println("MainWindow.handleURI();");
+            return super.handleURI(context, relativeUri);
+        }
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2526.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2526.java
new file mode 100644
index 0000000000..5fc06c27bf
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2526.java
@@ -0,0 +1,22 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Window;
+
+public class Ticket2526 extends Application {
+
+    @Override
+    public void init() {
+        final Window main = new Window();
+        setMainWindow(main);
+        Button b = new Button("Add windows");
+        b.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                main.addWindow(new Window());
+            }
+        });
+        main.addComponent(b);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2742.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2742.java
new file mode 100644
index 0000000000..11eb01e051
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2742.java
@@ -0,0 +1,42 @@
+/**
+ * 
+ */
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.Window;
+
+/**
+ * @author Risto Yrjänä / IT Mill Ltd.
+ * 
+ */
+public class Ticket2742 extends Application {
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.vaadin.Application#init()
+     */
+    @Override
+    public void init() {
+        Window mainWindow = new Window();
+        setMainWindow(mainWindow);
+
+        String shortString = "Short";
+        String longString = "Very, very long";
+
+        HorizontalLayout hl = new HorizontalLayout();
+
+        for (int i = 0; i < 2; i++) {
+            NativeSelect ns = new NativeSelect(shortString);
+            ns.addItem(longString);
+            ns.setNullSelectionAllowed(false);
+            ns.select(longString);
+            hl.addComponent(ns);
+        }
+        mainWindow.addComponent(hl);
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2901.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2901.java
new file mode 100644
index 0000000000..9e28908c22
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2901.java
@@ -0,0 +1,33 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.VerticalSplitPanel;
+import com.vaadin.ui.Window;
+
+/**
+ * With IE7 extra scrollbars appear in content area all though content fits
+ * properly. Scrollbars will disappear if "shaking" content a bit, like
+ * selecting tests in area.
+ */
+public class Ticket2901 extends Application {
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window("Test app to break layout in IE6");
+        setMainWindow(mainWin);
+
+        VerticalSplitPanel sp = new VerticalSplitPanel();
+
+        VerticalLayout l = new VerticalLayout();
+        for (int i = 0; i < 100; i++) {
+            l.addComponent(new Label("Label" + i));
+        }
+        sp.setFirstComponent(l);
+
+        mainWin.setContent(sp);
+
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2998.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2998.java
new file mode 100644
index 0000000000..81ffcf5a01
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2998.java
@@ -0,0 +1,332 @@
+package com.vaadin.tests.tickets;
+
+import java.io.Serializable;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+
+import com.vaadin.Application;
+import com.vaadin.data.Container;
+import com.vaadin.data.Validator;
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.DefaultFieldFactory;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.ListSelect;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.themes.Reindeer;
+
+/**
+ * Table layout is very slow in Firefox 3.0.10 when the table contains
+ * components.
+ * 
+ * This is adapted from the HbnContainer example application WorkoutLog.
+ * 
+ * Other browsers are much faster.
+ */
+public class Ticket2998 extends Application {
+    private Table table;
+    private VerticalLayout mainLayout;
+
+    public class Workout implements Serializable {
+        private Long id;
+        private Date date = new Date();
+        private String title = " -- new workout -- ";
+        private float kilometers;
+
+        private String trainingType;
+
+        private Set<String> secondaryTypes;
+
+        public Workout() {
+        }
+
+        public Long getId() {
+            return id;
+        }
+
+        public Date getDate() {
+            return date;
+        }
+
+        public void setDate(Date date) {
+            this.date = date;
+        }
+
+        public String getTitle() {
+            return title;
+        }
+
+        public void setTitle(String title) {
+            this.title = title;
+        }
+
+        public float getKilometers() {
+            return kilometers;
+        }
+
+        public void setKilometers(float kilometers) {
+            this.kilometers = kilometers;
+        }
+
+        public String getTrainingType() {
+            return trainingType;
+        }
+
+        public void setTrainingType(String trainingType) {
+            this.trainingType = trainingType;
+        }
+
+        public void setSecondaryTypes(Set<String> secondaryTypes) {
+            this.secondaryTypes = secondaryTypes;
+        }
+
+        public Set<String> getSecondaryTypes() {
+            return secondaryTypes;
+        }
+
+    }
+
+    public class WorkoutEditor extends Window {
+
+        private DateField date = new DateField("Date");
+        private TextField kilomiters = new TextField("Kilometers");
+        private TextField title = new TextField("Title/note");
+
+        private Ticket2998 workoutLog;
+
+        public WorkoutEditor(Ticket2998 app) {
+            super("Edit workout");
+            workoutLog = app;
+            Layout main = new VerticalLayout();
+            setContent(main);
+            main.setSizeUndefined();
+            main.setStyleName(Reindeer.PANEL_LIGHT);
+
+            FormLayout form = new FormLayout();
+            form.setSizeUndefined();
+            date.setResolution(DateField.RESOLUTION_MIN);
+            form.addComponent(date);
+            form.addComponent(kilomiters);
+            form.addComponent(title);
+            main.addComponent(form);
+
+        }
+
+        public void loadRun(Workout run) {
+            if (run == null) {
+                close();
+            } else {
+                date.setValue(run.getDate());
+                kilomiters.setValue(run.getKilometers());
+                title.setValue(run.getTitle());
+                if (getParent() == null) {
+                    workoutLog.getMainWindow().addWindow(this);
+                }
+                kilomiters.focus();
+            }
+        }
+    }
+
+    public class MyFieldFactory extends DefaultFieldFactory {
+
+        public MyFieldFactory(Ticket2998 app) {
+        }
+
+        @Override
+        public Field createField(Container container, Object itemId,
+                Object propertyId, Component uiContext) {
+
+            /*
+             * trainingType is manyToOne relation, give it a combobox
+             */
+            if (propertyId.equals("trainingType")) {
+                return getTrainingTypeComboboxFor(itemId);
+            }
+
+            /*
+             * Secondarytypes is manyToMany relation, give it a multiselect list
+             */
+            if (propertyId.equals("secondaryTypes")) {
+                return getSecondaryTypesList(itemId);
+            }
+
+            final Field f = super.createField(container, itemId, propertyId,
+                    uiContext);
+            if (f != null) {
+                if (f instanceof TextField) {
+                    TextField tf = (TextField) f;
+                    tf.setWidth("100%");
+                }
+                if (propertyId.equals("kilometers")) {
+                    f.setWidth("4em");
+                    f.addValidator(new Validator() {
+                        public boolean isValid(Object value) {
+                            try {
+                                @SuppressWarnings("unused")
+                                float f = Float.parseFloat((String) value);
+                                return true;
+                            } catch (Exception e) {
+                                f.getWindow().showNotification(
+                                        "Bad number value");
+                                f.setValue(0);
+                                return false;
+                            }
+                        }
+
+                        public void validate(Object value)
+                                throws InvalidValueException {
+                            // TODO Auto-generated method stub
+
+                        }
+                    });
+                }
+                if (propertyId.equals("date")) {
+                    ((DateField) f).setResolution(DateField.RESOLUTION_MIN);
+                }
+            }
+            return f;
+
+        }
+
+        private Map<Object, ListSelect> workoutIdToList = new HashMap<Object, ListSelect>();
+
+        private Field getSecondaryTypesList(Object itemId) {
+            ListSelect list = workoutIdToList.get(itemId);
+            if (list == null) {
+                list = new ListSelect();
+                list.setMultiSelect(true);
+                list.addItem("Item1");
+                list.addItem("Item2");
+                list.addItem("Item3");
+                list.addItem("Item4");
+                list.addItem("Item5");
+                // list.setContainerDataSource(trainingTypes);
+                list.setRows(4);
+                workoutIdToList.put(itemId, list);
+            }
+            return list;
+        }
+
+        private Map<Object, ComboBox> workoutIdToCombobox = new HashMap<Object, ComboBox>();
+
+        private Field getTrainingTypeComboboxFor(Object itemId) {
+            ComboBox cb = workoutIdToCombobox.get(itemId);
+            if (cb == null) {
+                final ComboBox cb2 = new ComboBox();
+                cb2.addItem("value1");
+                cb2.addItem("value2");
+                cb2.addItem("value3");
+                cb2.addItem("value4");
+                cb2.setNewItemsAllowed(true);
+
+                workoutIdToCombobox.put(itemId, cb2);
+                cb = cb2;
+            }
+            return cb;
+        }
+    }
+
+    @Override
+    public void init() {
+        buildView();
+        setTheme("reindeer");
+    }
+
+    /**
+     * Builds a simple view for application with Table and a row of buttons
+     * below it.
+     */
+    private void buildView() {
+
+        final Window w = new Window("Workout Log");
+
+        // set theme and some layout stuff
+        setMainWindow(w);
+        w.getContent().setSizeFull();
+        ((Layout) w.getContent()).setMargin(false);
+
+        Panel p = new Panel("Workout Log");
+        p.setStyleName(Reindeer.PANEL_LIGHT);
+        w.addComponent(p);
+        mainLayout = new VerticalLayout();
+        p.setContent(mainLayout);
+
+        populateAndConfigureTable();
+
+        mainLayout.addComponent(table);
+
+        // make table consume all extra space
+        p.setSizeFull();
+        mainLayout.setSizeFull();
+        mainLayout.setExpandRatio(table, 1);
+        table.setSizeFull();
+    }
+
+    protected void populateAndConfigureTable() {
+        table = new Table();
+
+        table.setWidth("100%");
+        table.setSelectable(true);
+        table.setImmediate(true);
+        table.setColumnCollapsingAllowed(true);
+        table.setColumnWidth("date", 200);
+        table.setColumnWidth("kilometers", 100);
+        // table.addListener(this);
+        table.setTableFieldFactory(new MyFieldFactory(this));
+
+        loadWorkouts();
+
+        table.setEditable(true);
+    }
+
+    /**
+     * Loads container to Table
+     */
+    protected void loadWorkouts() {
+        final BeanItemContainer<Workout> cont;
+        // Use plain HbnContainer
+        cont = new BeanItemContainer<Workout>(Workout.class);
+        table.setContainerDataSource(cont);
+
+        // insert some sample data
+        Calendar c = Calendar.getInstance();
+        c.set(Calendar.MILLISECOND, 0);
+        c.set(Calendar.SECOND, 0);
+        c.set(Calendar.MINUTE, 0);
+
+        String[] titles = new String[] { "A short easy one", "intervals",
+                "very long", "just shaking legs after work",
+                "long one with Paul", "test run" };
+
+        c.add(Calendar.DATE, -1000);
+
+        Random rnd = new Random();
+
+        Workout r;
+
+        for (int i = 0; i < 1000; i++) {
+            r = new Workout();
+            c.set(Calendar.HOUR_OF_DAY,
+                    12 + (rnd.nextInt(11) - rnd.nextInt(11)));
+            r.setDate(c.getTime());
+            r.setTitle(titles[rnd.nextInt(titles.length)]);
+            r.setKilometers(Math.round(rnd.nextFloat() * 30));
+            r.setTrainingType("tt");
+            c.add(Calendar.DATE, 1);
+            cont.addBean(r);
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket3146.java b/tests/testbench/com/vaadin/tests/tickets/Ticket3146.java
new file mode 100644
index 0000000000..6afa25efda
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket3146.java
@@ -0,0 +1,96 @@
+package com.vaadin.tests.tickets;
+
+import java.util.Collection;
+import java.util.HashSet;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket3146 extends Application {
+
+    Table table;
+    TextField result;
+
+    @Override
+    public void init() {
+        Window mainWindow = new Window("Test");
+
+        table = new Table();
+        table.addContainerProperty("Items", String.class, null);
+        table.addItem(new String[] { "a" }, "a");
+        table.addItem(new String[] { "b" }, "b");
+        table.addItem(new String[] { "c" }, "c");
+        for (int i = 1; i < 100; ++i) {
+            table.addItem(new String[] { "Item " + i }, "Item " + i);
+        }
+        table.setMultiSelect(true);
+        table.setSelectable(true);
+        table.setImmediate(true);
+        table.setHeight("200px");
+        table.setWidth("200px");
+        mainWindow.addComponent(table);
+
+        Button clearButton = new Button("Clear selection",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        clearSelection();
+                    }
+                });
+        mainWindow.addComponent(clearButton);
+        Button clearButton2 = new Button("Clear selection 2",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        clearSelection2();
+                    }
+                });
+        mainWindow.addComponent(clearButton2);
+        Button clearButton3 = new Button("Clear selection 3",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        clearSelection3();
+                    }
+                });
+        mainWindow.addComponent(clearButton3);
+        Button printButton = new Button("Print selection",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        printSelection();
+                    }
+                });
+        mainWindow.addComponent(printButton);
+
+        result = new TextField();
+        result.setHeight("200px");
+        result.setWidth("200px");
+        mainWindow.addComponent(result);
+
+        setMainWindow(mainWindow);
+    }
+
+    void clearSelection() {
+        table.setValue(null);
+    }
+
+    void clearSelection2() {
+        table.setValue(new HashSet<Object>());
+    }
+
+    void clearSelection3() {
+        table.unselect("a");
+        table.unselect("b");
+        table.unselect("c");
+    }
+
+    void printSelection() {
+        String selection = "";
+        for (Object item : (Collection<?>) table.getValue()) {
+            selection = selection + item + ' ';
+        }
+        result.setValue(selection);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket34.java b/tests/testbench/com/vaadin/tests/tickets/Ticket34.java
new file mode 100644
index 0000000000..7d3baf78fa
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket34.java
@@ -0,0 +1,111 @@
+package com.vaadin.tests.tickets;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.UriFragmentUtility;
+import com.vaadin.ui.UriFragmentUtility.FragmentChangedEvent;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket34 extends Application {
+
+    private Map<String, Component> views = new HashMap<String, Component>();
+    private VerticalLayout mainLayout;
+    private Component currentView;
+    private UriFragmentUtility reader;
+
+    @Override
+    public void init() {
+
+        buildViews(new String[] { "main", "view2", "view3" });
+
+        reader = new UriFragmentUtility();
+        reader.addListener(new UriFragmentUtility.FragmentChangedListener() {
+
+            public void fragmentChanged(FragmentChangedEvent event) {
+                getMainWindow().showNotification(
+                        "Fragment now: "
+                                + event.getUriFragmentUtility().getFragment());
+                // try to change to view mapped by fragment string
+                setView(event.getUriFragmentUtility().getFragment());
+            }
+        });
+
+        mainLayout = new VerticalLayout();
+        mainLayout.setSizeFull();
+        final Window mainWin = new Window(
+                "Test app for URI fragment management/reading", mainLayout);
+        setMainWindow(mainWin);
+
+        // UriFragmentReader is 0px size by default, so it will not render
+        // anything on screen
+        mainLayout.addComponent(reader);
+
+        setView("main");
+
+    }
+
+    private void setView(String string) {
+        Component component = views.get(string);
+        if (component == null) {
+            getMainWindow().showNotification(
+                    "View called " + string + " not found!");
+        } else if (component != currentView) {
+            if (currentView != null) {
+                mainLayout.replaceComponent(currentView, component);
+            } else {
+                mainLayout.addComponent(component);
+            }
+            // give all extra space for view
+            mainLayout.setExpandRatio(component, 1);
+            currentView = component;
+        }
+    }
+
+    private void buildViews(String[] strings) {
+        for (String string : strings) {
+            Panel p = new Panel(string);
+            p.setSizeFull();
+            ((VerticalLayout) p.getContent()).setSpacing(true);
+            p.addComponent(new Label("This is a simple test case for "
+                    + "UriFragmentReader that can be used for"
+                    + " adding linking, back/forward button "
+                    + "and history support for ajax application. "));
+            StringBuffer sb = new StringBuffer();
+            sb.append("Available views : ");
+            for (String key : strings) {
+                sb.append(key);
+                sb.append(" ");
+            }
+            sb.append("Application will change to them from uri "
+                    + "fragment or server initiated via textfield below.");
+            p.addComponent(new Label(sb.toString()));
+
+            final TextField tf = new TextField(
+                    "Type view name (will change to that "
+                            + "view and change the uri fragment)");
+            p.addComponent(tf);
+            Button b = new Button("Go!");
+            p.addComponent(b);
+            b.addListener(new Button.ClickListener() {
+
+                public void buttonClick(ClickEvent event) {
+                    String viewName = tf.getValue().toString();
+                    // fragmentChangedListener will change the view if possible
+                    reader.setFragment(viewName);
+                }
+            });
+
+            views.put(string, p);
+        }
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket5053.java b/tests/testbench/com/vaadin/tests/tickets/Ticket5053.java
new file mode 100644
index 0000000000..bbb9a1ebc2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket5053.java
@@ -0,0 +1,35 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Window;
+
+/**
+ * #5053: Last ComboBox item may not be shown if null selection enabled
+ */
+public class Ticket5053 extends Application {
+
+    @Override
+    public void init() {
+        Window main = new Window();
+        setMainWindow(main);
+
+        ComboBox combobox = new ComboBox("My ComboBox");
+
+        // Enable null selection
+        combobox.setNullSelectionAllowed(true);
+        // Add the item that marks 'null' value
+        String nullitem = "-- none --";
+        combobox.addItem(nullitem);
+        // Designate it was the 'null' value marker
+        combobox.setNullSelectionItemId(nullitem);
+
+        // Add some other items
+        for (int i = 0; i < 10; i++) {
+            combobox.addItem("Item " + i);
+        }
+
+        main.addComponent(combobox);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket5157.java b/tests/testbench/com/vaadin/tests/tickets/Ticket5157.java
new file mode 100644
index 0000000000..f620cd27be
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket5157.java
@@ -0,0 +1,52 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.event.ShortcutAction.KeyCode;
+import com.vaadin.event.ShortcutListener;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+/**
+ * Key codes were converted to lower case on the server (overlapping special key
+ * codes for function keys etc.) and then back to upper case on the client.
+ * Therefore, registering e.g. F8 as a key code resulted in "w" being used as
+ * the trigger and F8 being ignored.
+ */
+public class Ticket5157 extends Application {
+
+    @Override
+    public void init() {
+        final Window mainWindow = new Window("Forumtests Application");
+        setMainWindow(mainWindow);
+
+        Panel p = new Panel();
+        mainWindow.addComponent(p);
+
+        Label l = new Label("Panel with F8 bound");
+        p.addComponent(l);
+
+        TextField f = new TextField();
+        p.addComponent(f);
+
+        p.addAction(new ShortcutListener("F8", KeyCode.F8, null) {
+
+            @Override
+            public void handleAction(Object sender, Object target) {
+                mainWindow.showNotification(getCaption());
+
+            }
+        });
+
+        p.addAction(new ShortcutListener("a", KeyCode.A, null) {
+
+            @Override
+            public void handleAction(Object sender, Object target) {
+                mainWindow.showNotification(getCaption());
+
+            }
+        });
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket5952.java b/tests/testbench/com/vaadin/tests/tickets/Ticket5952.java
new file mode 100644
index 0000000000..4a5d405858
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket5952.java
@@ -0,0 +1,30 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class Ticket5952 extends Application {
+
+    @Override
+    public void init() {
+        final Window mainWindow = new Window("Forumtests Application");
+        setMainWindow(mainWindow);
+        
+        String mathml =
+            "<math mode='display' xmlns='http://www.w3.org/1998/Math/MathML'>"+
+            "<mrow>"+
+            "    <msup>"+
+            "      <mi>x</mi>"+
+            "      <mn>2</mn>"+
+            "    </msup>"+
+            "    <msup>"+
+            "      <mi>c</mi>"+
+            "      <mn>2</mn>"+
+            "    </msup>"+
+            "  </mrow>"+
+            "</math>";
+        Label mathLabel = new Label(mathml, Label.CONTENT_XML);
+        mainWindow.addComponent(mathLabel);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket6002.java b/tests/testbench/com/vaadin/tests/tickets/Ticket6002.java
new file mode 100644
index 0000000000..888f1c05ca
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket6002.java
@@ -0,0 +1,88 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class Ticket6002 extends TestBase {
+
+    @Override
+    public void setup() {
+        Window main = new Window("The Main Window");
+        setMainWindow(main);
+
+        final VerticalLayout mainLayout = new VerticalLayout();
+        main.setContent(mainLayout);
+
+        mainLayout.addComponent(new Label(
+                "Replace the floating-point values with an integer"));
+
+        // ///////////////////////////////////////////////////
+        // Better working case
+
+        final ObjectProperty<Double> property1 = new ObjectProperty<Double>(
+                new Double(42.0));
+
+        // A text field that changes its caption
+        final TextField tf1 = new TextField(
+                "Changing this field modifies only the textfield", property1);
+        tf1.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                // This value change event is called twice if the new
+                // input value is an integer. The second time is during
+                // paint() of AbstractOrderedLayout.
+
+                System.out.println("Value 2 is: " + property1.getValue());
+
+                tf1.setCaption("With caption " + property1.getValue());
+            }
+        });
+        tf1.setImmediate(true);
+        mainLayout.addComponent(tf1);
+
+        // ///////////////////////////////////////////////////
+        // Totally failing case
+
+        final ObjectProperty<Double> property2 = new ObjectProperty<Double>(
+                new Double(42.0));
+
+        // A text field that adds new components
+        final TextField tf2 = new TextField(
+                "Changing this field modifies the layout - do it twice",
+                property2);
+        tf2.addListener(new Property.ValueChangeListener() {
+            public void valueChange(ValueChangeEvent event) {
+                // This value change event is called twice if the new
+                // input value is an integer. The second time is during
+                // paint() of AbstractOrderedLayout.
+
+                System.out.println("Value 1 is: " + property2.getValue());
+
+                // When this listener is called the second time in paint(), the
+                // add operation causes a ConcurrentModificationException
+                mainLayout.addComponent(new Label(
+                        "Added a component, value is " + property2.getValue()));
+            }
+        });
+        tf2.setImmediate(true);
+        mainLayout.addComponent(tf2);
+
+        mainLayout.setSpacing(true);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Change the numbers to integer value or add 0 in the decimal representation. "
+                + "This causes a secondary call during paint() to reformat the value, which causes ConcurrentModificationException in the second case.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 6002;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket677.java b/tests/testbench/com/vaadin/tests/tickets/Ticket677.java
new file mode 100644
index 0000000000..ee7320e59b
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket677.java
@@ -0,0 +1,210 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.DefaultFieldFactory;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket677 extends Application {
+
+    private static final Label info = new Label(
+            "<li> keep debug window open to see variable changes"
+                    + "<li> disable root panel w/ toggle button"
+                    + "<li> toggle one of the subpanels"
+                    + "<li> we attempt to focus the subpanels first textfield"
+                    + "<li> focusing should fail (try tabbing as well) [worked previousy]"
+                    + "<li> no variable changes should be sent from disabled fields [changed sent previously]"
+                    + "<li> try further toggling and tabbing around",
+            Label.CONTENT_RAW);
+
+    Panel root = new Panel("Enabled");
+    Panel one = new Panel("Enabled");
+    Panel two = new Panel("Enabled");
+    Form form;
+    Table table;
+
+    @Override
+    public void init() {
+        Window main = new Window();
+        setMainWindow(main);
+
+        main.addComponent(info);
+
+        HorizontalLayout l = new HorizontalLayout();
+        main.addComponent(l);
+
+        l.addComponent(new Button("Toggle root panel",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        toggle(root);
+                    }
+                }));
+        l.addComponent(new Button("Toggle panel one",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        toggle(one);
+                    }
+                }));
+        l.addComponent(new Button("Toggle panel two",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        toggle(two);
+                    }
+                }));
+        l.addComponent(new Button("Toggle form", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                toggle(form);
+            }
+        }));
+        l.addComponent(new Button("Toggle table", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                toggle(table);
+            }
+        }));
+
+        root.setContent(new GridLayout(2, 3));
+        main.addComponent(root);
+
+        TextField tf = new TextField("Enabled");
+        tf.setImmediate(true);
+        root.addComponent(tf);
+        tf = new TextField("Disabled");
+        tf.setImmediate(true);
+        tf.setEnabled(false);
+        root.addComponent(tf);
+
+        root.addComponent(one);
+        tf = new TextField("Enabled");
+        tf.setImmediate(true);
+        one.addComponent(tf);
+        tf = new TextField("Disabled");
+        tf.setImmediate(true);
+        tf.setEnabled(false);
+        one.addComponent(tf);
+
+        root.addComponent(two);
+        tf = new TextField("Enabled");
+        tf.setImmediate(true);
+        two.addComponent(tf);
+        tf = new TextField("Disabled");
+        tf.setImmediate(true);
+        tf.setEnabled(false);
+        two.addComponent(tf);
+
+        form = new Form();
+        form.setCaption("Enabled");
+        form.setFormFieldFactory(new DefaultFieldFactory() {
+
+            @Override
+            public Field createField(Item item, Object propertyId,
+                    Component uiContext) {
+                Field f = super.createField(item, propertyId, uiContext);
+                f.setEnabled(!"disabled".equals(propertyId));
+                return f;
+            }
+
+        });
+        form.setItemDataSource(new BeanItem<MyBean>(new MyBean()));
+        root.addComponent(form);
+
+        table = new Table("Enabled");
+        table.setPageLength(7);
+        table.addContainerProperty("Text", String.class, null);
+        for (int i = 0; i < 150; i++) {
+            Item item = table.addItem("Item" + i);
+            Property p = item.getItemProperty("Text");
+            p.setValue(i % 5 == 0 ? "enabled" : "disabled");
+        }
+
+        table.setTableFieldFactory(new DefaultFieldFactory() {
+
+            @Override
+            public Field createField(Container container, Object itemId,
+                    Object propertyId, Component uiContext) {
+                Field f = super.createField(container, itemId, propertyId,
+                        uiContext);
+                Item item = container.getItem(itemId);
+                Property p = item.getItemProperty(propertyId);
+                if ("disabled".equals(p.getValue())) {
+                    f.setEnabled(false);
+                }
+                return f;
+            }
+
+        });
+        table.setEditable(true);
+        root.addComponent(table);
+
+    }
+
+    private void toggle(Component c) {
+        boolean enable = "Disabled".equals(c.getCaption());
+        c.setEnabled(enable);
+        c.setCaption((enable ? "Enabled" : "Disabled"));
+        if (c instanceof ComponentContainer) {
+            TextField tf = (TextField) ((ComponentContainer) c)
+                    .getComponentIterator().next();
+            tf.focus();
+        }
+    }
+
+    class MyBean {
+        boolean on = false;
+        int number = 1;
+        String rw = "read/write";
+        String r = "read";
+        String disabled = "disabled";
+
+        public boolean isOn() {
+            return on;
+        }
+
+        public void setOn(boolean on) {
+            this.on = on;
+        }
+
+        public int getNumber() {
+            return number;
+        }
+
+        public void setNumber(int number) {
+            this.number = number;
+        }
+
+        public String getRw() {
+            return rw;
+        }
+
+        public void setRw(String rw) {
+            this.rw = rw;
+        }
+
+        public String getDisabled() {
+            return disabled;
+        }
+
+        public void setDisabled(String disabled) {
+            this.disabled = disabled;
+        }
+
+        public String getR() {
+            return r;
+        }
+
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket695.java b/tests/testbench/com/vaadin/tests/tickets/Ticket695.java
new file mode 100644
index 0000000000..f122031b6e
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket695.java
@@ -0,0 +1,41 @@
+package com.vaadin.tests.tickets;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Window;
+
+@SuppressWarnings("serial")
+public class Ticket695 extends Application {
+
+    @Override
+    public void init() {
+        final Window w = new Window("Serialization test #695");
+        setMainWindow(w);
+        Button b = new Button("Serialize ApplicationContext");
+        w.addComponent(b);
+        b.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+                try {
+                    ObjectOutputStream oos = new ObjectOutputStream(buffer);
+                    long t = System.currentTimeMillis();
+                    oos.writeObject(getContext());
+                    w.showNotification("ApplicationContext serialized ("
+                            + buffer.size() + "bytes) in "
+                            + (System.currentTimeMillis() - t) + "ms");
+                } catch (IOException e) {
+                    e.printStackTrace();
+                    w.showNotification("ApplicationContext serialization failed - see console for stacktrace");
+                }
+
+            }
+        });
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket736.java b/tests/testbench/com/vaadin/tests/tickets/Ticket736.java
new file mode 100644
index 0000000000..c530b7ca99
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket736.java
@@ -0,0 +1,194 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Validator;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.data.util.MethodProperty;
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Window;
+
+public class Ticket736 extends Application {
+
+    Address address = new Address();
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window("Test app for #736");
+        setMainWindow(mainWin);
+
+        mainWin.setTheme("runo");
+
+        // Create form for editing address
+        final Form f = new Form();
+        f.setItemDataSource(new BeanItem<Address>(address, new String[] {
+                "name", "street", "zip", "city", "state", "country" }));
+        f.setCaption("Office address");
+        f.setIcon(new ThemeResource("../runo/icons/16/document.png"));
+        f.setDescription("Jep jpe, this is form description.");
+        mainWin.addComponent(f);
+
+        // Select to use buffered mode for editing to enable commit and discard
+        f.setWriteThrough(false);
+        f.setReadThrough(false);
+        Button commit = new Button("Commit", f, "commit");
+        Button discard = new Button("Discard", f, "discard");
+        HorizontalLayout ol = new HorizontalLayout();
+        ol.setHeight("3em");
+        ol.addComponent(commit);
+        ol.setComponentAlignment(commit, Alignment.TOP_RIGHT);
+        ol.addComponent(discard);
+        f.setFooter(ol);
+
+        // Add some validators for the form
+        f.getField("zip").addValidator(new IsInteger());
+        f.getField("zip").setDescription("Jepjep");
+        ((AbstractComponent) f.getField("zip")).setIcon(new ThemeResource(
+                "../runo/icons/16/folder.png"));
+        f.getField("state").addValidator(new IsValidState());
+        f.getField("name").setRequired(true);
+        f.getField("street").setRequired(true);
+        f.getField("city").setRequired(true);
+        f.getField("zip").setRequired(true);
+
+        // Debug form properties
+        final Panel formProperties = new Panel("Form properties");
+        formProperties.setWidth("200px");
+        final String[] visibleProps = { "required", "invalidAllowed",
+                "readOnly", "readThrough", "writeThrough", "invalidCommitted",
+                "validationVisible", "immediate" };
+        for (int i = 0; i < visibleProps.length; i++) {
+            CheckBox b = new CheckBox(visibleProps[i],
+                    new MethodProperty<Boolean>(f, visibleProps[i]));
+            b.setImmediate(true);
+            formProperties.addComponent(b);
+        }
+        mainWin.addComponent(formProperties);
+
+        // Debug the internal state of the address-object
+        mainWin.addComponent(new Button("Show state of the address object",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        mainWin.showNotification(address.toString());
+                    }
+                }));
+    }
+
+    /** Address pojo. */
+    public class Address {
+        String name = "";
+        String street = "";
+        String zip = "";
+        String city = "";
+        String state = "";
+        String country = "";
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getStreet() {
+            return street;
+        }
+
+        public void setStreet(String street) {
+            this.street = street;
+        }
+
+        public String getZip() {
+            return zip;
+        }
+
+        public void setZip(String zip) {
+            this.zip = zip;
+        }
+
+        public String getCity() {
+            return city;
+        }
+
+        public void setCity(String city) {
+            this.city = city;
+        }
+
+        public String getState() {
+            return state;
+        }
+
+        public void setState(String state) {
+            this.state = state;
+        }
+
+        public String getCountry() {
+            return country;
+        }
+
+        public void setCountry(String country) {
+            this.country = country;
+        }
+
+        @Override
+        public String toString() {
+            return name + "; " + street + "; " + city + " " + zip
+                    + (state != null ? " " + state : "") + " " + country;
+        }
+
+    }
+
+    /** Simple validator for checking if the validated value is an integer */
+    class IsInteger implements Validator {
+
+        public boolean isValid(Object value) {
+            try {
+                Integer.parseInt("" + value);
+                return true;
+            } catch (NumberFormatException e) {
+                return false;
+            }
+        }
+
+        public void validate(Object value) throws InvalidValueException {
+            if (!isValid(value)) {
+                throw new InvalidValueException("'" + value
+                        + "' is not a number");
+            }
+        }
+    }
+
+    /** Simple state validator */
+    class IsValidState implements Validator {
+
+        public boolean isValid(Object value) {
+            // Empty and null are accepted values
+            if (value == null || "".equals("" + value)) {
+                return true;
+            }
+
+            // Otherwise state must be two capital letter combo
+            if (value.toString().length() != 2) {
+                return false;
+            }
+            return value.toString().equals(("" + value).toUpperCase());
+        }
+
+        public void validate(Object value) throws InvalidValueException {
+            if (!isValid(value)) {
+                throw new InvalidValueException(
+                        "State must be either two capital letter abreviation or left empty");
+            }
+        }
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket846.java b/tests/testbench/com/vaadin/tests/tickets/Ticket846.java
new file mode 100644
index 0000000000..23f3134308
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket846.java
@@ -0,0 +1,66 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.data.Validator;
+import com.vaadin.data.util.MethodProperty;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket846 extends Application {
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window("Test app for #846");
+        setMainWindow(mainWin);
+
+        final TextField tx = new TextField("Integer");
+        mainWin.addComponent(tx);
+        tx.setImmediate(true);
+        tx.addValidator(new Validator() {
+
+            public boolean isValid(Object value) {
+                try {
+                    Integer.parseInt("" + value);
+                    return true;
+                } catch (NumberFormatException e) {
+                    return false;
+                }
+            }
+
+            public void validate(Object value) throws InvalidValueException {
+                if (!isValid(value)) {
+                    throw new InvalidValueException(value + " is not a number");
+                }
+            }
+        });
+
+        final String[] visibleProps = { "required", "invalidAllowed",
+                "readOnly", "readThrough", "invalidCommitted",
+                "validationVisible" };
+        for (int i = 0; i < visibleProps.length; i++) {
+            CheckBox b = new CheckBox(visibleProps[i],
+                    new MethodProperty<Boolean>(tx, visibleProps[i]));
+            b.setImmediate(true);
+            mainWin.addComponent(b);
+        }
+
+        // tx.setIcon(new ThemeResource("icons/16/folder.png"));
+
+        mainWin.addComponent(new Button("Validate integer",
+                new Button.ClickListener() {
+                    public void buttonClick(
+                            com.vaadin.ui.Button.ClickEvent event) {
+                        mainWin.showNotification("The field is "
+                                + (tx.isValid() ? "" : "not ") + "valid");
+                    };
+                }));
+        TextField caption = new TextField("Caption",
+                new MethodProperty<String>(tx, "caption"));
+        caption.setImmediate(true);
+        mainWin.addComponent(caption);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket932.java b/tests/testbench/com/vaadin/tests/tickets/Ticket932.java
new file mode 100644
index 0000000000..a9333b5e0f
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket932.java
@@ -0,0 +1,61 @@
+package com.vaadin.tests.tickets;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class Ticket932 extends Application {
+
+    @Override
+    public void init() {
+
+        final Window mainWin = new Window("Test app for max length feature");
+        setMainWindow(mainWin);
+
+        final TextField tx = new TextField(
+                "Textfield with maxlenght 10, single row");
+        tx.setImmediate(true);
+        tx.setMaxLength(10);
+
+        final Label l = new Label();
+
+        Button b = new Button("Check value");
+        b.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                l.setValue("Length: " + tx.getValue().toString().length()
+                        + " Content: " + tx.getValue());
+            }
+        });
+
+        mainWin.addComponent(tx);
+        mainWin.addComponent(b);
+
+        final TextArea tx2 = new TextArea(
+                "Textfield with maxlenght 10, multirow ");
+        mainWin.addComponent(tx2);
+        tx2.setImmediate(true);
+        tx2.setRows(5);
+        tx2.setMaxLength(10);
+
+        Button b2 = new Button("Check value");
+        b2.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                l.setValue("Length: " + tx2.getValue().toString().length()
+                        + " Content: " + tx2.getValue());
+            }
+        });
+
+        mainWin.addComponent(tx);
+        mainWin.addComponent(b);
+
+        mainWin.addComponent(l);
+
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/util/Log.java b/tests/testbench/com/vaadin/tests/util/Log.java
new file mode 100644
index 0000000000..bdb40d56d7
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/util/Log.java
@@ -0,0 +1,62 @@
+package com.vaadin.tests.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+public class Log extends VerticalLayout {
+    List<Label> eventLabels = new ArrayList<Label>();
+    private boolean numberLogRows = true;
+    private int nextLogNr = 1;
+
+    public Log(int nr) {
+        for (int i = 0; i < nr; i++) {
+            Label l = createEventLabel();
+            l.setDebugId("Log_row_" + i);
+            eventLabels.add(l);
+            addComponent(l);
+        }
+        setDebugId("Log");
+        setCaption("Events:");
+    }
+
+    /**
+     * Clears the rows and reset the row number to zero.
+     */
+    public Log clear() {
+        for (Label l : eventLabels) {
+            l.setValue("&nbsp;");
+        }
+        nextLogNr = 0;
+        return this;
+    }
+
+    public Log log(String event) {
+        int nr = eventLabels.size();
+        for (int i = nr - 1; i > 0; i--) {
+            eventLabels.get(i).setValue(eventLabels.get(i - 1).getValue());
+        }
+        String msg = event;
+        if (numberLogRows) {
+            msg = nextLogNr + ". " + msg;
+            nextLogNr++;
+        }
+        eventLabels.get(0).setValue(msg);
+        System.out.println(event);
+        return this;
+    }
+
+    private Label createEventLabel() {
+        Label l = new Label("&nbsp;", Label.CONTENT_XHTML);
+        l.setWidth(null);
+        return l;
+    }
+
+    public Log setNumberLogRows(boolean numberLogRows) {
+        this.numberLogRows = numberLogRows;
+        return this;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/util/LogPrintWriter.java b/tests/testbench/com/vaadin/tests/util/LogPrintWriter.java
new file mode 100644
index 0000000000..1f07a9c7ae
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/util/LogPrintWriter.java
@@ -0,0 +1,34 @@
+package com.vaadin.tests.util;
+
+import java.io.PrintWriter;
+import java.io.Writer;
+
+/**
+ * Use for collecting HTTP response.
+ * 
+ */
+public class LogPrintWriter extends PrintWriter {
+
+    private final StringBuffer result = new StringBuffer(256);
+
+    public LogPrintWriter(Writer out) {
+        super(out);
+    }
+
+    @Override
+    public void print(String s) {
+        result.append(s);
+        super.print(s);
+    }
+
+    @Override
+    public void write(String s) {
+        result.append(s);
+        super.write(s);
+    }
+
+    public String getResult() {
+        return result.toString();
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/util/LoremIpsum.java b/tests/testbench/com/vaadin/tests/util/LoremIpsum.java
new file mode 100644
index 0000000000..3dc775badf
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/util/LoremIpsum.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.util;
+
+public class LoremIpsum {
+    private static final String LOREM = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi lacinia sollicitudin neque, vitae cursus eros scelerisque sit amet. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin sollicitudin tempus lorem, sed consectetur nibh ultrices nec. Ut tempus laoreet dolor non molestie. Quisque consectetur tellus ut tortor imperdiet semper. In tempor odio eu metus hendrerit pharetra. Aliquam erat volutpat. Aliquam erat volutpat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec sit amet turpis facilisis ipsum cursus viverra ut vitae turpis. Integer tincidunt sem id sem tristique a laoreet eros euismod. Ut quis leo vel neque pellentesque ullamcorper. Aliquam at fermentum justo. Sed eget laoreet elit. Pellentesque commodo dui quis metus ornare bibendum. Ut tempus, ipsum in euismod scelerisque, augue ante lacinia sem, scelerisque imperdiet felis lectus rhoncus felis.Fusce vitae nisl lorem, id ultricies massa. Phasellus augue eros, dapibus vel fermentum non, sodales id mi. Nulla tincidunt diam a justo ultricies vestibulum nec sed tellus. Morbi faucibus leo et odio condimentum at porttitor diam auctor. Aenean volutpat lacinia mauris. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean malesuada ullamcorper elit ut eleifend. Etiam tempor, mauris id aliquet tempor, erat felis rutrum eros, a aliquam dolor nunc nec enim. Sed enim dolor, tristique ut tempus vitae, elementum at velit. Duis vulputate ultricies risus, ac gravida erat tincidunt posuere. Pellentesque dapibus tincidunt rhoncus. Phasellus eleifend molestie eros. Praesent id imperdiet urna. Etiam fermentum interdum quam, in tempus quam condimentum at.Curabitur eget ultrices augue. Suspendisse potenti. Nam hendrerit, dolor eget adipiscing lobortis, enim risus dignissim orci, a imperdiet tellus nulla id nibh. Praesent eu dui sit amet nulla interdum dignissim vel quis ante. Sed a lectus metus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus eget ultrices neque. Cras adipiscing condimentum justo adipiscing consequat. In accumsan mollis sapien ut euismod. Nulla sodales pulvinar leo, nec condimentum leo vestibulum ut. Phasellus risus metus, aliquet quis porta at, imperdiet vitae metus. Proin nec odio odio. Quisque nec elit id lacus iaculis ullamcorper sit amet vel ipsum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In non lacus sed libero euismod rhoncus. Suspendisse augue massa, ullamcorper at accumsan at, porttitor ac odio.Morbi imperdiet, lectus vehicula eleifend ornare, lectus arcu ullamcorper augue, a imperdiet eros augue id justo. Integer eget pretium lorem. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras vehicula leo eget metus consectetur viverra. Nullam a mi nisl, in lacinia metus. Curabitur mollis eleifend augue, consectetur imperdiet velit sagittis aliquet. In tempor tempor orci eu faucibus. Mauris nisi neque, vulputate eu dignissim eget, aliquet sed nibh. Mauris rhoncus elit eget lectus dignissim bibendum. Phasellus sed nunc lacus, nec aliquet elit. Fusce blandit, sem vitae gravida elementum, sem orci porttitor eros, id porta tortor massa ut velit. Nulla pretium mi at tortor porttitor sollicitudin.Ut gravida est at lectus eleifend non ultrices ligula blandit. Sed purus lectus, adipiscing ut mollis vel, interdum quis diam. Phasellus eget nibh augue. Fusce justo felis, facilisis in auctor ut, cursus et enim. Praesent hendrerit venenatis elit, iaculis cursus ligula auctor in. Proin mollis malesuada dolor at elementum. Maecenas sit amet leo odio. Integer ac enim in justo eleifend dapibus. Pellentesque consequat, libero congue sagittis pulvinar, odio eros porta quam, et aliquet dolor turpis non lacus. Sed eu risus nunc. Aliquam tempus nulla a purus auctor mattis. Nullam adipiscing nisl nec purus porttitor rutrum. Sed pellentesque tincidunt posuere. Nulla varius cursus eros. Phasellus vel neque at metus tempus placerat laoreet ac dolor. Nulla faucibus leo nisi, vel placerat lectus.Donec non leo lacinia metus euismod dignissim suscipit ut neque. Donec iaculis, lacus ut luctus bibendum, mi libero tristique sem, vel consectetur risus ligula in turpis. Nulla lorem justo, porttitor non sollicitudin at, pharetra non ante. Phasellus tristique, purus at luctus auctor, nisl neque congue lacus, eget convallis mauris libero sit amet arcu. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tellus quam, lobortis vitae commodo id, ultrices a augue. Nam tellus erat, varius vel iaculis et, fermentum ut tellus. Donec id urna orci. Curabitur eleifend hendrerit libero, id tempor dolor faucibus eu. Quisque aliquam sapien a tortor mollis sollicitudin. Duis augue erat, sagittis eget consequat vel, volutpat et augue. Sed vehicula mattis nisi, non porta elit imperdiet vitae. Curabitur scelerisque mollis lectus, consequat suscipit est ultricies sit amet. Aenean in sem libero, id adipiscing urna. Aenean eleifend posuere lorem in aliquet. Praesent arcu est, tristique quis adipiscing ac, tincidunt nec dui. Nunc sed leo quis justo posuere suscipit. Fusce vitae lectus vitae urna sodales aliquam.Sed velit purus, ullamcorper non interdum quis, facilisis eget tortor. Etiam vestibulum venenatis aliquet. Fusce felis felis, venenatis id tincidunt at, vehicula et erat. Curabitur eu sagittis nisl. Curabitur nisi sapien, venenatis nec pulvinar ut, tempor id diam. Suspendisse metus libero, placerat in fermentum a, aliquam id arcu. Nulla quis accumsan massa. Curabitur consectetur pulvinar sapien non consequat. Etiam sem dolor, posuere id laoreet a, tempor vel nisl. Fusce eu lacus orci. Pellentesque tellus dui, pulvinar nec egestas vitae, adipiscing euismod nunc. Mauris consequat felis sit amet justo pellentesque venenatis. Donec dignissim porta dolor, eget pellentesque lorem porta eu. Donec eget enim eu leo mattis ornare in ut libero. Maecenas sit amet ante mauris.Praesent ultrices diam id lectus viverra sed lobortis risus adipiscing. Nulla in risus est. Proin vitae dolor ligula, a placerat enim. Integer hendrerit erat tincidunt leo malesuada sit amet tincidunt justo mattis. Morbi ut neque urna, ut blandit erat. Donec eleifend justo ac augue ultrices consectetur. In rutrum, leo ac porttitor volutpat, neque mi lacinia diam, id fermentum risus neque vitae risus. Suspendisse in justo libero, eget ultrices nisl. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In sollicitudin, arcu et convallis fermentum, est tellus pellentesque neque, ac faucibus tellus orci non purus. Ut aliquet facilisis ullamcorper. Cras justo ipsum, mollis vel ultricies non, consectetur a libero.Aliquam erat volutpat. Nunc ut mauris eu lorem consequat placerat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse sapien nisi, pellentesque ut porttitor eget, auctor vitae massa. Fusce et euismod massa. In dolor enim, commodo vitae scelerisque sit amet, vulputate quis nibh. Donec ut mollis elit. Nullam placerat sem at urna euismod tempus vitae a mi. Curabitur ac sem non tortor dapibus euismod in et augue. Phasellus elit nisi, ornare eget aliquam et, convallis vitae eros. Vivamus vitae facilisis quam. Nullam a dolor sit amet ante sodales vulputate. Sed vel elit libero. Vestibulum vestibulum porttitor orci, a elementum risus congue in. Mauris ut justo sed dolor rhoncus viverra nec non eros. Phasellus dignissim, mi id laoreet venenatis, enim lacus pharetra arcu, sit amet consectetur velit elit hendrerit arcu. Integer hendrerit suscipit pretium. Proin orci quam, vehicula vel accumsan tempor, facilisis tempus tortor.Etiam et nunc id odio lobortis ornare ac eget lorem. Proin tristique iaculis felis, ut gravida lacus congue ut. Etiam nibh turpis, congue vel ornare ut, feugiat ut mi. Etiam id ante eget turpis laoreet dapibus. Vivamus accumsan sem at est lacinia sagittis vitae a erat. Etiam mollis justo et felis faucibus sodales. Etiam placerat felis sed ante sollicitudin dignissim. Nunc fringilla nunc in lacus ultricies rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed venenatis porta turpis dignissim tempor. Etiam consequat vulputate elementum. Sed augue lacus, aliquam eu ornare vel, aliquam at turpis.Ut lacinia velit odio. Nulla sapien tellus, fringilla dignissim porta sed, elementum eget diam. Quisque pulvinar commodo massa, vitae lobortis velit iaculis id. Vestibulum id dolor vel mauris auctor commodo id at odio. Suspendisse consectetur consequat erat. Aliquam in purus at sem pretium ultricies. In urna elit, porttitor vel gravida at, varius non nisi. Nullam id eros at lorem posuere ullamcorper eget in dui. Sed sit amet mi vel quam vestibulum imperdiet. Ut ullamcorper purus nibh, a commodo tortor. Phasellus pretium, nulla ut venenatis euismod, augue arcu volutpat nulla, id semper est purus eget urna. Vivamus pharetra diam ac ante cursus tempus.Cras in rhoncus felis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In semper leo sit amet nisi rutrum et interdum odio fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras sollicitudin dui non risus iaculis a lobortis odio consequat. Sed consectetur nisl eu nisi pulvinar fermentum. Etiam placerat tincidunt pellentesque. Etiam luctus auctor nulla ac pulvinar. Pellentesque sit amet eros est. Sed hendrerit sem rhoncus purus rhoncus ullamcorper. Integer vitae commodo sem. Donec orci lectus, gravida sit amet viverra ut, suscipit eu odio. Vivamus ac dolor sit amet augue porttitor imperdiet nec quis mauris. Etiam luctus pharetra lectus sed mattis. Proin tincidunt ultricies dolor, at sagittis ante tincidunt ac.Morbi sit amet sem ut leo ornare luctus at sed odio. Donec vestibulum consequat consectetur. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer sit amet leo eget ipsum eleifend commodo et vel sapien. Donec vulputate facilisis nisi in bibendum. Vestibulum justo magna, mollis in varius a, malesuada id nisl. Vestibulum fermentum leo at ipsum euismod scelerisque. Donec id diam eget sapien varius ultricies. Quisque mollis vehicula lorem, vitae suscipit lorem gravida vel. Cras ipsum odio, pellentesque vitae molestie at, facilisis eget felis. Morbi gravida velit eget ante posuere id pharetra dolor vehicula. Praesent lectus sem, pretium sit amet eleifend non, ultricies vitae eros.Etiam consequat felis quis elit semper sed lobortis risus faucibus. Quisque diam ante, gravida ut mollis tristique, auctor ac mauris. Phasellus vestibulum sapien et justo sagittis sed dignissim dui sollicitudin. Maecenas egestas quam et odio mattis eu posuere est sagittis. Nulla nec posuere turpis. In mauris sapien, pharetra et placerat eu, dictum quis justo. Curabitur sit amet varius nulla. Cras feugiat erat quis ante aliquam blandit. In ac libero id massa dapibus ultrices. Donec non massa orci.In gravida justo vitae eros ultrices fringilla. Sed mi quam, lobortis eu pharetra nec, pulvinar eu justo. Sed ornare diam sed nulla pellentesque at tincidunt lacus cursus. Donec vel neque et urna euismod suscipit. Proin in tortor eget felis euismod ultrices. Nunc ut orci elit, vitae pellentesque ligula. Vivamus in mi felis, at congue nulla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi mattis, ligula id sollicitudin posuere, eros odio pellentesque felis, in auctor libero mi nec massa. Praesent fringilla pretium tempus. Sed quis leo nulla, a pretium mi. Sed malesuada quam eget lorem tristique eget accumsan libero auctor. Vestibulum metus nisl, rutrum vel ullamcorper scelerisque, ultrices cursus purus. Aliquam convallis sollicitudin elit at mattis. Phasellus vitae magna id quam laoreet gravida quis ac metus.Duis lobortis arcu a elit porta laoreet. Pellentesque at condimentum sapien. Maecenas rutrum eleifend quam, eu pellentesque quam tincidunt ac. Vivamus fermentum justo ac dui dapibus ut tempus massa congue. Phasellus fermentum placerat enim, et dignissim mi feugiat in. Etiam odio diam, mollis vitae viverra a, egestas eget arcu. Curabitur purus lectus, accumsan quis lobortis ut, faucibus ac magna. Vivamus consectetur, ligula sit amet convallis rhoncus, risus lorem scelerisque arcu, eu fermentum felis leo sit amet eros. In hac habitasse platea dictumst. Sed congue pretium erat, vel hendrerit velit dapibus ut. Aliquam porta porttitor nunc facilisis pretium. Aliquam tincidunt porttitor tincidunt. Sed at erat a arcu elementum dignissim nec et ipsum. In et magna erat. In hac habitasse platea dictumst. Nulla sit amet enim vitae magna ullamcorper auctor ac id lectus. Fusce id sapien massa.Fusce porta nisl non leo iaculis sed elementum purus viverra. Aenean vitae erat elit. Proin id tincidunt nibh. Fusce faucibus dignissim laoreet. Etiam volutpat ultricies magna in euismod. Quisque luctus malesuada massa, ac ullamcorper dui luctus quis. Mauris a felis ut urna blandit semper egestas vel dui. Nulla facilisi. Ut dapibus bibendum bibendum. Curabitur id facilisis tellus. Vestibulum arcu orci, pretium vestibulum accumsan ut, feugiat eget eros. Mauris dapibus sem a massa ornare id posuere purus ornare. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus mollis, orci ac eleifend pharetra, risus turpis euismod urna, ut congue neque nunc ut felis. Aliquam a nisi leo. Nulla consequat faucibus ligula consectetur tristique. Duis at lacus orci, eget pulvinar tortor.Aenean nisi justo, dictum ac sagittis a, mollis ut orci. Donec faucibus congue neque ut gravida. Nam interdum nunc vel ipsum molestie elementum. Aliquam a eros non mi accumsan lacinia ut eu justo. Donec id ipsum purus, sed congue nunc. Donec euismod ante quis metus interdum feugiat. Sed nec dictum neque. Vivamus sed felis non lorem placerat facilisis eu sit amet nisi. Morbi dolor dolor, malesuada eu congue at, sollicitudin ut metus. In sit amet ipsum purus, ut dignissim dolor. Pellentesque quis velit velit. Aenean dapibus ipsum eu felis placerat volutpat. Donec auctor dictum ligula ut facilisis. Aliquam vulputate nunc nec diam ultricies auctor dictum dui fringilla. Cras urna metus, porttitor et sodales eu, tempus non mauris. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.Etiam tempor, mi ut tempor adipiscing, nunc lorem gravida odio, scelerisque aliquet ante massa id nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus eu nisl urna. Quisque vel leo in lorem bibendum bibendum ut eget massa. Morbi dictum, metus eu pellentesque lobortis, augue nisi facilisis velit, sit amet feugiat risus nunc vitae elit. Fusce blandit mi a augue gravida eu tristique sem consequat. Suspendisse non malesuada nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Quisque commodo lorem id ipsum cursus posuere. Proin euismod facilisis est, vel imperdiet lectus commodo blandit. Proin luctus dapibus purus, id vulputate mauris tincidunt vel. Vestibulum volutpat molestie nulla faucibus malesuada. Aenean ut ornare lectus.Maecenas vel mauris in dolor imperdiet gravida eu nec mi. Vestibulum varius sem et nibh aliquet eu posuere tellus luctus. Fusce blandit, odio ut gravida semper, tellus lorem porta felis, vitae posuere mi lorem eget magna. Sed tristique nisi ut ipsum adipiscing molestie. Donec volutpat nunc eget neque posuere aliquam. Vivamus vel sem lectus. In volutpat dictum eros. Curabitur mollis pretium arcu ut rhoncus. Vivamus eros risus, sagittis posuere suscipit sit amet, consectetur eget elit. Mauris porttitor feugiat magna, sed lobortis ante porttitor at. Etiam non enim quam, nec tempus erat. Ut porta pharetra nibh vel laoreet. Sed euismod elit eget sem tempus non sodales massa cursus. Aliquam erat volutpat. Nulla a tortor ornare nibh feugiat venenatis. Mauris interdum mattis odio eget porta. Maecenas ac ullamcorper velit. Nulla id sagittis ligula. Aliquam pharetra, diam ut euismod pellentesque, sapien ligula sagittis nisi, sed dictum dolor purus sit amet elit.Aenean quis metus velit. In at fermentum nunc. Cras in magna sapien, sed vestibulum lacus. Sed pellentesque, massa sed malesuada tincidunt, erat tortor consectetur lacus, vel congue arcu enim id libero. Donec elit neque, egestas a faucibus ut, tempor nec diam. Donec turpis est, vulputate id venenatis vitae, vulputate sit amet elit. Ut semper nibh orci. Fusce nibh nisi, tristique eu dapibus id, faucibus nec augue. Sed sagittis malesuada leo, pretium porttitor ante lacinia in. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.Sed quis libero ante, ac consequat nisl. Cras nisl urna, ultrices eu dapibus sed, pretium quis diam. Curabitur aliquam, dolor et convallis viverra, purus orci commodo neque, a sagittis felis tellus quis mi. In mi orci, tempus ut sodales imperdiet, condimentum ac tortor. Phasellus ornare, tortor eget egestas ultricies, est risus ultricies lorem, ac tempus nibh ligula ac ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum nibh vitae tortor laoreet sed rutrum arcu suscipit. Fusce iaculis nisl in justo pretium a interdum ipsum dignissim. Sed sed semper metus. Aenean ante turpis, fermentum vestibulum dapibus eget, dictum id leo. Nam nec lorem erat.Cras dolor nulla, suscipit nec viverra ac, egestas vitae enim. Quisque vel laoreet sem. Sed non felis at nisl ultricies pharetra vitae a lorem. Suspendisse tempor arcu id massa laoreet congue. Nam eu turpis justo, nec adipiscing tortor. Etiam mattis lorem tincidunt diam molestie semper. Vivamus rutrum est in tortor egestas consequat. Sed vitae ultrices leo. Aenean pulvinar malesuada enim, eget elementum purus bibendum a. Vivamus sit amet mauris mauris, placerat varius lorem. Sed diam tortor, posuere non convallis molestie, dictum quis libero. Nulla quis tellus a nunc semper elementum vel sed odio. Cras ac mattis lectus. Proin placerat imperdiet sodales. Fusce quis magna dolor, eget porttitor lectus. Mauris elementum lorem vitae lectus porta scelerisque nec a sapien. Vivamus dapibus volutpat leo nec vehicula. Praesent ac diam ipsum.Pellentesque nec ullamcorper nulla. Nam lectus dolor, porttitor vitae varius sed, egestas a arcu. Suspendisse malesuada venenatis erat nec consequat. Morbi consequat magna a neque ultrices eget aliquet sapien ultrices. Aenean vel diam ipsum, ac scelerisque dui. Morbi quis arcu neque, eget auctor enim. Etiam pretium est sit amet nunc porta ornare vel quis sapien. Aliquam pulvinar pharetra risus, vel mollis mauris cursus sed. In sagittis nisl ac nunc placerat bibendum. Proin in risus lorem, sed fringilla eros.Proin luctus aliquam metus vitae euismod. Maecenas hendrerit sollicitudin hendrerit. Etiam magna elit, fringilla ut suscipit at, viverra eget ante. Morbi consequat, dui non tristique varius, eros ipsum vulputate sem, eu tristique nibh lacus vel felis. Maecenas eget eros a urna consectetur interdum. Integer est nibh, semper sed feugiat quis, lacinia eget diam. In ultricies mollis lectus sed imperdiet. Proin sed magna nec tortor blandit lacinia in sit amet nibh. Nullam ultrices tempor lacus, vel tincidunt eros vulputate euismod. Praesent justo nibh, convallis ut vehicula consequat, molestie posuere nulla. Mauris sollicitudin egestas vestibulum. Suspendisse auctor imperdiet eros, sit amet dignissim magna dapibus in. Praesent ultrices sem et risus interdum vel pharetra dolor tristique. Proin eleifend nunc eget risus venenatis posuere. Sed est nisi, interdum porta dapibus a, laoreet ac mi. Praesent sit amet varius lectus. Phasellus suscipit lacinia velit, sed tempus odio varius at. Fusce eleifend elementum aliquet. Proin ultricies libero at ipsum condimentum rhoncus.Quisque convallis, arcu at vehicula imperdiet, velit eros posuere sem, sit amet pulvinar purus massa a tellus. Maecenas cursus neque in dolor facilisis ac aliquam ligula eleifend. Fusce quis faucibus nisl. Fusce pulvinar magna vel enim scelerisque id cursus tortor faucibus. Nunc est turpis, iaculis ac sodales non, euismod vitae nunc. Fusce felis purus, iaculis dapibus mollis quis, condimentum consequat eros. Ut a lectus nec mi lacinia fringilla. Donec eget metus lectus, et rhoncus enim. Donec pharetra malesuada enim at rutrum. Vestibulum tincidunt gravida viverra. Vestibulum commodo sem nisl.Vivamus iaculis mollis arcu, quis dapibus risus semper quis. Quisque consectetur ullamcorper arcu id lacinia. Proin non tellus tellus. Nunc vehicula, arcu in pharetra feugiat, ante ante viverra urna, at convallis ligula odio id purus. Morbi quis orci non ante imperdiet luctus. Maecenas et ipsum est, at viverra sem. Morbi placerat ultrices imperdiet. Nullam id arcu at quam mollis hendrerit eu ac lectus. Etiam a neque sed turpis vestibulum posuere. Ut elementum tincidunt nulla at pellentesque. Integer nisl nunc, faucibus non sollicitudin eu, vestibulum ut nulla. In auctor est blandit purus rhoncus et sagittis eros convallis. Mauris sodales ultricies varius. Nulla facilisi. Donec ut nisl nunc, id accumsan erat. Praesent gravida molestie lobortis. In suscipit nisi sed elit sagittis tristique. Pellentesque vitae ante elit. Nullam diam est, ultrices vitae molestie at, tempus et magna. In hac habitasse platea dictumst.Vestibulum id tristique quam. Vivamus dui nulla, pretium eget elementum et, pulvinar a diam. Sed sed arcu sapien, et pharetra nisl. Nunc dignissim, lectus ac fringilla cursus, risus ante pretium justo, nec molestie sem urna id velit. Aenean tincidunt felis sed risus vestibulum ultricies. Aliquam lacinia scelerisque hendrerit. Morbi tincidunt molestie sapien sed faucibus. Vivamus et nisl velit, in semper libero. Duis elementum, dolor eget euismod porttitor, tortor eros tristique risus, eget posuere purus leo venenatis leo. Quisque in elit hendrerit felis accumsan gravida id sed sem.Sed massa turpis, interdum eget adipiscing a, tempor non enim. Vivamus sit amet purus tortor, quis tincidunt nunc. Nam vehicula dolor vitae est bibendum sed condimentum nisl pretium. Aenean pellentesque egestas lacinia. Vestibulum id felis sapien, vestibulum pharetra mauris. Donec quis ligula quis risus ultrices pharetra ac et quam. Nunc aliquam adipiscing mauris id euismod. Suspendisse potenti. Ut pharetra tristique pellentesque. Fusce tristique nisl vitae eros adipiscing lobortis. Ut porttitor porttitor est, vel euismod mi feugiat quis. Sed bibendum lacus vel sem hendrerit a ultricies sapien mattis.Vestibulum a tempus urna. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aenean tincidunt interdum dui, in accumsan ante placerat non. Aliquam suscipit eros eget quam ullamcorper consequat. Nulla facilisi. Phasellus porttitor interdum quam nec mattis. Etiam vitae diam vel est tempus aliquam eu et tellus. Phasellus lobortis porttitor mi, eu mollis augue tempus eu. Morbi a urna id nibh faucibus dictum. Sed hendrerit fringilla nunc vel elementum. Donec vel massa vitae nibh imperdiet vestibulum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum in velit lorem, eu posuere felis. Maecenas ornare posuere faucibus. Donec dignissim ante eu neque suscipit interdum. Pellentesque ultrices dictum quam, tempor tempus leo posuere eget. Vestibulum dictum interdum urna, at feugiat neque venenatis ac. Donec tempus dictum enim, nec tempor neque rhoncus vel.Sed mollis luctus leo sed mattis. Vestibulum tempor mattis vehicula. Duis id elementum libero. Integer condimentum tincidunt molestie. Aenean quam tortor, rutrum sit amet placerat sed, sollicitudin eget turpis. In hac habitasse platea dictumst. Mauris lacinia mollis rhoncus. Fusce nec tellus elementum magna congue ultricies. Nulla consequat, dui nec facilisis hendrerit, ligula sapien viverra velit, at tempor risus leo vestibulum risus. Cras volutpat molestie orci ullamcorper gravida. Nullam est nisi, tempus et tincidunt ut, dapibus vitae nibh. Nam scelerisque purus sit amet odio imperdiet mattis. Integer ut ultrices odio.Cras placerat turpis nisl. Quisque consectetur urna vel nunc faucibus dictum. Nunc ac varius mauris. In ut egestas purus. Sed arcu nibh, mollis vitae dapibus eget, consectetur sit amet eros. Curabitur tincidunt purus sagittis neque adipiscing pretium. Aliquam tempor ullamcorper lectus. Cras quis elit et sapien euismod dapibus vitae in urna. Aliquam adipiscing urna non elit suscipit hendrerit. Mauris euismod tincidunt tortor eu vestibulum. Praesent ac quam massa. Fusce vitae viverra justo. Phasellus vel posuere augue. Praesent sagittis auctor odio in cursus. Sed vel lacus velit, vitae eleifend leo. Donec dapibus ornare mauris ut imperdiet. Nullam a sem felis, in commodo ligula. Nunc sed justo id metus bibendum pretium. Fusce lacinia lorem at leo ultricies porta.Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi non ipsum nisi, at porta ipsum. Nulla dolor lacus, auctor eget tincidunt et, tempor in velit. Cras vel diam facilisis dolor sagittis sodales. In hac habitasse platea dictumst. Donec dignissim vulputate tempor. Fusce tristique vestibulum vehicula. Integer nec erat a risus semper ultrices nec ac eros. Phasellus egestas, risus eget suscipit iaculis, mi magna posuere urna, in sollicitudin odio leo nec lorem. Ut at enim nunc, eget pellentesque ipsum. Nam at ipsum et magna tempor gravida vestibulum ut diam. Aenean aliquam scelerisque blandit. Cras sapien sem, consectetur a laoreet at, mattis vel lorem. Maecenas enim mauris, hendrerit ac imperdiet in, hendrerit a justo. Vestibulum justo metus, adipiscing at pulvinar at, scelerisque at velit. Aliquam sodales feugiat tortor ullamcorper cursus. Quisque tortor felis, sodales eu bibendum in, pellentesque eget urna.Nullam ultricies congue nisi nec blandit. Nulla nisl mi, aliquet vel dictum in, pellentesque fringilla arcu. Nam vulputate iaculis pellentesque. Morbi faucibus, augue vitae aliquam fringilla, ipsum tellus lacinia ligula, a luctus mauris orci id nulla. Vestibulum commodo, diam eget tincidunt iaculis, leo ante suscipit ligula, convallis scelerisque quam augue quis libero. Pellentesque vulputate ultricies eros a porta. In hac habitasse platea dictumst. Quisque at sem vel nisl pellentesque pellentesque at imperdiet turpis. Sed quis sem non nulla pellentesque placerat. Etiam sed ultricies nisl. Nunc vel leo augue, vitae fringilla urna. Suspendisse eget dolor enim, sed interdum lorem. Etiam imperdiet, nunc a tempor elementum, ipsum ante sodales tortor, id dignissim arcu diam vitae metus.Sed tincidunt fringilla mauris a lobortis. Morbi mollis elementum purus ac auctor. Etiam malesuada sapien vehicula magna fringilla sit amet porta sem scelerisque. Vestibulum malesuada ante nunc. Curabitur laoreet commodo mauris eu tempor. Sed hendrerit, lorem vel scelerisque aliquam, metus ligula ultricies ante, at luctus neque risus ut nisi. Suspendisse lectus sapien, tempor eget volutpat non, tempor at orci. Aenean eu est metus, vel convallis augue. Integer aliquam turpis id neque posuere tincidunt. Morbi at ante felis, ac semper diam. Etiam iaculis sapien a mauris tempus semper. Nunc ut leo nec massa tincidunt sodales id sed justo. Fusce sed blandit turpis. Pellentesque scelerisque laoreet luctus.Integer lobortis sollicitudin sapien, vel consequat augue hendrerit ut. Quisque pretium, enim condimentum ornare viverra, est nisl convallis lacus, vel varius turpis mi a eros. Curabitur eget enim non quam condimentum lobortis id sit amet dolor. Aliquam in ligula ut nisi accumsan consectetur. Pellentesque blandit ultrices magna, eget posuere dui eleifend ut. Quisque ornare, ante eget iaculis rutrum, nisi dolor tincidunt diam, eget volutpat nibh sapien vel massa. Sed viverra pulvinar lectus et commodo. Sed lacus mauris, aliquet ut tristique at, feugiat sit amet lectus. Duis lacinia purus a lacus accumsan tristique. Donec felis nunc, egestas ut porttitor ac, vulputate at purus. Quisque euismod nibh sit amet metus ullamcorper a consequat ipsum luctus. Mauris vitae sapien tristique lorem mollis porta auctor vitae leo.Donec mauris nibh, elementum a tincidunt nec, volutpat vitae enim. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque at purus quis massa vulputate mollis ut eu risus. Cras libero diam, pharetra quis ultrices facilisis, tincidunt id arcu. Praesent at volutpat quam. Phasellus quis malesuada sapien. Nullam eu leo quam, bibendum sagittis turpis. Vestibulum sagittis accumsan enim ut tristique. Donec eu enim nisi. Curabitur mauris orci, fringilla et suscipit placerat, ullamcorper vel turpis. Mauris est arcu, gravida ac accumsan ac, tincidunt vel nibh. Mauris pulvinar massa tempor dui hendrerit vel elementum diam pulvinar. Sed felis leo, laoreet at laoreet nec, venenatis eu risus. Nunc a massa lacus. Vestibulum ut pellentesque sem. Donec consectetur, turpis consequat aliquam consectetur, leo nunc lobortis elit, at sagittis ipsum risus sed turpis. Vivamus at sollicitudin purus. Nulla facilisi.Morbi congue dignissim nibh ut commodo. Integer sed urna fermentum neque hendrerit aliquam ac et tortor. Phasellus massa sem, egestas sed tincidunt id, malesuada vel odio. Nulla arcu nisl, elementum at pretium interdum, pharetra at nulla. Vestibulum lectus ante, ultricies ac lacinia euismod, adipiscing at metus. Aliquam velit orci, posuere a dapibus dapibus, consectetur vitae est. Pellentesque suscipit pulvinar varius. Morbi sagittis blandit nulla, eu posuere arcu blandit eu. Nulla cursus nunc volutpat orci commodo aliquet. Quisque condimentum dui a mi facilisis tincidunt.Quisque ac nisi vitae ipsum condimentum luctus non quis erat. Pellentesque eget nunc sit amet ipsum pharetra vulputate ac in mi. Etiam consectetur nulla vitae risus pharetra a ornare ligula sagittis. Proin euismod mauris id lectus tincidunt luctus at sed ligula. Aenean porttitor hendrerit quam quis interdum. Suspendisse eu metus turpis, ut venenatis ipsum. Nulla ipsum orci, lacinia ac vestibulum ut, mattis quis eros. Pellentesque a velit et erat sodales ornare. Pellentesque pellentesque tortor eget magna facilisis accumsan. Praesent tincidunt posuere lacus sed sollicitudin. Praesent consectetur diam vel turpis elementum vehicula. Integer rutrum dignissim justo, ac dapibus quam fringilla non. Suspendisse porta elementum bibendum. Praesent at lorem at quam dignissim commodo. Etiam placerat euismod ipsum eu interdum. Aliquam in mi molestie justo varius venenatis eu aliquam quam. Integer feugiat, neque hendrerit egestas hendrerit, lectus ligula placerat enim, a faucibus ante ligula vitae mi. Praesent urna nunc, volutpat vitae scelerisque non, porta vel dolor. Aenean quam sem, dignissim at faucibus non, auctor sodales libero.Morbi justo elit, tempus ac cursus porta, eleifend nec odio. Ut nec quam velit. Duis elit nulla, placerat et rutrum quis, tempor non nisi. Quisque massa erat, pretium ut elementum sit amet, sodales vel metus. Phasellus sollicitudin sapien vel nisl faucibus ornare. Duis ut dolor arcu, vel semper felis. In quis orci mauris, id porttitor diam. Fusce ornare, dolor in posuere blandit, neque est mollis lacus, eu venenatis nisi orci vel diam. Etiam ornare sapien eu sapien tristique vitae consequat arcu consequat. Fusce a felis at dui sollicitudin pellentesque sit amet vel mi. Curabitur congue porttitor orci, eu auctor nibh mollis at. Nulla facilisi. Nam aliquet ullamcorper metus ac vulputate. Aenean feugiat purus vitae dui congue egestas. Curabitur sollicitudin leo eget nibh facilisis fermentum fermentum non nisi. Ut at libero eget est bibendum laoreet non eu ante. Proin pellentesque quam ut augue condimentum id suscipit risus tristique. Nunc laoreet risus elit.Suspendisse vel ante elit, eu feugiat diam. Etiam ultrices condimentum tempor. Donec eget porta lacus. Nunc in velit lacus, ut ultricies felis. Nulla id cursus metus. Praesent suscipit, orci a facilisis imperdiet, eros lectus eleifend nibh, sit amet auctor magna arcu ac enim. In malesuada volutpat felis a posuere. Aliquam mattis ipsum ut quam semper aliquet. Maecenas convallis consequat magna, blandit viverra nulla consectetur sit amet. Pellentesque id velit nec risus iaculis imperdiet ac accumsan metus. Suspendisse et sem massa. Vestibulum ac enim hendrerit est tincidunt ullamcorper.Curabitur placerat, libero id molestie vehicula, neque tortor vulputate sapien, ut blandit orci metus et nibh. Cras convallis justo a nibh iaculis ut convallis neque vestibulum. Duis gravida purus metus, nec viverra leo. In tincidunt elit sit amet orci lacinia non eleifend orci tincidunt. Praesent est metus, molestie a ullamcorper ultricies, cursus imperdiet augue. Sed vitae quam eu dui pellentesque dignissim. Curabitur convallis volutpat accumsan. Donec egestas malesuada est, vitae faucibus sem fermentum id. Donec porttitor rutrum vehicula. Nulla placerat risus in est egestas nec ultrices ligula auctor. Quisque erat lorem, ullamcorper vitae interdum sit amet, laoreet vel elit. Proin eu porta neque. Pellentesque eleifend, ipsum a sollicitudin ultrices, ligula nisl aliquet dui, eget fermentum quam mi vel.";
+
+    public static String get(int len) {
+        return LOREM.substring(0, len);
+    }
+
+    public static String get() {
+        return LOREM;
+    }
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/util/Person.java b/tests/testbench/com/vaadin/tests/util/Person.java
new file mode 100644
index 0000000000..822f62d17a
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/util/Person.java
@@ -0,0 +1,120 @@
+package com.vaadin.tests.util;
+
+import java.io.Serializable;
+
+@SuppressWarnings("serial")
+public class Person implements Serializable {
+    private String firstName = "";
+    private String lastName = "";
+    private String email = "";
+    private String phoneNumber = "";
+    private String streetAddress = "";
+    private Integer postalCode = null;
+    private String city = "";
+
+    /**
+     * @return the firstName
+     */
+    public String getFirstName() {
+        return firstName;
+    }
+
+    /**
+     * @param firstName
+     *            the firstName to set
+     */
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    /**
+     * @return the lastName
+     */
+    public String getLastName() {
+        return lastName;
+    }
+
+    /**
+     * @param lastName
+     *            the lastName to set
+     */
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    /**
+     * @return the email
+     */
+    public String getEmail() {
+        return email;
+    }
+
+    /**
+     * @param email
+     *            the email to set
+     */
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    /**
+     * @return the phoneNumber
+     */
+    public String getPhoneNumber() {
+        return phoneNumber;
+    }
+
+    /**
+     * @param phoneNumber
+     *            the phoneNumber to set
+     */
+    public void setPhoneNumber(String phoneNumber) {
+        this.phoneNumber = phoneNumber;
+    }
+
+    /**
+     * @return the streetAddress
+     */
+    public String getStreetAddress() {
+        return streetAddress;
+    }
+
+    /**
+     * @param streetAddress
+     *            the streetAddress to set
+     */
+    public void setStreetAddress(String streetAddress) {
+        this.streetAddress = streetAddress;
+    }
+
+    /**
+     * @return the postalCode
+     */
+    public Integer getPostalCode() {
+        return postalCode;
+    }
+
+    /**
+     * @param postalCode
+     *            the postalCode to set
+     */
+    public void setPostalCode(Integer postalCode) {
+        this.postalCode = postalCode;
+    }
+
+    /**
+     * @return the city
+     */
+    public String getCity() {
+        return city;
+    }
+
+    /**
+     * @param city
+     *            the city to set
+     */
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/util/PersonContainer.java b/tests/testbench/com/vaadin/tests/util/PersonContainer.java
new file mode 100644
index 0000000000..8195b4d5f0
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/util/PersonContainer.java
@@ -0,0 +1,94 @@
+package com.vaadin.tests.util;
+
+import java.io.Serializable;
+import java.util.Random;
+
+import com.vaadin.data.util.BeanItemContainer;
+
+@SuppressWarnings("serial")
+public class PersonContainer extends BeanItemContainer<Person> implements
+        Serializable {
+
+    /**
+     * Natural property order for Person bean. Used in tables and forms.
+     */
+    public static final Object[] NATURAL_COL_ORDER = new Object[] {
+            "firstName", "lastName", "email", "phoneNumber", "streetAddress",
+            "postalCode", "city" };
+
+    /**
+     * "Human readable" captions for properties in same order as in
+     * NATURAL_COL_ORDER.
+     */
+    public static final String[] COL_HEADERS_ENGLISH = new String[] {
+            "First name", "Last name", "Email", "Phone number",
+            "Street Address", "Postal Code", "City" };
+
+    public PersonContainer() throws InstantiationException,
+            IllegalAccessException {
+        super(Person.class);
+    }
+
+    public static PersonContainer createWithTestData() {
+        final String[] fnames = { "Peter", "Alice", "Joshua", "Mike", "Olivia",
+                "Nina", "Alex", "Rita", "Dan", "Umberto", "Henrik", "Rene",
+                "Lisa", "Marge" };
+        final String[] lnames = { "Smith", "Gordon", "Simpson", "Brown",
+                "Clavel", "Simons", "Verne", "Scott", "Allison", "Gates",
+                "Rowling", "Barks", "Ross", "Schneider", "Tate" };
+        final String cities[] = { "Amsterdam", "Berlin", "Helsinki",
+                "Hong Kong", "London", "Luxemburg", "New York", "Oslo",
+                "Paris", "Rome", "Stockholm", "Tokyo", "Turku" };
+        final String streets[] = { "4215 Blandit Av.", "452-8121 Sem Ave",
+                "279-4475 Tellus Road", "4062 Libero. Av.", "7081 Pede. Ave",
+                "6800 Aliquet St.", "P.O. Box 298, 9401 Mauris St.",
+                "161-7279 Augue Ave", "P.O. Box 496, 1390 Sagittis. Rd.",
+                "448-8295 Mi Avenue", "6419 Non Av.",
+                "659-2538 Elementum Street", "2205 Quis St.",
+                "252-5213 Tincidunt St.", "P.O. Box 175, 4049 Adipiscing Rd.",
+                "3217 Nam Ave", "P.O. Box 859, 7661 Auctor St.",
+                "2873 Nonummy Av.", "7342 Mi, Avenue",
+                "539-3914 Dignissim. Rd.", "539-3675 Magna Avenue",
+                "Ap #357-5640 Pharetra Avenue", "416-2983 Posuere Rd.",
+                "141-1287 Adipiscing Avenue", "Ap #781-3145 Gravida St.",
+                "6897 Suscipit Rd.", "8336 Purus Avenue", "2603 Bibendum. Av.",
+                "2870 Vestibulum St.", "Ap #722 Aenean Avenue",
+                "446-968 Augue Ave", "1141 Ultricies Street",
+                "Ap #992-5769 Nunc Street", "6690 Porttitor Avenue",
+                "Ap #105-1700 Risus Street",
+                "P.O. Box 532, 3225 Lacus. Avenue", "736 Metus Street",
+                "414-1417 Fringilla Street", "Ap #183-928 Scelerisque Road",
+                "561-9262 Iaculis Avenue" };
+        PersonContainer c = null;
+        Random r = new Random(0);
+        try {
+            c = new PersonContainer();
+            for (int i = 0; i < 100; i++) {
+                Person p = new Person();
+                p.setFirstName(fnames[r.nextInt(fnames.length)]);
+                p.setLastName(lnames[r.nextInt(lnames.length)]);
+                p.setCity(cities[r.nextInt(cities.length)]);
+                p.setEmail(p.getFirstName().toLowerCase() + "."
+                        + p.getLastName().toLowerCase() + "@vaadin.com");
+                p.setPhoneNumber("+358 02 555 " + r.nextInt(10) + r.nextInt(10)
+                        + r.nextInt(10) + r.nextInt(10));
+                int n = r.nextInt(100000);
+                if (n < 10000) {
+                    n += 10000;
+                }
+                p.setPostalCode(n);
+                p.setStreetAddress(streets[r.nextInt(streets.length)]);
+                c.addItem(p);
+            }
+        } catch (InstantiationException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+        return c;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/util/PortableRandom.java b/tests/testbench/com/vaadin/tests/util/PortableRandom.java
new file mode 100644
index 0000000000..2e6d7ce9af
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/util/PortableRandom.java
@@ -0,0 +1,52 @@
+package com.vaadin.tests.util;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+public class PortableRandom {
+    private final static long multiplier = 0x5DEECE66DL;
+    private final static long addend = 0xBL;
+    private final static long mask = (1L << 48) - 1;
+    private AtomicLong seed;
+
+    public PortableRandom(long seed) {
+        this.seed = new AtomicLong(0L);
+        setSeed(seed);
+    }
+
+    synchronized public void setSeed(long seed) {
+        seed = (seed ^ multiplier) & mask;
+        this.seed.set(seed);
+    }
+
+    public int nextInt(int n) {
+        if (n <= 0) {
+            throw new IllegalArgumentException("n must be positive");
+        }
+
+        if ((n & -n) == n) {
+            return (int) ((n * (long) next(31)) >> 31);
+        }
+
+        int bits, val;
+        do {
+            bits = next(31);
+            val = bits % n;
+        } while (bits - val + (n - 1) < 0);
+        return val;
+    }
+
+    protected int next(int bits) {
+        long oldseed, nextseed;
+        AtomicLong seed = this.seed;
+        do {
+            oldseed = seed.get();
+            nextseed = (oldseed * multiplier + addend) & mask;
+        } while (!seed.compareAndSet(oldseed, nextseed));
+        return (int) (nextseed >>> (48 - bits));
+    }
+
+    public boolean nextBoolean() {
+        return next(1) != 0;
+    }
+
+}
\ No newline at end of file
diff --git a/tests/testbench/com/vaadin/tests/util/SampleDirectory.java b/tests/testbench/com/vaadin/tests/util/SampleDirectory.java
new file mode 100644
index 0000000000..ab52e4050c
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/util/SampleDirectory.java
@@ -0,0 +1,73 @@
+/* 
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.tests.util;
+
+import java.io.File;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.SystemError;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+
+/**
+ * Provides sample directory based on application directory. If this fails then
+ * sampleDirectory property is read. If no sample directory is resolved, then a
+ * panel displaying error message is added to main window.
+ * 
+ * @author IT Mill Ltd.
+ * 
+ */
+public class SampleDirectory {
+
+    /**
+     * Get sample directory.
+     * 
+     * @param application
+     * @return file pointing to sample directory
+     */
+    public static File getDirectory(Application application) {
+        String errorMessage = "Access to application "
+                + "context base directory failed, "
+                + "possible security constraint with Application "
+                + "Server or Servlet Container.<br />";
+        File file = application.getContext().getBaseDirectory();
+        if ((file == null) || (!file.canRead())
+                || (file.getAbsolutePath() == null)) {
+            // cannot access example directory, possible security issue with
+            // Application Server or Servlet Container
+            // Try to read sample directory from web.xml parameter
+            if (application.getProperty("sampleDirectory") != null) {
+                file = new File(application.getProperty("sampleDirectory"));
+                if ((file != null) && (file.canRead())
+                        && (file.getAbsolutePath() != null)) {
+                    // Success using property
+                    return file;
+                }
+                // Failure using property
+                errorMessage += "Failed also to access sample directory <b>["
+                        + application.getProperty("sampleDirectory")
+                        + "]</b> defined in <b>sampleDirectory property</b>.";
+            } else {
+                // Failure using application context base dir, no property set
+                errorMessage += "<b>Note: </b>You can set this manually in "
+                        + "web.xml by defining " + "sampleDirectory property.";
+            }
+        } else {
+            // Success using application context base dir
+            return file;
+        }
+        // Add failure notification as an Panel to main window
+        final Panel errorPanel = new Panel("Demo application error");
+        errorPanel.setStyleName("strong");
+        errorPanel.setComponentError(new SystemError(
+                "Cannot provide sample directory"));
+        errorPanel.addComponent(new Label(errorMessage, Label.CONTENT_XHTML));
+        // Remove all components from applications main window
+        application.getMainWindow().getContent().removeAllComponents();
+        // Add error panel
+        application.getMainWindow().getContent().addComponent(errorPanel);
+        return null;
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/util/TestClickListener.java b/tests/testbench/com/vaadin/tests/util/TestClickListener.java
new file mode 100644
index 0000000000..95b9cf2d40
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/util/TestClickListener.java
@@ -0,0 +1,37 @@
+package com.vaadin.tests.util;
+
+import java.util.HashMap;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+
+public class TestClickListener implements Button.ClickListener {
+
+    private static final HashMap<String, Integer> buttonListeners = new HashMap<String, Integer>();
+
+    String name = "";
+    int count = 0;
+
+    public TestClickListener(String name) {
+        Integer count = null;
+        try {
+            count = buttonListeners.get(name);
+            count = new Integer(count.intValue() + 1);
+            buttonListeners.put(name, count);
+        } catch (Exception e) {
+            count = new Integer(1);
+            buttonListeners.put(name, count);
+        }
+
+        this.name = name;
+        this.count = count.intValue();
+
+        System.out.println("Created listener " + name + ", id=" + count);
+    }
+
+    public void buttonClick(ClickEvent event) {
+        System.out
+                .println("ClickEvent from listener " + name + ", id=" + count);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/util/TestUtils.java b/tests/testbench/com/vaadin/tests/util/TestUtils.java
new file mode 100644
index 0000000000..aed69055c7
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/util/TestUtils.java
@@ -0,0 +1,140 @@
+package com.vaadin.tests.util;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.ui.Window;
+
+public class TestUtils {
+
+    public static final Object iso3166_PROPERTY_NAME = "name";
+    public static final Object iso3166_PROPERTY_SHORT = "short";
+
+    private static final String[] iso3166 = new String[] { "AFGHANISTAN", "AF",
+            "ÅLAND ISLANDS", "AX", "ALBANIA", "AL", "ALGERIA", "DZ",
+            "AMERICAN SAMOA", "AS", "ANDORRA", "AD", "ANGOLA", "AO",
+            "ANGUILLA", "AI", "ANTARCTICA", "AQ", "ANTIGUA AND BARBUDA", "AG",
+            "ARGENTINA", "AR", "ARMENIA", "AM", "ARUBA", "AW", "AUSTRALIA",
+            "AU", "AUSTRIA", "AT", "AZERBAIJAN", "AZ", "BAHAMAS", "BS",
+            "BAHRAIN", "BH", "BANGLADESH", "BD", "BARBADOS", "BB", "BELARUS",
+            "BY", "BELGIUM", "BE", "BELIZE", "BZ", "BENIN", "BJ", "BERMUDA",
+            "BM", "BHUTAN", "BT", "BOLIVIA", "BO", "BOSNIA AND HERZEGOVINA",
+            "BA", "BOTSWANA", "BW", "BOUVET ISLAND", "BV", "BRAZIL", "BR",
+            "BRITISH INDIAN OCEAN TERRITORY", "IO", "BRUNEI DARUSSALAM", "BN",
+            "BULGARIA", "BG", "BURKINA FASO", "BF", "BURUNDI", "BI",
+            "CAMBODIA", "KH", "CAMEROON", "CM", "CANADA", "CA", "CAPE VERDE",
+            "CV", "CAYMAN ISLANDS", "KY", "CENTRAL AFRICAN REPUBLIC", "CF",
+            "CHAD", "TD", "CHILE", "CL", "CHINA", "CN", "CHRISTMAS ISLAND",
+            "CX", "COCOS (KEELING) ISLANDS", "CC", "COLOMBIA", "CO", "COMOROS",
+            "KM", "CONGO", "CG", "CONGO, THE DEMOCRATIC REPUBLIC OF THE", "CD",
+            "COOK ISLANDS", "CK", "COSTA RICA", "CR", "CÔTE D'IVOIRE", "CI",
+            "CROATIA", "HR", "CUBA", "CU", "CYPRUS", "CY", "CZECH REPUBLIC",
+            "CZ", "DENMARK", "DK", "DJIBOUTI", "DJ", "DOMINICA", "DM",
+            "DOMINICAN REPUBLIC", "DO", "ECUADOR", "EC", "EGYPT", "EG",
+            "EL SALVADOR", "SV", "EQUATORIAL GUINEA", "GQ", "ERITREA", "ER",
+            "ESTONIA", "EE", "ETHIOPIA", "ET", "FALKLAND ISLANDS (MALVINAS)",
+            "FK", "FAROE ISLANDS", "FO", "FIJI", "FJ", "FINLAND", "FI",
+            "FRANCE", "FR", "FRENCH GUIANA", "GF", "FRENCH POLYNESIA", "PF",
+            "FRENCH SOUTHERN TERRITORIES", "TF", "GABON", "GA", "GAMBIA", "GM",
+            "GEORGIA", "GE", "GERMANY", "DE", "GHANA", "GH", "GIBRALTAR", "GI",
+            "GREECE", "GR", "GREENLAND", "GL", "GRENADA", "GD", "GUADELOUPE",
+            "GP", "GUAM", "GU", "GUATEMALA", "GT", "GUERNSEY", "GG", "GUINEA",
+            "GN", "GUINEA-BISSAU", "GW", "GUYANA", "GY", "HAITI", "HT",
+            "HEARD ISLAND AND MCDONALD ISLANDS", "HM",
+            "HOLY SEE (VATICAN CITY STATE)", "VA", "HONDURAS", "HN",
+            "HONG KONG", "HK", "HUNGARY", "HU", "ICELAND", "IS", "INDIA", "IN",
+            "INDONESIA", "ID", "IRAN, ISLAMIC REPUBLIC OF", "IR", "IRAQ", "IQ",
+            "IRELAND", "IE", "ISLE OF MAN", "IM", "ISRAEL", "IL", "ITALY",
+            "IT", "JAMAICA", "JM", "JAPAN", "JP", "JERSEY", "JE", "JORDAN",
+            "JO", "KAZAKHSTAN", "KZ", "KENYA", "KE", "KIRIBATI", "KI",
+            "KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF", "KP",
+            "KOREA, REPUBLIC OF", "KR", "KUWAIT", "KW", "KYRGYZSTAN", "KG",
+            "LAO PEOPLE'S DEMOCRATIC REPUBLIC", "LA", "LATVIA", "LV",
+            "LEBANON", "LB", "LESOTHO", "LS", "LIBERIA", "LR",
+            "LIBYAN ARAB JAMAHIRIYA", "LY", "LIECHTENSTEIN", "LI", "LITHUANIA",
+            "LT", "LUXEMBOURG", "LU", "MACAO", "MO",
+            "MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF", "MK", "MADAGASCAR",
+            "MG", "MALAWI", "MW", "MALAYSIA", "MY", "MALDIVES", "MV", "MALI",
+            "ML", "MALTA", "MT", "MARSHALL ISLANDS", "MH", "MARTINIQUE", "MQ",
+            "MAURITANIA", "MR", "MAURITIUS", "MU", "MAYOTTE", "YT", "MEXICO",
+            "MX", "MICRONESIA, FEDERATED STATES OF", "FM",
+            "MOLDOVA, REPUBLIC OF", "MD", "MONACO", "MC", "MONGOLIA", "MN",
+            "MONTENEGRO", "ME", "MONTSERRAT", "MS", "MOROCCO", "MA",
+            "MOZAMBIQUE", "MZ", "MYANMAR", "MM", "NAMIBIA", "NA", "NAURU",
+            "NR", "NEPAL", "NP", "NETHERLANDS", "NL", "NETHERLANDS ANTILLES",
+            "AN", "NEW CALEDONIA", "NC", "NEW ZEALAND", "NZ", "NICARAGUA",
+            "NI", "NIGER", "NE", "NIGERIA", "NG", "NIUE", "NU",
+            "NORFOLK ISLAND", "NF", "NORTHERN MARIANA ISLANDS", "MP", "NORWAY",
+            "NO", "OMAN", "OM", "PAKISTAN", "PK", "PALAU", "PW",
+            "PALESTINIAN TERRITORY, OCCUPIED", "PS", "PANAMA", "PA",
+            "PAPUA NEW GUINEA", "PG", "PARAGUAY", "PY", "PERU", "PE",
+            "PHILIPPINES", "PH", "PITCAIRN", "PN", "POLAND", "PL", "PORTUGAL",
+            "PT", "PUERTO RICO", "PR", "QATAR", "QA", "REUNION", "RE",
+            "ROMANIA", "RO", "RUSSIAN FEDERATION", "RU", "RWANDA", "RW",
+            "SAINT BARTHÉLEMY", "BL", "SAINT HELENA", "SH",
+            "SAINT KITTS AND NEVIS", "KN", "SAINT LUCIA", "LC", "SAINT MARTIN",
+            "MF", "SAINT PIERRE AND MIQUELON", "PM",
+            "SAINT VINCENT AND THE GRENADINES", "VC", "SAMOA", "WS",
+            "SAN MARINO", "SM", "SAO TOME AND PRINCIPE", "ST", "SAUDI ARABIA",
+            "SA", "SENEGAL", "SN", "SERBIA", "RS", "SEYCHELLES", "SC",
+            "SIERRA LEONE", "SL", "SINGAPORE", "SG", "SLOVAKIA", "SK",
+            "SLOVENIA", "SI", "SOLOMON ISLANDS", "SB", "SOMALIA", "SO",
+            "SOUTH AFRICA", "ZA",
+            "SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS", "GS", "SPAIN",
+            "ES", "SRI LANKA", "LK", "SUDAN", "SD", "SURINAME", "SR",
+            "SVALBARD AND JAN MAYEN", "SJ", "SWAZILAND", "SZ", "SWEDEN", "SE",
+            "SWITZERLAND", "CH", "SYRIAN ARAB REPUBLIC", "SY",
+            "TAIWAN, PROVINCE OF CHINA", "TW", "TAJIKISTAN", "TJ",
+            "TANZANIA, UNITED REPUBLIC OF", "TZ", "THAILAND", "TH",
+            "TIMOR-LESTE", "TL", "TOGO", "TG", "TOKELAU", "TK", "TONGA", "TO",
+            "TRINIDAD AND TOBAGO", "TT", "TUNISIA", "TN", "TURKEY", "TR",
+            "TURKMENISTAN", "TM", "TURKS AND CAICOS ISLANDS", "TC", "TUVALU",
+            "TV", "UGANDA", "UG", "UKRAINE", "UA", "UNITED ARAB EMIRATES",
+            "AE", "UNITED KINGDOM", "GB", "UNITED STATES", "US",
+            "UNITED STATES MINOR OUTLYING ISLANDS", "UM", "URUGUAY", "UY",
+            "UZBEKISTAN", "UZ", "VANUATU", "VU", "VENEZUELA", "VE", "VIET NAM",
+            "VN", "VIRGIN ISLANDS, BRITISH", "VG", "VIRGIN ISLANDS, U.S.",
+            "VI", "WALLIS AND FUTUNA", "WF", "WESTERN SAHARA", "EH", "YEMEN",
+            "YE", "ZAMBIA", "ZM", "ZIMBABWE", "ZW" };
+
+    /**
+     * Crossbrowser hack to dynamically add css current window. Can be used to
+     * keep tests css in source files.
+     * 
+     * @param cssString
+     */
+    public static void injectCSS(Window w, String cssString) {
+        String script = "if ('\\v'=='v') /* ie only */ {\n"
+                + "        document.createStyleSheet().cssText = '"
+                + cssString
+                + "';\n"
+                + "    } else {var tag = document.createElement('style'); tag.type = 'text/css';"
+                + " document.getElementsByTagName('head')[0].appendChild(tag);tag[ (typeof "
+                + "document.body.style.WebkitAppearance=='string') /* webkit only */ ? 'innerText' "
+                + ": 'innerHTML'] = '" + cssString + "';}";
+
+        w.executeJavaScript(script);
+    }
+
+    public static IndexedContainer getISO3166Container() {
+        IndexedContainer c = new IndexedContainer();
+        fillIso3166Container(c);
+        return c;
+    }
+
+    private static void fillIso3166Container(IndexedContainer container) {
+        container.addContainerProperty(iso3166_PROPERTY_NAME, String.class,
+                null);
+        container.addContainerProperty(iso3166_PROPERTY_SHORT, String.class,
+                null);
+        for (int i = 0; i < iso3166.length; i++) {
+            String name = iso3166[i++];
+            String id = iso3166[i];
+            Item item = container.addItem(id);
+            item.getItemProperty(iso3166_PROPERTY_NAME).setValue(name);
+            item.getItemProperty(iso3166_PROPERTY_SHORT).setValue(id);
+        }
+        container.sort(new Object[] { iso3166_PROPERTY_NAME },
+                new boolean[] { true });
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/vaadin_spin.swf b/tests/testbench/com/vaadin/tests/vaadin_spin.swf
new file mode 100644
index 0000000000..9e58ce29c6
Binary files /dev/null and b/tests/testbench/com/vaadin/tests/vaadin_spin.swf differ
diff --git a/tests/testbench/com/vaadin/tests/validation/EmptyFieldErrorIndicators.html b/tests/testbench/com/vaadin/tests/validation/EmptyFieldErrorIndicators.html
new file mode 100644
index 0000000000..c8fcb20411
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/validation/EmptyFieldErrorIndicators.html
@@ -0,0 +1,247 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8080/run/com.vaadin.tests.validation.EmptyFieldErrorIndicators?restartApplication" />
+<title>EmptyFieldErrorIndicators</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">EmptyFieldErrorIndicators</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/run/com.vaadin.tests.validation.EmptyFieldErrorIndicators?restartApplication</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>initial</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>emptyValidated</td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
+	<td>39,16</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
+	<td>a</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=Value 1</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VFilterSelect[0]/domChild[1]</td>
+	<td>15,16</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VFilterSelect[1]/domChild[1]</td>
+	<td>15,16</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[2]/td</td>
+	<td>56,8</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VOptionGroup[0]/domChild[0]/domChild[0]</td>
+	<td>5,7</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::PID_SvalidatedFieldPart/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VOptionGroup[1]/domChild[0]/domChild[0]</td>
+	<td>8,11</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
+	<td>62,12</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>enterCharacter</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VTextField[0]</td>
+	<td>a</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>select</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VNativeSelect[0]/domChild[0]</td>
+	<td>label=Value 1</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VFilterSelect[1]/domChild[1]</td>
+	<td>13,12</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>//div[@id='VAADIN_COMBOBOX_OPTIONLIST']/div/div[2]/table/tbody/tr[2]/td</td>
+	<td>61,14</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VOptionGroup[0]/domChild[0]/domChild[0]</td>
+	<td>7,8</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>mouseClick</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VForm[0]/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VOptionGroup[1]/domChild[0]/domChild[0]</td>
+	<td>4,3</td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>vaadin=runcomvaadintestsvalidationEmptyFieldErrorIndicators::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForVaadin</td>
+	<td></td>
+	<td></td>
+</tr>
+<tr>
+	<td>screenCapture</td>
+	<td></td>
+	<td>filledValidated</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/validation/EmptyFieldErrorIndicators.java b/tests/testbench/com/vaadin/tests/validation/EmptyFieldErrorIndicators.java
new file mode 100644
index 0000000000..b1d6a8f068
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/validation/EmptyFieldErrorIndicators.java
@@ -0,0 +1,146 @@
+package com.vaadin.tests.validation;
+
+import java.util.Date;
+
+import com.vaadin.data.Validator.InvalidValueException;
+import com.vaadin.data.validator.AbstractValidator;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.OptionGroup;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.themes.Reindeer;
+
+public class EmptyFieldErrorIndicators extends TestBase {
+
+    @Override
+    protected void setup() {
+        getLayout().setSizeFull();
+
+        HorizontalLayout hl = new HorizontalLayout();
+        hl.setSizeFull();
+        hl.setSpacing(true);
+
+        ComponentContainer part1 = createPart(
+                "Empty required fields validation", true, false);
+        part1.setDebugId("emptyFieldPart");
+        hl.addComponent(part1);
+
+        ComponentContainer part2 = createPart(
+                "Empty required fields with failing validator", true, true);
+        part1.setDebugId("validatedFieldPart");
+        hl.addComponent(part2);
+
+        Panel panel = new Panel();
+        panel.setSizeFull();
+        panel.setStyleName(Reindeer.PANEL_LIGHT);
+        panel.addComponent(hl);
+        panel.setScrollable(true);
+        addComponent(panel);
+    }
+
+    private ComponentContainer createPart(String caption, boolean required,
+            boolean failValidator) {
+        VerticalLayout part = new VerticalLayout();
+        part.setMargin(true);
+
+        final Form form = createForm(required, failValidator);
+        part.addComponent(form);
+
+        Button validate = new Button("Validate fields");
+        validate.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                try {
+                    form.validate();
+                } catch (InvalidValueException e) {
+                }
+            }
+        });
+        part.addComponent(validate);
+
+        Panel panel = new Panel(caption, part);
+        panel.setHeight("100%");
+        return panel;
+    }
+
+    private Form createForm(final boolean required, final boolean failValidator) {
+        // hand-crafted form, not using form field factory
+        final Form form = new Form() {
+            @Override
+            public void addField(Object propertyId, Field field) {
+                super.addField(propertyId, field);
+                field.setRequired(required);
+                field.setRequiredError("Missing required value!");
+                if (failValidator && !(field instanceof Button)) {
+                    field.addValidator(new AbstractValidator("Validation error") {
+                        public boolean isValid(Object value) {
+                            return false;
+                        }
+                    });
+                }
+            }
+        };
+
+        form.addField("Field", new TextField("Text"));
+        form.addField("Date", new DateField("Date"));
+        // not good for automated testing with screenshots when null
+        // form.addField("Inline Date", new InlineDateField("Date"));
+        // same as basic DateField
+        // form.addField("Popup Date", new PopupDateField("Date"));
+        Button setDateButton = new Button("Set date");
+        form.addField("Set Date", setDateButton);
+        setDateButton.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                form.getField("Date").setValue(new Date(0));
+            }
+        });
+
+        NativeSelect nativeSelect = new NativeSelect("NativeSelect");
+        form.addField("Native Select", nativeSelect);
+        nativeSelect.addItem("Value 1");
+
+        // in #4103, the Select component was behaving differently from others
+        form.addField("Select", new Select("Select"));
+
+        Select select2 = new Select("Select 2");
+        select2.addItem("Value 1");
+        form.addField("Select 2", select2);
+
+        OptionGroup optionGroup = new OptionGroup("OptionGroup");
+        optionGroup.setMultiSelect(false);
+        optionGroup.addItem("Option 1");
+        optionGroup.addItem("Option 2");
+        form.addField("Option Group 1", optionGroup);
+
+        OptionGroup optionGroup2 = new OptionGroup("OptionGroup");
+        optionGroup2.setMultiSelect(true);
+        optionGroup2.addItem("Option 1");
+        optionGroup2.addItem("Option 2");
+        form.addField("Option Group 2", optionGroup2);
+
+        // TODO could add more different fields
+
+        return form;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Fields on a form should not show the error indicator if required and empty";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 4013;
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/validation/RequiredErrorMessage.java b/tests/testbench/com/vaadin/tests/validation/RequiredErrorMessage.java
new file mode 100644
index 0000000000..7f5048bd80
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/validation/RequiredErrorMessage.java
@@ -0,0 +1,52 @@
+package com.vaadin.tests.validation;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class RequiredErrorMessage extends TestBase {
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2442;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "This test verifies that the tooltip for a required field contains the requiredError message if such has been given. The tooltip for the first field should contain a message, the second field has no required error message set";
+    }
+
+    @Override
+    public void setup() {
+
+        final Window main = new Window(getClass().getName());
+        setMainWindow(main);
+
+        final Form form = new Form(new VerticalLayout());
+        final TextField requiredFieldWithError = new TextField(
+                "Field with requiredError");
+        requiredFieldWithError.setRequired(true);
+        requiredFieldWithError
+                .setRequiredError("Error message for required field");
+        form.addField("field1", requiredFieldWithError);
+
+        final TextField requiredFieldNoError = new TextField(
+                "Field without requiredError");
+        requiredFieldNoError.setRequired(true);
+        form.addField("field2", requiredFieldNoError);
+
+        final TextField requiredFieldDescriptionAndError = new TextField(
+                "Field with requiredError and description");
+        requiredFieldDescriptionAndError.setRequired(true);
+        requiredFieldDescriptionAndError
+                .setRequiredError("Error message for required field");
+        requiredFieldDescriptionAndError
+                .setDescription("Description message for the field");
+        form.addField("field3", requiredFieldDescriptionAndError);
+
+        main.addComponent(form);
+    }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/validation/RequiredIndicatorForReadOnly.java b/tests/testbench/com/vaadin/tests/validation/RequiredIndicatorForReadOnly.java
new file mode 100644
index 0000000000..6e806b60f4
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/validation/RequiredIndicatorForReadOnly.java
@@ -0,0 +1,33 @@
+package com.vaadin.tests.validation;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.TextField;
+
+public class RequiredIndicatorForReadOnly extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Required flags should not be visible when a component is in read-only mode or inside a read-only form";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 2465;
+    }
+
+    @Override
+    protected void setup() {
+        TextField tf = new TextField("A read only field");
+        tf.setReadOnly(true);
+        tf.setRequired(true);
+        addComponent(tf);
+
+        Form f = new Form();
+        TextField tf2 = new TextField("A field in a read only form");
+        tf2.setRequired(true);
+        f.addField("Field-1", tf2);
+        f.setReadOnly(true);
+        addComponent(f);
+    }
+}
diff --git a/tests/testbench/com/vaadin/tests/validation/TestValidators.java b/tests/testbench/com/vaadin/tests/validation/TestValidators.java
new file mode 100644
index 0000000000..5264d47c9d
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/validation/TestValidators.java
@@ -0,0 +1,171 @@
+package com.vaadin.tests.validation;
+
+import com.vaadin.data.Validator;
+import com.vaadin.data.validator.AbstractStringValidator;
+import com.vaadin.data.validator.CompositeValidator;
+import com.vaadin.data.validator.DoubleValidator;
+import com.vaadin.data.validator.EmailValidator;
+import com.vaadin.data.validator.IntegerValidator;
+import com.vaadin.data.validator.RegexpValidator;
+import com.vaadin.data.validator.StringLengthValidator;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window.Notification;
+
+public class TestValidators extends TestBase {
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 680;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "This test verifies that various validators work correctly";
+    }
+
+    @Override
+    public void setup() {
+        final Form form = new Form(new VerticalLayout());
+
+        // simple validators
+
+        TextField tf = new TextField("A field, must contain 1-2 chars");
+        tf.addValidator(new StringLengthValidator("Invalid length", 1, 2, false));
+        tf.setRequired(true);
+        tf.setValue("ab");
+        form.addField("a", tf);
+
+        tf = new TextField("A field, must contain an integer");
+        tf.addValidator(new IntegerValidator("Invalid integer {0}"));
+        tf.setRequired(true);
+        tf.setValue("123");
+        form.addField("b", tf);
+
+        tf = new TextField("A field, must contain an integer or be empty");
+        tf.addValidator(new IntegerValidator("Invalid integer {0}"));
+        tf.setValue("-321");
+        form.addField("c", tf);
+
+        tf = new TextField(
+                "A field, must contain a floating point number or be empty");
+        tf.addValidator(new DoubleValidator("Invalid double {0}"));
+        tf.setValue("-123.45e6");
+        form.addField("d", tf);
+
+        tf = new TextField(
+                "A field, must contain an e-mail address or be empty");
+        tf.addValidator(new EmailValidator("Invalid e-mail address {0}"));
+        tf.setValue("a.b@example.com");
+        form.addField("e", tf);
+
+        // regular expressions
+
+        tf = new TextField("A field, must match the regular expression a.*b.*c");
+        tf.addValidator(new RegexpValidator("a.*b.*c",
+                "{0} does not match the regular expression"));
+        tf.setValue("aagsabeqgc");
+        form.addField("f", tf);
+
+        tf = new TextField(
+                "A field, must contain the regular expression a.*b.*c");
+        tf.addValidator(new RegexpValidator("a.*b.*c", false,
+                "{0} does not contain the regular expression"));
+        tf.setValue("aagsabeqgc");
+        form.addField("g", tf);
+
+        tf = new TextField(
+                "A field, must match the regular expression ^a.*b.*c$");
+        tf.addValidator(new RegexpValidator("^a.*b.*c$", false,
+                "{0} does not match the regular expression with ^ and $"));
+        tf.setValue("aagsabeqgc");
+        form.addField("h", tf);
+
+        tf = new TextField(
+                "A field, must contain the regular expression ^a.*b.*c$");
+        tf.addValidator(new RegexpValidator("^a.*b.*c$", false,
+                "{0} does not contain the regular expression with ^ and $"));
+        tf.setValue("aagsabeqgc");
+        form.addField("i", tf);
+
+        // TODO CompositeValidator
+        tf = new TextField(
+                "A field, must be a floating point number with 4-5 chars");
+        CompositeValidator cv = new CompositeValidator(
+                CompositeValidator.MODE_AND,
+                "The field must contain a floating point number with 4-5 characters");
+        cv.addValidator(new StringLengthValidator(
+                "String length of '{0}' should be 4-5 characters", 4, 5, false));
+        cv.addValidator(new DoubleValidator(
+                "{0} must be a floating point number"));
+        tf.addValidator(cv);
+        tf.setValue("12.34");
+        form.addField("j", tf);
+
+        tf = new TextField(
+                "A field, must be a floating point number or 4-5 chars");
+        cv = new CompositeValidator(CompositeValidator.MODE_OR,
+                "The field must contain a floating point  or with 4-5 characters");
+        cv.addValidator(new StringLengthValidator(
+                "String length of '{0}' should be 4-5 characters", 4, 5, false));
+        cv.addValidator(new DoubleValidator(
+                "{0} must be a floating point number"));
+        tf.addValidator(cv);
+        tf.setValue("12.34g");
+        form.addField("jb", tf);
+
+        // Postal code that must be 5 digits (10000-99999).
+        tf = new TextField("Postal Code");
+        tf.setColumns(5);
+
+        // Create the validator - this would be even easier with RegexpValidator
+        Validator postalCodeValidator = new AbstractStringValidator(
+                "Postal code must be a number 10000-99999.") {
+            @Override
+            protected boolean isValidString(String value) {
+                return value.matches("[1-9][0-9]{4}");
+            }
+        };
+        tf.addValidator(postalCodeValidator);
+        tf.setValue("12345");
+        form.addField("k", tf);
+
+        Button b = new Button("Commit", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                try {
+                    form.commit();
+                    if (form.isValid()) {
+                        getMainWindow().showNotification(
+                                "OK! Form validated and no error was thrown",
+                                Notification.TYPE_HUMANIZED_MESSAGE);
+                    } else {
+                        getMainWindow().showNotification(
+                                "Form is invalid but no exception was thrown",
+                                Notification.TYPE_ERROR_MESSAGE);
+                    }
+                } catch (Exception e) {
+                    if (form.isValid()) {
+                        getMainWindow().showNotification(
+                                "Form is valid but an exception was thrown",
+                                Notification.TYPE_ERROR_MESSAGE);
+                    } else {
+                        getMainWindow().showNotification(
+                                "OK! Error was thrown for an invalid input",
+                                Notification.TYPE_HUMANIZED_MESSAGE);
+
+                    }
+                }
+            }
+
+        });
+
+        addComponent(form);
+        addComponent(b);
+    }
+}
-- 
cgit v1.2.3